Files
myeasycms-v2/packages/features/auth/src/components/password-sign-up-container.tsx
giancarlo 311086d0e7 Update retries in playwright config and refactor account settings
This update changes the number of retries in the Playwright configuration. Additionally, solid improvements have been made in the account settings, including better data semantics for testing, changes to email confirmation, and adding a new E2E test suite for accounts. The sign-up flow was updated and problems with multi-language support logic were fixed.
2024-04-11 18:15:16 +08:00

86 lines
2.2 KiB
TypeScript

'use client';
import { useCallback, useRef, useState } from 'react';
import { CheckCircledIcon } from '@radix-ui/react-icons';
import { useSignUpWithEmailAndPassword } from '@kit/supabase/hooks/use-sign-up-with-email-password';
import { Alert, AlertDescription, AlertTitle } from '@kit/ui/alert';
import { If } from '@kit/ui/if';
import { Trans } from '@kit/ui/trans';
import { AuthErrorAlert } from './auth-error-alert';
import { PasswordSignUpForm } from './password-sign-up-form';
interface EmailPasswordSignUpContainerProps {
onSignUp?: (userId?: string) => unknown;
emailRedirectTo: string;
captchaToken?: string;
}
export function EmailPasswordSignUpContainer({
onSignUp,
emailRedirectTo,
captchaToken,
}: EmailPasswordSignUpContainerProps) {
const signUpMutation = useSignUpWithEmailAndPassword();
const redirecting = useRef(false);
const loading = signUpMutation.isPending || redirecting.current;
const [showVerifyEmailAlert, setShowVerifyEmailAlert] = useState(false);
const onSignupRequested = useCallback(
async (credentials: { email: string; password: string }) => {
if (loading) {
return;
}
try {
const data = await signUpMutation.mutateAsync({
...credentials,
emailRedirectTo,
captchaToken,
});
setShowVerifyEmailAlert(true);
if (onSignUp) {
onSignUp(data.user?.id);
}
} catch (error) {
console.error(error);
}
},
[captchaToken, emailRedirectTo, loading, onSignUp, signUpMutation],
);
return (
<>
<If condition={showVerifyEmailAlert}>
<SuccessAlert />
</If>
<If condition={!showVerifyEmailAlert}>
<AuthErrorAlert error={signUpMutation.error} />
<PasswordSignUpForm onSubmit={onSignupRequested} loading={loading} />
</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>
);
}