{"version":3,"file":"static/chunks/7539-381e6942fa7eec33.js","mappings":"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","sources":["webpack://_N_E/./components/forms/formMessage/FormMessage.tsx","webpack://_N_E/./components/forms/helpers/commonFormSubmission.ts","webpack://_N_E/./components/forms/helpers/handlers.ts","webpack://_N_E/./components/password-strength-checker/PasswordStrengthChecker.tsx","webpack://_N_E/./components/password-strength-checker/index.ts","webpack://_N_E/./hooks/useAuthHooks.ts","webpack://_N_E/./hooks/useFormFieldValidation.ts","webpack://_N_E/./components/password-strength-checker/PasswordStrengthChecker.module.scss"],"sourcesContent":["import Link from \"@Components/Link\";\n\ninterface FormMessageProps {\n message: string;\n type: \"error\" | \"success\";\n errors?: string[];\n error?: string;\n}\n\nexport const FormMessage = (props: FormMessageProps) => {\n const errorMessages = props?.errors?.length\n ? [...props.errors]\n : props?.error\n ? [props?.error]\n : [];\n\n const modifiedErrorMessage: string[] = [];\n errorMessages?.forEach((msg) => {\n const subMessages = msg?.includes(\". \") ? msg.split(\". \") : [msg]; // if there are multiple sentences, split them up\n subMessages?.forEach(\n (error) => error && modifiedErrorMessage.push(error.trim()) // the error condition prevents adding an empty string from the tail end of a split\n );\n });\n\n return modifiedErrorMessage?.length > 0 ? (\n
\n

{props.message}

\n \n
\n ) : null;\n};\n","import {\n COMMON_SUCCESS_TRANSLATION,\n GENERIC_ERR_MSG,\n GENERIC_EVENT_ERR_HEADING,\n GENERIC_EVENT_SUCCESS_HEADING,\n} from \"@Constants/snackbar\";\nimport { COOKIE_KEYS } from \"@Constants/storage\";\nimport { withAsync } from \"@Libs/api/withAsync\";\nimport { loginEvent, signupEvent } from \"@Libs/dynamic-yield/trackingEvents\";\nimport {\n IRegisterFormPayload,\n TAccountResetPayload,\n TForgotPasswordPayload,\n} from \"@Types/Account\";\nimport { SnackBarType, SnackBarVariant } from \"@Types/SnackBar\";\nimport { TDispatch } from \"@Types/common\";\nimport logger from \"@Utils/Logger\";\nimport { getCookie } from \"@Utils/cookies\";\nimport { getReduxStore } from \"@Utils/reduxCommon\";\nimport {\n axiosErrorHandler,\n getScenariosFromErrorCodeTranslation,\n IScenario,\n} from \"@Utils/snackbarHandlers\";\nimport { ERROR_CODES } from \"@wff/api/constants/error\";\nimport {\n submitAccountResetForm,\n submitForgotPasswordForm,\n submitLoginForm,\n submitSignupForm,\n} from \"@wff/api/customerApi\";\nimport {\n ILogin,\n ISignup,\n ISubmitFormActionForgotPassword,\n ISubmitFormActionLogin,\n ISubmitFormActionSignup,\n ISubmitResetAccountPasswordFormAction,\n} from \"@wff/interfaces\";\nimport { triggerSnackBar } from \"@wff/store/SnackBarSlice\";\nimport { resetCart } from \"@wff/store/cartSlice\";\n\nexport const resetReduxCartIfCartIdRemovedFromCookies = (\n dispatch: TDispatch\n) => {\n const {\n cart: { cartId },\n } = getReduxStore();\n const cookieCartId = getCookie(COOKIE_KEYS.CART_ID);\n\n if (!cookieCartId && cartId) {\n dispatch(resetCart());\n }\n};\n\nexport const submitFormActionSignup = async ({\n dispatch,\n payload,\n setFormError,\n errorCodeTranslation,\n actionOnFormSuccess,\n}: ISubmitFormActionSignup) => {\n const newPayload: IRegisterFormPayload = { ...payload };\n // NOTE: Make sure that we are Passing ONLY the values that are needed\n delete (newPayload as Partial).confirmedPassword;\n const { error } = await withAsync(() => {\n return submitSignupForm(newPayload);\n });\n\n if (error) {\n setFormError(error);\n let scenarios: IScenario[] = [];\n if (errorCodeTranslation) {\n scenarios = getScenariosFromErrorCodeTranslation({\n errorCodeTranslation,\n });\n }\n axiosErrorHandler({\n error,\n dispatch,\n scenarios,\n fallbackSnackbar: {\n heading: GENERIC_EVENT_ERR_HEADING.REQUEST_FAILED(),\n message: GENERIC_ERR_MSG.ERROR(),\n },\n errorCodeIgnoreList: [ERROR_CODES.WF_CUSTOMER_001],\n });\n } else {\n signupEvent(payload.email); // Track `Signup` Event for DY\n actionOnFormSuccess();\n resetReduxCartIfCartIdRemovedFromCookies(dispatch);\n }\n};\n\nexport const submitFormActionLogin = async ({\n dispatch,\n payload,\n setFormError,\n errorCodeTranslation,\n actionOnFormSuccess,\n}: ISubmitFormActionLogin) => {\n const newPayload: ILogin = { ...payload };\n newPayload.email = newPayload.email.trim(); // for trimming extra space in email field\n // NOTE: Make sure that we are Passing ONLY the values that are needed\n const { error } = await withAsync(() => submitLoginForm(newPayload));\n if (error) {\n setFormError(error);\n let scenarios: IScenario[] = [];\n if (errorCodeTranslation) {\n scenarios = getScenariosFromErrorCodeTranslation({\n errorCodeTranslation,\n });\n }\n axiosErrorHandler({\n error,\n dispatch,\n scenarios,\n fallbackSnackbar: {\n heading: GENERIC_EVENT_ERR_HEADING.REQUEST_FAILED(),\n message: GENERIC_ERR_MSG.ERROR(),\n },\n errorCodeIgnoreList: [ERROR_CODES.WF_CUSTOMER_004],\n });\n } else {\n loginEvent(payload.email); // Track `Login` Event for DY\n actionOnFormSuccess();\n resetReduxCartIfCartIdRemovedFromCookies(dispatch);\n }\n};\n\nexport const submitFormActionForgotPassword = async ({\n dispatch,\n payload,\n setFormError,\n errorCodeTranslation,\n languageCode,\n}: ISubmitFormActionForgotPassword) => {\n const signupPayload: TForgotPasswordPayload = { ...payload };\n // NOTE: Make sure that we are Passing ONLY the values that are needed\n const { error } = await withAsync(() => {\n return submitForgotPasswordForm(signupPayload);\n });\n if (error) {\n setFormError(error);\n let scenarios: IScenario[] = [];\n if (errorCodeTranslation) {\n scenarios = getScenariosFromErrorCodeTranslation({\n errorCodeTranslation,\n });\n }\n axiosErrorHandler({\n error,\n dispatch,\n scenarios,\n fallbackSnackbar: {\n heading: GENERIC_EVENT_ERR_HEADING.REQUEST_FAILED(),\n message: GENERIC_ERR_MSG.ERROR(),\n },\n });\n } else {\n dispatch(\n triggerSnackBar({\n title: GENERIC_EVENT_SUCCESS_HEADING.SUCCESS(languageCode),\n message: COMMON_SUCCESS_TRANSLATION.CHECK_YOUR_EMAIL(languageCode),\n type: \"success\" as SnackBarType,\n variant: \"filled\" as SnackBarVariant,\n })\n );\n }\n};\n\nexport const submitFormActionResetAccountPassword = async ({\n dispatch,\n payload,\n setFormError,\n errorCodeTranslation,\n actionOnFormSuccess,\n}: ISubmitResetAccountPasswordFormAction) => {\n if (!payload.token) {\n logger.error(\n \"There was no Password Token ID Provided to include in the password reset payload\"\n );\n }\n const newPayload: TAccountResetPayload = { ...payload };\n // NOTE: Make sure that we are Passing ONLY the formState values that are needed\n delete (newPayload as Partial).confirmedPassword;\n const { error } = await withAsync(() => {\n return submitAccountResetForm(newPayload);\n });\n if (error) {\n setFormError(error);\n let scenarios: IScenario[] = [];\n if (errorCodeTranslation) {\n scenarios = getScenariosFromErrorCodeTranslation({\n errorCodeTranslation,\n });\n }\n axiosErrorHandler({\n error,\n dispatch,\n scenarios,\n fallbackSnackbar: {\n heading: GENERIC_EVENT_ERR_HEADING.REQUEST_FAILED(),\n message: GENERIC_ERR_MSG.ERROR(),\n },\n });\n } else {\n actionOnFormSuccess();\n }\n};\n","import { Dispatch, SetStateAction } from \"react\";\n\nexport interface IFormStateChangeHandler {\n key: string;\n value: string | boolean;\n formState: Object;\n setTouched: Dispatch>;\n formStateSetter: Dispatch>;\n}\n\nexport const formStateChangeHandler = ({\n key,\n value,\n formState,\n setTouched,\n formStateSetter,\n}: IFormStateChangeHandler) => {\n setTouched(true);\n formStateSetter({ ...formState, [key]: value });\n};\n","import { useTranslation } from \"next-i18next\";\nimport React, { useState, useEffect } from \"react\";\nimport CircleIcon from \"@mui/icons-material/Circle\";\nimport DoneIcon from \"@mui/icons-material/Done\";\nimport classes from \"./PasswordStrengthChecker.module.scss\";\n\ntype PropTypes = {\n value: {\n password: string;\n confirmedPassword: string;\n };\n style?: any;\n fieldName: string;\n};\n\nfunction PasswordStrengthChecker(props: PropTypes) {\n const { t } = useTranslation(\"common\", {\n keyPrefix: \"customer.login.password_rules\",\n });\n const {\n value: { password, confirmedPassword },\n fieldName,\n } = props;\n\n const [isPasswordValid, setIsPasswordValid] = useState(false);\n const [isLength, setIsLength] = useState(false);\n const [containsUppercase, setContainsUppercase] = useState(false);\n const [containsLowercase, setContainsLowercase] = useState(false);\n const [containsNumber, setContainsNumber] = useState(false);\n const [containsSpecialChar, setContainsSpecialChar] = useState(false);\n const [isPasswordMatch, setIsPasswordMatch] = useState(false);\n\n /* The `PASSWORD_RULES` constant is an array of objects that define the rules for password strength.\n Each object in the array represents a specific rule and has three properties: */\n const PASSWORD_RULES = [\n {\n id: 1,\n rule: t(\"min_max_length\"),\n value: isLength,\n },\n {\n id: 2,\n rule: t(\"uppercase\"),\n value: containsUppercase,\n },\n {\n id: 3,\n rule: t(\"lowercase\"),\n value: containsLowercase,\n },\n {\n id: 4,\n rule: t(\"number\"),\n value: containsNumber,\n },\n {\n id: 5,\n rule: t(\"special_char\"),\n value: containsSpecialChar,\n },\n ];\n\n useEffect(() => {\n if (fieldName === \"passwordConfirm\") {\n if (password?.length > 0 && confirmedPassword?.length > 0) {\n setIsPasswordMatch(password === confirmedPassword);\n } else {\n setIsPasswordMatch(false);\n }\n } else {\n setIsLength(password?.length >= 8 && password?.length <= 25);\n setContainsUppercase(/[A-Z]/.test(password));\n setContainsLowercase(/[a-z]/.test(password));\n setContainsNumber(/\\d/.test(password));\n setContainsSpecialChar(\n /[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]/.test(password)\n );\n if (\n isLength &&\n containsUppercase &&\n containsLowercase &&\n containsNumber &&\n containsSpecialChar\n ) {\n setIsPasswordValid(true);\n } else {\n setIsPasswordValid(false);\n }\n }\n }, [\n fieldName,\n password,\n confirmedPassword,\n isLength,\n containsUppercase,\n containsLowercase,\n containsNumber,\n containsSpecialChar,\n ]);\n\n /* The `renderIcon` function is a helper function that takes a boolean `condition` as a parameter. It\n returns an icon component based on the value of the `condition`. */\n const renderIcon = (condition: boolean) => {\n return condition ? (\n \n ) : (\n \n );\n };\n\n const passwordRuleRender = () => (\n
\n {t(\"heading\")}\n {PASSWORD_RULES.map((ele) => (\n
\n
\n {renderIcon(ele.value)}\n
\n \n {ele.rule}\n
\n
\n ))}\n \n );\n\n const passwordMatcherRender = () => (\n
\n {t(\"pwd_match_heading\")}\n
\n
\n {renderIcon(isPasswordMatch)}\n
\n \n {isPasswordMatch ? t(\"pwd_match\") : t(\"pwd_dont_match\")}\n
\n
\n \n );\n\n return (\n <>\n {fieldName === \"password\" && !isPasswordValid\n ? passwordRuleRender()\n : fieldName === \"passwordConfirm\"\n ? passwordMatcherRender()\n : \"\"}\n \n );\n}\n\nexport default PasswordStrengthChecker;\n","import PasswordStrengthChecker from \"./PasswordStrengthChecker\";\n\nexport default PasswordStrengthChecker;\n","import { FieldValidator } from \"final-form\";\nimport { useState } from \"react\";\nimport CTFieldValidator, {\n name,\n email,\n required,\n strongPassword,\n strongPasswordForCA,\n} from \"@Components/forms/helpers/FieldValidator\";\nimport { isCanadianLocale } from \"@Utils/locale\";\nimport {\n IForgotPassword,\n ILocaleDetail,\n ILogin,\n ISignup,\n} from \"@wff/interfaces\";\nimport { IStringValidator } from \"@wff/interfaces/validators\";\nimport { useAppSelector } from \"@wff/store/hooks\";\n\nexport const initialForgotPasswordState: IForgotPassword = {\n email: \"\",\n};\n\nexport const initialCheckoutLoginState: ILogin = {\n ...initialForgotPasswordState,\n password: \"\",\n};\n\nexport const defaultCheckoutSignupState = {\n ...initialCheckoutLoginState,\n firstName: \"\",\n lastName: \"\",\n confirmedPassword: \"\",\n acceptMarketing: true,\n};\n\nexport const initialCheckoutSignupState = (locale: ILocaleDetail): ISignup => {\n const defaultState = { ...defaultCheckoutSignupState };\n defaultState.acceptMarketing = !isCanadianLocale(locale) ? true : false;\n return defaultState;\n};\n\nexport interface IAuthFormValidators {\n [key: string]: IStringValidator;\n}\n\nexport type TAuthStateHandler = (key: string, value: any) => void;\n\nconst authFormValidator = (\n value: string,\n fieldValidator: FieldValidator\n) => {\n const validator = fieldValidator;\n const validatorResult = validator(value);\n return validatorResult === undefined;\n};\n\nconst ifErrorMsgThenRenderIt = (\n errors: { [key: string]: any } | undefined,\n key: string\n) => {\n return errors && Object.keys(errors).length ? errors[key] : undefined;\n};\n\n// helper function for consolidating the login/signup validation logic into a single place\nexport const authFormFieldValidatorSwitch = (\n key: string,\n errorMessages?: { [key: string]: any },\n languageCode?: string\n): FieldValidator => {\n let validator;\n switch (key) {\n case \"email\":\n validator = CTFieldValidator(\n [\n required(ifErrorMsgThenRenderIt(errorMessages, \"required\")),\n email(ifErrorMsgThenRenderIt(errorMessages, \"email\")),\n ],\n \"Email\"\n );\n break;\n case \"password\":\n validator = CTFieldValidator(\n [\n required(ifErrorMsgThenRenderIt(errorMessages, \"required\")),\n languageCode === \"en-CA\" || languageCode === \"fr-CA\"\n ? strongPasswordForCA(\n ifErrorMsgThenRenderIt(errorMessages, \"password\")\n )\n : strongPassword(ifErrorMsgThenRenderIt(errorMessages, \"password\")),\n ],\n \"Password\"\n );\n break;\n case \"firstName\":\n validator = CTFieldValidator(\n [required(ifErrorMsgThenRenderIt(errorMessages, \"required\")), name()],\n \"First Name\"\n );\n break;\n case \"lastName\":\n validator = CTFieldValidator(\n [required(ifErrorMsgThenRenderIt(errorMessages, \"required\")), name()],\n \"Last Name\"\n );\n break;\n default:\n validator = CTFieldValidator([required()]);\n break;\n }\n return validator;\n};\n\nexport const authFormValidators: IAuthFormValidators = {\n email: (value: string) => {\n return authFormValidator(value, authFormFieldValidatorSwitch(\"email\"));\n },\n password: (value: string) => {\n return authFormValidator(value, authFormFieldValidatorSwitch(\"password\"));\n },\n firstName: (value: string) => {\n return authFormValidator(value, authFormFieldValidatorSwitch(\"firstName\"));\n },\n lastName: (value: string) => {\n return authFormValidator(value, authFormFieldValidatorSwitch(\"lastName\"));\n },\n};\n\nexport const useForgotPassword = () => {\n const [forgotPasswordState, setForgotPasswordState] = useState(\n initialForgotPasswordState\n );\n\n const forgotPasswordStateHandler: TAuthStateHandler = (key, value) => {\n setForgotPasswordState({ ...forgotPasswordState, [key]: value });\n };\n\n return {\n forgotPasswordState,\n setForgotPasswordState,\n forgotPasswordStateHandler,\n };\n};\n\nexport const useLogin = () => {\n const [loginState, setLoginState] = useState(\n initialCheckoutLoginState\n );\n\n const loginStateHandler: TAuthStateHandler = (key, value) => {\n setLoginState({ ...loginState, [key]: value });\n };\n\n return {\n loginState,\n setLoginState,\n loginStateHandler,\n };\n};\n\nexport const useSignup = (initialState?: Partial) => {\n const { locale } = useAppSelector((state) => state);\n const [signupState, setSignupState] = useState({\n ...initialCheckoutSignupState(locale),\n ...initialState,\n });\n\n const signupStateHandler: TAuthStateHandler = (key, value) => {\n setSignupState({ ...signupState, [key]: value });\n };\n\n return {\n signupState,\n setSignupState,\n signupStateHandler,\n };\n};\n","import { Dispatch, SetStateAction, useState, useEffect } from \"react\";\nimport {\n validEmail,\n validPassword,\n validStrongPassword,\n validStrongPasswordForCA,\n validName,\n} from \"@Components/forms/helpers/FieldValidator\";\nimport { FORM_FIELD_KEYS, LOCALE } from \"@Constants/common\";\nimport { findErrorCode } from \"@Utils/errors\";\nimport PATTERNS from \"@Utils/patterns\";\nimport { IHeadingAndMessage } from \"@Utils/snackbarHandlers\";\nimport { areAllKeysPresent, isKeyPresent } from \"@Utils/validation\";\nimport {\n ERROR_CODES,\n IErrorCodeTranslation,\n TErrorCode,\n} from \"@wff/api/constants/error\";\nimport { ISignup } from \"@wff/interfaces\";\n\nexport const FORM_TYPES = {\n SIGNUP: \"signup\",\n LOGIN: \"login\",\n FORGOT_PASSWORD: \"forgot_password\",\n ACCOUNT_RESET: \"account_reset\",\n};\n\nexport interface IValidationTranslation {\n allFieldsBlank?: string;\n firstNameBlank?: string;\n lastNameBlank?: string;\n emailBlank?: string;\n emailNeedsContentAfterAtSymbol?: string;\n passwordBlank?: string;\n confirmPasswordBlank?: string;\n passwordsDoNotMatch?: string;\n}\n\nexport interface IGetValidationErrorByLocale {\n type: string;\n error?: any;\n touched: boolean;\n formState: ISignup;\n languageCode: string;\n errorCodeTranslation?: IErrorCodeTranslation;\n validationTranslation?: Partial;\n}\n\nexport interface IUseFormFieldValidation {\n type: string;\n touched?: boolean; // optional for assigning the default value\n formState: any;\n formAction: () => void;\n languageCode: string;\n errorCodeTranslation?: IErrorCodeTranslation;\n validationTranslation?: Partial;\n}\n\nexport interface IUseFormFieldValidationResult {\n touched: boolean;\n setTouched: Dispatch>;\n formError: any;\n setFormError: Dispatch>;\n formErrorMessages: string[];\n setFormErrorMessages: Dispatch>;\n setFormActionIsActive: Dispatch>;\n}\n\nexport interface IResetFormActionActiveStatus {\n setFormError: Dispatch>;\n setFormActionIsActive: Dispatch>;\n}\n\nexport interface IResetFormFieldErrorMessage {\n setFormErrorMessages: Dispatch>;\n}\n\nexport interface IGetFormErrorCodeMessage {\n error: any;\n errorCodeTranslation: IErrorCodeTranslation;\n}\n\nexport interface IGetFormValidationMessage {\n type: string;\n formState: ISignup;\n languageCode: string;\n validationTranslation: Partial;\n}\n\nexport const getFormErrorCodeMessage = ({\n error,\n errorCodeTranslation,\n}: IGetFormErrorCodeMessage) => {\n const formErrMsgs: string[] = [];\n Object.keys(errorCodeTranslation).forEach((key) => {\n const matchingError = findErrorCode({\n code: ERROR_CODES[key as TErrorCode],\n error,\n });\n if (matchingError) {\n if (typeof errorCodeTranslation[key as TErrorCode] === \"string\") {\n formErrMsgs.push(\n (errorCodeTranslation[key as TErrorCode] as string) ?? \"\"\n );\n } else {\n formErrMsgs.push(\n (errorCodeTranslation[key as TErrorCode] as IHeadingAndMessage)\n ?.message ?? \"\"\n );\n }\n }\n });\n\n return formErrMsgs;\n};\n\nexport const getFormValidationMessage = ({\n type,\n formState,\n languageCode,\n validationTranslation,\n}: // eslint-disable-next-line sonarjs/cognitive-complexity\nIGetFormValidationMessage) => {\n const formErrMsgs: string[] = [];\n switch (languageCode) {\n case LOCALE.EN_US:\n case LOCALE.EN_CA:\n case LOCALE.FR_CA:\n case LOCALE.ES_MX:\n default:\n if (\n type === FORM_TYPES.SIGNUP &&\n areAllKeysPresent(\n [\n FORM_FIELD_KEYS.EMAIL,\n FORM_FIELD_KEYS.PASSWORD,\n FORM_FIELD_KEYS.FIRST_NAME,\n FORM_FIELD_KEYS.FIRST_NAME,\n ],\n formState\n ) &&\n !formState?.email &&\n !formState?.password &&\n !formState?.firstName &&\n !formState?.lastName\n ) {\n formErrMsgs.push(validationTranslation?.allFieldsBlank ?? \"\");\n return formErrMsgs;\n }\n if (\n areAllKeysPresent(\n [FORM_FIELD_KEYS.PASSWORD, FORM_FIELD_KEYS.CONFIRM_PASSWORD],\n formState\n ) &&\n formState?.password !== formState?.confirmedPassword\n ) {\n formErrMsgs.push(validationTranslation?.passwordsDoNotMatch ?? \"\");\n }\n if (\n isKeyPresent(FORM_FIELD_KEYS.EMAIL, formState) &&\n PATTERNS.EMAIL_ENDS_WITH_AT.test(formState?.email)\n ) {\n formErrMsgs.push(\n validationTranslation?.emailNeedsContentAfterAtSymbol ?? \"\"\n );\n }\n if (\n isKeyPresent(FORM_FIELD_KEYS.EMAIL, formState) &&\n !validEmail(formState?.email)\n ) {\n formErrMsgs.push(validationTranslation?.emailBlank ?? \"\");\n }\n if (\n isKeyPresent(FORM_FIELD_KEYS.FIRST_NAME, formState) &&\n !validName(formState?.firstName)\n ) {\n formErrMsgs.push(validationTranslation?.firstNameBlank ?? \"\");\n }\n if (\n isKeyPresent(FORM_FIELD_KEYS.LAST_NAME, formState) &&\n !validName(formState?.lastName)\n ) {\n formErrMsgs.push(validationTranslation?.lastNameBlank ?? \"\");\n }\n if (\n type === FORM_TYPES.LOGIN &&\n isKeyPresent(FORM_FIELD_KEYS.PASSWORD, formState) &&\n !validPassword(formState?.password)\n ) {\n formErrMsgs.push(validationTranslation?.passwordBlank ?? \"\");\n }\n if (\n (languageCode === LOCALE.EN_US || languageCode === LOCALE.ES_MX) &&\n type !== FORM_TYPES.LOGIN &&\n isKeyPresent(FORM_FIELD_KEYS.PASSWORD, formState) &&\n !validStrongPassword(formState?.password)\n ) {\n formErrMsgs.push(validationTranslation?.passwordBlank ?? \"\");\n }\n if (\n (languageCode === LOCALE.EN_CA || languageCode === LOCALE.FR_CA) &&\n type !== FORM_TYPES.LOGIN &&\n isKeyPresent(FORM_FIELD_KEYS.PASSWORD, formState) &&\n !validStrongPasswordForCA(formState?.password)\n ) {\n formErrMsgs.push(validationTranslation?.passwordBlank ?? \"\");\n }\n }\n\n return formErrMsgs;\n};\n\nexport const getFormValidationErrorByLocale = ({\n type,\n error,\n touched,\n formState,\n languageCode,\n errorCodeTranslation,\n validationTranslation,\n}: IGetValidationErrorByLocale) => {\n let formErrMsgs: string[] = [];\n // NOTE: remove this note when it is determined that a locale logic-fork is no longer relevant: at the time this was coded, there was no logical difference between the locales\n switch (languageCode) {\n case LOCALE.EN_US:\n case LOCALE.EN_CA:\n case LOCALE.FR_CA:\n case LOCALE.ES_MX:\n default:\n if (touched) {\n formErrMsgs = [\n ...formErrMsgs,\n ...getFormErrorCodeMessage({\n // api error response validation\n error,\n errorCodeTranslation: errorCodeTranslation!,\n }),\n ...getFormValidationMessage({\n // standard input validation\n type,\n formState,\n languageCode,\n validationTranslation: validationTranslation!,\n }),\n ];\n }\n break;\n }\n return formErrMsgs;\n};\n\nexport const resetFormActionActiveStatus = ({\n setFormError,\n setFormActionIsActive,\n}: IResetFormActionActiveStatus) => {\n setFormError(null);\n setFormActionIsActive(false);\n};\n\nexport const resetFormFieldErrorMessage = ({\n setFormErrorMessages,\n}: IResetFormFieldErrorMessage) => {\n setFormErrorMessages([]);\n};\n\nexport const useFormFieldValidation = ({\n type,\n touched: touchedDefault,\n formState,\n formAction,\n languageCode,\n errorCodeTranslation,\n validationTranslation,\n}: IUseFormFieldValidation): IUseFormFieldValidationResult => {\n const [touched, setTouched] = useState(touchedDefault ?? false);\n const [formError, setFormError] = useState(null); // error response from api call\n const [formErrorMessages, setFormErrorMessages] = useState([]); // form error messages to be rendered\n const [formActionIsActive, setFormActionIsActive] = useState(false);\n\n useEffect(() => {\n if (formActionIsActive || formError) {\n const formErrMsgs: string[] = getFormValidationErrorByLocale({\n type,\n error: formError,\n touched,\n formState,\n languageCode,\n errorCodeTranslation,\n validationTranslation,\n });\n setFormErrorMessages(formErrMsgs);\n resetFormActionActiveStatus({ setFormError, setFormActionIsActive }); // reset the state params that were responsible for triggering this useEffect\n if (formActionIsActive && !formErrMsgs?.length) {\n resetFormFieldErrorMessage({ setFormErrorMessages }); // reset all error message state before submitting form\n formAction();\n }\n }\n }, [\n type,\n touched,\n formActionIsActive,\n formError,\n errorCodeTranslation,\n validationTranslation,\n formAction,\n formState,\n languageCode,\n ]);\n\n return {\n touched,\n setTouched,\n formError,\n setFormError,\n formErrorMessages,\n setFormErrorMessages,\n setFormActionIsActive,\n };\n};\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"pwd_container\":\"PasswordStrengthChecker_pwd_container__081Hy\",\"pwd_container_border_success\":\"PasswordStrengthChecker_pwd_container_border_success__YlgBA\",\"pwd_container_border_error\":\"PasswordStrengthChecker_pwd_container_border_error__cl47e\",\"pwd_container_container\":\"PasswordStrengthChecker_pwd_container_container__0w1aI\",\"pwd_container_item\":\"PasswordStrengthChecker_pwd_container_item__OohMK\",\"pwd_success\":\"PasswordStrengthChecker_pwd_success___xaNr\",\"pwd_failed\":\"PasswordStrengthChecker_pwd_failed__8Rq3X\",\"pwd_icon_container\":\"PasswordStrengthChecker_pwd_icon_container__yudxE\",\"icon_size\":\"PasswordStrengthChecker_icon_size__Tg2xF\"};"],"names":["FormMessage","props","errorMessages","errors","length","error","modifiedErrorMessage","forEach","msg","subMessages","includes","split","push","trim","div","className","type","p","message","ul","map","index","li","Link","href","a","span","resetReduxCartIfCartIdRemovedFromCookies","dispatch","cartId","getReduxStore","cart","getCookie","COOKIE_KEYS","resetCart","submitFormActionSignup","payload","setFormError","errorCodeTranslation","actionOnFormSuccess","newPayload","scenarios","confirmedPassword","withAsync","submitSignupForm","getScenariosFromErrorCodeTranslation","axiosErrorHandler","fallbackSnackbar","heading","GENERIC_EVENT_ERR_HEADING","GENERIC_ERR_MSG","errorCodeIgnoreList","ERROR_CODES","signupEvent","email","submitFormActionLogin","submitLoginForm","loginEvent","submitFormActionForgotPassword","languageCode","signupPayload","submitForgotPasswordForm","triggerSnackBar","title","GENERIC_EVENT_SUCCESS_HEADING","COMMON_SUCCESS_TRANSLATION","variant","submitFormActionResetAccountPassword","token","logger","submitAccountResetForm","formStateChangeHandler","key","value","formState","setTouched","formStateSetter","t","useTranslation","keyPrefix","password","fieldName","useState","isPasswordValid","setIsPasswordValid","isLength","setIsLength","containsUppercase","setContainsUppercase","containsLowercase","setContainsLowercase","containsNumber","setContainsNumber","containsSpecialChar","setContainsSpecialChar","isPasswordMatch","setIsPasswordMatch","PASSWORD_RULES","id","rule","useEffect","test","renderIcon","condition","DoneIcon","color","fontSize","CircleIcon","classes","ele","initialForgotPasswordState","initialCheckoutLoginState","defaultCheckoutSignupState","firstName","lastName","acceptMarketing","ifErrorMsgThenRenderIt","Object","keys","undefined","authFormFieldValidatorSwitch","validator","CTFieldValidator","required","strongPasswordForCA","strongPassword","name","useForgotPassword","forgotPasswordState","setForgotPasswordState","forgotPasswordStateHandler","useLogin","loginState","setLoginState","loginStateHandler","useSignup","initialState","locale","useAppSelector","state","defaultState","isCanadianLocale","initialCheckoutSignupState","signupState","setSignupState","signupStateHandler","FORM_TYPES","SIGNUP","LOGIN","FORGOT_PASSWORD","ACCOUNT_RESET","getFormValidationErrorByLocale","touched","validationTranslation","formErrMsgs","LOCALE","findErrorCode","code","getFormErrorCodeMessage","areAllKeysPresent","FORM_FIELD_KEYS","passwordsDoNotMatch","isKeyPresent","PATTERNS","emailNeedsContentAfterAtSymbol","validEmail","emailBlank","validName","firstNameBlank","lastNameBlank","validPassword","passwordBlank","validStrongPassword","validStrongPasswordForCA","allFieldsBlank","getFormValidationMessage","useFormFieldValidation","touchedDefault","formAction","formError","formErrorMessages","setFormErrorMessages","formActionIsActive","setFormActionIsActive","resetFormActionActiveStatus","resetFormFieldErrorMessage","module","exports"],"sourceRoot":""}