92 lines
2.2 KiB
TypeScript
92 lines
2.2 KiB
TypeScript
'use client';
|
|
|
|
import { CheckCircledIcon } from '@radix-ui/react-icons';
|
|
|
|
import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert';
|
|
import { If } from '@kit/ui/if';
|
|
import { Trans } from '@kit/ui/trans';
|
|
|
|
import { useCaptchaToken } from '../captcha/client';
|
|
import { usePasswordSignUpFlow } from '../hooks/use-sign-up-flow';
|
|
import { AuthErrorAlert } from './auth-error-alert';
|
|
import { PasswordSignUpForm } from './password-sign-up-form';
|
|
import { Spinner } from '@kit/ui/makerkit/spinner';
|
|
|
|
interface EmailPasswordSignUpContainerProps {
|
|
authConfig: {
|
|
providers: {
|
|
password: boolean;
|
|
magicLink: boolean;
|
|
oAuth: string[];
|
|
};
|
|
displayTermsCheckbox: boolean | undefined;
|
|
isMailerAutoconfirmEnabled: boolean;
|
|
};
|
|
defaultValues?: {
|
|
email: string;
|
|
};
|
|
onSignUp?: (userId?: string) => unknown;
|
|
emailRedirectTo: string;
|
|
}
|
|
|
|
export function EmailPasswordSignUpContainer({
|
|
authConfig,
|
|
defaultValues,
|
|
onSignUp,
|
|
emailRedirectTo,
|
|
}: EmailPasswordSignUpContainerProps) {
|
|
const { captchaToken, resetCaptchaToken } = useCaptchaToken();
|
|
|
|
const {
|
|
signUp: onSignupRequested,
|
|
loading,
|
|
error,
|
|
showVerifyEmailAlert,
|
|
} = usePasswordSignUpFlow({
|
|
emailRedirectTo,
|
|
onSignUp,
|
|
captchaToken,
|
|
resetCaptchaToken,
|
|
});
|
|
|
|
return (
|
|
<>
|
|
<If condition={showVerifyEmailAlert}>
|
|
{authConfig.isMailerAutoconfirmEnabled ? (
|
|
<div className="flex justify-center">
|
|
<Spinner />
|
|
</div>
|
|
) : <SuccessAlert />
|
|
}
|
|
</If>
|
|
|
|
<If condition={!showVerifyEmailAlert}>
|
|
<AuthErrorAlert error={error} />
|
|
|
|
<PasswordSignUpForm
|
|
onSubmit={onSignupRequested}
|
|
loading={loading}
|
|
defaultValues={defaultValues}
|
|
displayTermsCheckbox={authConfig.displayTermsCheckbox}
|
|
/>
|
|
</If>
|
|
</>
|
|
);
|
|
}
|
|
|
|
function SuccessAlert() {
|
|
return (
|
|
<Alert variant={'success'}>
|
|
<CheckCircledIcon className={'w-4'} />
|
|
|
|
<AlertTitle>
|
|
<Trans i18nKey={'auth:emailConfirmationAlertHeading'} />
|
|
</AlertTitle>
|
|
|
|
<AlertDescription data-test={'email-confirmation-alert'}>
|
|
<Trans i18nKey={'auth:emailConfirmationAlertBody'} />
|
|
</AlertDescription>
|
|
</Alert>
|
|
);
|
|
}
|