You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

activateForm.tsx 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. 'use client'
  2. import { useTranslation } from 'react-i18next'
  3. import useSWR from 'swr'
  4. import { useRouter, useSearchParams } from 'next/navigation'
  5. import cn from '@/utils/classnames'
  6. import Button from '@/app/components/base/button'
  7. import { invitationCheck } from '@/service/common'
  8. import Loading from '@/app/components/base/loading'
  9. import useDocumentTitle from '@/hooks/use-document-title'
  10. const ActivateForm = () => {
  11. useDocumentTitle('')
  12. const router = useRouter()
  13. const { t } = useTranslation()
  14. const searchParams = useSearchParams()
  15. const workspaceID = searchParams.get('workspace_id')
  16. const email = searchParams.get('email')
  17. const token = searchParams.get('token')
  18. const checkParams = {
  19. url: '/activate/check',
  20. params: {
  21. ...workspaceID && { workspace_id: workspaceID },
  22. ...email && { email },
  23. token,
  24. },
  25. }
  26. const { data: checkRes } = useSWR(checkParams, invitationCheck, {
  27. revalidateOnFocus: false,
  28. onSuccess(data) {
  29. if (data.is_valid) {
  30. const params = new URLSearchParams(searchParams)
  31. const { email, workspace_id } = data.data
  32. params.set('email', encodeURIComponent(email))
  33. params.set('workspace_id', encodeURIComponent(workspace_id))
  34. params.set('invite_token', encodeURIComponent(token as string))
  35. router.replace(`/signin?${params.toString()}`)
  36. }
  37. },
  38. })
  39. return (
  40. <div className={
  41. cn(
  42. 'flex w-full grow flex-col items-center justify-center',
  43. 'px-6',
  44. 'md:px-[108px]',
  45. )
  46. }>
  47. {!checkRes && <Loading />}
  48. {checkRes && !checkRes.is_valid && (
  49. <div className="flex flex-col md:w-[400px]">
  50. <div className="mx-auto w-full">
  51. <div className="mb-3 flex h-20 w-20 items-center justify-center rounded-[20px] border border-divider-regular bg-components-option-card-option-bg p-5 text-[40px] font-bold shadow-lg">🤷‍♂️</div>
  52. <h2 className="text-[32px] font-bold text-text-primary">{t('login.invalid')}</h2>
  53. </div>
  54. <div className="mx-auto mt-6 w-full">
  55. <Button variant='primary' className='w-full !text-sm'>
  56. <a href="https://dify.ai">{t('login.explore')}</a>
  57. </Button>
  58. </div>
  59. </div>
  60. )}
  61. </div>
  62. )
  63. }
  64. export default ActivateForm