| } | } | ||||
| let appCode: string | null = null | let appCode: string | null = null | ||||
| if (redirectUrl) | |||||
| appCode = redirectUrl?.split('/').pop() || null | |||||
| else | |||||
| if (redirectUrl) { | |||||
| const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`) | |||||
| appCode = url.pathname.split('/').pop() || null | |||||
| } | |||||
| else { | |||||
| appCode = pathname.split('/').pop() || null | appCode = pathname.split('/').pop() || null | ||||
| } | |||||
| if (!appCode) | if (!appCode) | ||||
| return | return |
| const redirectUrl = searchParams.get('redirect_url') | const redirectUrl = searchParams.get('redirect_url') | ||||
| const getAppCodeFromRedirectUrl = useCallback(() => { | const getAppCodeFromRedirectUrl = useCallback(() => { | ||||
| const appCode = redirectUrl?.split('/').pop() | |||||
| if (!redirectUrl) | |||||
| return null | |||||
| const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`) | |||||
| const appCode = url.pathname.split('/').pop() | |||||
| if (!appCode) | if (!appCode) | ||||
| return null | return null | ||||
| localStorage.setItem('webapp_access_token', ret.data.access_token) | localStorage.setItem('webapp_access_token', ret.data.access_token) | ||||
| const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: ret.data.access_token }) | const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: ret.data.access_token }) | ||||
| await setAccessToken(appCode, tokenResp.access_token) | await setAccessToken(appCode, tokenResp.access_token) | ||||
| router.replace(redirectUrl) | |||||
| router.replace(decodeURIComponent(redirectUrl)) | |||||
| } | } | ||||
| } | } | ||||
| catch (error) { console.error(error) } | catch (error) { console.error(error) } |
| } | } | ||||
| const getAppCodeFromRedirectUrl = useCallback(() => { | const getAppCodeFromRedirectUrl = useCallback(() => { | ||||
| const appCode = redirectUrl?.split('/').pop() | |||||
| if (!redirectUrl) | |||||
| return null | |||||
| const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`) | |||||
| const appCode = url.pathname.split('/').pop() | |||||
| if (!appCode) | if (!appCode) | ||||
| return null | return null | ||||
| 'use client' | |||||
| import Link from 'next/link' | import Link from 'next/link' | ||||
| import { useCallback, useState } from 'react' | import { useCallback, useState } from 'react' | ||||
| import { useTranslation } from 'react-i18next' | import { useTranslation } from 'react-i18next' | ||||
| const redirectUrl = searchParams.get('redirect_url') | const redirectUrl = searchParams.get('redirect_url') | ||||
| const getAppCodeFromRedirectUrl = useCallback(() => { | const getAppCodeFromRedirectUrl = useCallback(() => { | ||||
| const appCode = redirectUrl?.split('/').pop() | |||||
| if (!redirectUrl) | |||||
| return null | |||||
| const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`) | |||||
| const appCode = url.pathname.split('/').pop() | |||||
| if (!appCode) | if (!appCode) | ||||
| return null | return null | ||||
| localStorage.setItem('webapp_access_token', res.data.access_token) | localStorage.setItem('webapp_access_token', res.data.access_token) | ||||
| const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: res.data.access_token }) | const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: res.data.access_token }) | ||||
| await setAccessToken(appCode, tokenResp.access_token) | await setAccessToken(appCode, tokenResp.access_token) | ||||
| router.replace(redirectUrl) | |||||
| router.replace(decodeURIComponent(redirectUrl)) | |||||
| } | } | ||||
| else { | else { | ||||
| Toast.notify({ | Toast.notify({ |
| const redirectUrl = searchParams.get('redirect_url') | const redirectUrl = searchParams.get('redirect_url') | ||||
| const getAppCodeFromRedirectUrl = useCallback(() => { | const getAppCodeFromRedirectUrl = useCallback(() => { | ||||
| const appCode = redirectUrl?.split('/').pop() | |||||
| if (!redirectUrl) | |||||
| return null | |||||
| const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`) | |||||
| const appCode = url.pathname.split('/').pop() | |||||
| if (!appCode) | if (!appCode) | ||||
| return null | return null | ||||
| } | } | ||||
| const getAppCodeFromRedirectUrl = useCallback(() => { | const getAppCodeFromRedirectUrl = useCallback(() => { | ||||
| const appCode = redirectUrl?.split('/').pop() | |||||
| if (!redirectUrl) | |||||
| return null | |||||
| const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`) | |||||
| const appCode = url.pathname.split('/').pop() | |||||
| if (!appCode) | if (!appCode) | ||||
| return null | return null | ||||
| localStorage.setItem('webapp_access_token', tokenFromUrl) | localStorage.setItem('webapp_access_token', tokenFromUrl) | ||||
| const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: tokenFromUrl }) | const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: tokenFromUrl }) | ||||
| await setAccessToken(appCode, tokenResp.access_token) | await setAccessToken(appCode, tokenResp.access_token) | ||||
| router.replace(redirectUrl) | |||||
| router.replace(decodeURIComponent(redirectUrl)) | |||||
| return | return | ||||
| } | } | ||||
| if (appCode && redirectUrl && localStorage.getItem('webapp_access_token')) { | if (appCode && redirectUrl && localStorage.getItem('webapp_access_token')) { | ||||
| const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: localStorage.getItem('webapp_access_token') }) | const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: localStorage.getItem('webapp_access_token') }) | ||||
| await setAccessToken(appCode, tokenResp.access_token) | await setAccessToken(appCode, tokenResp.access_token) | ||||
| router.replace(redirectUrl) | |||||
| router.replace(decodeURIComponent(redirectUrl)) | |||||
| } | } | ||||
| })() | })() | ||||
| }, [getAppCodeFromRedirectUrl, redirectUrl, router, tokenFromUrl, message]) | }, [getAppCodeFromRedirectUrl, redirectUrl, router, tokenFromUrl, message]) | ||||
| useEffect(() => { | useEffect(() => { | ||||
| if (webAppAccessMode && webAppAccessMode === AccessMode.PUBLIC && redirectUrl) | if (webAppAccessMode && webAppAccessMode === AccessMode.PUBLIC && redirectUrl) | ||||
| router.replace(redirectUrl) | |||||
| router.replace(decodeURIComponent(redirectUrl)) | |||||
| }, [webAppAccessMode, router, redirectUrl]) | }, [webAppAccessMode, router, redirectUrl]) | ||||
| if (tokenFromUrl) { | if (tokenFromUrl) { |
| const router = useRouter() | const router = useRouter() | ||||
| const pathname = usePathname() | const pathname = usePathname() | ||||
| useEffect(() => { | |||||
| const params = new URLSearchParams(searchParams) | |||||
| if (params.has('mode')) { | |||||
| params.delete('mode') | |||||
| router.replace(`${pathname}?${params.toString()}`) | |||||
| } | |||||
| // eslint-disable-next-line react-hooks/exhaustive-deps | |||||
| }, []) | |||||
| // Notice this situation isCallBatchAPI but not in batch tab | // Notice this situation isCallBatchAPI but not in batch tab | ||||
| const [isCallBatchAPI, setIsCallBatchAPI] = useState(false) | const [isCallBatchAPI, setIsCallBatchAPI] = useState(false) |
| function requiredWebSSOLogin(message?: string, code?: number) { | function requiredWebSSOLogin(message?: string, code?: number) { | ||||
| const params = new URLSearchParams() | const params = new URLSearchParams() | ||||
| params.append('redirect_url', globalThis.location.pathname) | |||||
| params.append('redirect_url', encodeURIComponent(`${globalThis.location.pathname}${globalThis.location.search}`)) | |||||
| if (message) | if (message) | ||||
| params.append('message', message) | params.append('message', message) | ||||
| if (code) | if (code) |