{"version":3,"file":"static/chunks/5880-f0a234050ba86abe.js","mappings":"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","sources":["webpack://_N_E/./src/components/atoms/LabelChip/LabelChip.tsx","webpack://_N_E/./src/components/atoms/ProgressBar/ProgressBar.tsx","webpack://_N_E/./src/components/templates/StepperFormTemplate/StepperFormTemplate.tsx","webpack://_N_E/./src/lib/constants/constants/forms.ts","webpack://_N_E/./src/lib/constants/constants/privacy.ts","webpack://_N_E/./src/lib/utils/helpers/formHelpers/featureFlagOrder.ts","webpack://_N_E/./src/lib/hooks/multiPageForm/MultiPageForm.tsx","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/ActivateAccount.tsx","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/AddPetFound.ts","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/AddPetLost.ts","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/AddPetSafe.ts","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/AddPetStart.ts","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/AllPets.ts","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/ReportAsLost.ts","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/TestConfiguration.ts","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/Configuration.ts","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/CreateAccountFound.tsx","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/CreateAccountFoundDistance.tsx","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/CreateAccountFoundPhoto.tsx","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/CreateAccountFoundReport.ts","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/CreateAccountLost.tsx","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/CreateAccountLostDistance.tsx","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/CreateAccountLostPhoto.tsx","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/CreateAccountLostReport.ts","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/CreateAccountSafe.tsx","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/CreateAccountStart.tsx","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/IFoundAPetConfiguration.tsx","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/ILostAPetConfiguration.tsx","webpack://_N_E/./src/lib/hooks/multiPageForm/configs/OnboardPet.tsx","webpack://_N_E/./src/lib/utils/storage/form-storage.ts","webpack://_N_E/./src/pages/activate-account/[id]/index.tsx","webpack://_N_E/./src/components/templates/OnboardPetTemplate/OnboardPetTemplate.tsx","webpack://_N_E/./src/pages/onboard-pet/[id]/index.tsx","webpack://_N_E/<anon>"],"sourcesContent":["import { ColorShade, ColorType } from '@/components/atoms/Colors/Colors';\n\n/**\n * ILabelChip\n *\n * @interface ILabelChip\n */\nexport interface ILabelChip {\n /**\n * The text to display\n *\n * @memberof ILabelChip\n * @member {string} text\n */\n text: string;\n /**\n * The color of the icon. Do not use with `colorInherit`.\n *\n * @memberof ILabelChip\n * @member {ColorType} colorType\n */\n colorType: ColorType;\n /**\n * The shade of the color to use. Do not use with `colorInherit`.\n *\n * @memberof ILabelChip\n * @member {ColorShade} colorShade\n */\n colorShade: ColorShade;\n /**\n * Optional classes\n *\n * @memberof ILabelChip\n * @member {string} [className]\n */\n className?: string;\n}\n\n/**\n * LabelChip A chip used only for labeling\n *\n * @param {ILabelChip} props - The props for the LabelChip component\n * @returns {React.FC<ILabelChip>} Component\n */\nconst LabelChip: React.FC<ILabelChip> = ({\n text,\n colorShade,\n colorType,\n className = '',\n}: ILabelChip) => {\n return (\n <div\n data-testid=\"label-chip\"\n className={`inline-block border-${colorType}-${colorShade} text-${colorType}-${colorShade} border-2 text-xs font-bold h-5 leading-4.5 rounded-full px-2 py-0 ${className}`}\n >\n {text}\n </div>\n );\n};\n\nexport default LabelChip;\n","/**\n * IProgressBar Interface for the Progress Bar component\n *\n * @interface IProgressBar\n */\nexport interface IProgressBar {\n /**\n * The percentage of the progress bar\n *\n * @memberof IProgressBar\n * @member {number} percentage\n */\n percentage: number;\n /**\n * If the progress bar should be displayed\n *\n * @memberof IProgressBar\n * @default false\n * @member {boolean} [hidden]\n */\n hidden?: boolean;\n /**\n * The optional classes for the component\n *\n * @memberof IProgressBar\n * @default ''\n * @member {string} [classes]\n */\n classes?: string;\n}\n\n/**\n * Progress Bar Shows a simple progress bar and takes in percentage, variant,\n * classes and disabled properties\n *\n * @param {IProgressBar} props - The props for the Progress Bar component\n * @returns {React.FC<IProgressBar>} Progress Bar Component\n */\nconst ProgressBar: React.FC<IProgressBar> = ({\n percentage,\n classes = '',\n hidden = false,\n}: IProgressBar) => {\n /** Setting the background and progress bar variant/attributes */\n const dataTestId = `progress-bar-${hidden}`;\n const progressClassBackground = `${classes} bg-base-200 h-1 rounded-full`;\n const progressClassBar = `${classes} bg-base-400 h-1 rounded-full`;\n return (\n <div className=\"max-w-[1440px] mx-auto\" data-testid=\"progress-bar\">\n <div\n className={`mx-6 sm:mx-8 md:mx-10 ${progressClassBackground}`}\n hidden={hidden}\n data-testid={dataTestId}\n role=\"progressbar\"\n aria-valuenow={percentage}\n aria-valuemin={0}\n aria-valuemax={100}\n >\n <div\n className={progressClassBar}\n style={{ width: `${percentage}%` }}\n ></div>\n </div>\n </div>\n );\n};\n\nexport default ProgressBar;\n","import Button from '@/components/atoms/Button/Button';\nimport Heading from '@/components/atoms/Heading/Heading';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport ProgressBar from '@/components/atoms/ProgressBar/ProgressBar';\nimport Loading from '@/components/molecules/Loading/Loading';\nimport FieldBuilder from '@/components/organisms/FormBuilder/FieldBuilder';\nimport PageWrapper from '@/components/organisms/PageWrapper/PageWrapper';\nimport {\n clearAllFormRelatedData,\n useMultiPageFormContext,\n} from '@/lib/hooks/multiPageForm/MultiPageForm';\nimport FormStorage from '@/lib/utils/storage/form-storage';\nimport { formValidationBuilder } from '@/lib/validations/FormBuilderValidation';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport { NextPage } from 'next';\nimport { useRouter } from 'next/router';\nimport { ParsedUrlQuery } from 'querystring';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { useForm } from 'react-hook-form';\n\n/**\n * The default label for the submit button\n *\n * @constant {string}\n */\nexport const defaultSubmitLabel = 'Submit';\n\n/**\n * IStepperFormTemplate\n *\n * @interface\n */\nexport interface IStepperFormTemplate {\n /** Submit function handler */\n submitFunction: (data: object) => Promise<void>;\n /** The optional disabled state of the submit button */\n submitButtonDisabled?: boolean;\n /** The loading state of the submit button */\n loading?: boolean;\n /** The loading state of the form. Used for client-side form. */\n isLoadingForm?: boolean;\n /** The optional original query params to be included in the next steps */\n originalQueryParams?: ParsedUrlQuery;\n}\n\n/**\n * Stepper Form Template The template for using the stepper form component in\n * the application\n *\n * @param {IStepperFormTemplate} props - The props for the stepper form template\n * @returns {React.FC<IStepperFormTemplate>} - The stepper form template\n */\nconst StepperFormTemplate: NextPage<IStepperFormTemplate> = ({\n submitFunction,\n submitButtonDisabled,\n loading,\n isLoadingForm,\n originalQueryParams,\n}: IStepperFormTemplate) => {\n // Form Content\n const [formTitle, setFormTitle] = useState('');\n const [formDescription, setFormDescription] = useState('');\n const [formOverline, setFormOverline] = useState('');\n // Is Form Completed\n const [completed, setCompleted] = useState(false);\n\n // The inner hide submit for the stepper form\n const [hideSubmitStepperForm, setHideSubmitStepperForm] = useState(false);\n\n // Import the Next Router\n const router = useRouter();\n // Import in the MultiPageFormContext\n const {\n progress,\n formId,\n pageId,\n nextUrl,\n previousUrl,\n validProgress,\n formData,\n formContent,\n formOrder,\n state,\n renderMode,\n dispatch,\n } = useMultiPageFormContext();\n\n // Form Content\n const {\n title,\n description,\n overline,\n fields,\n defaults,\n hideSubmit: hideSubmitForm,\n submitLabel,\n } = formContent;\n\n /**\n * Computed hide submit value. We get this value by checking if either the\n * hideSubmitForm or the hideSubmitStepperForm are true. We can use this\n * computed state mostly for the components that have their own Submit button,\n * like for example the Image Upload component or the Image Upload Tile\n * component\n *\n * @constant {boolean}\n */\n const hideSubmit = useMemo(\n () => hideSubmitForm || hideSubmitStepperForm,\n [hideSubmitForm, hideSubmitStepperForm]\n );\n\n /**\n * Reference to the form local storage so it can be used by any input field\n * from the Filed Builder if needed\n *\n * @example\n * Get the uploaded photo objectKey from the form storage to crop the image\n * <ImageUploadHandlerGroup\n * uploadedImage={generateImageUrl(formStorage.get('photo'))}\n * ...{props}\n * />\n */\n const formStorage = useRef<FormStorage>();\n\n /**\n * Hook to update the formStorage ref with a valid instance of FormStorage\n * when formId changes\n */\n useEffect(() => {\n const storage = state.forms[formId].storage;\n\n if (storage) {\n formStorage.current = new FormStorage({ storage, formId });\n }\n }, [formId, state]);\n\n // Swap out the handlebars in the form title and description\n useEffect(() => {\n (async () => {\n // Set the Form Data\n let formDataSwap = formData;\n if (defaults) {\n formDataSwap = { ...defaults, ...formData };\n }\n // Dynamically import the handlebars library\n const HandlebarStringReplace = (\n await import('@/component-library-lib/utils/stringReplace/handlebar-stringReplace')\n ).default;\n // String Replaced Content\n const stringReplacer = new HandlebarStringReplace();\n const compiledTitle = stringReplacer.replace(title, formDataSwap);\n const compiledDescription =\n description && typeof description === 'string'\n ? stringReplacer.replace(description, formDataSwap)\n : description;\n const compiledOverline = overline\n ? stringReplacer.replace(overline, formDataSwap)\n : '';\n // Set the Form Title\n setFormTitle(compiledTitle);\n // Set the Form Description\n setFormDescription(compiledDescription ?? '');\n // Set the Form Overline\n setFormOverline(compiledOverline);\n })();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Build Form Validation based on the specified fields\n const formValidationSchema = formValidationBuilder(fields);\n\n // Use React Hook Form\n const {\n register,\n handleSubmit,\n reset,\n control,\n formState: { errors, isValid },\n setError,\n } = useForm({\n resolver: yupResolver(formValidationSchema),\n mode: 'onChange',\n });\n\n /**\n * Submit Form\n *\n * @param {object} data - The data from the form\n */\n const submitForm = (data: object) => {\n dispatch({\n type: 'NEXT_PAGE',\n data: { ...data },\n pageId: pageId,\n formId: formId,\n });\n setCompleted(true);\n };\n\n /** Back Button Handler */\n const backButtonHandler = () => {\n router.push(previousUrl);\n };\n\n /**\n * Set the Form Up for the default values If the form is completed, then go to\n * the next page or if you are on the last page, then submit the form\n */\n useEffect(() => {\n // If the form is completed\n if (completed) {\n // If the next page is not null\n if (nextUrl) {\n // Parse the nextUrl to extract pathname and query\n const [pathname, search] = nextUrl.split('?');\n const nextUrlParams = new URLSearchParams(search || '');\n\n // Merge the original query params if they exist\n if (\n originalQueryParams &&\n Object.keys(originalQueryParams).length > 0\n ) {\n Object.entries(originalQueryParams).forEach(([key, value]) => {\n nextUrlParams.set(key, String(value));\n });\n }\n\n // Push the updated URL\n router.push({\n pathname,\n query: Object.fromEntries(nextUrlParams.entries()),\n });\n } else {\n submitFunction(formData)?.then(() => {\n if (state.forms[formId].storage !== undefined) {\n const storage = state.forms[formId].storage;\n /**\n * Check if the form has the retain Data On Submit property before\n * clearing all form data\n *\n * @constant {boolean}\n */\n const shouldClearFormData =\n storage && !state.forms[formId].retainDataOnSubmit;\n\n if (shouldClearFormData) clearAllFormRelatedData(formId, storage);\n }\n });\n }\n } else {\n // Loads the Form Data into the form\n reset(formData);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formData]);\n\n /**\n * Check that the form is on the correct page and that the progress is valid\n * If the progress is not valid, then redirect to the first page\n */\n useEffect(() => {\n const urlSeparator = renderMode === 'client' ? '?step=' : '/';\n\n if (!validProgress && !isValid) {\n const formIndexUrl = `/${formId}${urlSeparator}${formOrder[0]}`;\n router.push(formIndexUrl);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isValid, validProgress]);\n\n /**\n * Whether or not to show the skip option\n *\n * @constant {boolean}\n */\n const showSkipOption = useMemo(\n () =>\n /** We should only show the skip option if the submit button is being shown */\n !hideSubmit &&\n /** And if this is not the last step of the form */\n progress !== 100 &&\n /** And if none of the fields for the current step have any validation */\n fields.every(\n (field) =>\n field.validations === undefined || field.validations.length === 0\n ),\n [hideSubmit, fields, progress]\n );\n\n if (isLoadingForm) {\n return (\n <section\n data-testid={`${formId}-${pageId}-stepper-form`}\n className=\"min-h-[calc(100vh-60px)] md:min-h-[calc(100vh-110px)]\"\n >\n <ProgressBar percentage={0} classes=\"mt-6 md:mt-8\" />\n <PageWrapper classes=\"flex px-6 sm:px-8 md:px-16 pt-12 md:pt-16 grid grid-cols-4 sm:grid-cols-6 md:grid-cols-12 gap-x-4 sm:gap-x-6 md:gap-x-8\">\n <div className=\"text-center col-span-4 sm:col-span-6 md:col-span-8 md:col-start-3\">\n <div className=\"flex items-center justify-center w-full\">\n <Loading title=\"\" />\n </div>\n </div>\n </PageWrapper>\n </section>\n );\n }\n\n return (\n <section\n data-testid={`${formId}-${pageId}-stepper-form`}\n className=\"min-h-[calc(100vh-60px)] md:min-h-[calc(100vh-110px)]\"\n >\n <ProgressBar percentage={progress} classes=\"mt-6 md:mt-8\" />\n <PageWrapper classes=\"px-6 sm:px-8 md:px-16 pt-12 md:pt-16 grid grid-cols-4 sm:grid-cols-6 md:grid-cols-12 gap-x-4 sm:gap-x-6 md:gap-x-8\">\n <div className=\"text-center col-span-4 sm:col-span-6 md:col-span-8 md:col-start-3\">\n <Paragraph size=\"overline\" font=\"petco\">\n {formOverline}\n </Paragraph>\n <Heading\n size=\"h1\"\n font=\"petco\"\n className=\"stepperForm-heading mb-3 text-mkNavy-400 text-h3\"\n >\n {formTitle}\n </Heading>\n <Paragraph size=\"body4\" className=\"mb-9\">\n {formDescription}\n </Paragraph>\n </div>\n\n <form\n className=\"flex flex-col col-span-4 sm:col-start-2 md:col-start-5 text-center mb-[100px]\"\n onSubmit={handleSubmit((data) => submitForm(data))}\n >\n {fields.map((field) => (\n <FieldBuilder\n formData={formData}\n key={field.name}\n {...field}\n register={register}\n control={control}\n errors={errors[field.name]}\n forwardHandler={handleSubmit((data) => submitForm(data))}\n backHandler={backButtonHandler}\n formStorage={formStorage.current}\n setError={setError}\n setHideSubmit={setHideSubmitStepperForm}\n />\n ))}\n {hideSubmit || (\n <Button\n data-testid=\"stepper-form-submit-button\"\n type=\"submit\"\n size=\"md\"\n variant=\"light\"\n color=\"primary\"\n className=\"mt-4 mx-auto\"\n disabled={!isValid || submitButtonDisabled}\n loading={loading}\n >\n {progress === 100\n ? submitLabel || defaultSubmitLabel\n : 'Continue'}\n </Button>\n )}\n {showSkipOption && (\n <Paragraph\n size=\"body5\"\n className=\"mt-3 mx-auto text-neutral-800 underline hover:cursor-pointer hover:no-underline\"\n onClick={() => submitForm({})}\n data-testid=\"stepper-form-skip-button\"\n >\n Skip\n </Paragraph>\n )}\n </form>\n </PageWrapper>\n </section>\n );\n};\n\nexport default StepperFormTemplate;\n","export const notificationsHeader = 'New Match Alerts';\nexport const notificationsDescription =\n 'We are searching for your pet on Petco Love Lost, Nextdoor, and Neighbors. Turn on alerts to be notified of new matches.';\nexport const notificationsInfo =\n 'We still encourage you to run photo, distance, and microchip ID searches regularly.';\n\nexport const microchipLostFoundDescription =\n 'Please provide the microchip ID so we can notify you immediately if we have a match.';\n\nexport const microchipSafeDescription =\n 'Please provide the microchip ID so we can notify you of a match immediately if your pet ever goes missing.';\n","/**\n * This copy will be displayed with phone inputs to tell the user about our\n * privacy policy and how we'll use their phone number.\n *\n * @constant {string}\n */\nexport const phonePrivacyDisclosure =\n \"We'll never share your number publicly and will only contact you with updates about the pet you register.\";\n\n/**\n * This copy will be displayed with location inputs to tell the user about our\n * privacy policy and how we'll use their location.\n *\n * @constant {string}\n */\nexport const locationPrivacyDisclosure =\n \"We'll never publicly display your location and will only use it to help with your search.\";\n","/* eslint-disable jsdoc/tag-lines */\n/**\n * Determine if the form should use the feature order or the default page order.\n * NOTE- This function will only return the first feature order that matches a\n * feature flag.\n *\n * @example\n * if you have the following feature flags: ['flag1', 'flag2', 'flag3']\n * and the following feature orders: ['flag2', 'flag3']\n * this code will return 'flag2'\n *\n * @param {string[]} featureFlags - The feature flags active in the application\n * @param {string[]} featureOrders - The feature orders for the form\n * @returns {string | null} - Returns the feature order or null if the default\n * order should be used\n */\nexport const useFeatureOrder = (\n featureFlags: string[] | null,\n featureOrders?: string[]\n): string | null => {\n if (!featureFlags || !featureOrders) {\n return null;\n }\n // If any featureOrders item matches a featureFlags item return that item, otherwise return null\n const intersection = featureFlags.filter((element) =>\n featureOrders.includes(element)\n );\n\n if (intersection[0]) {\n return intersection[0];\n }\n return null;\n};\n","/* eslint-disable jsdoc/tag-lines */\nimport { tomorrow } from '@/lib/utils/helpers/dateHelpers/dates';\nimport { useFeatureOrder } from '@/lib/utils/helpers/formHelpers/featureFlagOrder';\nimport maybeCallFunctionWithParams from '@/lib/utils/helpers/maybeCallFunctionWithParams/maybeCallFunctionWithParams';\nimport {\n createContext,\n Dispatch,\n ReactNode,\n useContext,\n useMemo,\n useReducer,\n} from 'react';\nimport InitConfiguration, {\n FormTypes,\n MultiPageFormConfiguration,\n MultiPageFormConfigurationData,\n MultiPageFormConfigurationPageContent,\n MultiPageFormConfigurationPageContentWithValuesOrGetters,\n PageTypes,\n StorageTypes,\n} from './configs/Configuration';\n\n/**\n * Multi Page Form Action Types Actions Allowed for Toast\n *\n * @typedef\n */\nexport type MultiPageFormActionType = 'NEXT_PAGE';\n\n/**\n * The allowed keys for the stored Form Data object\n *\n * @typedef\n */\nexport type FormTypeData = `${FormTypes}-data`;\n\n/**\n * The allowed keys for the stored Form Progress object\n *\n * @typedef\n */\nexport type FormProgressType = `${FormTypes}-progress`;\n\n/**\n * Multi Page Form State Interface Interface for the Multi Page Form State\n *\n * @interface\n */\nexport interface IMultiPageFormState {\n /** The forms to be used in the Multi Page Form */\n forms: MultiPageFormConfiguration;\n}\n\n/**\n * Load All Form Data Builds out the form data from the storage adapter\n * specified by each form\n *\n * @returns {MultiPageFormConfigurationData} - Returns the form data\n */\nexport const loadAllFormData = () => {\n const config = InitConfiguration;\n Object.keys(config).forEach((form) => {\n const storage = config[form as FormTypes].storage;\n if (storage) {\n const loadedData = storage.get(form);\n if (loadedData) {\n config[form as FormTypes].data =\n loadedData as MultiPageFormConfigurationData;\n }\n }\n });\n return config;\n};\n\n/**\n * MultiPageForm State Initial Value\n *\n * @constant\n */\nexport const multiPageFormInitialState: IMultiPageFormState = {\n forms: loadAllFormData(),\n};\n\n/**\n * MultiPage Init Config\n *\n * @param {IMultiPageFormState} state - State of the forms\n * @returns {object} - Returns the initial state of the forms\n */\nexport const initConfig = (state: IMultiPageFormState) => ({\n ...multiPageFormInitialState,\n ...state,\n});\n\n/**\n * IToastAction Interface for Toast Actions\n *\n * @interface\n */\nexport interface IMultiPageFormAction {\n /** The type of action to be performed. */\n type: MultiPageFormActionType;\n /** The payload for the action. */\n data: object;\n /** The id of the page on the form. */\n pageId: PageTypes;\n /** The name of the form. */\n formId: FormTypes;\n}\n\n/**\n * Interface for get next and prev pages functions.\n *\n * @interface\n */\ninterface IGetPage {\n /** Id of the page currently on */\n pageId: PageTypes;\n /** The name of the form */\n formId: FormTypes;\n /** The order of the pages in the form */\n order: PageTypes[];\n /** The path to prepend to the page id */\n prependPath?: string;\n /** The navigation mode */\n renderMode?: 'server' | 'client';\n}\n\n/**\n * GetNextPage Get the Next Page of the Form based on the current page\n *\n * @param {IGetPage} props - The props for the getNextPage function\n * @returns {string} - Returns the next page id\n */\nexport const getNextPage = ({\n pageId,\n formId,\n order,\n prependPath = '',\n renderMode,\n}: IGetPage): string | null => {\n const index = order.indexOf(pageId);\n if (index + 1 >= order.length) {\n return null;\n }\n\n const urlSeparator = renderMode === 'client' ? '?step=' : '/';\n\n return `${prependPath}/${formId}${urlSeparator}${order[index + 1]}`;\n};\n\n/**\n * GetPreviousPage Get the Previous Page of the Form based on the current page\n *\n * @param {IGetPage} props - The props for the getNextPage function\n * @returns {string} - Returns the next page id\n */\nexport const getPreviousPage = ({\n pageId,\n formId,\n order,\n prependPath = '',\n renderMode,\n}: IGetPage): string => {\n const index = order.indexOf(pageId);\n if (index - 1 < 0) {\n return `${prependPath}/${formId}/`;\n }\n\n const urlSeparator = renderMode === 'client' ? '?step=' : '/';\n\n return `${prependPath}/${formId}${urlSeparator}${order[index - 1]}`;\n};\n\n/**\n * Get Progress Percentage Gets the current progress of the form\n *\n * @param {string} pageId - Id of the page currently on\n * @param {PageTypes[]} order - The order of pages in form\n * @returns {number} - Returns the progress percentage\n */\nconst getProgressPercentage = (\n pageId: PageTypes,\n order: PageTypes[]\n): number => {\n const progressBarPercent = 100 / order.length;\n const currentPage = order.indexOf(pageId) + 1;\n return currentPage * progressBarPercent;\n};\n\n/**\n * IMultiPageFormContext Interface for the Multi Page Form Context\n *\n * @interface\n */\ninterface IMultiPageFormContext {\n /** The id of the form */\n formId: FormTypes;\n /** The id of the page on the form */\n pageId: PageTypes;\n /** The progress of the form */\n progress: number;\n /** The next page of the form */\n nextUrl: string | null;\n /** The next page of the form */\n previousUrl: string;\n /** The validity of the progress */\n validProgress: boolean;\n /** The data of the form */\n formData: MultiPageFormConfigurationData;\n /** The content of the form */\n formContent: MultiPageFormConfigurationPageContent;\n /** The order of the form */\n formOrder: PageTypes[];\n /** The state of the form */\n state: IMultiPageFormState;\n /**\n * The form navigation mode.\n *\n * - `server`: the url path is used to navigate form steps.\n * - `client`: a url query param is used to navigate form steps.\n *\n * @example\n * server: /form-id/form-step\n * client: /form-id/?step=form-step\n *\n * @default 'server'\n */\n renderMode?: 'server' | 'client';\n /** The dispatch of the form */\n dispatch: Dispatch<IMultiPageFormAction>;\n}\n\n/**\n * Multi Page Form Context Used for creating the Context Object for the\n * useMultiPageForm Hook\n *\n * @constant\n */\nexport const MultiPageFormContext = createContext<IMultiPageFormContext>({\n formId: 'i-lost-a-pet',\n pageId: 'location',\n progress: 0,\n nextUrl: '',\n previousUrl: '',\n validProgress: true,\n formData: {},\n formContent: {\n title: '',\n fields: [],\n },\n formOrder: [],\n state: multiPageFormInitialState,\n renderMode: 'server',\n /** @returns {null} - Returns null */\n dispatch: (): null => null,\n});\n\n/**\n * Save Form Data to Storage Class Saves the form data to the storage adapter\n * specified by the form\n *\n * @param {object} data - The data to be saved\n * @param {FormTypes} formId - The name of the form\n * @param {StorageTypes} storageAdapter - The Storage Adapter to be used\n */\nconst storeFormData = (\n data: object,\n formId: FormTypes,\n storageAdapter: StorageTypes\n) => {\n storageAdapter.set(formId, data, { expires: tomorrow });\n};\n\n/**\n * Clear Form Data from Storage Class *\n *\n * @param {FormTypes} formId - The name of the form\n * @param {StorageTypes} storageAdapter - The Storage Adapter to be used\n */\nexport const clearFormData = (\n formId: FormTypes | FormTypeData | FormProgressType,\n storageAdapter: StorageTypes\n) => {\n storageAdapter.delete(formId);\n};\n\n/**\n * We stored the form data in three different places. This function will try to\n * clear `${formId}-progress`, `${formId}-data`, and `${formId}` from the\n * storage adapter\n *\n * @param {FormTypes} formId - The name of the form\n * @param {StorageTypes} storageAdapter - The Storage Adapter to be used\n */\nexport const clearAllFormRelatedData = (\n formId: FormTypes,\n storageAdapter: StorageTypes\n) => {\n clearFormData(formId, storageAdapter);\n clearFormData(`${formId}-progress`, storageAdapter);\n};\n\n/**\n * IStorageProgress Interface for the Storage Progress Object that is saved to\n * the storage adapter\n *\n * @interface\n */\ninterface IStorageProgress {\n /** The current page of the form */\n current: PageTypes;\n}\n\n/**\n * Store Form Progress to Storage Class Saves the form progress to the storage\n * adapter specified by the form\n *\n * @param {FormTypes} formId - The name of the form\n * @param {PageTypes} pageId - The page to be saved\n * @param {StorageTypes} storageAdapter - The Storage Adapter to be used\n */\nexport const storeFormProgress = (\n formId: FormTypes,\n pageId: PageTypes,\n storageAdapter: StorageTypes\n) => {\n const progress: IStorageProgress = {\n current: pageId,\n };\n storageAdapter.set(`${formId}-progress`, progress, { expires: tomorrow });\n};\n\n/**\n * Get Form Progress from Storage Class Gets the form progress from the storage\n * adapter specified by the form\n *\n * @param {FormTypes} formId - The name of the form\n * @param {StorageTypes} storageAdapter - The Storage Adapter to be used\n * @returns {PageTypes | null} - Returns the current page of the form\n */\nconst getFormProgress = (\n formId: FormTypes,\n storageAdapter: StorageTypes\n): PageTypes | null => {\n const progress = storageAdapter.get(`${formId}-progress`) as IStorageProgress;\n if (progress) {\n return progress.current;\n }\n return null;\n};\n\n/**\n * ICheckProgressOrder\n *\n * @interface\n */\ninterface ICheckProgressOrder {\n /** The Id of the current form */\n formId: FormTypes;\n /** The current page id */\n pageId: PageTypes;\n /** The order of the form pages */\n order: PageTypes[];\n /** The storage class associated with this form */\n storage?: StorageTypes;\n}\n\n/**\n * Check if Form Order is Valid Checks if the order of the pages in the form is\n * valid\n *\n * @param {ICheckProgressOrder} props - The props\n * @returns {boolean} - Returns true if the order is valid\n */\nexport const checkProgressOrder = ({\n formId,\n pageId,\n order,\n storage,\n}: ICheckProgressOrder) => {\n /** Get Order and Storage from State Get the current page from storage */\n const currentIndex = order.indexOf(pageId);\n // We are on first Page always return true\n if (currentIndex == 0) {\n return true;\n }\n // If Storage is Set\n if (storage) {\n // Get Progress from Storage\n const progress = getFormProgress(formId, storage);\n // If Progress is Set\n if (progress) {\n const progressIndex = order.indexOf(progress);\n const currentIndex = order.indexOf(pageId);\n // If the current page is at the proper index\n if (progressIndex + 1 >= currentIndex) {\n return true;\n // The current page is not at the proper index\n } else {\n return false;\n }\n // Progress is not set\n } else {\n return false;\n }\n // If Storage is not set\n } else {\n return false;\n }\n};\n\n/**\n * Multi Page Form Reducer Reducer for adding and removing data from the Multi\n * Page Form\n *\n * @param {IMultiPageFormState} state - The state of the Multi Page Form\n * @param {IMultiPageFormAction} action -The action to be performed on the Multi\n * Page Form\n * @returns {IMultiPageFormState} - Returns the new state of the Multi Page Form\n */\nexport function MultiPageFormReducer(\n state: IMultiPageFormState,\n action: IMultiPageFormAction\n): IMultiPageFormState {\n switch (action.type) {\n case 'NEXT_PAGE': {\n const { formId, pageId, data } = action;\n // Get Past Data\n const pastData = state.forms[formId].data;\n // Merge Past Data with New Data\n const newData = { ...pastData, ...data };\n // Save Data to Storage\n const storageAdapter = state.forms[formId].storage;\n if (storageAdapter) {\n storeFormData(newData, formId, storageAdapter);\n storeFormProgress(formId, pageId, storageAdapter);\n }\n return {\n ...state,\n forms: {\n ...state.forms,\n [formId]: {\n ...state.forms[formId],\n data: {\n ...state.forms[formId].data,\n ...data,\n },\n },\n },\n };\n }\n }\n}\n\n/**\n * IFormContext Interface for the Form Context\n *\n * @interface\n */\nexport interface IFormContext {\n /** Key value pairs of the form context */\n [key: string]: number | string | boolean;\n}\n\n/**\n * IUseInitData The interface for what the useInitData hook will be expecting\n *\n * @interface\n */\nexport interface IUseInitData {\n /** The name of the form */\n formId: FormTypes;\n /** The optional form context */\n formContext?: IFormContext;\n}\n\n/**\n * Custom hook to initialize the data for the Multi Page Form\n *\n * @param {IUseInitData} props - The props for the useInitData hook\n * @returns {IMultiPageFormState} - Returns the initial state of the Multi Page\n */\nexport const useInitData = ({\n formId,\n formContext,\n}: IUseInitData): IMultiPageFormState => {\n /**\n * Initial State\n *\n * @constant {IMultiPageFormState} initialState\n */\n const initialState = useMemo(\n /**\n * Create the initial state of the Multi Page Form\n *\n * @returns {MultiPageFormConfiguration} - Returns the initial state of the\n * Multi Page Form\n */\n (): MultiPageFormConfiguration => {\n // Load All Form Data\n const forms = loadAllFormData();\n\n // Try to get a storage adapter for the current form\n const storageAdapter = forms[formId].storage;\n\n // Add a context it can be added to the form\n if (formContext && storageAdapter) {\n // Get the form data\n const formData = forms[formId].data;\n storeFormData(\n {\n ...formData,\n formContext: formContext,\n },\n formId,\n storageAdapter\n );\n }\n return loadAllFormData();\n },\n [formContext, formId]\n );\n return { forms: initialState };\n};\n\n/**\n * IMultiFormProvider The Interface for what the MultiPageForm Provider will be\n * expecting\n *\n * @interface\n */\nexport interface IMultiPageFormProvider {\n /** The name of the form */\n formId: FormTypes;\n /** The id of the page on the form */\n pageId: PageTypes;\n /** The children of the MultiPageForm Provider */\n children: ReactNode;\n /** Prepend Path */\n prependPath?: string;\n /** The optional form context */\n formContext?: IFormContext;\n /** The feature flags active in the application */\n featureFlags?: string[] | null;\n /**\n * The form navigation mode.\n *\n * - `server`: the url path is used to navigate form steps.\n * - `client`: a url query param is used to navigate form steps.\n *\n * @example\n * server: /form-id/form-step\n * client: /form-id/?step=form-step\n *\n * @default 'server'\n */\n renderMode?: 'server' | 'client';\n}\n\n/**\n * Get values from form content getters\n *\n * @param {MultiPageFormConfigurationData} formData - The form data\n * @param {MultiPageFormConfigurationPageContentWithValuesOrGetters} formContent\n * - The form content\n *\n * @returns {MultiPageFormConfigurationData} - The form content\n */\nexport const withFormContentValues = (\n formData: MultiPageFormConfigurationData,\n formContent?: MultiPageFormConfigurationPageContentWithValuesOrGetters\n): MultiPageFormConfigurationPageContent => {\n /**\n * @property {string} title The title of the form\n * @property {string} description The description of the form\n */\n const { title, description, ...rest } = formContent ?? {};\n\n return {\n title: maybeCallFunctionWithParams<string, MultiPageFormConfigurationData>(\n formData,\n title\n ),\n description: maybeCallFunctionWithParams<\n string | JSX.Element | undefined,\n MultiPageFormConfigurationData\n >(formData, description),\n ...rest,\n } as MultiPageFormConfigurationPageContent;\n};\n\n/**\n * Multi Page Form Provider Used to provide the ability to use Multi Page Forms\n * on the current page.\n *\n * @param {IMultiPageFormProvider} props - The props for the MultiPageForm\n * Provider\n * @returns {MultiPageFormContext} ToastContext\n */\nexport function MultiPageFormProvider({\n formId,\n pageId,\n featureFlags = null,\n children,\n prependPath,\n formContext,\n renderMode = 'server',\n}: IMultiPageFormProvider): JSX.Element {\n // Initialize the Data\n const initialState = useInitData({ formId, formContext });\n // Get the State and Dispatch\n const [state, dispatch] = useReducer(MultiPageFormReducer, initialState);\n\n // Form Data\n const formData = state.forms[formId].data;\n // Form Content\n const formContent = state.forms[formId].content[\n pageId\n ] as MultiPageFormConfigurationPageContentWithValuesOrGetters;\n\n /** Determine the order of the form according the feature flag that is enabled. */\n const featureOrder = state.forms[formId].featureOrder;\n const useFeature = useFeatureOrder(\n featureFlags,\n Object.keys(featureOrder || {})\n );\n let formOrder = state.forms[formId].featureOrder?.[useFeature || ''];\n if (!formOrder) {\n formOrder = state.forms[formId].order;\n }\n\n // Check the Progress Order\n const validProgress = checkProgressOrder({\n formId,\n pageId,\n order: formOrder,\n storage: state.forms[formId].storage,\n });\n // Get Next Page\n const nextUrl = getNextPage({\n pageId,\n formId,\n order: formOrder,\n prependPath,\n renderMode: renderMode,\n });\n // Get Previous Page\n const previousUrl = getPreviousPage({\n pageId,\n formId,\n order: formOrder,\n prependPath,\n renderMode: renderMode,\n });\n\n // Get Progress Bar Percentage\n const progress = getProgressPercentage(pageId, formOrder);\n return (\n <MultiPageFormContext.Provider\n value={{\n formId,\n pageId,\n progress,\n nextUrl,\n previousUrl,\n formData,\n formContent: withFormContentValues(formData, formContent),\n formOrder,\n validProgress,\n state,\n renderMode: renderMode,\n dispatch,\n }}\n >\n {children}\n </MultiPageFormContext.Provider>\n );\n}\n\n/**\n * Use Multi Page Form Context Used to allow components to interact with the\n * Multi Page Form Context\n *\n * @returns {IMultiPageFormContext} Multi Page Form Context\n */\nexport const useMultiPageFormContext = (): IMultiPageFormContext =>\n useContext(MultiPageFormContext);\n","import LabelChip from '@/components/atoms/LabelChip/LabelChip';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport {\n microchipSafeDescription,\n notificationsDescription,\n notificationsHeader,\n notificationsInfo,\n} from '@/lib/constants/constants/forms';\nimport { phonePrivacyDisclosure } from '@/lib/constants/constants/privacy';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport {\n adopterPetPhotoStorageKey,\n IAdopterPetPhotoStorage,\n} from '@/pages/activate-account/[id]';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage for the Activate Account Multi-step Form.\n *\n * @constant\n * @type {SessionStorage}\n */\nexport const storage: SessionStorage = new SessionStorage();\n\n/**\n * The submit label for the form.\n *\n * @constant {string}\n */\nexport const submitLabel = 'Submit';\n\n/** The handler for the image change button of the Cropper */\n/**\n * This function single purpose is to overwrite the default behavior of this\n * action which is going to the previous step of the form. We want this to be\n * handled by the ImageUploadHandlerGroup which will bring back the\n * ImageUploader.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst onChangeImageHandler = () => {};\n\nconst petPhoto = storage.get(\n adopterPetPhotoStorageKey\n) as IAdopterPetPhotoStorage;\n\n/**\n * Activate Account Configuration The Configuration for the Activate Account\n * Multi-step Form .\n *\n * @constant\n */\nconst ActivateAccountConfiguration: MultiPageFormConfigurationItem = {\n order: [\n 'name',\n 'phone',\n 'upload-photo',\n 'pet-name',\n 'pet-sex',\n 'location',\n 'pet-microchip',\n 'password-alerts',\n ],\n data: {},\n storage,\n content: {\n name: {\n title: 'Welcome to Petco Love Lost',\n description:\n 'Thanks for choosing to adopt a pet! Register them on Petco Love Lost now in case they ever go missing later.',\n fields: [\n {\n label: 'First Name',\n name: 'firstName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'First Name is required',\n },\n ],\n },\n {\n label: 'Last Name',\n name: 'lastName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'Last Name is required',\n },\n ],\n },\n ],\n },\n phone: {\n title: \"What's your number?\",\n description: phonePrivacyDisclosure,\n fields: [\n {\n label: 'Phone',\n name: 'phone',\n type: 'tel',\n validations: [\n {\n type: 'required',\n message: 'Phone number is required',\n },\n ],\n },\n ],\n },\n 'upload-photo': {\n title: 'Crop photo',\n description:\n 'Crop the photo around the pet’s face and body for best results. Or you can upload a new photo below.',\n hideSubmit: true,\n fields: [\n {\n label: '',\n name: 'photo',\n type: 'uploadPhoto',\n fieldOptions: {\n imageUploadHandler: {\n quality: 0.8,\n outputType: 'image/jpeg',\n aspectRatio: 1,\n uploadedImage: petPhoto?.photo,\n onChangeImage: onChangeImageHandler,\n },\n },\n },\n ],\n },\n 'pet-name': {\n title: 'Now let’s confirm or update your pet’s name',\n fields: [\n {\n label: 'Pet name',\n name: 'petName',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'required',\n message: 'Pet Name is required',\n },\n ],\n fieldOptions: {},\n },\n ],\n },\n 'pet-sex': {\n title: '{{petName}} is a',\n fields: [\n {\n label: '',\n name: 'typeOfPet',\n type: 'inputButtons',\n classes: 'mb-5',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Female',\n active: false,\n icon: 'crown',\n value: 'female',\n },\n {\n text: 'Male',\n active: false,\n icon: 'bowTie',\n value: 'male',\n },\n ],\n },\n },\n validations: [],\n },\n ],\n },\n location: {\n title: 'Where do you and {{petName}} live?',\n description:\n 'Please provide a specific street address. We will never share your exact location.',\n fields: [\n {\n label: 'Address',\n name: 'address',\n type: 'locationGoogle',\n validations: [\n {\n type: 'required',\n message: 'Address is required',\n },\n ],\n },\n ],\n },\n 'pet-microchip': {\n title: 'Confirm or update your pet’s Microchip ID',\n description: microchipSafeDescription,\n fields: [\n {\n label: 'Enter microchip ID',\n name: 'microchip',\n type: 'microchip',\n validations: [],\n },\n ],\n },\n 'password-alerts': {\n title: 'Create password',\n submitLabel,\n fields: [\n {\n label: 'Password',\n name: 'password',\n type: 'password',\n validations: [\n {\n type: 'required',\n message: 'Password is required',\n },\n ],\n },\n {\n classes: 'pt-3',\n label: '',\n name: 'node',\n type: 'node',\n fieldOptions: {\n node: {\n options: (\n <div className=\"flex flex-col text-left w-full\">\n <div className=\"flex flex-row h-[30px] mb-1 items-center space-x-2\">\n <Paragraph styling=\"bold\" size=\"body4\">\n {notificationsHeader}\n </Paragraph>\n <LabelChip text=\"BETA\" colorShade={200} colorType=\"info\" />\n </div>\n <Paragraph size=\"body5\">{notificationsDescription}</Paragraph>\n </div>\n ),\n },\n },\n },\n {\n name: 'top divider',\n label: '',\n type: 'divider',\n classes: 'mt-4 mb-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Text alerts',\n name: 'textAlerts',\n type: 'toggle',\n },\n {\n name: 'mid divider',\n label: '',\n type: 'divider',\n classes: 'my-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Email alerts',\n name: 'emailAlerts',\n type: 'toggle',\n },\n {\n name: 'bottom divider',\n label: '',\n type: 'divider',\n classes: 'mt-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: '',\n name: 'node-info',\n type: 'node',\n classes: 'mt-3 mb-8',\n fieldOptions: {\n node: {\n options: (\n <Paragraph\n styling=\"italic\"\n size=\"overline\"\n className=\"text-left\"\n >\n {notificationsInfo}\n </Paragraph>\n ),\n },\n },\n },\n ],\n },\n },\n};\n\nexport default ActivateAccountConfiguration;\n","import { microchipLostFoundDescription } from '@/lib/constants/constants/forms';\nimport LocalStorage from '@/lib/utils/storage/local-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage for the Add Pet Start Multi-step Form.\n *\n * @constant\n * @type {LocalStorage}\n */\nexport const storage: LocalStorage = new LocalStorage();\n\n/**\n * Add Pet Found Configuration The Configuration for the Create Account Start\n * Multi-step Form .\n *\n * @constant\n */\nconst AddPetFoundConfiguration: MultiPageFormConfigurationItem = {\n order: [\n 'location',\n 'cross-streets',\n 'pet-date',\n 'pet-sex',\n 'pet-microchip',\n 'pet-description',\n ],\n data: {},\n storage,\n content: {\n location: {\n title: 'Where did you find them?',\n description:\n 'Please provide a specific address. We will never share your exact location to the public.',\n fields: [\n {\n label: 'Found near (address)',\n name: 'address',\n type: 'locationGoogle',\n fieldOptions: {\n locationGoogle: {\n displayStaticMap: true,\n },\n },\n validations: [\n {\n type: 'required',\n message: 'Address is required',\n },\n ],\n },\n ],\n },\n 'cross-streets': {\n title: 'What are the nearest cross streets?',\n description:\n 'Please provide the nearest cross streets and a landmark if there’s one nearby (e.g. 3rd and Main by the grocery store).',\n fields: [\n {\n label: 'Nearest cross streets, landmark. etc.',\n name: 'crossStreets',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'max',\n message: 'Cross streets must be at most 60 characters',\n value: 60,\n },\n ],\n },\n ],\n },\n 'pet-date': {\n title: 'When did you find them?',\n description:\n 'It may take 24 hours for this pet to be reported in our database - check back often!',\n fields: [\n {\n label: 'Found date (mm/dd/yyyy)',\n name: 'foundDate',\n type: 'date',\n validations: [\n {\n type: 'required',\n message: 'Found Date is required',\n },\n ],\n },\n ],\n },\n 'pet-sex': {\n title: 'This pet is a',\n fields: [\n {\n label: '',\n name: 'typeOfPet',\n type: 'inputButtons',\n classes: 'mb-5',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Female',\n active: false,\n icon: 'crown',\n value: 'female',\n },\n {\n text: 'Male',\n active: false,\n icon: 'bowTie',\n value: 'male',\n },\n {\n text: 'Unknown',\n active: false,\n icon: 'questionCircle',\n value: 'unknown',\n },\n ],\n },\n },\n },\n ],\n },\n 'pet-microchip': {\n title: 'What is their Microchip ID?',\n description: microchipLostFoundDescription,\n fields: [\n {\n label: 'Enter microchip ID (optional)',\n name: 'microchip',\n type: 'microchip',\n validations: [],\n },\n ],\n },\n 'pet-description': {\n title: 'What are they like?',\n description: 'Describe their personality, physical traits, etc.',\n submitLabel: 'Add Pet',\n fields: [\n {\n label: 'Description (optional)',\n name: 'description',\n type: 'textarea',\n fieldOptions: {\n textArea: {\n rows: 5,\n floatingLabel: true,\n },\n },\n validations: [\n {\n type: 'blockProfanity',\n },\n ],\n },\n ],\n },\n },\n};\nexport default AddPetFoundConfiguration;\n","import { microchipLostFoundDescription } from '@/lib/constants/constants/forms';\nimport LocalStorage from '@/lib/utils/storage/local-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage for the Add Pet Start Multi-step Form.\n *\n * @constant\n * @type {LocalStorage}\n */\nexport const storage: LocalStorage = new LocalStorage();\n\n/**\n * Add Pet Lost Configuration The Configuration for the Create Account Start\n * Multi-step Form .\n *\n * @constant\n */\nconst AddPetLostConfiguration: MultiPageFormConfigurationItem = {\n order: [\n 'pet-name',\n 'location',\n 'cross-streets',\n 'pet-date',\n 'pet-sex',\n 'pet-microchip',\n 'pet-description',\n ],\n data: {},\n storage,\n content: {\n 'pet-name': {\n title: 'What is your pet’s name?',\n fields: [\n {\n label: 'Pet name',\n name: 'petName',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'required',\n message: 'Pet Name is required',\n },\n ],\n },\n ],\n },\n location: {\n title: 'Where did {{petName}} get lost?',\n description:\n 'Please provide a specific address. We will never share your exact location to the public.',\n fields: [\n {\n label: 'Lost near (address)',\n name: 'address',\n type: 'locationGoogle',\n fieldOptions: {\n locationGoogle: {\n displayStaticMap: true,\n },\n },\n validations: [\n {\n type: 'required',\n message: 'Address is required',\n },\n ],\n },\n ],\n },\n 'cross-streets': {\n title: 'What are the nearest cross streets?',\n description:\n 'Please provide the nearest cross streets and a landmark if there’s one nearby (e.g. 3rd and Main by the grocery store).',\n fields: [\n {\n label: 'Nearest cross streets, landmark. etc.',\n name: 'crossStreets',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'max',\n message: 'Cross streets must be at most 60 characters',\n value: 60,\n },\n ],\n },\n ],\n },\n 'pet-date': {\n title: 'When was {{petName}} last seen?',\n description:\n 'It may take 24 hours for this pet to be reported in our database - check back often!',\n fields: [\n {\n label: 'Lost date (mm/dd/yyyy)',\n name: 'lostDate',\n type: 'date',\n validations: [\n {\n type: 'required',\n message: 'Lost date is required',\n },\n ],\n },\n ],\n },\n 'pet-sex': {\n title: '{{petName}} is a',\n fields: [\n {\n label: '',\n name: 'typeOfPet',\n type: 'inputButtons',\n classes: 'mb-5',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Female',\n active: false,\n icon: 'crown',\n value: 'female',\n },\n {\n text: 'Male',\n active: false,\n icon: 'bowTie',\n value: 'male',\n },\n {\n text: 'Unknown',\n active: false,\n icon: 'questionCircle',\n value: 'unknown',\n },\n ],\n },\n },\n },\n ],\n },\n 'pet-microchip': {\n title: \"What is {{petName}}'s Microchip ID?\",\n description: microchipLostFoundDescription,\n fields: [\n {\n label: 'Enter microchip ID (optional)',\n name: 'microchip',\n type: 'microchip',\n validations: [],\n },\n ],\n },\n 'pet-description': {\n title: 'What is {{petName}} like?',\n description: 'Describe their personality, physical traits, etc.',\n submitLabel: 'Add Pet',\n fields: [\n {\n label: 'Description (optional)',\n name: 'description',\n type: 'textarea',\n fieldOptions: {\n textArea: {\n rows: 5,\n floatingLabel: true,\n },\n },\n validations: [\n {\n type: 'blockProfanity',\n },\n ],\n },\n ],\n },\n },\n};\nexport default AddPetLostConfiguration;\n","import { microchipSafeDescription } from '@/lib/constants/constants/forms';\nimport LocalStorage from '@/lib/utils/storage/local-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage for the Add Pet Start Multi-step Form.\n *\n * @constant\n * @type {LocalStorage}\n */\nexport const storage: LocalStorage = new LocalStorage();\n\n/**\n * Add Pet Safe Configuration The Configuration for the Create Account Start\n * Multi-step Form .\n *\n * @constant\n */\nconst AddPetSafeConfiguration: MultiPageFormConfigurationItem = {\n order: [\n 'pet-name',\n 'location',\n 'pet-sex',\n 'pet-microchip',\n 'pet-description',\n ],\n data: {},\n storage,\n content: {\n 'pet-name': {\n title: 'What is your pet’s name?',\n fields: [\n {\n label: 'Pet name',\n name: 'petName',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'required',\n message: 'Pet Name is required',\n },\n ],\n },\n ],\n },\n location: {\n title: 'Where do you and {{petName}} live?',\n description:\n 'Please provide a specific street address. We will never share your exact location.',\n fields: [\n {\n label: 'Street address',\n name: 'address',\n type: 'locationGoogle',\n fieldOptions: {\n locationGoogle: {\n requiredAddressComponents: ['streetAddress'],\n },\n },\n validations: [\n {\n type: 'required',\n message: 'Address is required',\n },\n ],\n },\n ],\n },\n 'pet-sex': {\n title: '{{petName}} is a',\n fields: [\n {\n label: '',\n name: 'typeOfPet',\n type: 'inputButtons',\n classes: 'mb-5',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Female',\n active: false,\n icon: 'crown',\n value: 'female',\n },\n {\n text: 'Male',\n active: false,\n icon: 'bowTie',\n value: 'male',\n },\n {\n text: 'Unknown',\n active: false,\n icon: 'questionCircle',\n value: 'unknown',\n },\n ],\n },\n },\n },\n ],\n },\n 'pet-microchip': {\n title: \"What is {{petName}}'s Microchip ID?\",\n description: microchipSafeDescription,\n fields: [\n {\n label: 'Enter microchip ID (optional)',\n name: 'microchip',\n type: 'microchip',\n validations: [],\n },\n ],\n },\n 'pet-description': {\n title: 'What is {{petName}} like?',\n submitLabel: 'Add Pet',\n description: 'Describe their personality, physical traits, etc.',\n fields: [\n {\n label: 'Description (optional)',\n name: 'description',\n type: 'textarea',\n fieldOptions: {\n textArea: {\n rows: 5,\n floatingLabel: true,\n },\n },\n validations: [\n {\n type: 'blockProfanity',\n },\n ],\n },\n ],\n },\n },\n};\nexport default AddPetSafeConfiguration;\n","import LocalStorage from '@/lib/utils/storage/local-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage for the Add Pet Start Multi-step Form.\n *\n * @constant\n * @type {LocalStorage}\n */\nexport const storage: LocalStorage = new LocalStorage();\n\n/**\n * Add Pet Start Configuration The Configuration for the Add Pet Start\n * Multi-step Form .\n *\n * @constant\n */\nconst AddPetStartConfiguration: MultiPageFormConfigurationItem = {\n order: ['upload-photo', 'pet-type'],\n data: {},\n storage,\n retainDataOnSubmit: true,\n content: {\n 'upload-photo': {\n title: 'Add pet photo',\n description:\n 'Photo quality will affect your search results. Please select a clear image of one pet looking directly at the camera.',\n hideSubmit: true,\n fields: [\n {\n label: 'Photo',\n name: 'photo',\n type: 'uploadPhoto',\n fieldOptions: {\n imageUploadHandler: {\n quality: 0.8,\n outputType: 'image/jpeg',\n aspectRatio: 1,\n },\n },\n validations: [\n {\n type: 'required',\n message: 'Pet Photo is required',\n },\n ],\n },\n ],\n },\n 'pet-type': {\n title: 'Nice pic! This pet is:',\n submitLabel: 'Continue',\n fields: [\n {\n label: '',\n name: 'petType',\n type: 'inputButtons',\n validations: [\n {\n type: 'required',\n message: 'Pet Type is required',\n },\n ],\n classes: 'mb-5',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Safe at Home',\n icon: 'home',\n value: 'safePet',\n active: false,\n },\n {\n text: 'Lost',\n icon: 'signPost',\n value: 'lostPet',\n active: false,\n },\n {\n text: 'Pet I found',\n icon: 'search',\n value: 'foundPet',\n active: false,\n },\n ],\n },\n },\n },\n ],\n },\n },\n};\n\nexport default AddPetStartConfiguration;\n","import LocalStorage from '@/lib/utils/storage/local-storage';\nimport { MultiPageFormConfigurationItem, PageTypes } from './Configuration';\n\n/**\n * The storage for the All Pets Multi-step Form.\n *\n * @constant\n * @type {LocalStorage}\n */\nexport const storage: LocalStorage = new LocalStorage();\n\n/**\n * The order of the pages in the All pets Multi-step Form.\n *\n * @constant {PageTypes[]} allPetsPage\n */\nexport const allPetsPage: PageTypes[] = ['location'];\n\n/**\n * All Pets Configuration Multi-step Form .\n *\n * @constant\n */\nconst AllPetsConfiguration: MultiPageFormConfigurationItem = {\n order: allPetsPage,\n data: {},\n storage,\n content: {\n location: {\n submitLabel: 'Search All Pets',\n title: 'Where are you located?',\n description:\n 'You may provide the specific address. We will never share your exact location.',\n fields: [\n {\n label: 'Search location (city, state or zip)',\n name: 'address',\n type: 'locationGoogle',\n validations: [\n {\n type: 'required',\n message: 'Address is required',\n },\n ],\n fieldOptions: {\n locationGoogle: {\n requiredAddressComponents: ['region', 'city', 'postalCode'],\n autocompleteTypes: ['geocode'],\n },\n },\n },\n ],\n },\n },\n};\nexport default AllPetsConfiguration;\n","import SessionStorage from '@/lib/utils/storage/session-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage to be used for the multi page form\n *\n * @constant {SessionStorage}\n */\nexport const storage = new SessionStorage();\n\n/**\n * Report a pet as lost Configuration\n *\n * @constant\n */\nconst ReportAsLostConfiguration: MultiPageFormConfigurationItem = {\n order: ['location', 'cross-streets', 'pet-date'],\n data: {},\n storage,\n content: {\n location: {\n title: `Where did your pet get lost?`,\n description:\n 'Please provide a specific address. We will never share your exact location to the public.',\n fields: [\n {\n label: 'Lost near (address)',\n name: 'address',\n type: 'locationGoogle',\n fieldOptions: {\n locationGoogle: {\n displayStaticMap: true,\n },\n },\n validations: [\n {\n type: 'required',\n message: 'Address is required',\n },\n ],\n },\n ],\n },\n 'cross-streets': {\n title: 'What are the nearest cross streets?',\n description:\n 'Please provide the nearest cross streets and a landmark if there’s one nearby (e.g. 3rd and Main by the grocery store).',\n fields: [\n {\n label: 'Nearest cross streets, landmark. etc.',\n name: 'crossStreets',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'max',\n message: 'Cross streets must be at most 60 characters',\n value: 60,\n },\n ],\n },\n ],\n },\n 'pet-date': {\n title: `When was your pet last seen?`,\n description:\n 'It may take 24 hours for this pet to be reported in our database - check back often!',\n fields: [\n {\n label: 'Lost date (mm/dd/yyyy)',\n name: 'date',\n type: 'date',\n validations: [\n {\n type: 'required',\n message: 'Lost Date is required',\n },\n ],\n },\n ],\n },\n },\n};\nexport default ReportAsLostConfiguration;\n","import SessionStorage from '@/lib/utils/storage/session-storage';\nimport { MultiPageFormConfigurationItem, PageTypes } from './Configuration';\n\nconst storage = new SessionStorage();\n\nconst pageOrder: PageTypes[] = ['location', 'photo', 'crop-photo'];\nconst featureFlagOrder: PageTypes[] = [\n 'location',\n 'pet-date',\n 'photo',\n 'crop-photo',\n];\n\n/**\n * I Lost A Pet Configuration The Configuration for the I Lost A Pet Multi-step\n * Form .\n *\n * @constant\n */\nconst TestConfiguration: MultiPageFormConfigurationItem = {\n order: pageOrder,\n featureOrder: {\n test_flag_date_filter: featureFlagOrder,\n },\n data: {},\n storage,\n content: {\n location: {\n overline: 'Step 1',\n title: 'Where did your pet get lost? {{address}}',\n defaults: {\n address: '123 Main St',\n },\n fields: [\n {\n label: 'Address',\n name: 'address',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'Address is required',\n },\n ],\n },\n ],\n },\n photo: {\n title: 'Add pet photo',\n description:\n 'Photo quality will affect your search results. Please select a clear image of one pet looking directly at the camera.',\n fields: [\n {\n label: 'Photo',\n name: 'photo',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'Photo is required',\n },\n ],\n },\n ],\n },\n 'crop-photo': {\n title: 'Crop photo',\n description:\n 'Photo quality will affect your search results. Please select a clear image of one pet looking directly at the camera.',\n\n fields: [\n {\n label: 'Photo',\n name: 'cropPhoto',\n type: 'cropPhoto',\n fieldOptions: {\n imageCropper: {\n aspectRatio: 1,\n quality: 1,\n outputType: 'image/jpeg',\n image:\n 'https://d2cv8qvq4e7ii1.cloudfront.net/assets/lost/placeholder/pet-placeholder.jpg',\n },\n },\n },\n ],\n },\n },\n};\n\nexport default TestConfiguration;\n","import { IBaseField } from '@/components/organisms/FormBuilder/FieldPropTypes';\nimport { ValueOrGetter } from '@/lib/utils/helpers/maybeCallFunctionWithParams/maybeCallFunctionWithParams';\nimport CookieStorage from '@/lib/utils/storage/cookie-storage';\nimport LocalStorage from '@/lib/utils/storage/local-storage';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport ActivateAccountConfiguration from './ActivateAccount';\nimport OnboardPetConfiguration from './OnboardPet';\nimport AddPetFoundConfiguration from './AddPetFound';\nimport AddPetLostConfiguration from './AddPetLost';\nimport AddPetSafeConfiguration from './AddPetSafe';\nimport AddPetStartConfiguration from './AddPetStart';\nimport AllPetsConfiguration from './AllPets';\nimport CreateAccountFoundConfiguration from './CreateAccountFound';\nimport CreateAccountFoundDistanceConfiguration from './CreateAccountFoundDistance';\nimport CreateAccountFoundPhotoConfiguration from './CreateAccountFoundPhoto';\nimport CreateAccountFoundReportConfiguration from './CreateAccountFoundReport';\nimport CreateAccountLostConfiguration from './CreateAccountLost';\nimport CreateAccountLostDistanceConfiguration from './CreateAccountLostDistance';\nimport CreateAccountLostPhotoConfiguration from './CreateAccountLostPhoto';\nimport CreateAccountLostReportConfiguration from './CreateAccountLostReport';\nimport CreateAccountSafeConfiguration from './CreateAccountSafe';\nimport CreateAccountStartConfiguration from './CreateAccountStart';\nimport IFoundAPetConfiguration from './IFoundAPetConfiguration';\nimport ILostAPetConfiguration from './ILostAPetConfiguration';\nimport ReportAsLostConfiguration from './ReportAsLost';\nimport TestConfiguration from './TestConfiguration';\n\n/**\n * Form Types The Allowed Form Types to allow for the MultiPage MultiStep Form.\n *\n * @typedef\n */\nexport type FormTypes =\n | 'activate-account/signup'\n | 'all-pets'\n | 'i-lost-a-pet'\n | 'i-found-a-pet'\n | 'create-account/start'\n | 'create-account/lost-photo'\n | 'create-account/lost-distance'\n | 'create-account/lost-report'\n | 'create-account/safe'\n | 'create-account/lost'\n | 'create-account/found'\n | 'create-account/found-photo'\n | 'create-account/found-distance'\n | 'create-account/found-report'\n | 'dash/add-pet/start'\n | 'dash/add-pet/safe'\n | 'dash/add-pet/found'\n | 'dash/add-pet/lost'\n | 'report-as-lost'\n | 'onboard-pet/form'\n | 'test';\n\n/**\n * Page Types The Allowed Page Types to allow for the MultiPage MultiStep Form.\n *\n * @typedef\n */\nexport type PageTypes =\n | 'location'\n | 'photo'\n | 'test2'\n | 'name'\n | 'email'\n | 'phone'\n | 'upload-photo'\n | 'crop-photo'\n | 'pet-type'\n | 'pet-name'\n | 'pet-date'\n | 'pet-sex'\n | 'pet-microchip'\n | 'pet-description'\n | 'password'\n | 'pet-location'\n | 'pet-status'\n | 'pet-details'\n | 'password-alerts'\n | 'upload-more-photos'\n | 'cross-streets';\n\n/**\n * Storage Types The Allowed Storage Types to allow for the MultiPage MultiStep\n * Form.\n *\n * @typedef\n */\nexport type StorageTypes = LocalStorage | SessionStorage | CookieStorage;\n\n/**\n * MultiPage Form Configuration Data The Configuration Data for the MultiPage\n * Form.\n *\n * @interface\n */\nexport interface MultiPageFormConfigurationData {\n [key: string]: number | string | boolean | React.ReactNode | null | object;\n}\n\n/** The Field Options Value or Getter type */\nexport type FieldOptionsValueOrGetter<T> = ValueOrGetter<\n T,\n MultiPageFormConfigurationData\n>;\n\n/**\n * MultiPage Form Configuration Page The Configuration for each Page for the\n * MultiPage Form with Values or Getters where applicable (For example title and\n * description)\n *\n * @interface\n */\nexport type MultiPageFormConfigurationContentWithValuesOrGetters = {\n [Property in PageTypes]?: MultiPageFormConfigurationPageContentWithValuesOrGetters;\n};\n\n/**\n * MultiPage Form Configuration Content The Configuration Content for the\n * MultiPage Form. This is the content that is displayed on the page. With\n * Values or getters where applicable (For example title and description)\n *\n * @interface\n */\nexport interface MultiPageFormConfigurationPageContentWithValuesOrGetters {\n /** The overline text */\n overline?: string;\n /** The title text */\n title: FieldOptionsValueOrGetter<string>;\n /** The description text */\n description?: FieldOptionsValueOrGetter<string | JSX.Element>;\n /** The form fields */\n fields: IBaseField[];\n /** The defaults associated with the form fields */\n defaults?: MultiPageFormConfigurationData;\n /**\n * Hide the submit button\n *\n * @default false\n */\n hideSubmit?: boolean;\n /**\n * The label used for the submit button\n *\n * @default 'Continue'\n */\n submitLabel?: string;\n}\n\n/**\n * MultiPage Form Configuration Content The Configuration Content for the\n * MultiPage Form. This is the content that is displayed on the page.\n *\n * @interface\n */\nexport interface MultiPageFormConfigurationPageContent {\n /** The overline text */\n overline?: string;\n /** The title text */\n title: string;\n /** The description text */\n description?: string;\n /** The form fields */\n fields: IBaseField[];\n /** The defaults associated with the form fields */\n defaults?: MultiPageFormConfigurationData;\n /**\n * Hide the submit button\n *\n * @default false\n */\n hideSubmit?: boolean;\n /**\n * The label used for the submit button\n *\n * @default 'Continue'\n */\n submitLabel?: string;\n}\n\n/**\n * MultiPage Form Configuration Page The Configuration for each Page for the\n * MultiPage Form.\n *\n * @interface\n */\nexport type MultiPageFormConfigurationContent = {\n [Property in PageTypes]?: MultiPageFormConfigurationPageContent;\n};\n\n/**\n * MultiPage Form Configuration\n *\n * @interface\n */\nexport interface MultiPageFormConfigurationItem {\n /** The order of the pages */\n order: PageTypes[];\n /** The data for the form */\n data: MultiPageFormConfigurationData;\n /** The content for the form */\n content: MultiPageFormConfigurationContentWithValuesOrGetters;\n /** The storage type for the form */\n storage?: StorageTypes;\n /** The order of pages according to the feature flag */\n featureOrder?: {\n [key: string]: PageTypes[];\n };\n /** Retain the data on submit */\n retainDataOnSubmit?: boolean;\n}\n\n/**\n * MultiPage Form Configuration The Configuration for the MultiPage Form.\n *\n * @typedef {MultiPageFormConfiguration}\n */\nexport type MultiPageFormConfiguration = {\n [Property in FormTypes]: MultiPageFormConfigurationItem;\n};\n\n/** Main Configuration The Main Configuration for the MultiPage Form. */\nconst configurations: MultiPageFormConfiguration = {\n 'activate-account/signup': ActivateAccountConfiguration,\n 'all-pets': AllPetsConfiguration,\n 'i-lost-a-pet': ILostAPetConfiguration,\n 'i-found-a-pet': IFoundAPetConfiguration,\n 'create-account/start': CreateAccountStartConfiguration,\n 'create-account/lost-photo': CreateAccountLostPhotoConfiguration,\n 'create-account/lost-distance': CreateAccountLostDistanceConfiguration,\n 'create-account/lost-report': CreateAccountLostReportConfiguration,\n 'create-account/safe': CreateAccountSafeConfiguration,\n 'create-account/lost': CreateAccountLostConfiguration,\n 'create-account/found': CreateAccountFoundConfiguration,\n 'create-account/found-photo': CreateAccountFoundPhotoConfiguration,\n 'create-account/found-distance': CreateAccountFoundDistanceConfiguration,\n 'create-account/found-report': CreateAccountFoundReportConfiguration,\n 'dash/add-pet/start': AddPetStartConfiguration,\n 'dash/add-pet/safe': AddPetSafeConfiguration,\n 'dash/add-pet/found': AddPetFoundConfiguration,\n 'dash/add-pet/lost': AddPetLostConfiguration,\n 'report-as-lost': ReportAsLostConfiguration,\n 'onboard-pet/form': OnboardPetConfiguration,\n test: TestConfiguration,\n};\n\nexport default configurations;\n","import LabelChip from '@/components/atoms/LabelChip/LabelChip';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport {\n microchipLostFoundDescription,\n notificationsDescription,\n notificationsHeader,\n notificationsInfo,\n} from '@/lib/constants/constants/forms';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage for the Add Pet Start Multi-step Form.\n *\n * @constant\n * @type {SessionStorage}\n */\nexport const storage: SessionStorage = new SessionStorage();\n\n/**\n * The submit label for the form.\n *\n * @constant {string}\n */\nexport const submitLabel = 'Submit';\n\n/**\n * Create Account Found Configuration The Configuration for the Create Account\n * Start Multi-step Form .\n *\n * @constant\n */\nconst CreateAccountFoundConfiguration: MultiPageFormConfigurationItem = {\n order: [\n 'pet-location',\n 'cross-streets',\n 'pet-date',\n 'pet-sex',\n 'pet-microchip',\n 'pet-description',\n 'password-alerts',\n ],\n data: {},\n storage,\n content: {\n 'pet-location': {\n title: 'Where did you find them?',\n description:\n 'Please provide a specific address. We will never share your exact location to the public.',\n fields: [\n {\n label: 'Street address',\n name: 'petLocation',\n type: 'locationGoogle',\n fieldOptions: {\n locationGoogle: {\n requiredAddressComponents: ['streetAddress'],\n displayStaticMap: true,\n },\n },\n validations: [\n {\n type: 'required',\n message: 'Location is required',\n },\n ],\n },\n ],\n },\n 'cross-streets': {\n title: 'What are the nearest cross streets?',\n description:\n 'Please provide the nearest cross streets and a landmark if there’s one nearby (e.g. 3rd and Main by the grocery store).',\n fields: [\n {\n label: 'Nearest cross streets, landmark. etc.',\n name: 'crossStreets',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'max',\n message: 'Cross streets must be at most 60 characters',\n value: 60,\n },\n ],\n },\n ],\n },\n 'pet-date': {\n title: 'When did you find them?',\n description:\n 'It may take 24 hours for this pet to be reported in our database - check back often!',\n fields: [\n {\n label: 'Found date (mm/dd/yyyy)',\n name: 'foundDate',\n type: 'date',\n validations: [\n {\n type: 'required',\n message: 'Found date is required',\n },\n ],\n },\n ],\n },\n 'pet-sex': {\n title: 'This pet is a',\n fields: [\n {\n label: '',\n name: 'typeOfPet',\n type: 'inputButtons',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Female',\n active: false,\n icon: 'crown',\n value: 'female',\n },\n {\n text: 'Male',\n active: false,\n icon: 'bowTie',\n value: 'male',\n },\n {\n text: 'Unknown',\n active: false,\n icon: 'questionCircle',\n value: 'unknown',\n },\n ],\n },\n },\n },\n ],\n },\n 'pet-microchip': {\n title: 'What is their Microchip ID?',\n description: microchipLostFoundDescription,\n fields: [\n {\n label: 'Enter microchip ID (optional)',\n name: 'microchip',\n type: 'microchip',\n validations: [],\n },\n ],\n },\n 'pet-description': {\n title: 'What are they like?',\n description: 'Describe their personality, physical traits, etc.',\n fields: [\n {\n label: 'Description (optional)',\n name: 'description',\n type: 'textarea',\n fieldOptions: {\n textArea: {\n rows: 5,\n floatingLabel: true,\n },\n },\n validations: [\n {\n type: 'blockProfanity',\n },\n ],\n },\n ],\n },\n 'password-alerts': {\n title: 'Create password',\n submitLabel,\n fields: [\n {\n label: 'Password',\n name: 'password',\n type: 'password',\n validations: [\n {\n type: 'required',\n message: 'Password is required',\n },\n ],\n },\n {\n classes: 'pt-3',\n label: '',\n name: 'node',\n type: 'node',\n fieldOptions: {\n node: {\n options: (\n <div className=\"flex flex-col text-left w-full\">\n <div className=\"flex flex-row h-[30px] mb-1 items-center space-x-2\">\n <Paragraph\n styling=\"bold\"\n size=\"body4\"\n className=\"text-secondaryBase-400\"\n >\n {notificationsHeader}\n </Paragraph>\n <LabelChip text=\"BETA\" colorShade={200} colorType=\"info\" />\n </div>\n <Paragraph size=\"body5\">{notificationsDescription}</Paragraph>\n </div>\n ),\n },\n },\n },\n {\n name: 'top divider',\n label: '',\n type: 'divider',\n classes: 'mt-4 mb-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Text alerts',\n name: 'textAlerts',\n type: 'toggle',\n },\n {\n name: 'mid divider',\n label: '',\n type: 'divider',\n classes: 'my-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Email alerts',\n name: 'emailAlerts',\n type: 'toggle',\n },\n {\n name: 'bottom divider',\n label: '',\n type: 'divider',\n classes: 'mt-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: '',\n name: 'node-info',\n type: 'node',\n classes: 'mt-3 mb-8',\n fieldOptions: {\n node: {\n options: (\n <Paragraph\n styling=\"italic\"\n size=\"overline\"\n className=\"text-left\"\n >\n {notificationsInfo}\n </Paragraph>\n ),\n },\n },\n },\n {\n label: '',\n name: 'facebookMessage',\n type: 'facebookFormMessage',\n },\n ],\n },\n },\n};\n\nexport default CreateAccountFoundConfiguration;\n","import LabelChip from '@/components/atoms/LabelChip/LabelChip';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport {\n microchipLostFoundDescription,\n notificationsDescription,\n notificationsHeader,\n notificationsInfo,\n} from '@/lib/constants/constants/forms';\nimport { phonePrivacyDisclosure } from '@/lib/constants/constants/privacy';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage for the I Lost A Pet Multi-step Form.\n *\n * @constant\n * @type {SessionStorage}\n */\nexport const storage: SessionStorage = new SessionStorage();\n\n/**\n * The submit label for the form.\n *\n * @constant {string}\n */\nexport const submitLabel = 'Submit';\n\n/** The handler for the image change button of the Cropper */\n/**\n * This function single purpose is to overwrite the default behavior of this\n * action which is going to the previous step of the form. We want this to be\n * handled by the ImageUploadHandlerGroup which will bring back the\n * ImageUploader.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport const onChangeImageHandler = () => {};\n\n/**\n * Create Account Found Distance Configuration The Configuration for the Create\n * Account Start Multi-step Form .\n *\n * @constant\n */\nconst CreateAccountFoundDistanceConfiguration: MultiPageFormConfigurationItem =\n {\n order: [\n 'name',\n 'email',\n 'phone',\n 'upload-photo',\n 'pet-date',\n 'pet-sex',\n 'pet-microchip',\n 'pet-description',\n 'password-alerts',\n ],\n data: {},\n storage,\n content: {\n name: {\n title: 'Welcome to Petco Love Lost',\n description:\n 'Whether you need to report a lost or found pet or want to register your pet in case they go missing later – you’re in the right place.',\n fields: [\n {\n label: 'First Name',\n name: 'firstName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'First Name is required',\n },\n ],\n },\n {\n label: 'Last Name',\n name: 'lastName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'Last Name is required',\n },\n ],\n },\n ],\n },\n email: {\n title: \"What's your email?\",\n description:\n 'We’ll only use your email to keep in touch about the pet you register.',\n fields: [\n {\n label: 'Email',\n name: 'email',\n type: 'email',\n validations: [\n {\n type: 'required',\n message: 'Email is required',\n },\n {\n type: 'newUser',\n message: 'Email is already taken',\n },\n ],\n },\n ],\n },\n phone: {\n title: \"What's your number?\",\n description: phonePrivacyDisclosure,\n fields: [\n {\n label: 'Phone',\n name: 'phone',\n type: 'tel',\n validations: [\n {\n type: 'required',\n message: 'Phone number is required',\n },\n ],\n },\n ],\n },\n 'upload-photo': {\n title: 'Add pet photo',\n description:\n 'Please select a clear image of one pet looking directly at the camera',\n hideSubmit: true,\n fields: [\n {\n label: '',\n name: 'photo',\n type: 'uploadPhoto',\n fieldOptions: {\n imageUploadHandler: {\n quality: 0.8,\n outputType: 'image/jpeg',\n aspectRatio: 1,\n onChangeImage: onChangeImageHandler,\n },\n },\n },\n ],\n },\n 'pet-date': {\n title: 'When did you find them?',\n description:\n 'It may take 24 hours for this pet to be reported in our database - check back often!',\n fields: [\n {\n label: 'Found date (mm/dd/yyyy)',\n name: 'foundDate',\n type: 'date',\n validations: [\n {\n type: 'required',\n message: 'Found date is required',\n },\n ],\n },\n ],\n },\n 'pet-sex': {\n title: 'This pet is a',\n fields: [\n {\n label: '',\n name: 'typeOfPet',\n type: 'inputButtons',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Female',\n active: false,\n icon: 'crown',\n value: 'female',\n },\n {\n text: 'Male',\n active: false,\n icon: 'bowTie',\n value: 'male',\n },\n {\n text: 'Unknown',\n active: false,\n icon: 'questionCircle',\n value: 'unknown',\n },\n ],\n },\n },\n },\n ],\n },\n 'pet-microchip': {\n title: 'What is their Microchip ID?',\n description: microchipLostFoundDescription,\n fields: [\n {\n label: 'Enter microchip ID (optional)',\n name: 'microchip',\n type: 'microchip',\n validations: [],\n },\n ],\n },\n 'pet-description': {\n title: 'What are they like?',\n description: 'Describe their personality, physical traits, etc.',\n fields: [\n {\n label: 'Description (optional)',\n name: 'description',\n type: 'textarea',\n fieldOptions: {\n textArea: {\n rows: 5,\n floatingLabel: true,\n },\n },\n validations: [\n {\n type: 'blockProfanity',\n },\n ],\n },\n ],\n },\n 'password-alerts': {\n title: 'Create password',\n submitLabel,\n fields: [\n {\n label: 'Password',\n name: 'password',\n type: 'password',\n validations: [\n {\n type: 'required',\n message: 'Password is required',\n },\n ],\n },\n {\n classes: 'pt-3',\n label: '',\n name: 'node',\n type: 'node',\n fieldOptions: {\n node: {\n options: (\n <div className=\"flex flex-col text-left w-full\">\n <div className=\"flex flex-row h-[30px] mb-1 items-center space-x-2\">\n <Paragraph\n styling=\"bold\"\n size=\"body4\"\n className=\"text-secondaryBase-400\"\n >\n {notificationsHeader}\n </Paragraph>\n <LabelChip\n text=\"BETA\"\n colorShade={200}\n colorType=\"info\"\n />\n </div>\n <Paragraph size=\"body5\">\n {notificationsDescription}\n </Paragraph>\n </div>\n ),\n },\n },\n },\n {\n name: 'top divider',\n label: '',\n type: 'divider',\n classes: 'mt-4 mb-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Text alerts',\n name: 'textAlerts',\n type: 'toggle',\n },\n {\n name: 'mid divider',\n label: '',\n type: 'divider',\n classes: 'my-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Email alerts',\n name: 'emailAlerts',\n type: 'toggle',\n },\n {\n name: 'bottom divider',\n label: '',\n type: 'divider',\n classes: 'mt-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: '',\n name: 'node-info',\n type: 'node',\n classes: 'mt-3 mb-8',\n fieldOptions: {\n node: {\n options: (\n <Paragraph\n styling=\"italic\"\n size=\"overline\"\n className=\"text-left\"\n >\n {notificationsInfo}\n </Paragraph>\n ),\n },\n },\n },\n {\n label: '',\n name: 'facebookMessage',\n type: 'facebookFormMessage',\n },\n ],\n },\n },\n };\n\nexport default CreateAccountFoundDistanceConfiguration;\n","import LabelChip from '@/components/atoms/LabelChip/LabelChip';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport {\n microchipLostFoundDescription,\n notificationsDescription,\n notificationsHeader,\n notificationsInfo,\n} from '@/lib/constants/constants/forms';\nimport { phonePrivacyDisclosure } from '@/lib/constants/constants/privacy';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage for the Add Pet Start Multi-step Form.\n *\n * @constant\n * @type {SessionStorage}\n */\nexport const storage: SessionStorage = new SessionStorage();\n\n/**\n * The submit label for the form.\n *\n * @constant {string}\n */\nexport const submitLabel = 'Submit';\n\n/**\n * Create Account Found Photo Configuration The Configuration for the Create\n * Account Start Multi-step Form .\n *\n * @constant\n */\nconst CreateAccountFoundPhotoConfiguration: MultiPageFormConfigurationItem = {\n order: [\n 'name',\n 'email',\n 'phone',\n 'pet-date',\n 'pet-sex',\n 'pet-microchip',\n 'pet-description',\n 'password-alerts',\n ],\n data: {},\n storage,\n content: {\n name: {\n title: 'Welcome to Petco Love Lost',\n description:\n 'Whether you need to report a lost or found pet or want to register your pet in case they go missing later – you’re in the right place.',\n fields: [\n {\n label: 'First Name',\n name: 'firstName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'First Name is required',\n },\n ],\n },\n {\n label: 'Last Name',\n name: 'lastName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'Last Name is required',\n },\n ],\n },\n ],\n },\n email: {\n title: \"What's your email?\",\n description:\n 'We’ll only use your email to keep in touch about the pet you register.',\n fields: [\n {\n label: 'Email',\n name: 'email',\n type: 'email',\n validations: [\n {\n type: 'required',\n message: 'Email is required',\n },\n {\n type: 'newUser',\n message: 'Email is already taken',\n },\n ],\n },\n ],\n },\n phone: {\n title: \"What's your number?\",\n description: phonePrivacyDisclosure,\n fields: [\n {\n label: 'Phone',\n name: 'phone',\n type: 'tel',\n validations: [\n {\n type: 'required',\n message: 'Phone number is required',\n },\n ],\n },\n ],\n },\n 'pet-date': {\n title: 'When did you find them?',\n description:\n 'It may take 24 hours for this pet to be reported in our database – check back often!',\n fields: [\n {\n label: 'Found date (mm/dd/yyyy)',\n name: 'foundDate',\n type: 'date',\n validations: [\n {\n type: 'required',\n message: 'Found date is required',\n },\n ],\n },\n ],\n },\n 'pet-sex': {\n title: 'This pet is a',\n fields: [\n {\n label: '',\n name: 'typeOfPet',\n type: 'inputButtons',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Female',\n active: false,\n icon: 'crown',\n value: 'female',\n },\n {\n text: 'Male',\n active: false,\n icon: 'bowTie',\n value: 'male',\n },\n {\n text: 'Unknown',\n active: false,\n icon: 'questionCircle',\n value: 'unknown',\n },\n ],\n },\n },\n },\n ],\n },\n // TODO: LL2-886 - We need the ability to parse his/her instead of their\n 'pet-microchip': {\n title: 'What is their Microchip ID?',\n description: microchipLostFoundDescription,\n fields: [\n {\n label: 'Enter microchip ID (optional)',\n name: 'microchip',\n type: 'microchip',\n validations: [],\n },\n ],\n },\n 'pet-description': {\n title: 'What is {{petName}} like?',\n description: \"Describe {{petName}}'s personality, physical traits, etc.\",\n fields: [\n {\n label: 'Description (optional)',\n name: 'description',\n type: 'textarea',\n fieldOptions: {\n textArea: {\n rows: 5,\n floatingLabel: true,\n },\n },\n validations: [\n {\n type: 'blockProfanity',\n },\n ],\n },\n ],\n },\n 'password-alerts': {\n title: 'Create password',\n submitLabel,\n fields: [\n {\n label: 'Password',\n name: 'password',\n type: 'password',\n validations: [\n {\n type: 'required',\n message: 'Password is required',\n },\n ],\n },\n {\n classes: 'pt-3',\n label: '',\n name: 'node',\n type: 'node',\n fieldOptions: {\n node: {\n options: (\n <div className=\"flex flex-col text-left w-full\">\n <div className=\"flex flex-row h-[30px] mb-1 items-center space-x-2\">\n <Paragraph\n styling=\"bold\"\n size=\"body4\"\n className=\"text-secondaryBase-400\"\n >\n {notificationsHeader}\n </Paragraph>\n <LabelChip text=\"BETA\" colorShade={200} colorType=\"info\" />\n </div>\n <Paragraph size=\"body5\">{notificationsDescription}</Paragraph>\n </div>\n ),\n },\n },\n },\n {\n name: 'top divider',\n label: '',\n type: 'divider',\n classes: 'mt-4 mb-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Text alerts',\n name: 'textAlerts',\n type: 'toggle',\n },\n {\n name: 'mid divider',\n label: '',\n type: 'divider',\n classes: 'my-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Email alerts',\n name: 'emailAlerts',\n type: 'toggle',\n },\n {\n name: 'bottom divider',\n label: '',\n type: 'divider',\n classes: 'mt-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: '',\n name: 'node-info',\n type: 'node',\n classes: 'mt-3 mb-8',\n fieldOptions: {\n node: {\n options: (\n <Paragraph\n styling=\"italic\"\n size=\"overline\"\n className=\"text-left\"\n >\n {notificationsInfo}\n </Paragraph>\n ),\n },\n },\n },\n {\n label: '',\n name: 'facebookMessage',\n type: 'facebookFormMessage',\n },\n ],\n },\n },\n};\n\nexport default CreateAccountFoundPhotoConfiguration;\n","import { phonePrivacyDisclosure } from '@/lib/constants/constants/privacy';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage for the Add Pet Start Multi-step Form.\n *\n * @constant\n * @type {SessionStorage}\n */\nexport const storage: SessionStorage = new SessionStorage();\n\n/**\n * The submit label for the form.\n *\n * @constant {string}\n */\nexport const submitLabel = 'Submit';\n\n/**\n * Create Account Found Report Configuration The Configuration for the Create\n * Account Start Multi-step Form .\n *\n * @constant\n */\nconst CreateAccountFoundReportConfiguration: MultiPageFormConfigurationItem = {\n order: ['name', 'email', 'phone', 'password'],\n data: {},\n storage,\n content: {\n name: {\n title: 'Sign up to contact',\n description:\n 'We just need a little bit more information to help reunite you with your pet.',\n fields: [\n {\n label: 'First Name',\n name: 'firstName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'First Name is required',\n },\n ],\n },\n {\n label: 'Last Name',\n name: 'lastName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'Last Name is required',\n },\n ],\n },\n ],\n },\n email: {\n title: \"What's your email?\",\n description:\n \"We'll only use your email to keep in touch with you about your pet.\",\n fields: [\n {\n label: 'Email',\n name: 'email',\n type: 'email',\n validations: [\n {\n type: 'required',\n message: 'Email is required',\n },\n {\n type: 'newUser',\n message: 'Email is already taken',\n },\n ],\n },\n ],\n },\n phone: {\n title: \"What's your number?\",\n description: phonePrivacyDisclosure,\n fields: [\n {\n label: 'Phone',\n name: 'phone',\n type: 'tel',\n validations: [\n {\n type: 'required',\n message: 'Phone number is required',\n },\n ],\n },\n ],\n },\n password: {\n title: 'Create password',\n submitLabel,\n fields: [\n {\n label: 'Password',\n name: 'password',\n type: 'password',\n validations: [\n {\n type: 'required',\n message: 'Password is required',\n },\n ],\n },\n ],\n },\n },\n};\n\nexport default CreateAccountFoundReportConfiguration;\n","import LabelChip from '@/components/atoms/LabelChip/LabelChip';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport {\n microchipLostFoundDescription,\n notificationsDescription,\n notificationsHeader,\n notificationsInfo,\n} from '@/lib/constants/constants/forms';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n/**\n * The storage for the Add Pet Start Multi-step Form.\n *\n * @constant\n * @type {SessionStorage}\n */\nexport const storage: SessionStorage = new SessionStorage();\n\n/**\n * The submit label for the form.\n *\n * @constant {string}\n */\nexport const submitLabel = 'Submit';\n\n/**\n * Create Account Lost Photo Configuration The Configuration for the Create\n * Account Start Multi-step Form .\n *\n * @constant\n */\nconst CreateAccountLostConfiguration: MultiPageFormConfigurationItem = {\n order: [\n 'pet-name',\n 'pet-location',\n 'cross-streets',\n 'pet-date',\n 'pet-sex',\n 'pet-microchip',\n 'pet-description',\n 'password-alerts',\n ],\n data: {},\n storage,\n content: {\n 'pet-name': {\n title: \"What is your pet's name?\",\n fields: [\n {\n label: 'Pet name',\n name: 'petName',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'required',\n message: 'Pet name is required',\n },\n ],\n },\n ],\n },\n 'pet-location': {\n title: 'Where did {{petName}} get lost?',\n description:\n 'Please provide a specific address. We will never share your exact location to the public.',\n fields: [\n {\n label: 'Lost near (street address)',\n name: 'petLocation',\n type: 'locationGoogle',\n fieldOptions: {\n locationGoogle: {\n displayStaticMap: true,\n },\n },\n validations: [\n {\n type: 'required',\n message: 'Location is required',\n },\n ],\n },\n ],\n },\n 'cross-streets': {\n title: 'What are the nearest cross streets?',\n description:\n 'Please provide the nearest cross streets and a landmark if there’s one nearby (e.g. 3rd and Main by the grocery store).',\n fields: [\n {\n label: 'Nearest cross streets, landmark. etc.',\n name: 'crossStreets',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'max',\n message: 'Cross streets must be at most 60 characters',\n value: 60,\n },\n ],\n },\n ],\n },\n 'pet-date': {\n title: 'When was {{petName}} last seen?',\n description:\n 'It may take 24 hours for this pet to be reported in our database - check back often!',\n fields: [\n {\n label: 'Lost date (mm/dd/yyyy)',\n name: 'lostDate',\n type: 'date',\n validations: [\n {\n type: 'required',\n message: 'Lost date is required',\n },\n ],\n },\n ],\n },\n 'pet-sex': {\n title: '{{petName}} is a',\n fields: [\n {\n label: '',\n name: 'typeOfPet',\n type: 'inputButtons',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Female',\n active: false,\n icon: 'crown',\n value: 'female',\n },\n {\n text: 'Male',\n active: false,\n icon: 'bowTie',\n value: 'male',\n },\n {\n text: 'Unknown',\n active: false,\n icon: 'questionCircle',\n value: 'unknown',\n },\n ],\n },\n },\n },\n ],\n },\n 'pet-microchip': {\n title: \"What is {{petName}}'s Microchip ID?\",\n description: microchipLostFoundDescription,\n fields: [\n {\n label: 'Enter microchip ID (optional)',\n name: 'microchip',\n type: 'microchip',\n validations: [],\n },\n ],\n },\n 'pet-description': {\n title: 'What is {{petName}} like?',\n description: \"Describe {{petName}}'s personality, physical traits, etc.\",\n fields: [\n {\n label: 'Description (optional)',\n name: 'description',\n type: 'textarea',\n fieldOptions: {\n textArea: {\n rows: 5,\n floatingLabel: true,\n },\n },\n validations: [\n {\n type: 'blockProfanity',\n },\n ],\n },\n ],\n },\n password: {\n title: 'Create password',\n submitLabel,\n fields: [\n {\n label: 'Password',\n name: 'password',\n type: 'password',\n validations: [\n {\n type: 'required',\n message: 'Password is required',\n },\n ],\n },\n ],\n },\n 'password-alerts': {\n title: 'Create password',\n submitLabel,\n fields: [\n {\n label: 'Password',\n name: 'password',\n type: 'password',\n validations: [\n {\n type: 'required',\n message: 'Password is required',\n },\n ],\n },\n {\n classes: 'pt-3',\n label: '',\n name: 'node',\n type: 'node',\n fieldOptions: {\n node: {\n options: (\n <div className=\"flex flex-col text-left w-full\">\n <div className=\"flex flex-row h-[30px] mb-1 items-center space-x-2\">\n <Paragraph\n styling=\"bold\"\n size=\"body4\"\n className=\"text-secondaryBase-400\"\n >\n {notificationsHeader}\n </Paragraph>\n <LabelChip text=\"BETA\" colorShade={200} colorType=\"info\" />\n </div>\n <Paragraph size=\"body5\">{notificationsDescription}</Paragraph>\n </div>\n ),\n },\n },\n },\n {\n name: 'top divider',\n label: '',\n type: 'divider',\n classes: 'mt-4 mb-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Text alerts',\n name: 'textAlerts',\n type: 'toggle',\n },\n {\n name: 'mid divider',\n label: '',\n type: 'divider',\n classes: 'my-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Email alerts',\n name: 'emailAlerts',\n type: 'toggle',\n },\n {\n name: 'bottom divider',\n label: '',\n type: 'divider',\n classes: 'mt-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: '',\n name: 'node-info',\n type: 'node',\n classes: 'mt-3 mb-8',\n fieldOptions: {\n node: {\n options: (\n <Paragraph\n styling=\"italic\"\n size=\"overline\"\n className=\"text-left\"\n >\n {notificationsInfo}\n </Paragraph>\n ),\n },\n },\n },\n {\n label: '',\n name: 'facebookMessage',\n type: 'facebookFormMessage',\n },\n ],\n },\n },\n};\n\nexport default CreateAccountLostConfiguration;\n","import LabelChip from '@/components/atoms/LabelChip/LabelChip';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport {\n microchipLostFoundDescription,\n notificationsDescription,\n notificationsHeader,\n notificationsInfo,\n} from '@/lib/constants/constants/forms';\nimport { phonePrivacyDisclosure } from '@/lib/constants/constants/privacy';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage for the I Lost A Pet Multi-step Form.\n *\n * @constant\n * @type {SessionStorage}\n */\nexport const storage: SessionStorage = new SessionStorage();\n\n/**\n * The submit label for the form.\n *\n * @constant {string}\n */\nexport const submitLabel = 'Submit';\n\n/** The handler for the image change button of the Cropper */\n/**\n * This function single purpose is to overwrite the default behavior of this\n * action which is going to the previous step of the form. We want this to be\n * handled by the ImageUploadHandlerGroup which will bring back the\n * ImageUploader.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport const onChangeImageHandler = () => {};\n\n/**\n * Create Account Lost Distance Configuration The Configuration for the Create\n * Account Start Multi-step Form .\n *\n * @constant\n */\nconst CreateAccountLostDistanceConfiguration: MultiPageFormConfigurationItem = {\n order: [\n 'name',\n 'email',\n 'phone',\n 'upload-photo',\n 'pet-name',\n 'pet-sex',\n 'pet-microchip',\n 'pet-description',\n 'password-alerts',\n ],\n data: {},\n storage,\n content: {\n name: {\n title: 'Welcome to Petco Love Lost',\n description:\n 'Whether you need to report a lost or found pet or want to register your pet in case they go missing later – you’re in the right place.',\n fields: [\n {\n label: 'First Name',\n name: 'firstName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'First Name is required',\n },\n ],\n },\n {\n label: 'Last Name',\n name: 'lastName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'Last Name is required',\n },\n ],\n },\n ],\n },\n email: {\n title: \"What's your email?\",\n description:\n 'We’ll only use your email to keep in touch about the pet you register.',\n fields: [\n {\n label: 'Email',\n name: 'email',\n type: 'email',\n validations: [\n {\n type: 'required',\n message: 'Email is required',\n },\n {\n type: 'newUser',\n message: 'Email is already taken',\n },\n ],\n },\n ],\n },\n phone: {\n title: \"What's your number?\",\n description: phonePrivacyDisclosure,\n fields: [\n {\n label: 'Phone',\n name: 'phone',\n type: 'tel',\n validations: [\n {\n type: 'required',\n message: 'Phone number is required',\n },\n ],\n },\n ],\n },\n 'upload-photo': {\n title: 'Add pet photo',\n description:\n 'Please select a clear image of one pet looking directly at the camera',\n hideSubmit: true,\n fields: [\n {\n label: '',\n name: 'photo',\n type: 'uploadPhoto',\n fieldOptions: {\n imageUploadHandler: {\n quality: 0.8,\n outputType: 'image/jpeg',\n aspectRatio: 1,\n onChangeImage: onChangeImageHandler,\n },\n },\n },\n ],\n },\n 'pet-name': {\n title: \"What is your pet's name?\",\n fields: [\n {\n label: 'Pet name',\n name: 'petName',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'required',\n message: 'Pet name is required',\n },\n ],\n },\n ],\n },\n 'pet-sex': {\n title: '{{petName}} is a',\n fields: [\n {\n label: '',\n name: 'typeOfPet',\n type: 'inputButtons',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Female',\n active: false,\n icon: 'crown',\n value: 'female',\n },\n {\n text: 'Male',\n active: false,\n icon: 'bowTie',\n value: 'male',\n },\n {\n text: 'Unknown',\n active: false,\n icon: 'questionCircle',\n value: 'unknown',\n },\n ],\n },\n },\n },\n ],\n },\n 'pet-microchip': {\n title: \"What is {{petName}}'s Microchip ID?\",\n description: microchipLostFoundDescription,\n fields: [\n {\n label: 'Enter microchip ID (optional)',\n name: 'microchip',\n type: 'microchip',\n validations: [],\n },\n ],\n },\n 'pet-description': {\n title: 'What is {{petName}} like?',\n description: \"Describe {{petName}}'s personality, physical traits, etc.\",\n fields: [\n {\n label: 'Description (optional)',\n name: 'description',\n type: 'textarea',\n fieldOptions: {\n textArea: {\n rows: 5,\n floatingLabel: true,\n },\n },\n validations: [\n {\n type: 'blockProfanity',\n },\n ],\n },\n ],\n },\n 'password-alerts': {\n title: 'Create password',\n submitLabel,\n fields: [\n {\n label: 'Password',\n name: 'password',\n type: 'password',\n validations: [\n {\n type: 'required',\n message: 'Password is required',\n },\n ],\n },\n {\n classes: 'pt-3',\n label: '',\n name: 'node',\n type: 'node',\n fieldOptions: {\n node: {\n options: (\n <div className=\"flex flex-col text-left w-full\">\n <div className=\"flex flex-row h-[30px] mb-1 items-center space-x-2\">\n <Paragraph\n styling=\"bold\"\n size=\"body4\"\n className=\"text-secondaryBase-400\"\n >\n {notificationsHeader}\n </Paragraph>\n <LabelChip text=\"BETA\" colorShade={200} colorType=\"info\" />\n </div>\n <Paragraph size=\"body5\">{notificationsDescription}</Paragraph>\n </div>\n ),\n },\n },\n },\n {\n name: 'top divider',\n label: '',\n type: 'divider',\n classes: 'mt-4 mb-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Text alerts',\n name: 'textAlerts',\n type: 'toggle',\n },\n {\n name: 'mid divider',\n label: '',\n type: 'divider',\n classes: 'my-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Email alerts',\n name: 'emailAlerts',\n type: 'toggle',\n },\n {\n name: 'bottom divider',\n label: '',\n type: 'divider',\n classes: 'mt-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: '',\n name: 'node-info',\n type: 'node',\n classes: 'mt-3 mb-8',\n fieldOptions: {\n node: {\n options: (\n <Paragraph\n styling=\"italic\"\n size=\"overline\"\n className=\"text-left\"\n >\n {notificationsInfo}\n </Paragraph>\n ),\n },\n },\n },\n {\n label: '',\n name: 'facebookMessage',\n type: 'facebookFormMessage',\n },\n ],\n },\n },\n};\n\nexport default CreateAccountLostDistanceConfiguration;\n","import LabelChip from '@/components/atoms/LabelChip/LabelChip';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport {\n microchipLostFoundDescription,\n notificationsDescription,\n notificationsHeader,\n notificationsInfo,\n} from '@/lib/constants/constants/forms';\nimport { phonePrivacyDisclosure } from '@/lib/constants/constants/privacy';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage for the Add Pet Start Multi-step Form.\n *\n * @constant\n * @type {SessionStorage}\n */\nexport const storage: SessionStorage = new SessionStorage();\n\n/**\n * The submit label for the form.\n *\n * @constant {string}\n */\nexport const submitLabel = 'Submit';\n\n/**\n * Create Account Lost Photo Configuration The Configuration for the Create\n * Account Start Multi-step Form .\n *\n * @constant\n */\nconst CreateAccountLostPhotoConfiguration: MultiPageFormConfigurationItem = {\n order: [\n 'name',\n 'email',\n 'phone',\n 'pet-name',\n 'pet-sex',\n 'pet-microchip',\n 'pet-description',\n 'password-alerts',\n ],\n data: {},\n storage,\n content: {\n name: {\n title: 'Welcome to Petco Love Lost',\n description:\n 'Whether you need to report a lost or found pet or want to register your pet in case they go missing later – you’re in the right place.',\n fields: [\n {\n label: 'First Name',\n name: 'firstName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'First Name is required',\n },\n ],\n },\n {\n label: 'Last Name',\n name: 'lastName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'Last Name is required',\n },\n ],\n },\n ],\n },\n email: {\n title: \"What's your email?\",\n description:\n 'We’ll only use your email to keep in touch about the pet you register.',\n fields: [\n {\n label: 'Email',\n name: 'email',\n type: 'email',\n validations: [\n {\n type: 'required',\n message: 'Email is required',\n },\n {\n type: 'newUser',\n message: 'Email is already taken',\n },\n ],\n },\n ],\n },\n phone: {\n title: \"What's your number?\",\n description: phonePrivacyDisclosure,\n fields: [\n {\n label: 'Phone',\n name: 'phone',\n type: 'tel',\n validations: [\n {\n type: 'required',\n message: 'Phone number is required',\n },\n ],\n },\n ],\n },\n 'pet-name': {\n title: \"What is your pet's name?\",\n fields: [\n {\n label: 'Pet name',\n name: 'petName',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'required',\n message: 'Pet name is required',\n },\n ],\n },\n ],\n },\n 'pet-sex': {\n title: '{{petName}} is a',\n fields: [\n {\n label: '',\n name: 'typeOfPet',\n type: 'inputButtons',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Female',\n active: false,\n icon: 'crown',\n value: 'female',\n },\n {\n text: 'Male',\n active: false,\n icon: 'bowTie',\n value: 'male',\n },\n {\n text: 'Unknown',\n active: false,\n icon: 'questionCircle',\n value: 'unknown',\n },\n ],\n },\n },\n },\n ],\n },\n 'pet-microchip': {\n title: \"What is {{petName}}'s Microchip ID?\",\n description: microchipLostFoundDescription,\n fields: [\n {\n label: 'Enter microchip ID (optional)',\n name: 'microchip',\n type: 'microchip',\n validations: [],\n },\n ],\n },\n 'pet-description': {\n title: 'What is {{petName}} like?',\n description: \"Describe {{petName}}'s personality, physical traits, etc.\",\n fields: [\n {\n label: 'Description (optional)',\n name: 'description',\n type: 'textarea',\n fieldOptions: {\n textArea: {\n rows: 5,\n floatingLabel: true,\n },\n },\n validations: [\n {\n type: 'blockProfanity',\n },\n ],\n },\n ],\n },\n 'password-alerts': {\n title: 'Create password',\n submitLabel,\n fields: [\n {\n label: 'Password',\n name: 'password',\n type: 'password',\n validations: [\n {\n type: 'required',\n message: 'Password is required',\n },\n ],\n },\n {\n classes: 'pt-3',\n label: '',\n name: 'node',\n type: 'node',\n fieldOptions: {\n node: {\n options: (\n <div className=\"flex flex-col text-left w-full\">\n <div className=\"flex flex-row h-[30px] mb-1 items-center space-x-2\">\n <Paragraph\n styling=\"bold\"\n size=\"body4\"\n className=\"text-secondaryBase-400\"\n >\n {notificationsHeader}\n </Paragraph>\n <LabelChip text=\"BETA\" colorShade={200} colorType=\"info\" />\n </div>\n <Paragraph size=\"body5\">{notificationsDescription}</Paragraph>\n </div>\n ),\n },\n },\n },\n {\n name: 'top divider',\n label: '',\n type: 'divider',\n classes: 'mt-4 mb-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Text alerts',\n name: 'textAlerts',\n type: 'toggle',\n },\n {\n name: 'mid divider',\n label: '',\n type: 'divider',\n classes: 'my-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Email alerts',\n name: 'emailAlerts',\n type: 'toggle',\n },\n {\n name: 'bottom divider',\n label: '',\n type: 'divider',\n classes: 'mt-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: '',\n name: 'node-info',\n type: 'node',\n classes: 'mt-3 mb-8',\n fieldOptions: {\n node: {\n options: (\n <Paragraph\n styling=\"italic\"\n size=\"overline\"\n className=\"text-left\"\n >\n {notificationsInfo}\n </Paragraph>\n ),\n },\n },\n },\n {\n label: '',\n name: 'facebookMessage',\n type: 'facebookFormMessage',\n },\n ],\n },\n },\n};\n\nexport default CreateAccountLostPhotoConfiguration;\n","import { phonePrivacyDisclosure } from '@/lib/constants/constants/privacy';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage for the Add Pet Start Multi-step Form.\n *\n * @constant\n * @type {SessionStorage}\n */\nexport const storage: SessionStorage = new SessionStorage();\n\n/**\n * The submit label for the form.\n *\n * @constant {string}\n */\nexport const submitLabel = 'Submit';\n\n/**\n * Create Account Lost Report Configuration The Configuration for the Create\n * Account Start Multi-step Form .\n *\n * @constant\n */\nconst CreateAccountLostReportConfiguration: MultiPageFormConfigurationItem = {\n order: ['name', 'email', 'phone', 'password'],\n data: {},\n storage,\n content: {\n name: {\n title: 'Sign up to contact',\n description:\n 'We just need a little bit more information to help reunite you with your pet.',\n fields: [\n {\n label: 'First Name',\n name: 'firstName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'First Name is required',\n },\n ],\n },\n {\n label: 'Last Name',\n name: 'lastName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'Last Name is required',\n },\n ],\n },\n ],\n },\n email: {\n title: \"What's your email?\",\n description:\n \"We'll only use your email to keep in touch with you about your pet.\",\n fields: [\n {\n label: 'Email',\n name: 'email',\n type: 'email',\n validations: [\n {\n type: 'required',\n message: 'Email is required',\n },\n {\n type: 'newUser',\n message: 'Email is already taken',\n },\n ],\n },\n ],\n },\n phone: {\n title: \"What's your number?\",\n description: phonePrivacyDisclosure,\n fields: [\n {\n label: 'Phone',\n name: 'phone',\n type: 'tel',\n validations: [\n {\n type: 'required',\n message: 'Phone number is required',\n },\n ],\n },\n ],\n },\n password: {\n title: 'Create password',\n submitLabel,\n fields: [\n {\n label: 'Password',\n name: 'password',\n type: 'password',\n validations: [\n {\n type: 'required',\n message: 'Password is required',\n },\n ],\n },\n ],\n },\n },\n};\n\nexport default CreateAccountLostReportConfiguration;\n","import LabelChip from '@/components/atoms/LabelChip/LabelChip';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport {\n microchipSafeDescription,\n notificationsDescription,\n notificationsHeader,\n notificationsInfo,\n} from '@/lib/constants/constants/forms';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/**\n * The storage for the Create Account Found Multi-step Form.\n *\n * @constant\n * @type {SessionStorage}\n */\nexport const storage: SessionStorage = new SessionStorage();\n\n/**\n * The submit label for the form.\n *\n * @constant {string}\n */\nexport const submitLabel = 'Submit';\n\n/**\n * Create Account Safe Configuration The Configuration for the Create Account\n * Start Multi-step Form .\n *\n * @constant\n */\nconst CreateAccountSafeConfiguration: MultiPageFormConfigurationItem = {\n order: [\n 'pet-name',\n 'pet-location',\n 'pet-sex',\n 'pet-microchip',\n 'pet-description',\n 'password-alerts',\n ],\n data: {},\n storage,\n content: {\n 'pet-name': {\n title: \"What is your pet's name?\",\n fields: [\n {\n label: 'Pet name',\n name: 'petName',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'required',\n message: 'Pet name is required',\n },\n ],\n },\n ],\n },\n 'pet-location': {\n title: 'Where do you and {{petName}} live?',\n description:\n 'Please provide a specific street address. We will never share your exact location.',\n fields: [\n {\n label: 'Street address',\n name: 'petLocation',\n type: 'locationGoogle',\n fieldOptions: {\n locationGoogle: {\n requiredAddressComponents: ['streetAddress'],\n },\n },\n validations: [\n {\n type: 'required',\n message: 'Location is required',\n },\n ],\n },\n ],\n },\n 'pet-sex': {\n title: '{{petName}} is a',\n fields: [\n {\n label: '',\n name: 'typeOfPet',\n type: 'inputButtons',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Female',\n active: false,\n icon: 'crown',\n value: 'female',\n },\n {\n text: 'Male',\n active: false,\n icon: 'bowTie',\n value: 'male',\n },\n {\n text: 'Unknown',\n active: false,\n icon: 'questionCircle',\n value: 'unknown',\n },\n ],\n },\n },\n },\n ],\n },\n 'pet-microchip': {\n title: \"What is {{petName}}'s Microchip ID?\",\n description: microchipSafeDescription,\n fields: [\n {\n label: 'Enter microchip ID (optional)',\n name: 'microchip',\n type: 'microchip',\n validations: [],\n },\n ],\n },\n 'pet-description': {\n title: 'What is {{petName}} like?',\n description: \"Describe {{petName}}'s personality, physical traits, etc.\",\n fields: [\n {\n label: 'Description (optional)',\n name: 'description',\n type: 'textarea',\n fieldOptions: {\n textArea: {\n rows: 5,\n floatingLabel: true,\n },\n },\n validations: [\n {\n type: 'blockProfanity',\n },\n ],\n },\n ],\n },\n 'password-alerts': {\n title: 'Create password',\n submitLabel,\n fields: [\n {\n label: 'Password',\n name: 'password',\n type: 'password',\n validations: [\n {\n type: 'required',\n message: 'Password is required',\n },\n ],\n },\n {\n classes: 'pt-3',\n label: '',\n name: 'node',\n type: 'node',\n fieldOptions: {\n node: {\n options: (\n <div className=\"flex flex-col text-left w-full\">\n <div className=\"flex flex-row h-[30px] mb-1 items-center space-x-2\">\n <Paragraph styling=\"bold\" size=\"body4\">\n {notificationsHeader}\n </Paragraph>\n <LabelChip text=\"BETA\" colorShade={200} colorType=\"info\" />\n </div>\n <Paragraph size=\"body5\">{notificationsDescription}</Paragraph>\n </div>\n ),\n },\n },\n },\n {\n name: 'top divider',\n label: '',\n type: 'divider',\n classes: 'mt-4 mb-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Text alerts',\n name: 'textAlerts',\n type: 'toggle',\n },\n {\n name: 'mid divider',\n label: '',\n type: 'divider',\n classes: 'my-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: 'Email alerts',\n name: 'emailAlerts',\n type: 'toggle',\n },\n {\n name: 'bottom divider',\n label: '',\n type: 'divider',\n classes: 'mt-1',\n fieldOptions: {\n divider: {\n type: 'lightGrey',\n },\n },\n },\n {\n label: '',\n name: 'node-info',\n type: 'node',\n classes: 'mt-3 mb-8',\n fieldOptions: {\n node: {\n options: (\n <Paragraph\n styling=\"italic\"\n size=\"overline\"\n className=\"text-left\"\n >\n {notificationsInfo}\n </Paragraph>\n ),\n },\n },\n },\n ],\n },\n },\n};\n\nexport default CreateAccountSafeConfiguration;\n","import { IImageTilesFormField } from '@/components/organisms/FormBuilder/FieldPropTypes';\nimport { IImageUploadHandler } from '@/components/organisms/ImageUploadHandler/ImageUploadHandler';\nimport { phonePrivacyDisclosure } from '@/lib/constants/constants/privacy';\nimport { Getter } from '@/lib/utils/helpers/maybeCallFunctionWithParams/maybeCallFunctionWithParams';\nimport appendAttributeIfExists from '@/lib/utils/helpers/ObjectsHelpers/AppendAttributeIfExists';\nimport generateImageUrl from '@/lib/utils/helpers/photoHelpers/generateImageUrl';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport { SpeciesTypes } from '@petcolove/lost--client--api-sdk/dist/concrete/sdks/constants/types';\nimport { IPetPhotoRank } from '@petcolove/lost--client--api-sdk/dist/concrete/sdks/services/users/pets/dto';\nimport {\n MultiPageFormConfigurationData,\n MultiPageFormConfigurationItem,\n} from './Configuration';\n\n/**\n * Interface for the form data\n *\n * @interface\n */\nexport interface ICreateAccountStartFormData\n extends MultiPageFormConfigurationData {\n /** The user email */\n email: string;\n /** The user first name */\n firstName: string;\n /** The user last name */\n lastName: string;\n /** The user phone number */\n phone: string;\n /** The user photo */\n photo: {\n /** The image object Key */\n objectKey: string;\n /** The inferred species */\n species: string;\n };\n /** The photos object */\n photos: IPetPhotoRank;\n /** The pet type */\n typeOfPet: string;\n}\n\n/**\n * The storage for the Add Pet Start Multi-step Form.\n *\n * @constant\n * @type {SessionStorage}\n */\nexport const storage: SessionStorage = new SessionStorage();\n\n/** The handler for the image change button of the Cropper */\n/**\n * This function single purpose is to overwrite the default behavior of this\n * action which is going to the previous step of the form. We want this to be\n * handled by the ImageUploadHandlerGroup which will bring back the\n * ImageUploader.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport const onChangeImageHandler = () => {};\n\n/**\n * A default value for the Image Tiles field props in case the form data does\n * not have a photo.\n */\nexport const defaultImageTilesProps = {\n species: 'Dog',\n};\n\n/**\n * The callback to get the Image Tiles field props\n *\n * @param {object} formData The form data\n * @returns {Partial<IImageTilesFormField>} The field props\n */\nexport const getImageTilesProps: Getter<\n IImageTilesFormField,\n MultiPageFormConfigurationData\n> = (formData: MultiPageFormConfigurationData): IImageTilesFormField => {\n /**\n * @property {object} photo The photo object\n * @property {object} photos The photos object\n */\n const { photo, photos } = formData as ICreateAccountStartFormData;\n /**\n * @property {string} objectKey The object key\n * @property {string} species The species\n */\n const { objectKey, species } = photo ?? defaultImageTilesProps;\n /**\n * @property {object} photo_2 The photo 2\n * @property {object} photo_3 The photo 3\n * @property {object} photo_4 The photo 4\n */\n const { photo_1, photo_2, photo_3, photo_4 } = photos ?? {};\n /**\n * The ranked images\n *\n * @constant {object} images\n */\n const images = {\n // Use object key from upload photo step to populate main photo\n photo_1: objectKey,\n // If main photo has been updated, use photo_1 from photos object\n ...appendAttributeIfExists('photo_1', photo_1),\n ...appendAttributeIfExists('photo_2', photo_2),\n ...appendAttributeIfExists('photo_3', photo_3),\n ...appendAttributeIfExists('photo_4', photo_4),\n };\n return {\n images: images,\n petSpecies: species.toLowerCase() as SpeciesTypes,\n showCounter: false,\n };\n};\n\n/**\n * The callback to get the Image Tiles field props\n *\n * @param {object} formData The form data\n * @returns {Partial<IImageUploadHandler>} The field props\n */\nexport const getImageUploadHandlerProps: Getter<\n IImageUploadHandler,\n MultiPageFormConfigurationData\n> = (formData: MultiPageFormConfigurationData): IImageUploadHandler => {\n /** @property {object} photo The photo object */\n const { photo } = formData as ICreateAccountStartFormData;\n\n /**\n * @property {string} objectKey The object key\n * @property {string} species The species\n */\n const { objectKey } = photo ?? {};\n const uploadedImage = objectKey ? generateImageUrl(objectKey) : objectKey;\n\n return {\n quality: 0.8,\n outputType: 'image/jpeg',\n aspectRatio: 1,\n onChangeImage: onChangeImageHandler,\n ...appendAttributeIfExists('uploadedImage', uploadedImage),\n };\n};\n\n/**\n * Create Account Start Configuration The Configuration for the Create Account\n * Start Multi-step Form .\n *\n * @constant\n */\nconst CreateAccountStartConfiguration: MultiPageFormConfigurationItem = {\n order: [\n 'name',\n 'email',\n 'phone',\n 'upload-photo',\n 'upload-more-photos',\n 'pet-type',\n ],\n data: {},\n storage,\n retainDataOnSubmit: true,\n content: {\n name: {\n title: 'Welcome to Petco Love Lost',\n description:\n 'Whether you need to report a lost or found pet or want to register your pet in case they go missing later – you’re in the right place.',\n fields: [\n {\n label: 'First Name',\n name: 'firstName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'First Name is required',\n },\n ],\n },\n {\n label: 'Last Name',\n name: 'lastName',\n type: 'text',\n validations: [\n {\n type: 'required',\n message: 'Last Name is required',\n },\n ],\n },\n ],\n },\n email: {\n title: \"What's your email?\",\n description:\n 'We’ll only use your email to keep in touch about the pet you register.',\n fields: [\n {\n label: 'Email',\n name: 'email',\n type: 'email',\n validations: [\n {\n type: 'required',\n message: 'Email is required',\n },\n {\n type: 'newUser',\n message: 'Email is already taken',\n },\n ],\n },\n ],\n },\n phone: {\n title: \"What's your number?\",\n description: phonePrivacyDisclosure,\n fields: [\n {\n label: 'Phone',\n name: 'phone',\n type: 'tel',\n validations: [\n {\n type: 'required',\n message: 'Phone number is required',\n },\n ],\n },\n ],\n },\n 'upload-photo': {\n title: 'Add main pet photo',\n description: (\n <>\n Photo search is based on the <b>main photo</b>. Please select a clear\n image of one pet looking directly at the camera.\n </>\n ),\n hideSubmit: true,\n fields: [\n {\n label: '',\n name: 'photo',\n type: 'uploadPhoto',\n fieldOptions: {\n imageUploadHandler: getImageUploadHandlerProps,\n },\n },\n ],\n },\n 'upload-more-photos': {\n title: 'Add more pet photos',\n description:\n 'Add up to three more photos to help others identify the pet.',\n fields: [\n {\n label: '',\n name: 'photos',\n type: 'imageTiles',\n fieldOptions: {\n imageTiles: getImageTilesProps,\n },\n validations: [],\n },\n ],\n },\n 'pet-type': {\n title: 'Nice pic! This pet is:',\n submitLabel: 'Continue',\n fields: [\n {\n label: '',\n name: 'typeOfPet',\n type: 'inputButtons',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Safe at Home',\n active: false,\n icon: 'home',\n value: 'safeAtHome',\n },\n {\n text: 'Lost',\n active: false,\n icon: 'signPost',\n value: 'lost',\n },\n {\n text: 'A Pet I Found',\n active: false,\n icon: 'search',\n value: 'found',\n },\n ],\n },\n },\n validations: [\n {\n type: 'required',\n message: 'Type is required',\n },\n ],\n },\n ],\n },\n },\n};\n\nexport default CreateAccountStartConfiguration;\n","import LocalStorage from '@/lib/utils/storage/local-storage';\nimport { MultiPageFormConfigurationItem, PageTypes } from './Configuration';\n\n/**\n * The storage for the I Found A Pet Multi-step Form.\n *\n * @constant\n * @type {LocalStorage}\n */\nexport const storage: LocalStorage = new LocalStorage();\n\n/** The handler for the image change button of the Cropper */\n/**\n * This function single purpose is to overwrite the default behavior of this\n * action which is going to the previous step of the form. We want this to be\n * handled by the ImageUploadHandlerGroup which will bring back the\n * ImageUploader.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport const onChangeImageHandler = () => {};\n\n/**\n * The order of the pages in the I Found A Pet Multi-step Form.\n *\n * @constant {PageTypes[]} foundPages\n */\nexport const foundPages: PageTypes[] = [\n 'location',\n 'cross-streets',\n 'upload-photo',\n];\n\n/**\n * I Found A Pet Configuration The Configuration for the I Found A Pet\n * Multi-step Form.\n *\n * @constant\n */\nconst IFoundAPetConfiguration: MultiPageFormConfigurationItem = {\n retainDataOnSubmit: true,\n order: foundPages,\n data: {},\n storage,\n content: {\n location: {\n title: 'Where did you find the pet?',\n description:\n 'Please provide a specific address. We will never share your exact location to the public.',\n fields: [\n {\n label: 'Found near (street address)',\n name: 'address',\n type: 'locationGoogle',\n fieldOptions: {\n locationGoogle: {\n displayStaticMap: true,\n },\n },\n validations: [\n {\n type: 'required',\n message: 'Address is required',\n },\n ],\n },\n ],\n },\n 'cross-streets': {\n title: 'What are the nearest cross streets?',\n description:\n 'Please provide the nearest cross streets and a landmark if there’s one nearby (e.g. 3rd and Main by the grocery store).',\n fields: [\n {\n label: 'Nearest cross streets, landmark. etc.',\n name: 'crossStreets',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'max',\n message: 'Cross streets must be at most 60 characters',\n value: 60,\n },\n ],\n },\n ],\n },\n 'upload-photo': {\n title: 'Add pet photo',\n description:\n 'Photo quality will affect your search results. Please select a clear image of one pet looking directly at the camera.',\n hideSubmit: true,\n fields: [\n {\n label: 'Photo',\n name: 'photo',\n type: 'uploadPhoto',\n fieldOptions: {\n imageUploadHandler: {\n quality: 0.8,\n outputType: 'image/jpeg',\n aspectRatio: 1,\n onChangeImage: onChangeImageHandler,\n },\n },\n },\n {\n classes: 'font-petco text-body5 pt-6',\n label: 'Photo',\n name: 'node',\n type: 'node',\n fieldOptions: {\n node: {\n options: (\n <p>\n Don’t have a photo?{' '}\n <button\n type=\"submit\"\n className=\"underline hover:no-underline\"\n data-testid=\"search-all\"\n >\n Search all pets\n </button>\n </p>\n ),\n },\n },\n },\n ],\n },\n },\n};\n\nexport default IFoundAPetConfiguration;\n","import LocalStorage from '@/lib/utils/storage/local-storage';\nimport { MultiPageFormConfigurationItem, PageTypes } from './Configuration';\n\n/**\n * The storage for the I Lost A Pet Multi-step Form.\n *\n * @constant\n * @type {LocalStorage}\n */\nexport const storage: LocalStorage = new LocalStorage();\n\n/** The handler for the image change button of the Cropper */\n/**\n * This function single purpose is to overwrite the default behavior of this\n * action which is going to the previous step of the form. We want this to be\n * handled by the ImageUploadHandlerGroup which will bring back the\n * ImageUploader.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport const onChangeImageHandler = () => {};\n\n/**\n * The order of the pages in the I Lost A Pet Multi-step Form.\n *\n * @constant {PageTypes[]} lostPages\n */\nexport const lostPages: PageTypes[] = [\n 'location',\n 'cross-streets',\n 'pet-date',\n 'upload-photo',\n];\n\n/**\n * I Lost A Pet Configuration The Configuration for the I Lost A Pet Multi-step\n * Form.\n *\n * @constant\n */\nconst ILostAPetConfiguration: MultiPageFormConfigurationItem = {\n retainDataOnSubmit: true,\n order: lostPages,\n data: {},\n storage,\n content: {\n location: {\n title: 'Where did your pet get lost?',\n description:\n 'Please provide a specific address. We will never share your exact location to the public.',\n fields: [\n {\n label: 'Lost near (street address)',\n name: 'address',\n type: 'locationGoogle',\n fieldOptions: {\n locationGoogle: {\n displayStaticMap: true,\n },\n },\n validations: [\n {\n type: 'required',\n message: 'Address is required',\n },\n ],\n },\n ],\n },\n 'cross-streets': {\n title: 'What are the nearest cross streets?',\n description:\n 'Please provide the nearest cross streets and a landmark if there’s one nearby (e.g. 3rd and Main by the grocery store).',\n fields: [\n {\n label: 'Nearest cross streets, landmark. etc.',\n name: 'crossStreets',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'max',\n message: 'Cross streets must be at most 60 characters',\n value: 60,\n },\n ],\n },\n ],\n },\n 'pet-date': {\n title: 'When did your pet go missing?',\n description:\n 'You will see results from the date you select through today.',\n fields: [\n {\n label: 'Lost date (mm/dd/yyyy)',\n name: 'lostDate',\n type: 'date',\n validations: [\n {\n type: 'required',\n message: 'Missing Date is required',\n },\n ],\n },\n ],\n },\n 'upload-photo': {\n title: 'Add pet photo',\n description:\n 'Photo quality will affect your search results. Please select a clear image of one pet looking directly at the camera.',\n hideSubmit: true,\n fields: [\n {\n label: 'Photo',\n name: 'photo',\n type: 'uploadPhoto',\n fieldOptions: {\n imageUploadHandler: {\n quality: 0.8,\n outputType: 'image/jpeg',\n aspectRatio: 1,\n onChangeImage: onChangeImageHandler,\n },\n },\n },\n {\n classes: 'font-petco text-body5 pt-6',\n label: 'Photo',\n name: 'node',\n type: 'node',\n fieldOptions: {\n node: {\n options: (\n <p>\n Don’t have a photo?{' '}\n <button\n type=\"submit\"\n className=\"underline hover:no-underline\"\n data-testid=\"search-all\"\n >\n Search all pets\n </button>\n </p>\n ),\n },\n },\n },\n ],\n },\n },\n};\n\nexport default ILostAPetConfiguration;\n","import { microchipSafeDescription } from '@/lib/constants/constants/forms';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport { adopterPetPhotoStorageKey } from '@/pages/onboard-pet/[id]';\nimport { MultiPageFormConfigurationItem } from './Configuration';\n\n/** Interface for the pet photo */\ninterface IOnboardPetPhotoStorage {\n /** The pet photo */\n photo?: string;\n /** The expiration date */\n expiration: string;\n}\n\n/**\n * The storage for the Onboard Pet Multi-step Form.\n *\n * @constant\n * @type {SessionStorage}\n */\nexport const storage: SessionStorage = new SessionStorage();\n\n/**\n * The submit label for the form.\n *\n * @constant {string}\n */\nexport const submitLabel = 'Add Pet';\n\n/**\n * The handler for the image change button of the Cropper.\n *\n * This function single purpose is to overwrite the default behavior of this\n * action which is going to the previous step of the form. We want this to be\n * handled by the ImageUploadHandlerGroup which will bring back the\n * ImageUploader.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst onChangeImageHandler = () => {};\n\nconst petPhoto = storage.get(\n adopterPetPhotoStorageKey\n) as IOnboardPetPhotoStorage;\n\n/**\n * The configuration for the Onboard Pet Multi-step Form.\n *\n * @constant\n */\nconst OnboardPetConfiguration: MultiPageFormConfigurationItem = {\n order: ['upload-photo', 'pet-name', 'pet-sex', 'location', 'pet-microchip'],\n data: {},\n storage,\n content: {\n 'upload-photo': {\n title: 'Crop photo',\n description:\n 'Crop the photo around the pet’s face and body for best results. Or you can upload a new photo below.',\n hideSubmit: true,\n fields: [\n {\n label: '',\n name: 'photo',\n type: 'uploadPhoto',\n fieldOptions: {\n imageUploadHandler: {\n quality: 0.8,\n outputType: 'image/jpeg',\n aspectRatio: 1,\n uploadedImage: petPhoto?.photo,\n onChangeImage: onChangeImageHandler,\n },\n },\n },\n ],\n },\n 'pet-name': {\n title: 'Now let’s confirm or update your pet’s name',\n fields: [\n {\n label: 'Pet name',\n name: 'petName',\n type: 'text',\n validations: [\n {\n type: 'blockProfanity',\n },\n {\n type: 'required',\n message: 'Pet Name is required',\n },\n ],\n fieldOptions: {},\n },\n ],\n },\n 'pet-sex': {\n title: '{{petName}} is a',\n fields: [\n {\n label: '',\n name: 'typeOfPet',\n type: 'inputButtons',\n classes: 'mb-5',\n fieldOptions: {\n inputButtons: {\n orientation: 'vertical',\n /** OnChange function */\n onChange: () => {\n return;\n },\n options: [\n {\n text: 'Female',\n active: false,\n icon: 'crown',\n value: 'female',\n },\n {\n text: 'Male',\n active: false,\n icon: 'bowTie',\n value: 'male',\n },\n ],\n },\n },\n validations: [],\n },\n ],\n },\n location: {\n title: 'Where do you and {{petName}} live?',\n description:\n 'Please provide a specific street address. We will never share your exact location.',\n fields: [\n {\n label: 'Address',\n name: 'address',\n type: 'locationGoogle',\n validations: [\n {\n type: 'required',\n message: 'Address is required',\n },\n ],\n },\n ],\n },\n 'pet-microchip': {\n title: 'Confirm or update your pet’s Microchip ID',\n description: microchipSafeDescription,\n submitLabel,\n fields: [\n {\n label: 'Enter microchip ID',\n name: 'microchip',\n type: 'microchip',\n validations: [],\n },\n ],\n },\n },\n};\n\nexport default OnboardPetConfiguration;\n","import { ILocationDto } from '@/components/molecules/InputPlacesFieldGoogle/InputPlacesFieldGoogle';\nimport { IOnCropFunctionResults } from '@/components/organisms/ImageUploadHandler/ImageUploadHandler';\nimport { InferredSpecies } from '@/lib/constants/types/pets';\nimport { SearchForTextResult } from '@aws-sdk/client-location';\nimport AbstractStorage from './abstract-storage';\nimport CookieSSRStorage from './cookie-ssr-storage';\nimport CookieStorage from './cookie-storage';\nimport LocalStorage from './local-storage';\nimport SessionStorage from './session-storage';\n\n/**\n * The valid type for the form storage response\n *\n * @typedef {string | InferredSpecies | undefined} FormStorageResponse\n */\ntype FormStorageResponse =\n | string\n | IOnCropFunctionResults\n | SearchForTextResult\n | ILocationDto\n | undefined;\n\n/**\n * Interface for the FormStorage class constructor data\n *\n * @interface IFormStorageData\n */\ninterface IFormStorageData {\n /** The form page id */\n formId: string;\n /** The storage class to use */\n storage: LocalStorage | SessionStorage | CookieSSRStorage | CookieStorage;\n}\n\n/**\n * Class to handle form local storage for a multi-step form\n *\n * @class FormStorage\n */\nclass FormStorage {\n /**\n * The form id\n *\n * @private\n * @memberof FormStorage\n * @member {string} formId\n * @type {string}\n */\n private formId: string;\n\n /**\n * The local storage instance\n *\n * @private\n * @memberof FormStorage\n * @member {LocalStorage} storage\n */\n private storage: AbstractStorage;\n\n /**\n * Create an instance of the Form Local Storage\n *\n * @param {string} formId - The form id\n */\n constructor({ formId, storage }: IFormStorageData) {\n this.formId = formId;\n this.storage = storage;\n }\n\n /**\n * Get key from form local storage\n *\n * @template T - Generic type for the return\n * @param {string} key - The key to get from form local storage\n * @returns {T} The key value\n */\n get<T = FormStorageResponse>(key: string): T | null {\n const formLocalStorageData = this.storage.get(this.formId);\n if (formLocalStorageData) {\n return formLocalStorageData[\n key as keyof typeof formLocalStorageData\n ] as T;\n }\n return null;\n }\n}\n\nexport default FormStorage;\n","import dynamic from 'next/dynamic';\n\nimport Head from '@/components/templates/Head/Head';\nimport { getIdTokenSSR } from '@/lib/dataSource/auth/getIdToken';\nimport getLocationLabel from '@/lib/dataSource/location/getLocationLabel';\nimport { readAdopter } from '@/lib/dataSource/lostApi/user/adopters/read';\nimport { tomorrow } from '@/lib/utils/helpers/dateHelpers/dates';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport { GetServerSideProps, GetServerSidePropsContext, NextPage } from 'next';\nimport { ReactElement, ReactNode, useEffect } from 'react';\n\nconst MinimalLayout = dynamic(\n import('@/components/layouts/MinimalLayout/MinimalLayout')\n);\nconst ActivateAccountTemplate = dynamic(\n import(\n '@/components/templates/ActivateAccountTemplate/ActivateAccountTemplate'\n )\n);\n\n/**\n * IShelterContactInformation\n *\n * @interface\n */\nexport interface IShelterContactInformation {\n /** The name of the shelter. */\n name: string;\n /**\n * The optional address of the shelter.\n *\n * @default ''\n */\n address?: string;\n /**\n * The optional email of the shelter.\n *\n * @default ''\n */\n email?: string;\n /**\n * The optional phone number of the shelter.\n *\n * @default ''\n */\n phone?: string;\n}\n\n/** Interface for the pet details */\nexport interface IAdopterPetDetails {\n /** The pet name */\n name?: string;\n /** The microchip string */\n microchip?: string;\n}\n\n/** Interface for the pet photo */\nexport interface IAdopterPetPhotoStorage {\n /** The pet photo */\n photo?: string;\n /** The expiration date */\n expiration: string;\n}\n\n/**\n * IActivateAccount\n *\n * @interface\n */\nexport interface IActivateAccount {\n /** The shelter contact information */\n shelterContactInformation: IShelterContactInformation;\n /** The pet details */\n pet: IAdopterPetDetails;\n /** The adopter token */\n token: string;\n /** The optional pet adoption image */\n adoptionImage?: string;\n /** The adopter email */\n email: string;\n}\n/** The storage used to store the token for later use in the signup form. */\nexport const storage = new SessionStorage();\n/** The storage key where the token will be stored */\nexport const storageKey = 'adopterToken';\n/** The storage key where the pet photo will be stored */\nexport const adopterPetPhotoStorageKey = 'adopterPetPhoto';\n\n/**\n * A page to activate account Page Component\n *\n * @param {IActivateAccount} props - The props\n * @returns {NextPage} Page\n */\nconst ActivateAccount: NextPage<IActivateAccount> = ({\n shelterContactInformation,\n pet,\n adoptionImage,\n token,\n email,\n}: IActivateAccount) => {\n useEffect(() => {\n storage.set(storageKey, { token, email }, { expires: tomorrow });\n\n /** Initializes the form id storage with prepopulated data */\n storage.set(\n // Importing the formId var will cause a circular reference problem.\n 'activate-account/signup',\n {\n petName: pet.name,\n microchip: pet.microchip,\n },\n { expires: tomorrow }\n );\n\n /**\n * Saves the pet photo to be used as a prop by the image uploader/cropper.\n *\n * This cannot be added to the form id storage as it uses the processed\n * image data from S3, no the initial image data.\n */\n storage.set(\n adopterPetPhotoStorageKey,\n {\n photo: `${process.env.NEXT_PUBLIC_CDN_BASE_URL}/${adoptionImage}`,\n },\n { expires: tomorrow }\n );\n });\n\n return (\n <section data-testid=\"activate-account\">\n <Head title=\"Activate Account\" noIndex={true} />\n <ActivateAccountTemplate\n shelterContactInformation={{\n ...shelterContactInformation,\n }}\n adoptionImage={adoptionImage}\n />\n </section>\n );\n};\n\n/**\n * Minimal Layout\n *\n * @param {ReactElement} page - Page Content\n * @returns {ReactNode} Page Results\n */\nActivateAccount.getLayout = (page: ReactElement): ReactNode => {\n return <MinimalLayout>{page}</MinimalLayout>;\n};\n\nexport default ActivateAccount;\n\n/**\n * Get Server Side Props This function is used to populate the form found in the\n * context params of the url path.\n *\n * @param {object} context - The context of the page\n */\nexport const getServerSideProps: GetServerSideProps = async (\n context: GetServerSidePropsContext\n) => {\n const idToken = await getIdTokenSSR(context.req, context.res);\n if (idToken) {\n return {\n redirect: {\n destination: '/dash',\n permanent: false,\n },\n };\n }\n const adopterToken = context.params.id;\n const response = await readAdopter(adopterToken);\n\n const shelterLabel = getLocationLabel({\n address: response?.awo?.geolocation?.streetAddress,\n city: response?.awo?.geolocation?.city,\n state: response?.awo?.geolocation?.region,\n zip: response?.awo?.geolocation?.postalCode,\n });\n\n return {\n props: {\n shelterContactInformation: {\n name: response?.awo?.name || null,\n address: response?.awo?.geolocation?.label || shelterLabel || null,\n email: response?.awo?.email || null,\n phone: response?.awo?.phoneNumber || null,\n },\n pet: {\n name: response?.pet?.name || null,\n microchip: response?.pet?.microchipString,\n },\n adoptionImage: response.pet.photoUrl,\n token: adopterToken,\n email: response.adopter.email,\n },\n };\n};\n","import CdnImage from '@/component-library/atoms/CdnImage/CdnImage';\nimport Paragraph from '@/components/atoms/Paragraph/Paragraph';\nimport { useEffect } from 'react';\n\n/**\n * Onboard Pet template props\n *\n * @interface IOnboardPetTemplate\n */\nexport interface IOnboardPetTemplate {\n /**\n * The total time in milliseconds for the progress bar to reach 100%\n *\n * @memberof IOnboardPetTemplate\n * @member {number} timeToComplete\n */\n timeToComplete: number;\n /**\n * Function that will execute when the progress bar reaches 100%.\n *\n * @memberof IOnboardPetTemplate\n * @member {() => void} [onCompleted]\n */\n onCompleted?: () => void;\n}\n\n/**\n * The Onboard Pet Template\n *\n * @param {IOnboardPetTemplate} props - The props\n * @returns {React.ReactNode} The component\n */\nconst OnboardPetTemplate = ({\n timeToComplete,\n onCompleted,\n}: IOnboardPetTemplate) => {\n useEffect(() => {\n const timeout = setTimeout(() => {\n if (onCompleted) {\n onCompleted();\n }\n }, timeToComplete);\n\n return () => {\n clearTimeout(timeout);\n };\n }, [onCompleted, timeToComplete]);\n\n return (\n <div\n data-testid=\"onboard-pet-template\"\n className=\"grid grid-cols-4 sm:grid-cols-6 md:grid-cols-12 gap-x-4 sm:gap-x-6 md:gap-x-8 text-center\"\n >\n <div className=\"pt-6 md:pt-20 px-6 sm:px-8 md:px-10 col-span-4 sm:col-start-2 md:col-start-5\">\n <div className=\"flex w-full flex-col items-center justify-center mt-28\">\n <div className=\"flex flex-col items-center\">\n <div className=\"text-center\">\n <Paragraph\n size=\"body4\"\n styling=\"bold\"\n className=\"text-secondaryBase-400 md:px-4\"\n >\n Welcome back to Petco Love Lost!\n <br />\n Sign in to register your new pet.\n </Paragraph>\n </div>\n\n <div className=\"w-40 mx-auto mt-10 leading-none\">\n <CdnImage\n src={\n process.env.NEXT_PUBLIC_CDN_BASE_URL +\n '/assets/lost/lost-logo-small.svg'\n }\n priority={false}\n width={246}\n height={44}\n layout=\"intrinsic\"\n alt=\"Petco Love Lost logo\"\n />\n </div>\n\n <div className=\"text-neutral-500 text-xs mt-16 w-16 flex items-baseline\">\n Redirecting\n <div className=\"flex flex-row space-x-1 items-end pb-2 ml-1\">\n <div className=\"rounded-full h-0.5 w-0.5 animate-chat-typing-animation-1 bg-neutral-600\"></div>\n <div className=\"rounded-full h-0.5 w-0.5 animate-chat-typing-animation-2 bg-neutral-600\"></div>\n <div className=\"rounded-full h-0.5 w-0.5 animate-chat-typing-animation-3 bg-neutral-600\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default OnboardPetTemplate;\n","import HeadTemplate from '@/components/templates/Head/Head';\nimport OnboardPetTemplate from '@/components/templates/OnboardPetTemplate/OnboardPetTemplate';\nimport { readAdopter } from '@/lib/dataSource/lostApi/user/adopters/read';\nimport getBasePath from '@/lib/utils/getBasePath/getBasePath';\nimport { tomorrow } from '@/lib/utils/helpers/dateHelpers/dates';\nimport SessionStorage from '@/lib/utils/storage/session-storage';\nimport { GetServerSideProps, GetServerSidePropsContext, NextPage } from 'next';\nimport React, { useEffect } from 'react';\n\n/**\n * Interface for the pet details\n *\n * @interface IAdopterPetDetails\n */\nexport interface IAdopterPetDetails {\n /**\n * The pet name\n *\n * @memberof IAdopterPetDetails\n * @member {string} [name]\n */\n name?: string;\n /**\n * The pet microchip string\n *\n * @memberof IAdopterPetDetails\n * @member {string} [microchip]\n */\n microchip?: string;\n}\n\n/**\n * IOnboardPet\n *\n * @interface IOnboardPet\n */\nexport interface IOnboardPet {\n /**\n * The pet details\n *\n * @memberof IOnboardPet\n * @member {IAdopterPetDetails} pet\n */\n pet: IAdopterPetDetails;\n /**\n * The adopter token\n *\n * @memberof IOnboardPet\n * @member {string} token\n */\n token: string;\n /**\n * The optional pet adoption image\n *\n * @memberof IOnboardPet\n * @member {string} [adoptionImage]\n */\n adoptionImage?: string;\n /**\n * The adopter email\n *\n * @memberof IOnboardPet\n * @member {string} email\n */\n email: string;\n}\n\n/** The storage used to store the token for later use in the signup form. */\nconst storage = new SessionStorage();\n\n/** The storage key where the token will be stored */\nexport const adopterTokenStorageKey = 'adopterToken';\n\n/** The storage key where the pet photo will be stored */\nexport const adopterPetPhotoStorageKey = 'adopterPetPhoto';\n\n/**\n * OnboardPetLanding\n *\n * @param {IOnboardPet} props - The props for the component\n * @returns {React.ReactNode} The component\n */\nexport default function OnboardPetLanding({\n pet,\n adoptionImage,\n token,\n email,\n}: IOnboardPet) {\n useEffect(() => {\n storage.set(\n adopterTokenStorageKey,\n { token, email },\n { expires: tomorrow }\n );\n\n /** Initializes the form id storage with prepopulated data */\n storage.set(\n // Importing the formId var will cause a circular reference problem.\n 'onboard-pet/form',\n {\n petName: pet.name,\n microchip: pet.microchip,\n },\n { expires: tomorrow }\n );\n\n /**\n * Saves the pet photo to be used as a prop by the image uploader/cropper.\n *\n * This cannot be added to the form id storage as it uses the processed\n * image data from S3, no the initial image data.\n */\n storage.set(\n adopterPetPhotoStorageKey,\n {\n photo: `${process.env.NEXT_PUBLIC_CDN_BASE_URL}/${adoptionImage}`,\n },\n { expires: tomorrow }\n );\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <section data-testid=\"onboard-pet-landing\" className=\"h-screen w-full\">\n <HeadTemplate title=\"Sign in to register your pet\" noIndex={true} />\n <OnboardPetTemplate\n timeToComplete={1500}\n onCompleted={() => {\n window.location.href = `${getBasePath()}/api/auth/login/?returnTo=${getBasePath()}/onboard-pet/form`;\n }}\n />\n </section>\n );\n}\n\n/**\n * @param {GetServerSidePropsContext} context - The context for the page\n * @returns {NextPage} The props for the page\n */\nexport const getServerSideProps: GetServerSideProps = async (\n context: GetServerSidePropsContext\n) => {\n const adopterToken = context.params.id;\n const response = await readAdopter(adopterToken);\n\n return {\n props: {\n pet: {\n name: response?.pet?.name || null,\n microchip: response?.pet?.microchipString,\n },\n adoptionImage: response.pet.photoUrl,\n token: adopterToken,\n email: response.adopter.email,\n },\n };\n};\n"],"names":["__webpack_exports__","Z","text","colorShade","colorType","className","param","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","div","concat","percentage","classes","hidden","role","aria-valuenow","aria-valuemin","aria-valuemax","style","width","defaultSubmitLabel","submitFunction","submitButtonDisabled","loading","isLoadingForm","originalQueryParams","formTitle","setFormTitle","useState","formDescription","setFormDescription","formOverline","setFormOverline","completed","setCompleted","hideSubmitStepperForm","setHideSubmitStepperForm","router","useRouter","progress","formId","pageId","nextUrl","previousUrl","validProgress","formData","formContent","formOrder","state","renderMode","dispatch","useMultiPageFormContext","title","description","overline","fields","defaults","hideSubmit","hideSubmitForm","submitLabel","useMemo","formStorage","useRef","useEffect","storage","forms","current","FormStorage","formDataSwap","HandlebarStringReplace","Promise","all","__webpack_require__","e","then","bind","default","stringReplacer","compiledTitle","replace","compiledDescription","compiledOverline","formValidationSchema","formValidationBuilder","register","handleSubmit","reset","control","formState","errors","isValid","setError","useForm","resolver","yupResolver","mode","submitForm","type","data","backButtonHandler","push","pathname","search","split","nextUrlParams","URLSearchParams","Object","keys","length","entries","forEach","key","value","set","String","query","fromEntries","undefined","shouldClearFormData","retainDataOnSubmit","clearAllFormRelatedData","formIndexUrl","urlSeparator","showSkipOption","every","field","validations","jsxs","section","ProgressBar","PageWrapper","Loading","Paragraph","size","font","Heading","form","onSubmit","map","FieldBuilder","name","forwardHandler","backHandler","setHideSubmit","Button","variant","color","disabled","onClick","notificationsHeader","notificationsDescription","notificationsInfo","microchipLostFoundDescription","microchipSafeDescription","phonePrivacyDisclosure","locationPrivacyDisclosure","useFeatureOrder","featureFlags","featureOrders","intersection","filter","includes","element","loadAllFormData","config","InitConfiguration","loadedData","get","multiPageFormInitialState","getNextPage","order","prependPath","index","indexOf","getPreviousPage","getProgressPercentage","progressBarPercent","currentPage","MultiPageFormContext","createContext","storeFormData","storageAdapter","expires","tomorrow","clearFormData","delete","storeFormProgress","getFormProgress","checkProgressOrder","currentIndex","progressIndex","MultiPageFormReducer","action","pastData","newData","useInitData","formContext","initialState","withFormContentValues","rest","maybeCallFunctionWithParams","MultiPageFormProvider","children","useReducer","content","featureOrder","useFeature","jsx_runtime","Provider","useContext","SessionStorage","petPhoto","adopterPetPhotoStorageKey","ActivateAccountConfiguration","label","message","phone","fieldOptions","imageUploadHandler","quality","outputType","aspectRatio","uploadedImage","photo","onChangeImage","inputButtons","orientation","onChange","options","active","icon","location","node","styling","LabelChip","divider","ZP","LocalStorage","AddPetFoundConfiguration","locationGoogle","displayStaticMap","textArea","rows","floatingLabel","AddPetLostConfiguration","AddPetSafeConfiguration","requiredAddressComponents","autocompleteTypes","configurations","AllPetsConfiguration","ILostAPetConfiguration","IFoundAPetConfiguration","CreateAccountStartConfiguration","CreateAccountLostPhotoConfiguration","CreateAccountLostDistanceConfiguration","CreateAccountLostReportConfiguration","CreateAccountSafeConfiguration","CreateAccountLostConfiguration","CreateAccountFoundConfiguration","CreateAccountFoundPhotoConfiguration","CreateAccountFoundDistanceConfiguration","CreateAccountFoundReportConfiguration","AddPetStartConfiguration","OnboardPetConfiguration","test","test_flag_date_filter","address","imageCropper","image","Configuration","email","password","onChangeImageHandler","defaultImageTilesProps","species","Fragment","b","objectKey","generateImageUrl","appendAttributeIfExists","imageTiles","photos","photo_1","photo_2","photo_3","photo_4","images","petSpecies","toLowerCase","showCounter","p","button","formLocalStorageData","constructor","MinimalLayout","dynamic","ActivateAccountTemplate","storageKey","ActivateAccount","shelterContactInformation","pet","adoptionImage","token","petName","microchip","process","Head","noIndex","getLayout","page","OnboardPetTemplate_OnboardPetTemplate","timeToComplete","onCompleted","timeout","setTimeout","clearTimeout","br","CdnImage","src","priority","height","layout","alt","adopterTokenStorageKey","OnboardPetLanding","HeadTemplate","OnboardPetTemplate","window","href","getBasePath"],"sourceRoot":""}