mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| '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'
 | |
| import {
 | |
|   EDUCATION_VERIFYING_LOCALSTORAGE_ITEM,
 | |
|   EDUCATION_VERIFY_URL_SEARCHPARAMS_ACTION,
 | |
| } from '@/app/education-apply/constants'
 | |
| 
 | |
| 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 () => {
 | |
|       const action = searchParams.get('action')
 | |
| 
 | |
|       if (action === EDUCATION_VERIFY_URL_SEARCHPARAMS_ACTION)
 | |
|         localStorage.setItem(EDUCATION_VERIFYING_LOCALSTORAGE_ITEM, 'yes')
 | |
| 
 | |
|       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 {
 | |
|         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
 | 
