Spaces:
Build error
Build error
'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 | |