| import type { ChatConfig } from '@/app/components/base/chat/types' | import type { ChatConfig } from '@/app/components/base/chat/types' | ||||
| import Loading from '@/app/components/base/loading' | import Loading from '@/app/components/base/loading' | ||||
| import { checkOrSetAccessToken } from '@/app/components/share/utils' | |||||
| import { AccessMode } from '@/models/access-control' | import { AccessMode } from '@/models/access-control' | ||||
| import type { AppData, AppMeta } from '@/models/share' | import type { AppData, AppMeta } from '@/models/share' | ||||
| import { useGetWebAppAccessModeByCode } from '@/service/use-share' | import { useGetWebAppAccessModeByCode } from '@/service/use-share' | ||||
| const pathname = usePathname() | const pathname = usePathname() | ||||
| const searchParams = useSearchParams() | const searchParams = useSearchParams() | ||||
| const redirectUrlParam = searchParams.get('redirect_url') | const redirectUrlParam = searchParams.get('redirect_url') | ||||
| const session = searchParams.get('session') | |||||
| const sysUserId = searchParams.get('sys.user_id') | |||||
| const [shareCode, setShareCode] = useState<string | null>(null) | const [shareCode, setShareCode] = useState<string | null>(null) | ||||
| useEffect(() => { | useEffect(() => { | ||||
| const shareCodeFromRedirect = getShareCodeFromRedirectUrl(redirectUrlParam) | const shareCodeFromRedirect = getShareCodeFromRedirectUrl(redirectUrlParam) | ||||
| updateShareCode(newShareCode) | updateShareCode(newShareCode) | ||||
| }, [pathname, redirectUrlParam, updateShareCode]) | }, [pathname, redirectUrlParam, updateShareCode]) | ||||
| const { isFetching, data: accessModeResult } = useGetWebAppAccessModeByCode(shareCode) | const { isFetching, data: accessModeResult } = useGetWebAppAccessModeByCode(shareCode) | ||||
| const [isFetchingAccessToken, setIsFetchingAccessToken] = useState(true) | |||||
| useEffect(() => { | useEffect(() => { | ||||
| if (accessModeResult?.accessMode) | |||||
| if (accessModeResult?.accessMode) { | |||||
| updateWebAppAccessMode(accessModeResult.accessMode) | updateWebAppAccessMode(accessModeResult.accessMode) | ||||
| }, [accessModeResult, updateWebAppAccessMode]) | |||||
| if (isFetching) { | |||||
| if (accessModeResult?.accessMode === AccessMode.PUBLIC && session && sysUserId) { | |||||
| setIsFetchingAccessToken(true) | |||||
| checkOrSetAccessToken(shareCode).finally(() => { | |||||
| setIsFetchingAccessToken(false) | |||||
| }) | |||||
| } | |||||
| else { | |||||
| setIsFetchingAccessToken(false) | |||||
| } | |||||
| } | |||||
| }, [accessModeResult, updateWebAppAccessMode, setIsFetchingAccessToken, shareCode, session, sysUserId]) | |||||
| if (isFetching || isFetchingAccessToken) { | |||||
| return <div className='flex h-full w-full items-center justify-center'> | return <div className='flex h-full w-full items-center justify-center'> | ||||
| <Loading /> | <Loading /> | ||||
| </div> | </div> |