wwf
4 天以前 73210a869048d6468b55717660d0ca558d0c2aab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
'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, regAndLogin } from '@/service/common'
import type { RegAndLoginResponse } from '@/models/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 userId = decodeURIComponent(searchParams.get('userId') || '')
  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 {
        let currentUserId = ''
        if (userId) {
          currentUserId = userId
          localStorage.setItem('userId', userId)
        }
        else {
          currentUserId = localStorage.getItem('userId') || ''
        }
        const response: RegAndLoginResponse = await regAndLogin({ body: { userId: currentUserId } })
        localStorage.setItem('console_token', response.data.access_token)
        localStorage.setItem('refresh_token', response.data.refresh_token)
        setInit(true)
        // 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