|
'use client' |
|
import { useTranslation } from 'react-i18next' |
|
import useSWR from 'swr' |
|
import { useRouter, useSearchParams } from 'next/navigation' |
|
import cn from '@/utils/classnames' |
|
import Button from '@/app/components/base/button' |
|
|
|
import { invitationCheck } from '@/service/common' |
|
import Loading from '@/app/components/base/loading' |
|
|
|
const ActivateForm = () => { |
|
const router = useRouter() |
|
const { t } = useTranslation() |
|
const searchParams = useSearchParams() |
|
const workspaceID = searchParams.get('workspace_id') |
|
const email = searchParams.get('email') |
|
const token = searchParams.get('token') |
|
|
|
const checkParams = { |
|
url: '/activate/check', |
|
params: { |
|
...workspaceID && { workspace_id: workspaceID }, |
|
...email && { email }, |
|
token, |
|
}, |
|
} |
|
const { data: checkRes } = useSWR(checkParams, invitationCheck, { |
|
revalidateOnFocus: false, |
|
onSuccess(data) { |
|
if (data.is_valid) { |
|
const params = new URLSearchParams(searchParams) |
|
const { email, workspace_id } = data.data |
|
params.set('email', encodeURIComponent(email)) |
|
params.set('workspace_id', encodeURIComponent(workspace_id)) |
|
params.set('invite_token', encodeURIComponent(token as string)) |
|
router.replace(`/signin?${params.toString()}`) |
|
} |
|
}, |
|
}) |
|
|
|
return ( |
|
<div className={ |
|
cn( |
|
'flex flex-col items-center w-full grow justify-center', |
|
'px-6', |
|
'md:px-[108px]', |
|
) |
|
}> |
|
{!checkRes && <Loading />} |
|
{checkRes && !checkRes.is_valid && ( |
|
<div className="flex flex-col md:w-[400px]"> |
|
<div className="w-full mx-auto"> |
|
<div className="mb-3 flex justify-center items-center w-20 h-20 p-5 rounded-[20px] border border-gray-100 shadow-lg text-[40px] font-bold">🤷♂️</div> |
|
<h2 className="text-[32px] font-bold text-gray-900">{t('login.invalid')}</h2> |
|
</div> |
|
<div className="w-full mx-auto mt-6"> |
|
<Button variant='primary' className='w-full !text-sm'> |
|
<a href="https://dify.ai">{t('login.explore')}</a> |
|
</Button> |
|
</div> |
|
</div> |
|
)} |
|
</div> |
|
) |
|
} |
|
|
|
export default ActivateForm |
|
|