'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 ? ( {children} ) : null } export default SwrInitor