'use client' import type { MailSendResponse } from '@/service/use-common' import { Button } from '@langgenius/dify-ui/button' import { toast } from '@langgenius/dify-ui/toast' import { useSuspenseQuery } from '@tanstack/react-query' import { useCallback, useState } from 'react' import { useTranslation } from 'react-i18next' import Input from '@/app/components/base/input' import Split from '@/app/signin/split' import { emailRegex } from '@/config' import { useLocale } from '@/context/i18n' import { systemFeaturesQueryOptions } from '@/features/system-features/client' import Link from '@/next/link' import { useSearchParams } from '@/next/navigation' import { useSendMail } from '@/service/use-common' type Props = { onSuccess: (email: string, payload: string) => void } export default function Form({ onSuccess }: Props) { const { t } = useTranslation() const [email, setEmail] = useState('') const locale = useLocale() const searchParams = useSearchParams() const queryString = searchParams.toString() const signinHref = queryString ? `/signin?${queryString}` : '/signin' const { data: systemFeatures } = useSuspenseQuery(systemFeaturesQueryOptions()) const { mutateAsync: submitMail, isPending } = useSendMail() const handleSubmit = useCallback(async () => { if (isPending) return if (!email) { toast.error(t(($) => $['error.emailEmpty'], { ns: 'login' })) return } if (!emailRegex.test(email)) { toast.error(t(($) => $['error.emailInValid'], { ns: 'login' })) return } const res = await submitMail({ email, language: locale }) if ((res as MailSendResponse).result === 'success') onSuccess(email, (res as MailSendResponse).data) }, [email, locale, submitMail, t, isPending, onSuccess]) return (
{ e.preventDefault() handleSubmit() }} >
setEmail(e.target.value)} id="email" type="email" autoComplete="email" placeholder={t(($) => $.emailPlaceholder, { ns: 'login' }) || ''} tabIndex={1} />
{t(($) => $['signup.haveAccount'], { ns: 'login' })} {t(($) => $['signup.signIn'], { ns: 'login' })}
{!systemFeatures.branding.enabled && ( <>
{t(($) => $.tosDesc, { ns: 'login' })}   {t(($) => $.tos, { ns: 'login' })}  &  {t(($) => $.pp, { ns: 'login' })}
)} ) }