Spaces:
Paused
Paused
| 'use client' | |
| import { SWRConfig } from 'swr' | |
| import { useCallback, useEffect, useState } from 'react' | |
| import type { ReactNode } from 'react' | |
| import { usePathname, useRouter, useSearchParams } from 'next/navigation' | |
| import { fetchSetupStatus } from '@/service/common' | |
| type SwrInitorProps = { | |
| children: ReactNode | |
| } | |
| const SwrInitor = ({ | |
| children, | |
| }: SwrInitorProps) => { | |
| const router = useRouter() | |
| const searchParams = useSearchParams() | |
| const consoleToken = decodeURIComponent(searchParams.get('access_token') || '') | |
| const refreshToken = decodeURIComponent(searchParams.get('refresh_token') || '') | |
| const consoleTokenFromLocalStorage = localStorage?.getItem('console_token') | |
| const refreshTokenFromLocalStorage = localStorage?.getItem('refresh_token') | |
| const pathname = usePathname() | |
| const [init, setInit] = useState(false) | |
| const isSetupFinished = useCallback(async () => { | |
| try { | |
| if (localStorage.getItem('setup_status') === 'finished') | |
| return true | |
| const setUpStatus = await fetchSetupStatus() | |
| if (setUpStatus.step !== 'finished') { | |
| localStorage.removeItem('setup_status') | |
| return false | |
| } | |
| localStorage.setItem('setup_status', 'finished') | |
| return true | |
| } | |
| catch (error) { | |
| console.error(error) | |
| return false | |
| } | |
| }, []) | |
| useEffect(() => { | |
| (async () => { | |
| try { | |
| const isFinished = await isSetupFinished() | |
| if (!isFinished) { | |
| router.replace('/install') | |
| return | |
| } | |
| if (!((consoleToken && refreshToken) || (consoleTokenFromLocalStorage && refreshTokenFromLocalStorage))) { | |
| router.replace('/signin') | |
| return | |
| } | |
| if (searchParams.has('access_token') || searchParams.has('refresh_token')) { | |
| consoleToken && localStorage.setItem('console_token', consoleToken) | |
| refreshToken && localStorage.setItem('refresh_token', refreshToken) | |
| router.replace(pathname) | |
| } | |
| setInit(true) | |
| } | |
| catch (error) { | |
| router.replace('/signin') | |
| } | |
| })() | |
| }, [isSetupFinished, router, pathname, searchParams, consoleToken, refreshToken, consoleTokenFromLocalStorage, refreshTokenFromLocalStorage]) | |
| return init | |
| ? ( | |
| <SWRConfig value={{ | |
| shouldRetryOnError: false, | |
| revalidateOnFocus: false, | |
| }}> | |
| {children} | |
| </SWRConfig> | |
| ) | |
| : null | |
| } | |
| export default SwrInitor | |