swr-initor.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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 utm = {
  17. utm_source: searchParams.get('utm_source') || '',
  18. utm_medium: searchParams.get('utm_medium') || '',
  19. utm_campaign: searchParams.get('utm_campaign') || '',
  20. utm_content: searchParams.get('utm_content') || '',
  21. utm_term: searchParams.get('utm_term') || '',
  22. }
  23. localStorage?.setItem('utm', JSON.stringify(utm))
  24. const [init, setInit] = useState(false)
  25. useEffect(() => {
  26. if (!(consoleToken || consoleTokenFromLocalStorage))
  27. router.replace('/signin')
  28. if (consoleToken) {
  29. localStorage?.setItem('console_token', consoleToken!)
  30. router.replace('/apps', { forceOptimisticNavigation: false } as any)
  31. }
  32. setInit(true)
  33. }, [])
  34. return init
  35. ? (
  36. <SWRConfig value={{
  37. shouldRetryOnError: false,
  38. }}>
  39. {children}
  40. </SWRConfig>
  41. )
  42. : null
  43. }
  44. export default SwrInitor