All files / app/guestSignup GuestSignUpForm.tsx

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 813x 3x 3x     3x 3x 3x   3x                           3x 27x 27x 27x 27x                                                           3x 8x       1x 1x     9x 9x 9x                        
import { withFormik, FormikProps } from 'formik';
import React, { memo, FunctionComponent } from 'react';
import { object, ref, string } from 'yup';
 
import { PasswordRequirements } from '../customer';
import { withLanguage, TranslatedString, WithLanguageProps } from '../locale';
import { Button, ButtonVariant } from '../ui/button';
import { Fieldset, Form, Legend } from '../ui/form';
 
import SignUpPasswordField from './SignUpPasswordField';
 
export interface SignUpFormProps {
    isSigningUp?: boolean;
    customerCanBeCreated: boolean;
    passwordRequirements: PasswordRequirements;
    onSignUp(data: SignUpFormValues): void;
}
 
export interface SignUpFormValues {
    password: string;
    confirmPassword: string;
}
 
const GuestSignUpForm: FunctionComponent<SignUpFormProps & WithLanguageProps & FormikProps<SignUpFormValues>> = ({
    isSigningUp,
    customerCanBeCreated,
    passwordRequirements: { minLength },
}) => (
    <Fieldset
        legend={
            <Legend>
                <TranslatedString id={ customerCanBeCreated ? 'customer.create_account_text' : 'customer.set_password_text' } />
            </Legend>
        }
    >
        { !customerCanBeCreated &&
            <p>
                <TranslatedString id="customer.account_created_text" />
            </p> }
 
        <Form className="guest-signup form">
            <SignUpPasswordField minLength={ minLength } />
 
            <div className="form-actions">
                <Button
                    id="createAccountButton"
                    isLoading={ isSigningUp }
                    type="submit"
                    variant={ ButtonVariant.Primary }
                >
                    <TranslatedString id={ customerCanBeCreated ? 'customer.create_account_action' : 'customer.set_password_action' } />
                </Button>
            </div>
        </Form>
    </Fieldset>
);
 
export default withLanguage(withFormik<SignUpFormProps & WithLanguageProps, SignUpFormValues>({
    mapPropsToValues: () => ({
        password: '',
        confirmPassword: '',
    }),
    handleSubmit: (values, { props: { onSignUp } }) => {
        onSignUp(values);
    },
    validationSchema: ({
        language,
        passwordRequirements: { description, numeric, alpha, minLength },
    }: SignUpFormProps & WithLanguageProps) => object({
        password: string()
            .required(description || language.translate('customer.password_required_error'))
            .matches(numeric, description || language.translate('customer.password_number_required_error'))
            .matches(alpha, description || language.translate('customer.password_letter_required_error'))
            .min(minLength, description || language.translate('customer.password_under_minimum_length_error'))
            .max(100, language.translate('customer.password_over_maximum_length_error')),
        confirmPassword: string()
            .required(language.translate('customer.password_confirmation_required_error'))
            .oneOf([ref('password')], language.translate('customer.password_confirmation_error')),
    }),
})(memo(GuestSignUpForm)));