swr-initor.tsx 1016 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. 'use client'
  2. import { SWRConfig } from 'swr'
  3. import { useEffect, useState } from 'react'
  4. import type { ReactNode } from 'react'
  5. import { useRouter, useSearchParams } from 'next/navigation'
  6. type SwrInitorProps = {
  7. children: ReactNode
  8. }
  9. const SwrInitor = ({
  10. children,
  11. }: SwrInitorProps) => {
  12. const router = useRouter()
  13. const searchParams = useSearchParams()
  14. const consoleToken = searchParams.get('console_token')
  15. const consoleTokenFromLocalStorage = localStorage?.getItem('console_token')
  16. const [init, setInit] = useState(false)
  17. useEffect(() => {
  18. if (!(consoleToken || consoleTokenFromLocalStorage))
  19. router.replace('/signin')
  20. if (consoleToken) {
  21. localStorage?.setItem('console_token', consoleToken!)
  22. router.replace('/apps', { forceOptimisticNavigation: false })
  23. }
  24. setInit(true)
  25. }, [])
  26. return init
  27. ? (
  28. <SWRConfig value={{
  29. shouldRetryOnError: false,
  30. }}>
  31. {children}
  32. </SWRConfig>
  33. )
  34. : null
  35. }
  36. export default SwrInitor