Files
medreport_mrb2b/packages/features/auth/src/components/password-sign-up-container.tsx
2025-09-10 06:34:27 +03:00

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>
);
}