@dropins/storefront-account 3.2.0 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/api/getCustomer/graphql/getCustomer.graphql.d.ts +1 -1
- package/chunks/AddressValidation.js +1 -1
- package/chunks/AddressValidation.js.map +1 -1
- package/chunks/getOrderHistoryList.js +2 -2
- package/chunks/getOrderHistoryList.js.map +1 -1
- package/chunks/updateCustomer.js +12 -6
- package/chunks/updateCustomer.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddressValidation.js","sources":["/@dropins/storefront-account/src/containers/AddressForm/AddressForm.tsx","/@dropins/storefront-account/src/lib/validationFields.ts","/@dropins/storefront-account/src/lib/convertToBoolean.ts","/@dropins/storefront-account/src/lib/normalizeGetAddressData.ts","/@dropins/storefront-account/src/lib/getFormValuesFromRef.ts","/@dropins/storefront-account/src/lib/areRequiredFieldsValid.ts","/@dropins/storefront-account/src/lib/checkIsFunction.ts","/@dropins/storefront-account/src/lib/initializeFormDataAndErrors.ts","/@dropins/storefront-account/src/hooks/components/useForm.tsx","/@dropins/storefront-account/src/data/models/attributes-form.ts","/@dropins/storefront-account/src/components/Form/FormInputs/FormInputs.tsx","/@dropins/storefront-account/src/components/AccountLoaders/AccountLoaders.tsx","/@dropins/storefront-account/src/components/Form/Form.tsx","/@dropins/storefront-account/src/lib/getAddressButtonAriaLabel.ts","/@dropins/storefront-account/src/components/AddressCard/AddressCard.tsx","../../node_modules/@adobe-commerce/elsie/src/icons/Add.svg","../../node_modules/@adobe-commerce/elsie/src/icons/AddressBook.svg","../../node_modules/@adobe-commerce/elsie/src/icons/ChevronRight.svg","../../node_modules/@adobe-commerce/elsie/src/icons/EmptyBox.svg","/@dropins/storefront-account/src/components/AddressActions/AddressActions.tsx","/@dropins/storefront-account/src/components/AddressModal/AddressModal.tsx","/@dropins/storefront-account/src/components/EmptyList/EmptyList.tsx","/@dropins/storefront-account/src/lib/manageAddressDeletion.ts","/@dropins/storefront-account/src/configs/defaultAttributePreset.config.ts","/@dropins/storefront-account/src/lib/sortingAddressesList.ts","/@dropins/storefront-account/src/hooks/containers/useAddresses.tsx","/@dropins/storefront-account/src/components/AddressesWrapper/AddressesWrapper.tsx","/@dropins/storefront-account/src/configs/addressField.config.ts","/@dropins/storefront-account/src/lib/getFieldsConfig.ts","/@dropins/storefront-account/src/lib/getFormValues.ts","/@dropins/storefront-account/src/lib/prepareNormalizedData.ts","/@dropins/storefront-account/src/lib/normalizeAttributes.ts","/@dropins/storefront-account/src/lib/serializeAddressForm.ts","/@dropins/storefront-account/src/lib/transformSessionData.ts","/@dropins/storefront-account/src/hooks/containers/useAddressForm.tsx","/@dropins/storefront-account/src/lib/transformDefaultValuesAddresses.ts","/@dropins/storefront-account/src/components/AddressFormWrapper/AddressFormWrapper.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport { AddressFormWrapper } from '@/account/components';\nimport { AddressFormProps } from '@/account/types';\n\nexport const AddressForm: Container<AddressFormProps> = ({\n hideActionFormButtons,\n formName,\n showFormLoader,\n showSaveCheckBox,\n saveCheckBoxValue,\n forwardFormRef,\n slots,\n addressesFormTitle,\n className,\n addressFormId,\n inputsDefaultValueSet,\n billingCheckBoxValue,\n shippingCheckBoxValue,\n showBillingCheckBox,\n showShippingCheckBox,\n isOpen,\n fieldIdPrefix,\n onSubmit,\n onCloseBtnClick,\n onSuccess,\n onError,\n onChange,\n}) => {\n return (\n <div className={classes(['account-address-form'])}>\n <AddressFormWrapper\n hideActionFormButtons={hideActionFormButtons}\n formName={formName}\n showFormLoader={showFormLoader}\n slots={slots}\n addressesFormTitle={addressesFormTitle}\n className={className}\n addressFormId={addressFormId}\n inputsDefaultValueSet={inputsDefaultValueSet}\n shippingCheckBoxValue={shippingCheckBoxValue}\n billingCheckBoxValue={billingCheckBoxValue}\n showShippingCheckBox={showShippingCheckBox}\n showBillingCheckBox={showBillingCheckBox}\n isOpen={isOpen}\n fieldIdPrefix={fieldIdPrefix}\n onSubmit={onSubmit}\n onCloseBtnClick={onCloseBtnClick}\n onSuccess={onSuccess}\n onError={onError}\n onChange={onChange}\n forwardFormRef={forwardFormRef}\n showSaveCheckBox={showSaveCheckBox}\n saveCheckBoxValue={saveCheckBoxValue}\n />\n </div>\n );\n};\n","/* eslint-disable no-useless-escape */\n\n/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\ntype ValidationConfig = Record<string, string>;\ntype TranslationList = Record<string, string>;\ntype ErrorsList = Record<string, string>;\nexport type ValidationFieldsConfig = {\n validateRules: Record<string, string>[];\n code?: string;\n customUpperCode: string;\n required: boolean;\n};\n\nenum ConfigEnumLength {\n MIN_TEXT_LENGTH = 'MIN_TEXT_LENGTH',\n MAX_TEXT_LENGTH = 'MAX_TEXT_LENGTH',\n DATE_RANGE_MIN = 'DATE_RANGE_MIN',\n DATE_RANGE_MAX = 'DATE_RANGE_MAX',\n}\n\nexport enum InputValidation {\n Numeric = 'numeric',\n AlphanumWithSpaces = 'alphanum-with-spaces',\n Alphanumeric = 'alphanumeric',\n Alpha = 'alpha',\n Email = 'email',\n Length = 'length',\n Date = 'date',\n Url = 'url',\n}\n\nconst flattenObjectsArray = (arr: ValidationConfig[]): ValidationConfig => {\n return arr.reduce((acc, obj) => {\n return { ...acc, [obj.name]: obj.value };\n }, {});\n};\n\n//The basic material for the functions responsible for validation was taken from https://github.com/magento/magento2/blob/2.4/app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js\nexport const validateNumeric = (value: string): boolean => /^\\d+$/.test(value);\n\nexport const validateAlphanumWithSpaces = (value: string): boolean =>\n /^[a-zA-Z0-9\\s]+$/.test(value);\n\nexport const validateAlphanumeric = (value: string): boolean =>\n /^[a-zA-Z0-9]+$/.test(value);\n\nexport const validateAlpha = (value: string): boolean =>\n /^[a-zA-Z]+$/.test(value);\n\nexport const validateEmail = (value: string): boolean =>\n /^[a-z0-9,!\\#\\$%&'\\*\\+\\/=\\?\\^_`\\{\\|\\}~-]+(\\.[a-z0-9,!\\#\\$%&'\\*\\+\\/=\\?\\^_`\\{\\|\\}~-]+)*@([a-z0-9-]+\\.)+[a-z]{2,}$/i.test(\n value\n );\n\nexport const validateDate = (value: string): boolean =>\n /^\\d{4}-\\d{2}-\\d{2}$/.test(value) && !isNaN(Date.parse(value));\n\nexport const isDateWithinRange = (\n date: string,\n minTimestamp?: number,\n maxTimestamp?: number\n): boolean => {\n const dateTimestamp = new Date(date).getTime() / 1000;\n\n if (isNaN(dateTimestamp) || dateTimestamp < 0) {\n return false;\n }\n\n if (minTimestamp !== undefined && dateTimestamp < minTimestamp) {\n return false;\n }\n\n if (maxTimestamp !== undefined && dateTimestamp > maxTimestamp) {\n return false;\n }\n\n return true;\n};\n\nexport const convertTimestampToDate = (\n timestamp: string | null | undefined\n): string => {\n if (!timestamp || isNaN(Number(timestamp))) {\n return '';\n }\n\n return new Date(parseInt(timestamp, 10) * 1000).toISOString().split('T')[0];\n};\n\nexport const validateUrl = (url: string) => {\n const urlPattern =\n /^(https?|ftp):\\/\\/(([A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))(\\.[A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))*)(:(\\d+))?(\\/[A-Z0-9~](([A-Z0-9_~-]|\\.)*[A-Z0-9~]|))*\\/?(.*)?$/i;\n return urlPattern.test(url);\n};\n\nexport const validateLength = (\n value: string,\n minLength: number,\n maxLength: number\n): boolean => {\n const length = value.length;\n return length >= minLength && length <= maxLength;\n};\n\nexport const validationFields = (\n value: string,\n configs: ValidationFieldsConfig,\n translations: TranslationList,\n errorsList: ErrorsList\n) => {\n const {\n requiredFieldError,\n lengthTextError,\n numericError,\n alphaNumWithSpacesError,\n alphaNumericError,\n alphaError,\n emailError,\n dateError,\n urlError,\n dateLengthError,\n } = translations;\n\n const fieldName = configs?.customUpperCode as string;\n\n const defaultFields = { [fieldName]: '' };\n\n if (errorsList[fieldName]) {\n delete errorsList[fieldName];\n }\n\n if (configs?.required && (!value || value === 'false')) {\n return { [fieldName]: requiredFieldError };\n }\n\n if (!configs?.required && !value) {\n return defaultFields;\n }\n\n if (!configs?.validateRules?.length) return defaultFields;\n\n const validateRulesConfig = flattenObjectsArray(configs?.validateRules);\n\n const min = validateRulesConfig[ConfigEnumLength.MIN_TEXT_LENGTH] ?? 1;\n const max = validateRulesConfig[ConfigEnumLength.MAX_TEXT_LENGTH] ?? 255;\n const dateMin = validateRulesConfig[ConfigEnumLength.DATE_RANGE_MIN];\n const dateMax = validateRulesConfig[ConfigEnumLength.DATE_RANGE_MAX];\n\n if (!validateLength(value, +min, +max) && !(dateMin || dateMax)) {\n return {\n [fieldName]: lengthTextError.replace('{min}', min).replace('{max}', max),\n };\n }\n\n if (!isDateWithinRange(value, +dateMin, +dateMax) && (dateMin || dateMax)) {\n return {\n [fieldName]: dateLengthError\n .replace('{min}', convertTimestampToDate(dateMin))\n .replace('{max}', convertTimestampToDate(dateMax)),\n };\n }\n\n const validationMap = {\n [InputValidation.Numeric]: {\n validate: validateNumeric,\n error: numericError,\n },\n [InputValidation.AlphanumWithSpaces]: {\n validate: validateAlphanumWithSpaces,\n error: alphaNumWithSpacesError,\n },\n [InputValidation.Alphanumeric]: {\n validate: validateAlphanumeric,\n error: alphaNumericError,\n },\n [InputValidation.Alpha]: {\n validate: validateAlpha,\n error: alphaError,\n },\n [InputValidation.Email]: {\n validate: validateEmail,\n error: emailError,\n },\n [InputValidation.Date]: {\n validate: validateDate,\n error: dateError,\n },\n [InputValidation.Url]: {\n validate: validateUrl,\n error: urlError,\n },\n };\n\n const validation =\n validationMap[\n validateRulesConfig['INPUT_VALIDATION'] as keyof typeof validationMap\n ];\n\n if (\n validation &&\n !validation.validate(value) &&\n !errorsList[fieldName]?.length\n ) {\n return { [fieldName]: validation.error };\n }\n\n return defaultFields;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const convertToBoolean = (element: string | number): boolean => {\n switch (element) {\n case 'on':\n case 'true':\n case 1:\n case '1':\n return true;\n case '0':\n case 'off':\n case 'false':\n case 0:\n return false;\n default:\n return false;\n }\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { convertKeysCase, convertToSnakeCase } from '@/account/lib/convertCase';\nimport { convertToBoolean } from './convertToBoolean';\n\nconst booleanList = ['true', 'false', 'yes', 'on', 'off'];\n\nconst dictionary: Record<string, string> = {\n firstName: '',\n lastName: '',\n city: '',\n company: '',\n countryCode: '',\n region: '',\n regionCode: '',\n regionId: '',\n id: '',\n telephone: '',\n vatId: '',\n postcode: '',\n defaultShipping: '',\n defaultBilling: '',\n street: '',\n saveAddressBook: '',\n prefix: '',\n middleName: '',\n fax: '',\n suffix: '',\n uid: '',\n} as const;\n\nexport const groupMultilineFields = (\n inputObj: Record<string, any>\n): Record<string, any> => {\n const outputObj: Record<string, any> = {};\n const multilineFields: Record<\n string,\n Array<{ index: number; value: any }>\n > = {};\n\n for (const key in inputObj) {\n if (Object.prototype.hasOwnProperty.call(inputObj, key)) {\n const value = inputObj[key];\n const match = key.match(/^(.*)Multiline_(\\d+)$/);\n\n if (match) {\n const baseKey: string = match[1];\n const index: number = parseInt(match[2], 10);\n\n if (!multilineFields[baseKey]) {\n multilineFields[baseKey] = [];\n }\n\n multilineFields[baseKey].push({ index, value });\n } else {\n const relatedMultilineKeys = Object.keys(inputObj).filter((k) =>\n k.startsWith(`${key}Multiline_`)\n );\n if (relatedMultilineKeys.length > 0) {\n multilineFields[key] = [{ index: 1, value }];\n } else {\n outputObj[key] = value;\n }\n }\n }\n }\n\n for (const baseKey in multilineFields) {\n if (Object.prototype.hasOwnProperty.call(multilineFields, baseKey)) {\n const entries = multilineFields[baseKey];\n entries.sort((a, b) => a.index - b.index);\n outputObj[baseKey] = entries.map((entry) => entry.value);\n }\n }\n\n return outputObj;\n};\n\nexport const separateKeys = (\n inputData: Record<string, any>\n): Record<keyof typeof dictionary, unknown> => {\n const defaultFields: Record<string, any> = {};\n const customAttributes: Record<string, string | boolean | number>[] = [];\n\n for (const key in inputData) {\n const value = booleanList.includes(inputData[key])\n ? convertToBoolean(inputData[key])\n : inputData[key];\n\n if (Object.prototype.hasOwnProperty.call(inputData, key)) {\n if (Object.prototype.hasOwnProperty.call(dictionary, key)) {\n defaultFields[key] = value;\n } else {\n customAttributes.push({ code: convertToSnakeCase(key), value });\n }\n }\n }\n\n return { ...defaultFields, customAttributes };\n};\n\nexport default (fields?: Record<string, any>, isForm = false) => {\n const newFields = convertKeysCase(fields, 'camelCase', {\n firstname: 'firstName',\n lastname: 'lastName',\n middlename: 'middleName',\n });\n\n const result = separateKeys(groupMultilineFields(newFields));\n\n if (!isForm) return result;\n\n const [regionCode, regionId] = result.region\n ? (result.region as string).split(',')\n : [];\n\n return {\n ...result,\n region: {\n regionCode,\n ...(regionId && { regionId: +regionId }),\n },\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { RefObject } from 'preact';\n\nexport default (formRef: RefObject<HTMLFormElement>): Record<string, any> => {\n if (!formRef.current) {\n return {};\n }\n\n const elements = formRef.current.elements;\n\n const formValues = Array.from(elements).reduce(\n (acc: Record<string, any>, el: any) => {\n if (el.name) {\n acc[el.name] = el.type === 'checkbox' ? el.checked : el.value;\n }\n return acc;\n },\n {}\n );\n\n return formValues;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\ntype ErrorsList = {\n [key: string]: string;\n};\n\nexport default (\n errorsList: ErrorsList,\n forValues: Record<string, string | number | boolean>\n): boolean => {\n if (!Object.keys(errorsList).length) return false;\n\n const result = Object.keys(errorsList).every(\n (key) => key in forValues && forValues[key] !== ''\n );\n\n return result;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const checkIsFunction = (value: any): value is Function => {\n return typeof value === 'function';\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport default (\n fieldsConfig: Array<{\n customUpperCode?: string;\n required?: boolean;\n defaultValue?: unknown;\n }>\n): {\n initialData: Record<string, unknown>;\n errorList: Record<string, string>;\n} => {\n return fieldsConfig.reduce(\n (\n acc: {\n initialData: Record<string, unknown>;\n errorList: Record<string, string>;\n },\n { customUpperCode, required, defaultValue }\n ) => {\n if (required && customUpperCode) {\n acc.initialData[customUpperCode] = defaultValue || '';\n acc.errorList[customUpperCode] = '';\n }\n\n return acc;\n },\n {\n initialData: {},\n errorList: {},\n }\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { useFormProps } from '@/account/types';\nimport {\n validationFields,\n ValidationFieldsConfig,\n} from '@/account/lib/validationFields';\nimport normalizeGetAddressData from '@/account/lib/normalizeGetAddressData';\nimport getFormValuesFromRef from '@/account/lib/getFormValuesFromRef';\nimport areRequiredFieldsValid from '@/account/lib/areRequiredFieldsValid';\nimport { checkIsFunction } from '@/account/lib/checkIsFunction';\nimport { CustomerAddressesModel } from '@/account/data/models';\nimport initializeFormDataAndErrors from '@/account/lib/initializeFormDataAndErrors';\n\nconst isObjectNotEmpty = (obj: Record<string, string>) =>\n Object.keys(obj).length > 0;\n\nexport const useForm = ({\n fieldsConfig,\n onSubmit,\n onChange,\n setInputChange,\n formName,\n}: useFormProps) => {\n const translations = useText({\n requiredFieldError: 'Account.FormText.requiredFieldError',\n lengthTextError: 'Account.FormText.lengthTextError',\n numericError: 'Account.FormText.numericError',\n alphaNumWithSpacesError: 'Account.FormText.alphaNumWithSpacesError',\n alphaNumericError: 'Account.FormText.alphaNumericError',\n alphaError: 'Account.FormText.alphaError',\n emailError: 'Account.FormText.emailError',\n dateError: 'Account.FormText.dateError',\n dateLengthError: 'Account.FormText.dateLengthError',\n urlError: 'Account.FormText.urlError',\n });\n\n const formRef = useRef<HTMLFormElement>(null);\n const [formData, setFormData] = useState<Record<string, string | number>>({});\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [requiredFields, setRequiredFields] = useState({});\n const [regionEnabled, setRegionEnabled] = useState(true);\n const [effectHasRun, setEffectHasRun] = useState(false);\n const [shouldBlockEffect, setShouldBlockEffect] = useState(false);\n const [shouldTriggerEffect, setShouldTriggerEffect] = useState(true);\n const [isDataValid, setIsDataValid] = useState(false);\n\n useEffect(() => {\n const getGridRowCount = () => {\n if (formRef.current) {\n const computedStyles = window.getComputedStyle(formRef.current);\n const rows = computedStyles\n .getPropertyValue('grid-template-rows')\n .split(' ').length;\n const checkbox = formRef.current.querySelector(\n '.account-address-form--saveAddressBook'\n );\n\n if (checkbox) {\n (checkbox as HTMLInputElement).style.gridRow = String(rows - 1);\n }\n }\n };\n\n getGridRowCount();\n\n window.addEventListener('resize', getGridRowCount);\n\n return () => {\n window.removeEventListener('resize', getGridRowCount);\n };\n }, [fieldsConfig?.length]);\n\n const handleValidationSubmit = useCallback(\n (disableShowError = false) => {\n let formValid = true;\n const errorsList = { ...errors };\n let firstErrorField: string | null = null;\n\n for (const [name, value] of Object.entries(formData)) {\n const fieldConfig = fieldsConfig?.find((config) =>\n config.customUpperCode.includes(name)\n );\n\n const validationResult = validationFields(\n value.toString(),\n fieldConfig as ValidationFieldsConfig,\n translations,\n errorsList\n );\n\n if (validationResult[name]) {\n Object.assign(errorsList, validationResult);\n formValid = false;\n }\n\n if (!firstErrorField) {\n firstErrorField =\n Object.keys(errorsList).find((key) => errorsList[key]) || null;\n }\n }\n\n if (!disableShowError) {\n setErrors(errorsList);\n }\n\n if (firstErrorField && formRef.current && !disableShowError) {\n const input = formRef.current.elements.namedItem(\n firstErrorField\n ) as HTMLElement;\n input?.focus();\n }\n\n return formValid;\n },\n [errors, fieldsConfig, formData, translations]\n );\n\n const collectFormData = useCallback(\n (\n fieldValue: string | number | boolean,\n name: string,\n requiredList: Record<string, string>,\n event: Event | null\n ) => {\n const fieldsForm = {\n ...getFormValuesFromRef(formRef),\n [name]: fieldValue,\n ...(name.includes('countryCode') ? { region: '' } : {}),\n };\n\n const data = {\n data: normalizeGetAddressData(fieldsForm, true),\n isDataValid: areRequiredFieldsValid(requiredList, fieldsForm),\n };\n setIsDataValid(data.isDataValid);\n handleValidationSubmit(true);\n\n ['selectedShippingAddress', 'selectedBillingAddress'].includes(\n formName\n ) &&\n sessionStorage.setItem(`${formName}_addressData`, JSON.stringify(data));\n // @ts-ignore\n onChange?.(data, {}, event);\n },\n [handleValidationSubmit, formName, onChange]\n );\n\n useEffect(() => {\n if (fieldsConfig?.length) {\n const { initialData, errorList } =\n initializeFormDataAndErrors(fieldsConfig);\n\n setFormData((prev) => ({\n ...(initialData as Record<string, string | number>),\n ...prev,\n }));\n\n setErrors(errorList);\n setRequiredFields(errorList);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(fieldsConfig)]);\n\n useEffect(() => {\n if (shouldBlockEffect) return;\n // This code is responsible for initializing data when we retrieve it from session storage. It validates the data, sets the initial configurations for the form, and sends the data through the callback to check if it's valid or not.\n const fields = getFormValuesFromRef(formRef);\n const sessionAddressForm = sessionStorage.getItem(\n `${formName}_addressData`\n );\n\n if (\n isObjectNotEmpty(formData as Record<string, string>) &&\n isObjectNotEmpty(requiredFields)\n ) {\n let data = {};\n\n const isDataValid = areRequiredFieldsValid(\n requiredFields,\n formData as Record<string, string | number | boolean>\n );\n\n if (sessionAddressForm) {\n data = JSON.parse(sessionAddressForm).data as CustomerAddressesModel;\n } else {\n // This code is used as an initializer and needs to run once during the page load in the default state, as the user can pass default parameters via props.\n data = normalizeGetAddressData(fields, true) ?? {};\n }\n\n // @ts-ignore\n onChange?.({ data, isDataValid }, {}, null);\n setIsDataValid(isDataValid);\n setShouldBlockEffect(true);\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [formData, requiredFields]);\n\n useEffect(() => {\n if (!shouldTriggerEffect) return;\n\n const fields = getFormValuesFromRef(formRef);\n const hasCountryCode = Boolean(fields?.countryCode);\n const hasRegion = Boolean(fields?.region?.length);\n const shouldTriggerChange =\n fields && hasCountryCode && !hasRegion && checkIsFunction(onChange);\n\n if (shouldTriggerChange) {\n collectFormData(fields?.region, 'region', requiredFields, null);\n }\n }, [\n shouldTriggerEffect,\n regionEnabled,\n fieldsConfig,\n formRef,\n onChange,\n collectFormData,\n requiredFields,\n effectHasRun,\n ]);\n\n const handleInputChange = useCallback(\n (event: Event, errorsProp?: Record<string, string>) => {\n const { name, value, type, checked } = event?.target as HTMLInputElement;\n const fieldValue = type === 'checkbox' ? checked : value;\n\n setFormData((prev) => {\n const updatedFormData = {\n ...prev,\n [name]: fieldValue,\n };\n\n if (name === 'countryCode') {\n updatedFormData.region = '';\n setRegionEnabled(true);\n setEffectHasRun(false);\n }\n\n return updatedFormData as Record<string, string | number>;\n });\n\n setInputChange?.({ [name]: fieldValue });\n setShouldBlockEffect(true);\n\n const fieldConfig = fieldsConfig?.find((config) =>\n config.customUpperCode.includes(name)\n );\n\n let errorsList = errorsProp ? { ...errorsProp } : { ...errors };\n\n if (fieldConfig) {\n const validationResult = validationFields(\n fieldValue.toString(),\n fieldConfig as ValidationFieldsConfig,\n translations,\n errorsList\n );\n\n if (validationResult) {\n Object.assign(errorsList, validationResult);\n }\n\n setErrors(errorsList);\n }\n\n collectFormData(fieldValue, name, requiredFields, event);\n },\n [\n setInputChange,\n fieldsConfig,\n errors,\n translations,\n collectFormData,\n requiredFields,\n regionEnabled,\n ]\n );\n\n const onFocus = useCallback((event: Event) => {\n const { name } = event?.target as HTMLInputElement;\n\n const fieldConfig = fieldsConfig?.find(\n (config) => config.customUpperCode === name\n );\n\n if (name === 'region' && fieldConfig?.options.length) {\n setShouldTriggerEffect(false);\n }\n\n if (name !== 'countryCode') {\n setShouldTriggerEffect(false);\n } else {\n setShouldTriggerEffect(true);\n }\n }, []);\n\n const handleBlur = useCallback(\n (event: Event, errorsProp?: Record<string, string>) => {\n const { name, value, type, checked } = event?.target as HTMLInputElement;\n const fieldValue = type === 'checkbox' ? checked : value;\n\n const fieldConfig = fieldsConfig?.find(\n (config) => config.customUpperCode === name\n );\n\n if (fieldConfig) {\n const errorsList = errorsProp ? { ...errorsProp } : { ...errors };\n\n const validationResult = validationFields(\n fieldValue.toString(),\n fieldConfig as ValidationFieldsConfig,\n translations,\n errorsList\n );\n\n if (validationResult) {\n Object.assign(errorsList, validationResult);\n }\n\n setErrors(errorsList);\n }\n },\n [errors, fieldsConfig, translations]\n );\n\n const handleSubmit = useCallback(\n (event: SubmitEvent) => {\n event.preventDefault();\n\n const formValid = handleValidationSubmit();\n\n onSubmit?.(event, formValid);\n },\n [handleValidationSubmit, onSubmit]\n );\n\n return {\n isDataValid,\n formData,\n errors,\n formRef,\n handleInputChange,\n onFocus,\n handleBlur,\n handleSubmit,\n handleValidationSubmit,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport enum FieldEnumList {\n BOOLEAN = 'BOOLEAN',\n DATE = 'DATE',\n DATETIME = 'DATETIME',\n DROPDOWN = 'DROPDOWN',\n FILE = 'FILE',\n GALLERY = 'GALLERY',\n HIDDEN = 'HIDDEN',\n IMAGE = 'IMAGE',\n MEDIA_IMAGE = 'MEDIA_IMAGE',\n MULTILINE = 'MULTILINE',\n MULTISELECT = 'MULTISELECT',\n PRICE = 'PRICE',\n SELECT = 'SELECT',\n TEXT = 'TEXT',\n TEXTAREA = 'TEXTAREA',\n UNDEFINED = 'UNDEFINED',\n VISUAL = 'VISUAL',\n WEIGHT = 'WEIGHT',\n EMPTY = '',\n}\n\nexport interface AttributesFormItemsProps {\n code: string;\n name: string;\n id: string;\n required: boolean;\n label: string;\n options: { isDefault: boolean; text: string; value: string }[];\n entityType: string;\n className: string;\n defaultValue: string | boolean | number;\n fieldType: FieldEnumList;\n multilineCount: number;\n isUnique: boolean;\n orderNumber: number;\n isHidden: boolean;\n customUpperCode: string;\n validateRules: Record<string, string | number | boolean>[];\n}\n\nexport interface AttributesFormModel extends AttributesFormItemsProps {}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { classes, Slot } from '@adobe-commerce/elsie/lib';\nimport { memo, useMemo } from 'preact/compat';\nimport {\n Field,\n Input,\n Picker,\n Checkbox,\n InputDate,\n TextArea,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { FieldEnumList } from '@/account/data/models';\nimport { FieldsProps, FormInputsProps } from '@/account/types';\n\nexport const FormInputs: FunctionComponent<FormInputsProps> = memo(\n ({\n loading,\n values,\n fields = [],\n errors,\n className = '',\n onChange,\n onBlur,\n onFocus,\n slots,\n fieldIdPrefix,\n }) => {\n const itemClassName = `${className}__field`;\n\n // Build translation keys dynamically from all fields\n const translationKeys = useMemo(\n () =>\n Object.fromEntries(\n fields.flatMap((field: FieldsProps) => [\n [\n `${field.code}.label`,\n `Account.AddressForm.fields.${field.code}.label`,\n ],\n [\n `${field.code}.placeholder`,\n `Account.AddressForm.fields.${field.code}.placeholder`,\n ],\n ])\n ),\n [fields]\n );\n\n const translations = useText(translationKeys);\n\n const getAriaLabel = (item: FieldsProps) =>\n translations[`${item.code}.label`] || item.label;\n\n const getFloatingLabel = (item: FieldsProps) =>\n `${getAriaLabel(item)} ${item.required ? '*' : ''}`;\n\n const getPlaceholder = (item: FieldsProps) =>\n translations[`${item.code}.placeholder`] || item.label;\n\n const renderSlot = (item: any, errorMessage: string) => {\n if (!slots?.[`AddressFormInput_${item.code}`]) return;\n\n const contextValue = {\n inputName: item.customUpperCode,\n handleOnChange: onChange,\n handleOnBlur: onBlur,\n handleOnFocus: onFocus,\n errorMessage,\n errors,\n config: item,\n };\n\n return (\n <Slot\n data-testid={`addressFormInput_${item.code}`}\n name={`AddressFormInput_${item.code}`}\n slot={slots[`AddressFormInput_${item.code}`]}\n context={contextValue}\n key={item.id}\n />\n );\n };\n\n const selectElement = (\n item: any,\n valueMessage: string,\n errorMessage: string\n ) => {\n const defaultSelectValue =\n item.options.find(\n (option: { isDefault: boolean; value: string; text: string }) =>\n option.isDefault\n )?.value ??\n valueMessage ??\n item.defaultValue;\n\n return (\n <>\n {renderSlot(item, errorMessage) ?? (\n <Field\n key={item.id}\n error={errorMessage}\n className={classes([\n itemClassName,\n `${itemClassName}--${item.id}`,\n [`${itemClassName}--${item.id}-hidden`, item.isHidden],\n item.className,\n ])}\n data-testid={`${className}--${item.id}`}\n disabled={loading || item.disabled}\n >\n <Picker\n aria-label={getAriaLabel(item)}\n aria-required={item.required ? 'true' : 'false'}\n id={fieldIdPrefix ? `${fieldIdPrefix}_${item.code}` : item.code}\n required={item?.required}\n name={item.customUpperCode}\n floatingLabel={getFloatingLabel(item)}\n placeholder={getPlaceholder(item)}\n options={item.options}\n onBlur={onBlur}\n onFocus={onFocus}\n handleSelect={onChange}\n defaultValue={defaultSelectValue}\n value={defaultSelectValue}\n />\n </Field>\n )}\n </>\n );\n };\n\n const inputElement = (\n item: any,\n valueMessage: string,\n errorMessage: string\n ) => {\n return (\n <>\n {renderSlot(item, errorMessage) ?? (\n <Field\n key={item.id}\n error={errorMessage}\n className={classes([\n itemClassName,\n `${itemClassName}--${item.id}`,\n [`${itemClassName}--${item.id}-hidden`, item.isHidden],\n item.className,\n ])}\n data-testid={`${className}--${item.id}`}\n disabled={loading}\n >\n <Input\n aria-label={getAriaLabel(item)}\n aria-required={item.required ? 'true' : 'false'}\n id={fieldIdPrefix ? `${fieldIdPrefix}_${item.code}` : item.code}\n type=\"text\"\n name={item.customUpperCode}\n value={valueMessage ?? item.defaultValue}\n placeholder={getPlaceholder(item)}\n floatingLabel={getFloatingLabel(item)}\n onBlur={onBlur}\n onFocus={onFocus}\n onChange={onChange}\n />\n </Field>\n )}\n </>\n );\n };\n\n const inputDateElement = (\n item: any,\n valueMessage: string,\n errorMessage: string\n ) => {\n return (\n <>\n {renderSlot(item, errorMessage) ?? (\n <Field\n key={item.id}\n error={errorMessage}\n className={classes([\n itemClassName,\n `${itemClassName}--${item.id}`,\n [`${itemClassName}--${item.id}-hidden`, item.isHidden],\n item.className,\n ])}\n data-testid={`${className}--${item.id}`}\n disabled={loading || item.disabled}\n >\n <InputDate\n aria-label={getAriaLabel(item)}\n aria-required={item.required ? 'true' : 'false'}\n id={fieldIdPrefix ? `${fieldIdPrefix}_${item.code}` : item.code}\n type=\"text\"\n name={item.customUpperCode}\n value={valueMessage || item.defaultValue}\n placeholder={getPlaceholder(item)}\n floatingLabel={getFloatingLabel(item)}\n onBlur={onBlur}\n onChange={onChange}\n disabled={loading || item.disabled}\n />\n </Field>\n )}\n </>\n );\n };\n\n const inputCheckBoxElement = (\n item: any,\n valueMessage: string,\n errorMessage: string\n ) => {\n return (\n <>\n {renderSlot(item, errorMessage) ?? (\n <Field\n key={item.id}\n error={errorMessage}\n className={classes([\n itemClassName,\n `${itemClassName}--${item.id}`,\n [`${itemClassName}--${item.id}-hidden`, item.isHidden],\n item.className,\n ])}\n data-testid={`${className}--${item.id}`}\n disabled={item?.isHidden ?? loading}\n >\n <Checkbox\n aria-label={getAriaLabel(item)}\n aria-required={item.required ? 'true' : 'false'}\n aria-hidden={item.isHidden}\n tabindex={item?.isHidden ? -1 : 0}\n id={fieldIdPrefix ? `${fieldIdPrefix}_${item.code}` : item.code}\n name={item.customUpperCode}\n checked={valueMessage || item.defaultValue}\n placeholder={getPlaceholder(item)}\n label={getFloatingLabel(item)}\n onBlur={onBlur}\n onChange={onChange}\n />\n </Field>\n )}\n </>\n );\n };\n\n const textAreaElement = (\n item: any,\n valueMessage: string,\n errorMessage: string\n ) => {\n return (\n <>\n {renderSlot(item, errorMessage) ?? (\n <Field\n key={item.id}\n error={errorMessage}\n className={classes([\n itemClassName,\n `${itemClassName}--${item.id}`,\n [`${itemClassName}--${item.id}-hidden`, item.isHidden],\n item.className,\n ])}\n data-testid={`${className}--${item.id}`}\n disabled={loading}\n >\n <TextArea\n aria-label={getAriaLabel(item)}\n aria-required={item.required ? 'true' : 'false'}\n id={fieldIdPrefix ? `${fieldIdPrefix}_${item.code}` : item.code}\n type=\"text\"\n name={item.customUpperCode}\n value={valueMessage ?? item.defaultValue}\n label={getFloatingLabel(item)}\n onBlur={onBlur}\n onChange={onChange}\n />\n </Field>\n )}\n </>\n );\n };\n\n if (!fields.length) return null;\n\n return (\n <>\n {fields.map((item: FieldsProps) => {\n const errorMessage = errors?.[item.customUpperCode] as string;\n const valueMessage = values?.[item.customUpperCode] as string;\n\n switch (item.fieldType) {\n case FieldEnumList.TEXT: {\n if (item.options.length) {\n return selectElement(item, valueMessage, errorMessage);\n }\n\n return inputElement(item, valueMessage, errorMessage);\n }\n\n case FieldEnumList.MULTILINE: {\n return inputElement(item, valueMessage, errorMessage);\n }\n\n case FieldEnumList.SELECT: {\n return selectElement(item, valueMessage, errorMessage);\n }\n\n case FieldEnumList.DATE: {\n return inputDateElement(item, valueMessage, errorMessage);\n }\n\n case FieldEnumList.BOOLEAN: {\n return inputCheckBoxElement(item, valueMessage, errorMessage);\n }\n\n case FieldEnumList.TEXTAREA: {\n return textAreaElement(item, valueMessage, errorMessage);\n }\n\n default:\n return null;\n }\n })}\n </>\n );\n }\n);\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Skeleton, SkeletonRow, Card } from '@adobe-commerce/elsie/components';\nimport '@/account/components/AccountLoaders/AccountLoaders.css';\nimport { classes } from '@adobe-commerce/elsie/lib';\n\nexport const CardLoader = ({\n testId,\n withCard = true,\n}: {\n testId?: string;\n withCard?: boolean;\n}) => {\n const defaultSkeleton = (\n <Skeleton data-testid={testId || 'skeletonLoader'}>\n <SkeletonRow\n variant=\"heading\"\n size=\"xlarge\"\n fullWidth={false}\n lines={1}\n />\n <SkeletonRow variant=\"heading\" size=\"xlarge\" fullWidth={true} lines={1} />\n <SkeletonRow variant=\"heading\" size=\"xlarge\" fullWidth={true} lines={1} />\n </Skeleton>\n );\n\n if (withCard) {\n return defaultSkeleton;\n }\n\n return (\n <Card\n variant=\"secondary\"\n className={classes([\n 'account-account-loaders',\n 'account-account-loaders--card-loader',\n ])}\n >\n {defaultSkeleton}\n </Card>\n );\n};\n\nexport const AddressFormLoader = () => {\n return (\n <Skeleton data-testid=\"addressFormLoader\">\n <SkeletonRow variant=\"heading\" size=\"medium\" />\n <SkeletonRow variant=\"empty\" size=\"medium\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" fullWidth={true} />\n <SkeletonRow size=\"large\" fullWidth={true} lines={3} />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" fullWidth={true} />\n </Skeleton>\n );\n};\n\nexport const PickerLoader = (props: any) => {\n return (\n <Skeleton\n {...props}\n rowGap={'xsmall'}\n className={classes([\n 'account-account-loaders',\n 'account-account-loaders--picker-loader',\n ])}\n >\n <SkeletonRow variant=\"heading\" size=\"xsmall\" />\n <SkeletonRow variant=\"empty\" size=\"small\" />\n <SkeletonRow size=\"small\" />\n </Skeleton>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useForm } from '@/account/hooks/components/useForm';\nimport { FormProps, FormRef } from '@/account/types';\nimport FormInputs from '@/account/components/Form/FormInputs';\nimport { forwardRef, memo, useImperativeHandle } from 'preact/compat';\nimport '@/account/components/Form/Form.css';\nimport { classes, Slot } from '@adobe-commerce/elsie/lib';\nimport normalizeGetAddressData from '@/account/lib/normalizeGetAddressData';\nimport getFormValuesFromRef from '@/account/lib/getFormValuesFromRef';\nimport { AddressFormLoader } from '../AccountLoaders';\nimport { Checkbox } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport const Form = memo(\n forwardRef<FormRef, FormProps>(\n ({\n setInputChange,\n showFormLoader,\n slots,\n name,\n loading,\n children,\n className = 'defaultForm',\n fieldsConfig,\n onSubmit,\n onChange,\n forwardFormRef,\n regionOptions,\n showSaveCheckBox,\n handleSaveCheckBoxAddress,\n saveCheckBoxAddress,\n fieldIdPrefix,\n }) => {\n const translations = useText({\n saveAddressBook: 'Account.AddressForm.formText.saveAddressBook',\n });\n\n const {\n isDataValid,\n formData,\n errors,\n formRef,\n handleInputChange,\n handleBlur,\n handleSubmit,\n handleValidationSubmit,\n onFocus,\n } = useForm({\n fieldsConfig,\n onSubmit,\n onChange,\n setInputChange,\n regionOptions,\n formName: name!,\n });\n\n useImperativeHandle(forwardFormRef, () => {\n const modifyFormRef = getFormValuesFromRef(formRef);\n\n return {\n handleValidationSubmit,\n requestSubmit: () => {\n formRef.current?.requestSubmit();\n },\n formData: normalizeGetAddressData(modifyFormRef, true),\n isDataValid,\n };\n });\n\n if (showFormLoader || !fieldsConfig?.length) return <AddressFormLoader />;\n\n return (\n <form\n className={classes(['account-form', className])}\n onSubmit={handleSubmit}\n name={name}\n ref={formRef}\n >\n <FormInputs\n className={className}\n loading={loading}\n fields={fieldsConfig}\n onChange={handleInputChange}\n onBlur={handleBlur}\n errors={errors}\n values={formData}\n onFocus={onFocus}\n slots={slots}\n fieldIdPrefix={fieldIdPrefix}\n />\n {slots?.AddressFormInputs ? (\n <Slot\n data-testid=\"addressFormInputs\"\n name=\"AddressFormInputs\"\n slot={slots.AddressFormInputs}\n context={{ formActions: { handleChange: handleInputChange } }}\n />\n ) : null}\n {showSaveCheckBox ? (\n <div className={'account-address-form--saveAddressBook'}>\n <Checkbox\n data-testid=\"testSaveAddressBook\"\n name=\"saveAddressBook\"\n label={translations.saveAddressBook}\n // @ts-ignore\n checked={saveCheckBoxAddress}\n onChange={(event) => {\n handleInputChange(event);\n handleSaveCheckBoxAddress?.(event);\n }}\n />\n </div>\n ) : null}\n {children}\n </form>\n );\n }\n )\n);\n","export const getAddressButtonAriaLabel = (\n defaultShipping?: boolean,\n defaultBilling?: boolean,\n translations: Record<string, string> = {},\n type: 'removeButton' | 'editButton' = 'editButton'\n): string => {\n const isRemove = type === 'removeButton';\n\n const labelMap = {\n shippingAndBilling: {\n edit: translations.editAddressAriaLabelShippingAndBilling,\n remove: translations.removeAddressAriaLabelShippingAndBilling,\n },\n shipping: {\n edit: translations.editAddressAriaLabelShipping,\n remove: translations.removeAddressAriaLabelShipping,\n },\n billing: {\n edit: translations.editAddressAriaLabelBilling,\n remove: translations.removeAddressAriaLabelBilling,\n },\n default: {\n edit: translations.editAddressAriaLabelDefault,\n remove: translations.removeAddressAriaLabelDefault,\n },\n };\n\n let key: keyof typeof labelMap = 'default';\n if (defaultShipping && defaultBilling) key = 'shippingAndBilling';\n else if (defaultShipping) key = 'shipping';\n else if (defaultBilling) key = 'billing';\n\n return isRemove ? labelMap[key].remove : labelMap[key].edit;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { useCallback, useId, useMemo } from 'preact/compat';\nimport { Card, Button, Tag } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport CardLoader from '@/account/components/AccountLoaders';\nimport { AddressCardProps } from '@/account/types';\nimport { CustomerAddressesModel } from '@/account/data/models';\nimport '@/account/components/AddressCard/AddressCard.css';\nimport { Slot } from '@adobe-commerce/elsie/lib';\nimport { getAddressButtonAriaLabel } from '@/account/lib/getAddressButtonAriaLabel';\n\nexport const AddressCard: FunctionComponent<AddressCardProps> = ({\n slots,\n selectable,\n selectShipping,\n selectBilling,\n variant = 'secondary',\n minifiedView,\n keysSortOrder,\n addressData,\n loading,\n setAddressId,\n handleRenderModal,\n handleRenderForm,\n}) => {\n const addressCardAriaId = useId();\n\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n actionRemove: `Account.${minifiedViewKey}.Addresses.addressCard.actionRemove`,\n actionEdit: `Account.${minifiedViewKey}.Addresses.addressCard.actionEdit`,\n cardLabelShipping: `Account.${minifiedViewKey}.Addresses.addressCard.cardLabelShipping`,\n cardLabelBilling: `Account.${minifiedViewKey}.Addresses.addressCard.cardLabelBilling`,\n defaultLabelText: `Account.${minifiedViewKey}.Addresses.addressCard.defaultLabelText`,\n\n editAddressAriaLabelDefault: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.editButton.default`,\n editAddressAriaLabelShipping: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.editButton.shipping`,\n editAddressAriaLabelBilling: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.editButton.billing`,\n editAddressAriaLabelShippingAndBilling: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.editButton.shippingAndBilling`,\n\n removeAddressAriaLabelDefault: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.removeButton.default`,\n removeAddressAriaLabelShipping: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.removeButton.shipping`,\n removeAddressAriaLabelBilling: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.removeButton.billing`,\n removeAddressAriaLabelShippingAndBilling: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.removeButton.shippingAndBilling`,\n });\n\n const defaultBillingLabel = translations.cardLabelBilling.toLocaleUpperCase();\n const defaultShippingLabel =\n translations.cardLabelShipping.toLocaleUpperCase();\n const defaultLabelText = translations.defaultLabelText.toLocaleUpperCase();\n\n const getLabelStatus = useMemo(() => {\n const defaultValue = {\n shippingLabel: defaultShippingLabel,\n billingLabel: defaultBillingLabel,\n hideShipping: false,\n hideBilling: false,\n };\n\n if (!selectable) {\n return defaultValue;\n }\n\n if (selectShipping && !selectBilling) {\n return {\n shippingLabel: defaultLabelText,\n billingLabel: defaultLabelText,\n hideShipping: false,\n hideBilling: true,\n };\n } else if (selectBilling && !selectShipping) {\n return {\n shippingLabel: defaultLabelText,\n billingLabel: defaultLabelText,\n hideShipping: true,\n hideBilling: false,\n };\n } else if (selectBilling && selectShipping) {\n return defaultValue;\n }\n\n return defaultValue;\n }, [\n defaultBillingLabel,\n defaultLabelText,\n defaultShippingLabel,\n selectBilling,\n selectShipping,\n selectable,\n ]);\n\n const handleRemove = useCallback(() => {\n setAddressId?.(addressData?.id as string);\n handleRenderModal?.();\n }, [handleRenderModal, addressData?.id, setAddressId]);\n\n const handleEdit = useCallback(() => {\n setAddressId?.(addressData?.id as string);\n handleRenderForm?.();\n }, [handleRenderForm, addressData?.id, setAddressId]);\n\n const normalizeAddress = useMemo(() => {\n if (!keysSortOrder) return [];\n\n const { region, ...address } = addressData as CustomerAddressesModel;\n\n const modifyAddressData = {\n ...address,\n ...region,\n } as any;\n\n return keysSortOrder\n .filter(({ name }) => modifyAddressData[name as string])\n .map((item) => {\n return {\n name: item.name,\n orderNumber: item.orderNumber,\n value: modifyAddressData[item.name as string],\n label: item.label,\n };\n });\n }, [addressData, keysSortOrder]);\n\n const { shippingLabel, billingLabel, hideShipping, hideBilling } =\n getLabelStatus;\n\n return (\n <Card\n variant={variant}\n className=\"account-address-card\"\n data-testid=\"addressCard\"\n >\n {loading ? (\n <CardLoader />\n ) : (\n <>\n <div className=\"account-address-card__action\">\n {handleRenderModal ? (\n <Button\n // @ts-ignore\n type={'button'}\n variant=\"tertiary\"\n onClick={handleRemove}\n data-testid=\"removeButton\"\n aria-label={getAddressButtonAriaLabel(\n addressData?.defaultShipping,\n addressData?.defaultBilling,\n translations,\n 'removeButton'\n )}\n aria-describedby={addressCardAriaId}\n >\n {translations.actionRemove}\n </Button>\n ) : null}\n {handleRenderForm ? (\n <Button\n // @ts-ignore\n type={'button'}\n variant=\"tertiary\"\n onClick={handleEdit}\n className=\"account-address-card__action--editbutton\"\n data-testid=\"editButton\"\n aria-label={getAddressButtonAriaLabel(\n addressData?.defaultShipping,\n addressData?.defaultBilling,\n translations,\n 'editButton'\n )}\n aria-describedby={addressCardAriaId}\n >\n {translations.actionEdit}\n </Button>\n ) : null}\n </div>\n <div\n className=\"account-address-card__description\"\n id={addressCardAriaId}\n >\n {slots?.AddressCard ? (\n <Slot\n name=\"AddressCard\"\n slot={slots?.AddressCard}\n context={{ addressData: normalizeAddress }}\n />\n ) : (\n <>\n {normalizeAddress.map((el, index) => {\n const value = !el.label\n ? el?.value\n : `${el.label}: ${el?.value}`;\n\n return (\n <p key={index} data-testid={`${el.name}_${index}`}>\n {value}\n </p>\n );\n })}\n </>\n )}\n </div>\n {(addressData?.defaultShipping || addressData?.defaultBilling) &&\n !selectable ? (\n <div className=\"account-address-card__labels\">\n {addressData?.defaultShipping ? (\n <Tag label={defaultShippingLabel} />\n ) : null}\n {addressData?.defaultBilling ? (\n <Tag label={defaultBillingLabel} />\n ) : null}\n </div>\n ) : null}\n {selectable ? (\n <div className=\"account-address-card__labels\">\n {!hideShipping && addressData?.defaultShipping ? (\n <Tag label={shippingLabel} />\n ) : null}\n {!hideBilling && addressData?.defaultBilling ? (\n <Tag label={billingLabel} />\n ) : null}\n </div>\n ) : null}\n </>\n )}\n </Card>\n );\n};\n","import * as React from \"react\";\nconst SvgAdd = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Add_Base\", \"data-name\": \"Icon \\\\u2013 Add \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Add_icon\", \"data-name\": \"Add icon\", transform: \"translate(9.734 9.737)\" }, /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_579\", \"data-name\": \"Line 579\", y2: 12.7, transform: \"translate(2.216 -4.087)\", fill: \"none\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_580\", \"data-name\": \"Line 580\", x2: 12.7, transform: \"translate(-4.079 2.263)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgAdd;\n","import * as React from \"react\";\nconst SvgAddressBook = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M3.375 7.38672C3.09886 7.38672 2.875 7.61058 2.875 7.88672C2.875 8.16286 3.09886 8.38672 3.375 8.38672V7.38672ZM5.88409 8.38672C6.16023 8.38672 6.38409 8.16286 6.38409 7.88672C6.38409 7.61058 6.16023 7.38672 5.88409 7.38672V8.38672ZM3.375 11.1836C3.09886 11.1836 2.875 11.4075 2.875 11.6836C2.875 11.9597 3.09886 12.1836 3.375 12.1836V11.1836ZM5.88409 12.1836C6.16023 12.1836 6.38409 11.9597 6.38409 11.6836C6.38409 11.4075 6.16023 11.1836 5.88409 11.1836V12.1836ZM3.375 15.6133C3.09886 15.6133 2.875 15.8371 2.875 16.1133C2.875 16.3894 3.09886 16.6133 3.375 16.6133V15.6133ZM5.88409 16.6133C6.16023 16.6133 6.38409 16.3894 6.38409 16.1133C6.38409 15.8371 6.16023 15.6133 5.88409 15.6133V16.6133ZM8.52059 16.4182C8.51422 16.6942 8.73286 16.9232 9.00893 16.9296C9.285 16.9359 9.51396 16.7173 9.52032 16.4412L8.52059 16.4182ZM9.19302 14.8261L8.70612 14.7124C8.70434 14.72 8.70274 14.7277 8.70132 14.7354L9.19302 14.8261ZM11.2762 13.3887L11.4404 13.8611L11.4499 13.8576L11.2762 13.3887ZM12.3195 13.1013C12.4035 12.8382 12.2583 12.5569 11.9953 12.4729C11.7322 12.3889 11.4509 12.5341 11.3669 12.7971L12.3195 13.1013ZM15.7342 16.4412C15.7406 16.7173 15.9695 16.9359 16.2456 16.9296C16.5217 16.9232 16.7403 16.6942 16.734 16.4182L15.7342 16.4412ZM16.0615 14.8261L16.5532 14.7354C16.5518 14.7277 16.5502 14.72 16.5484 14.7124L16.0615 14.8261ZM13.9784 13.3887L13.8046 13.8577L13.8142 13.861L13.9784 13.3887ZM13.8877 12.7971C13.8037 12.5341 13.5223 12.3889 13.2593 12.4729C12.9962 12.5569 12.8511 12.8382 12.9351 13.1013L13.8877 12.7971ZM10.9023 10.418L11.4023 10.418V10.418H10.9023ZM11.2309 8.60993L11.6861 8.81678L11.6861 8.81678L11.2309 8.60993ZM12.0518 12.7684L11.7218 13.1441L11.7682 13.1848L11.823 13.213L12.0518 12.7684ZM13.202 12.7684L13.4308 13.213L13.4787 13.1884L13.5203 13.1541L13.202 12.7684ZM3.375 8.38672H5.88409V7.38672H3.375V8.38672ZM3.375 12.1836H5.88409V11.1836H3.375V12.1836ZM3.375 16.6133H5.88409V15.6133H3.375V16.6133ZM6.41058 2.375H18.844V1.375H6.41058V2.375ZM18.844 2.375C19.4866 2.375 20.125 2.99614 20.125 3.9225H21.125C21.125 2.57636 20.1627 1.375 18.844 1.375V2.375ZM20.125 3.9225V20.0775H21.125V3.9225H20.125ZM20.125 20.0775C20.125 20.9945 19.485 21.625 18.844 21.625V22.625C20.1643 22.625 21.125 21.4105 21.125 20.0775H20.125ZM18.844 21.625H6.41058V22.625H18.844V21.625ZM6.41058 21.625C5.76792 21.625 5.12955 21.0039 5.12955 20.0775H4.12955C4.12955 21.4236 5.09185 22.625 6.41058 22.625V21.625ZM5.12955 20.0775V3.9225H4.12955V20.0775H5.12955ZM5.12955 3.9225C5.12955 3.0055 5.76956 2.375 6.41058 2.375V1.375C5.0902 1.375 4.12955 2.5895 4.12955 3.9225H5.12955ZM9.52032 16.4412C9.53194 15.9373 9.59014 15.4295 9.68473 14.9168L8.70132 14.7354C8.59869 15.2917 8.53362 15.853 8.52059 16.4182L9.52032 16.4412ZM9.67993 14.9397C9.69157 14.8899 9.78099 14.7261 10.1128 14.496C10.4223 14.2813 10.8711 14.0589 11.4404 13.861L11.112 12.9165C10.4856 13.1343 9.94827 13.3931 9.54284 13.6743C9.15974 13.94 8.80542 14.2871 8.70612 14.7124L9.67993 14.9397ZM11.4499 13.8576C11.5852 13.8074 11.7547 13.7102 11.8933 13.6105C11.9656 13.5584 12.0441 13.4954 12.1133 13.4247C12.1723 13.3646 12.2709 13.2534 12.3195 13.1013L11.3669 12.7971C11.3809 12.7532 11.3985 12.7277 11.4022 12.7225C11.407 12.7157 11.4073 12.7164 11.3993 12.7246C11.3827 12.7416 11.3525 12.7676 11.3092 12.7988C11.2674 12.8288 11.222 12.8575 11.1805 12.8808C11.1363 12.9057 11.1089 12.9175 11.1024 12.9199L11.4499 13.8576ZM16.734 16.4182C16.7209 15.853 16.6559 15.2917 16.5532 14.7354L15.5698 14.9168C15.6644 15.4295 15.7226 15.9373 15.7342 16.4412L16.734 16.4182ZM16.5484 14.7124C16.4491 14.2871 16.0948 13.94 15.7117 13.6743C15.3063 13.3931 14.769 13.1343 14.1426 12.9165L13.8142 13.861C14.3834 14.0589 14.8322 14.2813 15.1417 14.496C15.4736 14.7261 15.563 14.8899 15.5746 14.9397L16.5484 14.7124ZM14.1521 12.9199C14.1456 12.9175 14.1183 12.9057 14.074 12.8808C14.0325 12.8575 13.9871 12.8288 13.9453 12.7988C13.9021 12.7676 13.8719 12.7416 13.8552 12.7246C13.8472 12.7164 13.8476 12.7157 13.8524 12.7225C13.856 12.7277 13.8736 12.7532 13.8877 12.7971L12.9351 13.1013C12.9836 13.2534 13.0823 13.3646 13.1412 13.4247C13.2105 13.4954 13.2889 13.5584 13.3612 13.6105C13.4999 13.7102 13.6694 13.8074 13.8046 13.8576L14.1521 12.9199ZM11.4023 10.418C11.4023 9.83385 11.4811 9.26803 11.6861 8.81678L10.7757 8.40309C10.4878 9.03666 10.4023 9.76284 10.4023 10.418H11.4023ZM11.6861 8.81678C11.8053 8.55448 12.0796 8.38672 12.5813 8.38672V7.38672C11.8704 7.38672 11.1213 7.6426 10.7757 8.40309L11.6861 8.81678ZM12.5813 8.38672C13.087 8.38672 13.4614 8.60522 13.5777 8.83539L14.4703 8.38448C14.1169 7.685 13.2884 7.38672 12.5813 7.38672V8.38672ZM13.5777 8.83539C13.7606 9.19738 13.8523 9.72518 13.8523 10.418H14.8523C14.8523 9.66433 14.757 8.95213 14.4703 8.38448L13.5777 8.83539ZM12.5813 12.4492C12.5364 12.4492 12.5158 12.4464 12.5087 12.4451C12.5046 12.4444 12.5042 12.4442 12.5008 12.4428C12.4922 12.4391 12.4782 12.4321 12.438 12.4096C12.4018 12.3893 12.3471 12.358 12.2805 12.3238L11.823 13.213C11.8698 13.2371 11.9055 13.2576 11.9494 13.2821C11.9893 13.3045 12.0449 13.3354 12.1079 13.3623C12.2569 13.426 12.403 13.4492 12.5813 13.4492V12.4492ZM12.3817 12.3927C11.8273 11.9058 11.4022 11.3083 11.4023 10.418L10.4023 10.4179C10.4022 11.6973 11.0412 12.5462 11.7218 13.1441L12.3817 12.3927ZM13.8523 10.418C13.8523 11.3319 13.4575 11.9093 12.8838 12.3828L13.5203 13.1541C14.2611 12.5427 14.8523 11.7035 14.8523 10.418H13.8523ZM12.9733 12.3238C12.7638 12.4316 12.717 12.4492 12.5813 12.4492V13.4492C12.9639 13.4492 13.1869 13.3385 13.4308 13.213L12.9733 12.3238Z\", fill: \"currentColor\" }));\nexport default SvgAddressBook;\n","import * as React from \"react\";\nconst SvgChevronRight = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Chevron_right_Base\", \"data-name\": \"Icon \\\\u2013 Chevron right \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Chevron_right_icon\", \"data-name\": \"Chevron right icon\" }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", id: \"chevron\", d: \"M199.75,367.5l4.255,-4.255-4.255,-4.255\", transform: \"translate(-189.25 -351.0)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgChevronRight;\n","import * as React from \"react\";\nconst SvgEmptyBox = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12.002 21L11.8275 21.4686C11.981 21.5257 12.1528 21.5041 12.2873 21.4106C12.4218 21.3172 12.502 21.1638 12.502 21H12.002ZM3.89502 17.9823H3.39502C3.39502 18.1912 3.52485 18.378 3.72059 18.4509L3.89502 17.9823ZM3.89502 8.06421L4.07193 7.59655C3.91831 7.53844 3.74595 7.55948 3.61082 7.65284C3.47568 7.74619 3.39502 7.89997 3.39502 8.06421H3.89502ZM12.0007 21H11.5007C11.5007 21.1638 11.5809 21.3172 11.7154 21.4106C11.8499 21.5041 12.0216 21.5257 12.1751 21.4686L12.0007 21ZM20.1076 17.9823L20.282 18.4509C20.4778 18.378 20.6076 18.1912 20.6076 17.9823H20.1076ZM20.1076 8.06421H20.6076C20.6076 7.89997 20.527 7.74619 20.3918 7.65284C20.2567 7.55948 20.0843 7.53844 19.9307 7.59655L20.1076 8.06421ZM12.0007 11.1311L11.8238 10.6634C11.6293 10.737 11.5007 10.9232 11.5007 11.1311H12.0007ZM20.2858 8.53191C20.5441 8.43421 20.6743 8.14562 20.5766 7.88734C20.4789 7.62906 20.1903 7.49889 19.932 7.5966L20.2858 8.53191ZM12.002 4.94826L12.1775 4.48008C12.0605 4.43623 11.9314 4.43775 11.8154 4.48436L12.002 4.94826ZM5.87955 6.87106C5.62334 6.97407 5.49915 7.26528 5.60217 7.52149C5.70518 7.77769 5.99639 7.90188 6.2526 7.79887L5.87955 6.87106ZM18.1932 7.80315C18.4518 7.90008 18.74 7.76904 18.8369 7.51047C18.9338 7.2519 18.8028 6.96371 18.5442 6.86678L18.1932 7.80315ZM12 4.94827L11.5879 5.23148C11.6812 5.36719 11.8353 5.44827 12 5.44827C12.1647 5.44827 12.3188 5.36719 12.4121 5.23148L12 4.94827ZM14.0263 2L14.2028 1.53218C13.9875 1.45097 13.7446 1.52717 13.6143 1.71679L14.0263 2ZM21.8421 4.94827L22.2673 5.2113C22.3459 5.08422 22.3636 4.92863 22.3154 4.78717C22.2673 4.64571 22.1584 4.53319 22.0186 4.48045L21.8421 4.94827ZM9.97368 2L10.3857 1.71679C10.2554 1.52717 10.0125 1.45097 9.79721 1.53218L9.97368 2ZM2.15789 4.94827L1.98142 4.48045C1.84161 4.53319 1.73271 4.64571 1.68456 4.78717C1.63641 4.92863 1.65406 5.08422 1.73267 5.2113L2.15789 4.94827ZM12 11.1256L11.6702 11.5014C11.8589 11.667 12.1411 11.667 12.3298 11.5014L12 11.1256ZM15.0395 8.45812L14.8732 7.98659C14.8131 8.00779 14.7576 8.04028 14.7097 8.08232L15.0395 8.45812ZM23 5.65024L23.3288 6.0269C23.5095 5.86916 23.5527 5.60532 23.4318 5.39817C23.3109 5.19102 23.0599 5.09893 22.8337 5.17871L23 5.65024ZM8.96053 8.45812L9.29034 8.08232C9.24244 8.04028 9.18695 8.00779 9.12685 7.98659L8.96053 8.45812ZM1 5.65024L1.16632 5.17871C0.940115 5.09893 0.689119 5.19102 0.568192 5.39817C0.447264 5.60532 0.49048 5.86916 0.671176 6.0269L1 5.65024ZM12.1764 20.5314L4.06945 17.5137L3.72059 18.4509L11.8275 21.4686L12.1764 20.5314ZM4.39502 17.9823V8.06421H3.39502V17.9823H4.39502ZM3.71811 8.53187L11.8251 11.5987L12.1789 10.6634L4.07193 7.59655L3.71811 8.53187ZM11.502 11.1311V21H12.502V11.1311H11.502ZM12.1751 21.4686L20.282 18.4509L19.9332 17.5137L11.8262 20.5314L12.1751 21.4686ZM20.6076 17.9823V8.06421H19.6076V17.9823H20.6076ZM19.9307 7.59655L11.8238 10.6634L12.1776 11.5987L20.2845 8.53187L19.9307 7.59655ZM11.5007 11.1311V21H12.5007V11.1311H11.5007ZM19.932 7.5966L11.8251 10.6634L12.1789 11.5987L20.2858 8.53191L19.932 7.5966ZM11.8154 4.48436L5.87955 6.87106L6.2526 7.79887L12.1885 5.41217L11.8154 4.48436ZM11.8265 5.41645L18.1932 7.80315L18.5442 6.86678L12.1775 4.48008L11.8265 5.41645ZM11.502 4.94826V11.1311H12.502V4.94826H11.502ZM12.4121 5.23148L14.4384 2.28321L13.6143 1.71679L11.5879 4.66507L12.4121 5.23148ZM13.8498 2.46782L21.6656 5.4161L22.0186 4.48045L14.2028 1.53218L13.8498 2.46782ZM21.4169 4.68525L20.5485 6.08919L21.3989 6.61524L22.2673 5.2113L21.4169 4.68525ZM12.4121 4.66507L10.3857 1.71679L9.56162 2.28321L11.5879 5.23148L12.4121 4.66507ZM9.79721 1.53218L1.98142 4.48045L2.33437 5.4161L10.1502 2.46782L9.79721 1.53218ZM1.73267 5.2113L2.60109 6.61524L3.45154 6.08919L2.58312 4.68525L1.73267 5.2113ZM12.3298 11.5014L15.3693 8.83392L14.7097 8.08232L11.6702 10.7498L12.3298 11.5014ZM15.2058 8.92965L23.1663 6.12177L22.8337 5.17871L14.8732 7.98659L15.2058 8.92965ZM22.6712 5.27358L19.7764 7.80067L20.4341 8.554L23.3288 6.0269L22.6712 5.27358ZM12.3298 10.7498L9.29034 8.08232L8.63072 8.83392L11.6702 11.5014L12.3298 10.7498ZM9.12685 7.98659L1.16632 5.17871L0.83368 6.12177L8.79421 8.92965L9.12685 7.98659ZM0.671176 6.0269L3.56591 8.554L4.22356 7.80067L1.32882 5.27358L0.671176 6.0269Z\", fill: \"currentColor\" }));\nexport default SvgEmptyBox;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Add, ChevronRight } from '@adobe-commerce/elsie/icons';\nimport { Icon } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/account/components/AddressActions/AddressActions.css';\nimport { AddressActionsProps } from '@/account/types';\n\nexport const AddressActions: FunctionComponent<AddressActionsProps> = ({\n selectable,\n className,\n addNewAddress,\n minifiedView,\n routeAddressesPage,\n}) => {\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n viewAllAddressesButton: `Account.${minifiedViewKey}.Addresses.viewAllAddressesButton`,\n addNewAddressButton: `Account.${minifiedViewKey}.Addresses.addNewAddressButton`,\n differentAddressButton: `Account.${minifiedViewKey}.Addresses.differentAddressButton`,\n });\n\n const TagType = selectable ? 'span' : 'button';\n const buttonProps = selectable ? {} : { AriaRole: 'button', type: 'button' };\n\n const nonSelectableViewButton =\n minifiedView && !addNewAddress\n ? translations.viewAllAddressesButton\n : translations.addNewAddressButton;\n\n const buttonText = selectable\n ? translations.differentAddressButton\n : nonSelectableViewButton;\n\n return (\n <TagType\n {...buttonProps}\n className={classes([\n 'account-actions-address',\n ['account-actions-address--viewall', minifiedView],\n ['account-actions-address--address', !minifiedView],\n ['account-actions-address--selectable', selectable],\n className,\n ])}\n data-testid=\"showRouteFullAddress\"\n onClick={routeAddressesPage}\n >\n <span\n className=\"account-actions-address__title\"\n data-testid=\"addressActionsText\"\n >\n {buttonText}\n </span>\n <Icon\n source={minifiedView && !addNewAddress ? ChevronRight : Add}\n size=\"32\"\n />\n </TagType>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { Button, Modal, ProgressSpinner } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport AddressCard from '@/account/components/AddressCard';\nimport '@/account/components/AddressModal/AddressModal.css';\nimport { AddressModalProps } from '@/account/types';\n\nexport const AddressModal: FunctionComponent<AddressModalProps> = ({\n minifiedView,\n keysSortOrder,\n addressData,\n open,\n submitLoading,\n onRemoveAddress,\n closeModal,\n}) => {\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n title: `Account.${minifiedViewKey}.Addresses.removeAddressModal.title`,\n description: `Account.${minifiedViewKey}.Addresses.removeAddressModal.description`,\n actionCancel: `Account.${minifiedViewKey}.Addresses.removeAddressModal.actionCancel`,\n actionConfirm: `Account.${minifiedViewKey}.Addresses.removeAddressModal.actionConfirm`,\n });\n\n if (!open) return null;\n\n return (\n <Modal\n className=\"account-address-modal--overlay\"\n title={<h3>{translations.title}</h3>}\n size=\"full\"\n data-testid=\"addressModal\"\n showCloseButton\n onClose={closeModal}\n >\n <div className=\"account-address-modal\">\n {submitLoading ? (\n <div\n className=\"account-address-modal__spinner\"\n data-testid=\"progressSpinner\"\n >\n <ProgressSpinner stroke={'4'} size={'large'} />\n </div>\n ) : null}\n <p>{translations.description}</p>\n <AddressCard\n minifiedView={minifiedView}\n addressData={addressData}\n keysSortOrder={keysSortOrder}\n />\n <div className=\"account-address-modal__buttons\">\n <Button\n // @ts-ignore\n type={'button'}\n onClick={closeModal}\n variant=\"secondary\"\n disabled={submitLoading}\n >\n {translations.actionCancel}\n </Button>\n <Button disabled={submitLoading} onClick={onRemoveAddress}>\n {translations.actionConfirm}\n </Button>\n </div>\n </div>\n </Modal>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useMemo } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Icon, IllustratedMessage } from '@adobe-commerce/elsie/components';\nimport { AddressBook, EmptyBox } from '@adobe-commerce/elsie/icons';\nimport '@/account/components/EmptyList/EmptyList.css';\nimport { EmptyListProps } from '@/account/types';\n\nexport const EmptyList: FunctionComponent<EmptyListProps> = ({\n typeList,\n isEmpty,\n minifiedView,\n className,\n}) => {\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n addressesMessage: `Account.${minifiedViewKey}.EmptyList.Addresses.message`,\n ordersListMessage: `Account.${minifiedViewKey}.EmptyList.OrdersList.message`,\n });\n\n const config = useMemo(() => {\n switch (typeList) {\n case 'address':\n return {\n icon: AddressBook,\n text: <p>{translations.addressesMessage}</p>,\n };\n case 'orders':\n return {\n icon: EmptyBox,\n text: <p>{translations.ordersListMessage}</p>,\n };\n default:\n return { icon: '', text: '' };\n }\n }, [typeList, translations]);\n\n if (!isEmpty || !typeList || !config.text) return null;\n\n return (\n <IllustratedMessage\n className={classes([\n 'account-empty-list',\n minifiedView ? 'account-empty-list--minified' : '',\n className,\n ])}\n message={config.text as VNode<HTMLAttributes<HTMLElement>>}\n icon={<Icon source={config.icon} />}\n data-testid=\"emptyList\"\n />\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { updateCustomerAddress } from '../api';\nimport { CustomerAddressesModel } from '../data/models';\n\n/**\n\nManages the deletion of an address from a list. If the address is the last one in the list, it removes any default properties before deletion. If the address is not the last, it ensures that no default properties are set on the item, transfers them if necessary to another address, and then deletes the address.\n\n*/\n\nexport const manageAddressDeletion = async (\n removeId: string,\n addressesList: CustomerAddressesModel[]\n) => {\n if (addressesList.length === 1) {\n const address = addressesList[0];\n const isRegionValid = Object.values(address.region as any).every((el) =>\n Boolean(el)\n );\n\n const region = isRegionValid\n ? {}\n : { region: { ...address.region, regionId: 0 } };\n\n const result = await updateCustomerAddress({\n addressId: Number(address?.id),\n defaultShipping: false,\n defaultBilling: false,\n ...(region as any),\n });\n\n return !!result;\n }\n\n const newDefaultAddress = addressesList.filter((item) => {\n return (\n (item.id !== removeId && (item.defaultBilling || item.defaultShipping)) ||\n item.id !== removeId\n );\n });\n\n const fallbackDefaultAddress = addressesList[addressesList.length - 1];\n const updatedDefaultAddress =\n newDefaultAddress[0] ||\n (fallbackDefaultAddress?.id !== removeId ? fallbackDefaultAddress : null);\n\n if (!updatedDefaultAddress || !updatedDefaultAddress.id) return false;\n\n const result = await updateCustomerAddress({\n addressId: +updatedDefaultAddress.id,\n defaultShipping: true,\n defaultBilling: true,\n });\n\n return !!result;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const defaultAttributePreset = [\n 'firstname',\n 'lastname',\n 'city',\n 'company',\n 'country_code',\n 'region',\n 'region_code',\n 'region_id',\n 'telephone',\n 'id',\n 'vat_id',\n 'postcode',\n 'street',\n 'street_multiline_2',\n 'default_shipping',\n 'default_billing',\n 'fax',\n 'prefix',\n 'suffix',\n 'middlename',\n];\n\nexport const defaultAccountAttributePreset = [\n 'email',\n 'firstname',\n 'lastname',\n 'middlename',\n 'gender',\n 'dob',\n 'prefix',\n 'suffix',\n 'fax',\n];\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CustomerAddressesModel } from '../data/models';\n\nexport default (\n data: CustomerAddressesModel[],\n selectShipping: boolean,\n selectBilling: boolean\n): CustomerAddressesModel[] => {\n if (\n (selectShipping && selectBilling) ||\n (!selectShipping && !selectBilling)\n ) {\n return data;\n }\n\n const copyAddressList: CustomerAddressesModel[] = data.slice();\n\n if (selectShipping) {\n return copyAddressList.sort(\n (a, b) => Number(b.defaultShipping) - Number(a.defaultShipping)\n );\n }\n\n if (selectBilling) {\n return copyAddressList.sort(\n (a, b) => Number(b.defaultBilling) - Number(a.defaultBilling)\n );\n }\n\n return data;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useState, useEffect, useCallback } from 'preact/hooks';\nimport {\n getAttributesForm,\n getCustomerAddress,\n removeCustomerAddress,\n} from '@/account/api/';\nimport { CustomerAddressesModel } from '@/account/data/models';\nimport { checkIsFunction } from '@/account/lib/checkIsFunction';\nimport { KeysSortOrderProps, useAddressesProps } from '@/account/types';\nimport { manageAddressDeletion } from '@/account/lib/manageAddressDeletion';\nimport { defaultAttributePreset } from '@/account/configs/defaultAttributePreset.config';\nimport { convertToCamelCase } from '@/account/lib/convertCase';\nimport normalizeGetAddressData from '@/account/lib/normalizeGetAddressData';\nimport sortingAddressesList from '@/account/lib/sortingAddressesList';\n\nconst isEmpty = (obj: any): boolean => {\n if (obj === undefined || obj === null) return true;\n if (typeof obj !== 'object') return false;\n return Object.keys(obj).length === 0 || Object.values(obj).every(isEmpty);\n};\n\nexport const useAddresses = ({\n selectShipping,\n selectBilling,\n defaultSelectAddressId,\n onAddressData,\n minifiedView,\n routeAddressesPage,\n onSuccess,\n}: useAddressesProps) => {\n const [selectedAddressOption, setSelectedAddressOption] =\n useState<string>('');\n const [isModalRendered, setIsModalRendered] = useState<boolean>(false);\n const [isFormRendered, setIsFormRendered] = useState<boolean>(false);\n const [loading, setLoading] = useState<boolean>(false);\n const [submitLoading, setSubmitLoading] = useState<boolean>(false);\n const [addNewAddress, setAddNewAddress] = useState<boolean>(false);\n const [addressId, setEditAddressId] = useState<string>('');\n const [addressesList, setAddressesList] = useState<CustomerAddressesModel[]>(\n []\n );\n const [keysSortOrder, setKeysSortOrder] = useState<KeysSortOrderProps[] | []>(\n []\n );\n\n const getAddressesList = useCallback(async () => {\n setLoading(true);\n\n Promise.all([getAttributesForm('shortRequest'), getCustomerAddress()])\n .then((response) => {\n const [attributesFormResponse, addressResponse] = response;\n\n if (attributesFormResponse) {\n const result: KeysSortOrderProps[] = attributesFormResponse.map(\n ({ name, orderNumber, label }) => ({\n name: convertToCamelCase(name as string),\n orderNumber,\n label: !defaultAttributePreset.includes(name as string)\n ? label\n : null,\n })\n );\n\n setKeysSortOrder(result);\n }\n\n if (addressResponse) {\n if (minifiedView) {\n const defaultAddresses = addressResponse.filter(\n (el) => Boolean(el.defaultShipping) || Boolean(el.defaultBilling)\n );\n\n const addressesToSet = defaultAddresses.length\n ? defaultAddresses\n : addressResponse.slice(-1);\n\n setAddressesList(addressesToSet);\n } else {\n setAddressesList(addressResponse);\n }\n }\n })\n .finally(() => {\n setLoading(false);\n });\n }, [minifiedView]);\n\n useEffect(() => {\n getAddressesList();\n }, [getAddressesList]);\n\n useEffect(() => {\n if (!addressesList.length) return;\n\n if (defaultSelectAddressId === 0) {\n setAddNewAddress(true);\n setSelectedAddressOption('0');\n } else {\n const item =\n addressesList.find((el) => {\n if (typeof defaultSelectAddressId === 'string') {\n return (\n el.uid === defaultSelectAddressId ||\n el.id?.toString() === defaultSelectAddressId\n );\n }\n return +el.id! === defaultSelectAddressId;\n }) ||\n sortingAddressesList(addressesList, selectShipping!, selectBilling!)[0];\n\n const normalizeAddressData = {\n data: normalizeGetAddressData(item),\n isDataValid: !isEmpty(item),\n };\n\n setSelectedAddressOption(item?.id?.toString() || item?.uid || '');\n\n onAddressData?.(normalizeAddressData);\n }\n }, [\n addressesList,\n defaultSelectAddressId,\n onAddressData,\n selectBilling,\n selectShipping,\n ]);\n\n const setEditingAddressId = useCallback((id: string) => {\n setEditAddressId(id);\n setAddNewAddress(false);\n }, []);\n\n const handleSelectAddressOption = useCallback(\n (event: Event, item?: {} | CustomerAddressesModel | undefined) => {\n const value = (event?.target as HTMLInputElement).value;\n const nextSibling = (event?.target as HTMLInputElement)\n .nextSibling as HTMLElement;\n\n setSelectedAddressOption(value);\n\n const normalizeAddressData = {\n data: normalizeGetAddressData(item),\n isDataValid: !isEmpty(normalizeGetAddressData(item)),\n };\n\n onAddressData?.(normalizeAddressData);\n setAddNewAddress(value === '0');\n\n if (nextSibling) {\n nextSibling.focus();\n window.scrollBy(0, 100);\n }\n },\n [onAddressData]\n );\n\n const handleRenderForm = useCallback(() => {\n setIsFormRendered(true);\n }, []);\n\n const onCloseBtnClick = useCallback(() => {\n setEditAddressId('');\n setIsFormRendered(false);\n setIsModalRendered(false);\n }, []);\n\n const handleRenderModal = useCallback(() => {\n setIsModalRendered(true);\n }, []);\n\n const removeAddress = useCallback(async () => {\n setSubmitLoading(true);\n\n await manageAddressDeletion(addressId, addressesList);\n\n removeCustomerAddress(+addressId)\n .then(() => {\n getAddressesList();\n onCloseBtnClick();\n })\n .finally(() => {\n setSubmitLoading(false);\n });\n }, [addressesList, addressId, onCloseBtnClick, getAddressesList]);\n\n const closeNewAddressForm = useCallback(() => {\n setAddNewAddress(false);\n }, []);\n\n const redirectToAddressesRoute = useCallback(() => {\n const isClientRoute =\n checkIsFunction(routeAddressesPage) && minifiedView && !addNewAddress;\n\n if (isClientRoute) {\n window.location.href = routeAddressesPage();\n } else {\n setAddNewAddress(true);\n setEditAddressId('');\n }\n }, [addNewAddress, routeAddressesPage, minifiedView]);\n\n const handleOnSuccess = useCallback(async () => {\n await getAddressesList();\n await onSuccess?.();\n }, [getAddressesList, onSuccess]);\n\n return {\n keysSortOrder,\n submitLoading,\n isModalRendered,\n isFormRendered,\n loading,\n addNewAddress,\n addressesList,\n addressId,\n handleRenderForm,\n handleRenderModal,\n removeAddress,\n onCloseBtnClick,\n setEditingAddressId,\n closeNewAddressForm,\n redirectToAddressesRoute,\n handleOnSuccess,\n handleSelectAddressOption,\n selectedAddressOption,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { memo } from 'preact/compat';\nimport { Fragment, FunctionComponent } from 'preact';\nimport { useAddresses } from '@/account/hooks/containers/useAddresses';\nimport { AddressForm } from '@/account/containers/AddressForm';\nimport { Card, Header } from '@adobe-commerce/elsie/components';\nimport {\n AddressActions,\n AddressCard,\n AddressModal,\n CardLoader,\n EmptyList,\n} from '@/account/components';\nimport { AddressesWrapperProps } from '@/account/types';\nimport '@/account/components/AddressesWrapper/AddressesWrapper.css';\nimport sortingAddressesList from '@/account/lib/sortingAddressesList';\n\nexport const AddressesWrapper: FunctionComponent<AddressesWrapperProps> = memo(\n ({\n minifiedViewKey,\n hideActionFormButtons = false,\n inputName,\n slots,\n title = '',\n addressFormTitle = '',\n defaultSelectAddressId = '',\n showFormLoader = false,\n onAddressData,\n forwardFormRef,\n className,\n showSaveCheckBox = false,\n saveCheckBoxValue = false,\n selectShipping = false,\n selectBilling = false,\n selectable = false,\n withHeader = true,\n minifiedView = false,\n withActionsInMinifiedView = false,\n withActionsInFullSizeView = true,\n inputsDefaultValueSet,\n showShippingCheckBox = true,\n showBillingCheckBox = true,\n shippingCheckBoxValue = true,\n billingCheckBoxValue = true,\n routeAddressesPage,\n onSubmit,\n onSuccess,\n onError,\n }) => {\n const translations = useText({\n containerTitle: `Account.${minifiedViewKey}.Addresses.containerTitle`,\n differentAddressFormTitle: `Account.${minifiedViewKey}.Addresses.differentAddressFormTitle`,\n editAddressFormTitle: `Account.${minifiedViewKey}.Addresses.editAddressFormTitle`,\n viewAllAddressesButton: `Account.${minifiedViewKey}.Addresses.viewAllAddressesButton`,\n newAddressFormTitle: `Account.${minifiedViewKey}.Addresses.newAddressFormTitle`,\n ariaLabelAddressPicker: `Account.${minifiedViewKey}.Addresses.ariaLabelAddressPicker`,\n });\n\n const {\n keysSortOrder,\n submitLoading,\n isModalRendered,\n isFormRendered,\n loading,\n addNewAddress,\n addressesList,\n addressId,\n handleRenderForm,\n handleRenderModal,\n removeAddress,\n onCloseBtnClick,\n handleOnSuccess,\n setEditingAddressId,\n closeNewAddressForm,\n redirectToAddressesRoute,\n handleSelectAddressOption,\n selectedAddressOption,\n } = useAddresses({\n defaultSelectAddressId,\n minifiedView,\n routeAddressesPage,\n onSuccess,\n onAddressData,\n selectShipping,\n selectBilling,\n });\n\n const headerTitle = title || translations.containerTitle;\n\n let addressesComponent = null;\n\n if (selectable) {\n const sortedAddressesList =\n sortingAddressesList(addressesList, selectShipping, selectBilling) ||\n [];\n\n let addressesFooterSection;\n\n if (addNewAddress) {\n addressesFooterSection = (\n <div\n className={classes([\n 'account-addresses-form__footer__wrapper',\n ['account-addresses-form__footer__wrapper-show', addNewAddress],\n ])}\n >\n <AddressForm\n slots={slots}\n hideActionFormButtons={hideActionFormButtons}\n formName={inputName}\n showFormLoader={showFormLoader}\n isOpen={addNewAddress}\n forwardFormRef={forwardFormRef}\n showSaveCheckBox={showSaveCheckBox}\n saveCheckBoxValue={saveCheckBoxValue}\n shippingCheckBoxValue={shippingCheckBoxValue}\n billingCheckBoxValue={billingCheckBoxValue}\n addressesFormTitle={\n addressFormTitle || translations.differentAddressFormTitle\n }\n inputsDefaultValueSet={inputsDefaultValueSet}\n showShippingCheckBox={showShippingCheckBox}\n showBillingCheckBox={showBillingCheckBox}\n onCloseBtnClick={closeNewAddressForm}\n onChange={onAddressData}\n onError={onError}\n onSubmit={onSubmit}\n onSuccess={handleOnSuccess}\n />\n </div>\n );\n } else if (sortedAddressesList.length) {\n addressesFooterSection = (\n <AddressActions\n selectable={selectable}\n minifiedView={minifiedView}\n addNewAddress={addNewAddress}\n routeAddressesPage={redirectToAddressesRoute}\n />\n );\n } else {\n addressesFooterSection = null;\n }\n\n const generalLabelId = `generalLabel_${headerTitle.replace(/\\s+/g, '')}`;\n\n addressesComponent = (\n <div className={'account-addresses-wrapper--select-view'}>\n <span id={generalLabelId} style=\"display: none;\">\n {headerTitle}\n </span>\n {sortedAddressesList.map((item, index) => {\n const valueForSelection = item.id?.toString() || item.uid;\n const inputId = `${inputName}_${valueForSelection}`;\n const labelId = `${inputId}_label`;\n\n return (\n <Fragment key={valueForSelection}>\n <input\n data-testid={`radio-${index + 1}`}\n type=\"radio\"\n name={inputName}\n id={inputId}\n value={valueForSelection}\n checked={selectedAddressOption === valueForSelection}\n onChange={(event) => handleSelectAddressOption(event, item)}\n aria-labelledby={`${generalLabelId} ${labelId}`}\n />\n <label\n id={labelId}\n htmlFor={inputId}\n className={'account-addresses-wrapper__label'}\n >\n <AddressCard\n slots={slots}\n selectable={selectable}\n selectShipping={selectShipping}\n selectBilling={selectBilling}\n minifiedView={minifiedView}\n addressData={item}\n keysSortOrder={keysSortOrder}\n loading={loading}\n />\n </label>\n </Fragment>\n );\n })}\n\n {addressesFooterSection && (\n <div className=\"account-addresses-wrapper__footer-section\">\n <input\n aria-label={`${headerTitle} ${translations.ariaLabelAddressPicker}`}\n data-testid={`radio-0`}\n type=\"radio\"\n name={inputName}\n id={`${inputName}_addressActions`}\n value={'0'}\n checked={selectedAddressOption === '0'}\n onChange={(event) => handleSelectAddressOption(event, {})}\n tabindex={addressesFooterSection ? 0 : -1}\n />\n <label\n htmlFor={`${inputName}_addressActions`}\n className={'account-addresses-wrapper__label'}\n >\n {addressesFooterSection}\n </label>\n </div>\n )}\n </div>\n );\n } else {\n addressesComponent = (\n <>\n {addressesList.map((item) => (\n <Fragment key={item.id}>\n {addressId === item.id && isFormRendered ? (\n <Card variant=\"secondary\" style={{ marginBottom: 20 }}>\n <AddressForm\n slots={slots}\n isOpen={addressId === item.id && isFormRendered}\n addressFormId={addressId}\n inputsDefaultValueSet={item}\n addressesFormTitle={translations.editAddressFormTitle}\n showShippingCheckBox={showShippingCheckBox}\n showBillingCheckBox={showBillingCheckBox}\n shippingCheckBoxValue={shippingCheckBoxValue}\n billingCheckBoxValue={billingCheckBoxValue}\n forwardFormRef={forwardFormRef}\n onCloseBtnClick={onCloseBtnClick}\n onChange={onAddressData}\n onError={onError}\n onSubmit={onSubmit}\n onSuccess={handleOnSuccess}\n />\n </Card>\n ) : (\n <AddressCard\n slots={slots}\n key={item.id}\n minifiedView={minifiedView}\n addressData={item}\n keysSortOrder={keysSortOrder}\n loading={loading}\n setAddressId={setEditingAddressId}\n handleRenderModal={\n (minifiedView && withActionsInMinifiedView) ||\n (!minifiedView && withActionsInFullSizeView)\n ? handleRenderModal\n : undefined\n }\n handleRenderForm={\n (minifiedView && withActionsInMinifiedView) ||\n (!minifiedView && withActionsInFullSizeView)\n ? handleRenderForm\n : undefined\n }\n />\n )}\n </Fragment>\n ))}\n\n <div className=\"account-addresses__footer\">\n {addNewAddress ? (\n <Card variant=\"secondary\">\n <AddressForm\n slots={slots}\n isOpen={addNewAddress}\n addressesFormTitle={translations.newAddressFormTitle}\n inputsDefaultValueSet={inputsDefaultValueSet}\n showShippingCheckBox={!!addressesList?.length}\n showBillingCheckBox={!!addressesList?.length}\n shippingCheckBoxValue={shippingCheckBoxValue}\n billingCheckBoxValue={billingCheckBoxValue}\n forwardFormRef={forwardFormRef}\n onChange={onAddressData}\n onCloseBtnClick={closeNewAddressForm}\n onError={onError}\n onSubmit={onSubmit}\n onSuccess={handleOnSuccess}\n />\n </Card>\n ) : (\n <AddressActions\n minifiedView={minifiedView}\n addNewAddress={addNewAddress}\n routeAddressesPage={redirectToAddressesRoute}\n />\n )}\n </div>\n </>\n );\n }\n\n return (\n <div>\n {withHeader ? (\n <Header\n title={headerTitle}\n divider={!minifiedView}\n className={minifiedView ? 'account-addresses-header' : ''}\n />\n ) : null}\n <div\n className={classes(['account-addresses-wrapper', className])}\n data-testid=\"addressesIdWrapper\"\n >\n <AddressModal\n minifiedView={minifiedView}\n addressData={addressesList?.find((el) => el.id === addressId)}\n keysSortOrder={keysSortOrder}\n submitLoading={submitLoading}\n open={isModalRendered}\n closeModal={onCloseBtnClick}\n onRemoveAddress={removeAddress}\n />\n {loading ? (\n <CardLoader testId={'addressSkeletonLoader'} withCard={false} />\n ) : !selectable ? (\n <EmptyList\n isEmpty={!addressesList?.length}\n typeList=\"address\"\n minifiedView={minifiedView}\n />\n ) : (\n <AddressForm\n slots={slots}\n hideActionFormButtons={hideActionFormButtons}\n formName={inputName}\n isOpen={!addressesList?.length}\n forwardFormRef={forwardFormRef}\n showSaveCheckBox={showSaveCheckBox}\n saveCheckBoxValue={saveCheckBoxValue}\n shippingCheckBoxValue={shippingCheckBoxValue}\n billingCheckBoxValue={billingCheckBoxValue}\n inputsDefaultValueSet={inputsDefaultValueSet}\n showShippingCheckBox={showShippingCheckBox}\n showBillingCheckBox={showBillingCheckBox}\n onChange={onAddressData}\n onCloseBtnClick={closeNewAddressForm}\n onError={onError}\n onSubmit={onSubmit}\n onSuccess={handleOnSuccess}\n />\n )}\n {addressesComponent}\n </div>\n </div>\n );\n }\n);\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FieldEnumList } from '../data/models';\n\nconst defaultCheckBox = {\n entityType: 'CUSTOMER_ADDRESS',\n isUnique: false,\n options: [],\n multilineCount: 0,\n validateRules: [],\n defaultValue: false,\n fieldType: FieldEnumList.BOOLEAN,\n className: '',\n required: false,\n orderNumber: 90,\n isHidden: false,\n};\n\nexport const defaultShippingCheckBox = {\n ...defaultCheckBox,\n label: 'Set as default shipping address',\n name: 'default_shipping',\n id: 'default_shipping',\n code: 'default_shipping',\n customUpperCode: 'defaultShipping',\n};\n\nexport const defaultBillingCheckBox = {\n ...defaultCheckBox,\n label: 'Set as default billing address',\n name: 'default_billing',\n id: 'default_billing',\n code: 'default_billing',\n customUpperCode: 'defaultBilling',\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { AttributesFormModel } from '../data/models';\n\nexport const getFieldsConfig = (\n itemValues: Record<string, any>,\n attributesFormList: AttributesFormModel[]\n) => {\n return attributesFormList?.map((field) => {\n const newItemValues = {\n ...itemValues,\n firstName: itemValues.firstname ?? itemValues.firstName,\n lastName: itemValues.lastname ?? itemValues.lastName,\n middleName: itemValues.middlename ?? itemValues.middleName,\n };\n const newField = JSON.parse(JSON.stringify(field));\n\n if (Object.hasOwn(newItemValues, field.customUpperCode)) {\n const value =\n newItemValues[field.customUpperCode as keyof typeof newItemValues];\n\n if (field.customUpperCode === 'region' && typeof value === 'object') {\n newField.defaultValue =\n value.regionCode && value.regionId\n ? `${value.regionCode},${value.regionId}`\n : value.region ?? value.regionCode;\n } else {\n newField.defaultValue = value;\n }\n }\n\n return newField;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const getFormValues = (form: HTMLFormElement) => {\n if (!form) return null;\n\n const formData = new FormData(form);\n\n const checkboxes = form.querySelectorAll(\n 'input[type=\"checkbox\"]'\n // eslint-disable-next-line no-undef\n ) as NodeListOf<HTMLInputElement>;\n checkboxes.forEach((checkbox: HTMLInputElement) => {\n if (!formData.has(checkbox.name)) {\n formData.set(checkbox.name, 'false');\n }\n if (checkbox.checked) {\n formData.set(checkbox.name, 'true');\n }\n });\n\n if (formData && typeof formData.entries === 'function') {\n const entries = formData.entries();\n if (entries && typeof entries[Symbol.iterator] === 'function') {\n return JSON.parse(JSON.stringify(Object.fromEntries(entries))) || {};\n }\n }\n\n return {};\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Country, RegionTransform } from '../data/models';\n\ntype Field = {\n customUpperCode: string;\n defaultValue?: string | boolean | number;\n options?: any[];\n required?: boolean;\n disabled?: boolean;\n};\n\ninterface ProcessFieldsProps {\n fields: Field[];\n countryOptions: Country[];\n regionOptions: RegionTransform[];\n isRequiredRegion: boolean;\n isRequiredPostCode: boolean;\n disableField: boolean;\n addressId?: string | number;\n}\n\nexport default ({\n fields,\n addressId,\n countryOptions,\n disableField,\n regionOptions,\n isRequiredRegion,\n isRequiredPostCode,\n}: ProcessFieldsProps): Field[] => {\n const result = fields\n .filter((item) => {\n const defaultShippingBilling =\n addressId &&\n (item.customUpperCode === 'defaultShipping' ||\n item.customUpperCode === 'defaultBilling');\n\n return !(defaultShippingBilling && item.defaultValue);\n })\n .map((element) => {\n if (element.customUpperCode === 'countryCode') {\n return {\n ...element,\n options: countryOptions,\n disabled: disableField,\n };\n }\n\n if (element.customUpperCode === 'postcode') {\n return { ...element, required: isRequiredPostCode };\n }\n\n if (element.customUpperCode === 'region') {\n return {\n ...element,\n options: regionOptions,\n required: isRequiredRegion,\n disabled: disableField,\n };\n }\n\n return element;\n });\n\n return result;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { convertToSnakeCase } from './convertCase';\n\nexport const normalizeAttributes = (\n input: Record<string, any>,\n type = 'address'\n) => {\n const baseKeys =\n type === 'address'\n ? [\n 'region',\n 'city',\n 'company',\n 'countryCode',\n 'countryId',\n 'defaultBilling',\n 'defaultShipping',\n 'fax',\n 'firstName',\n 'lastName',\n 'middleName',\n 'postcode',\n 'prefix',\n 'street',\n 'suffix',\n 'telephone',\n 'vatId',\n 'addressId',\n ]\n : [\n 'email',\n 'firstName',\n 'lastName',\n 'middleName',\n 'gender',\n 'dob',\n 'prefix',\n 'suffix',\n 'fax',\n ];\n\n const result: Record<string, any> = {};\n const customAttributes: Record<string, any>[] = [];\n\n Object.keys(input).forEach((key: string) => {\n if (baseKeys.includes(key)) {\n result[key] = input[key];\n } else {\n customAttributes.push({\n attribute_code: convertToSnakeCase(key),\n value: input[key],\n });\n }\n });\n\n if (customAttributes.length > 0) {\n result.custom_attributesV2 = customAttributes;\n }\n\n return result;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CustomerAddressesModel } from '../data/models';\nimport { convertToBoolean } from './convertToBoolean';\nimport { normalizeAttributes } from './normalizeAttributes';\n\nexport const serializeAddressForm = (\n formValues: Record<string, string>\n): CustomerAddressesModel => {\n const streetListKeys = ['street', 'streetMultiline_1', 'streetMultiline_2'];\n const elementValues = ['on', 'off', 'true', 'false'];\n const streetList: string[] = [];\n const modifyFormCheckBoxValues: Record<string, boolean> = {};\n\n for (const key in formValues) {\n const value = formValues[key];\n\n if (elementValues.includes(value)) {\n modifyFormCheckBoxValues[key] = convertToBoolean(value);\n }\n\n if (streetListKeys.includes(key)) {\n streetList.push(value);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { street, streetMultiline_2, streetMultiline_1, region, ...props } =\n formValues;\n const [regionCode, regionId] = region\n ? region.split(',')\n : [undefined, undefined];\n\n const regionConfigs =\n regionId && regionCode\n ? {\n regionId: +regionId,\n regionCode,\n }\n : { region: regionCode };\n\n const result = normalizeAttributes({\n ...props,\n ...modifyFormCheckBoxValues,\n region: { ...regionConfigs },\n street: streetList,\n });\n\n return result;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { RegionTransform } from '../data/models';\n\ntype InputData = Record<string, any>;\n\nexport default (input: InputData, regions: RegionTransform[]): InputData => {\n const transformedData: InputData = {};\n\n for (const key in input) {\n if (Object.prototype.hasOwnProperty.call(input, key)) {\n const value = input[key];\n\n if (key === 'region' && value.regionId) {\n const foundRegion = regions.find(\n (region) => region?.id === value.regionId\n );\n if (foundRegion) {\n transformedData[key] = {\n ...value,\n text: foundRegion.text,\n };\n } else {\n transformedData[key] = value;\n }\n } else if (Array.isArray(value)) {\n transformedData[key] = value[0] || '';\n value.slice(1).forEach((val: any, index: number) => {\n transformedData[`${key}Multiline_${index + 2}`] = val;\n });\n } else {\n transformedData[key] = value;\n }\n }\n }\n\n return transformedData;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n createCustomerAddress,\n getAttributesForm,\n updateCustomerAddress,\n getCountries,\n} from '@/account/api';\nimport {\n defaultShippingCheckBox,\n defaultBillingCheckBox,\n} from '@/account/configs/addressField.config';\nimport {\n AttributesFormModel,\n Country,\n CustomerAddressesModel,\n} from '@/account/data/models';\nimport { getFieldsConfig } from '@/account/lib/getFieldsConfig';\nimport { getFormValues } from '@/account/lib/getFormValues';\nimport prepareNormalizedData from '@/account/lib/prepareNormalizedData';\nimport { serializeAddressForm } from '@/account/lib/serializeAddressForm';\nimport transformSessionData from '@/account/lib/transformSessionData';\nimport { useAddressFormProps } from '@/account/types';\nimport { VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\n\nexport const findNonEmptyObject = (\n obj1: Record<string, unknown> | undefined,\n obj2: CustomerAddressesModel | undefined\n): CustomerAddressesModel | Record<string, unknown> => {\n if (obj1 && Object.keys(obj1).length > 0) {\n return obj1;\n }\n\n if (obj2 && Object.keys(obj2).length > 0) {\n return obj2;\n }\n\n return {};\n};\n\nexport const useAddressForm = ({\n showFormLoader,\n showSaveCheckBox,\n saveCheckBoxValue,\n addressFormId,\n billingCheckBoxValue,\n shippingCheckBoxValue,\n showShippingCheckBox,\n showBillingCheckBox,\n inputsDefaultValueSet,\n onCloseBtnClick,\n onSuccess,\n onError,\n formName,\n}: useAddressFormProps) => {\n const [inLineAlert, setInLineAlert] = useState<{\n text: string;\n type: 'success' | 'warning' | 'error';\n icon?: VNode<HTMLAttributes<SVGSVGElement>>;\n }>({\n text: '',\n type: 'success',\n });\n const [submitLoading, setSubmitLoading] = useState(showFormLoader ?? false);\n const [addressId, setAddressId] = useState<string>(addressFormId || '');\n const [attributesFormList, setAttributesFormList] = useState<\n AttributesFormModel[]\n >([]);\n const [countriesData, setCountriesData] = useState<{\n availableCountries: Country[];\n countriesWithRequiredRegion: string[];\n optionalZipCountries: string[];\n } | null>(null);\n const [inputChange, setInputChange] = useState(() => {\n const savedData = sessionStorage.getItem(`${formName}_addressData`);\n return savedData\n ? { countryCode: JSON.parse(savedData)?.data?.countryCode }\n : inputsDefaultValueSet;\n });\n const [disableField, setDisableField] = useState(false);\n const [saveCheckBoxAddress, setSaveCheckBoxAddress] = useState<boolean>(\n () => {\n const sessionAddressForm = sessionStorage.getItem(\n `${formName}_addressData`\n );\n\n const sessionAddressFormData = sessionAddressForm\n ? JSON.parse(sessionAddressForm)?.data?.['saveAddressBook']\n : (saveCheckBoxValue as boolean);\n\n return sessionAddressFormData;\n }\n );\n\n const handleSaveCheckBoxAddress = useCallback((event: Event) => {\n setSaveCheckBoxAddress((event.target as HTMLInputElement).checked);\n }, []);\n\n useEffect(() => {\n if (typeof showFormLoader === 'undefined') return;\n setSubmitLoading(showFormLoader);\n }, [showFormLoader]);\n\n useEffect(() => {\n getAttributesForm(\n addressId ? 'customer_address_edit' : 'customer_register_address'\n ).then((attributeFormResponse) => {\n setAttributesFormList(attributeFormResponse);\n });\n }, [addressId]);\n\n useEffect(() => {\n setDisableField(true);\n getCountries().then(\n ({\n availableCountries,\n countriesWithRequiredRegion,\n optionalZipCountries,\n }) => {\n setCountriesData({\n availableCountries,\n countriesWithRequiredRegion,\n optionalZipCountries,\n });\n setDisableField(false);\n }\n );\n }, []);\n\n const countryOptions = useMemo(() => {\n return countriesData?.availableCountries || [];\n }, [countriesData]);\n\n const isRequiredRegion = useMemo(() => {\n if (!inputChange?.countryCode || !countriesData) return false;\n return countriesData.countriesWithRequiredRegion.includes(\n inputChange.countryCode as string\n );\n }, [inputChange?.countryCode, countriesData]);\n\n const isRequiredPostCode = useMemo(() => {\n if (!inputChange?.countryCode || !countriesData) return true;\n return !countriesData.optionalZipCountries.includes(\n inputChange.countryCode as string\n );\n }, [inputChange?.countryCode, countriesData]);\n\n const regionOptions = useMemo(() => {\n if (!inputChange?.countryCode || !countriesData) return [];\n\n const country = countriesData.availableCountries.find(\n (c) => c.value === inputChange.countryCode\n );\n\n return (\n country?.availableRegions?.map((region) => ({\n text: region.name,\n value: `${region.code},${region.id}`,\n })) || []\n );\n }, [inputChange?.countryCode, countriesData]);\n\n const handleOnCloseForm = useCallback(() => {\n setInLineAlert({\n text: '',\n type: 'success',\n });\n onCloseBtnClick?.();\n }, [onCloseBtnClick]);\n\n const handleUpdateAddress = useCallback(\n async (event: Event, valid: boolean): Promise<void | null | undefined> => {\n if (!valid) return null;\n\n setSubmitLoading(true);\n\n const formValues = getFormValues(event.target as HTMLFormElement);\n const serializeValues = serializeAddressForm(formValues);\n\n await updateCustomerAddress(serializeValues as any)\n .then(() => {\n onSuccess?.();\n onCloseBtnClick?.();\n (event?.target as HTMLFormElement)?.reset();\n })\n .catch((error) => {\n setInLineAlert((prev) => ({\n ...prev,\n text: error.message,\n type: 'error',\n }));\n onError?.(error);\n })\n .finally(() => {\n setAddressId('');\n setSubmitLoading(false);\n });\n },\n [onCloseBtnClick, onError, onSuccess]\n );\n\n const handleCreateAddress = useCallback(\n async (event: Event, valid: boolean): Promise<void | null | undefined> => {\n if (!valid) return;\n\n setSubmitLoading(true);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { saveAddressBook, ...formValues } = getFormValues(\n event.target as HTMLFormElement\n );\n\n const serializeValues = serializeAddressForm(formValues);\n\n await createCustomerAddress(serializeValues as any)\n .then(() => {\n onSuccess?.();\n onCloseBtnClick?.();\n (event?.target as HTMLFormElement)?.reset();\n })\n .catch((error) => {\n setInLineAlert((prev) => ({\n ...prev,\n text: error.message,\n type: 'error',\n }));\n onError?.(error);\n })\n .finally(() => {\n setAddressId('');\n setSubmitLoading(false);\n });\n },\n [onCloseBtnClick, onError, onSuccess]\n );\n\n const normalizeFieldsConfig = useMemo(() => {\n if (!attributesFormList.length) return [];\n\n const shippingCheckBox = {\n ...defaultShippingCheckBox,\n defaultValue: shippingCheckBoxValue ?? false,\n isHidden:\n showSaveCheckBox && !saveCheckBoxAddress ? true : !showShippingCheckBox,\n };\n\n const billingCheckBox = {\n ...defaultBillingCheckBox,\n defaultValue: billingCheckBoxValue ?? false,\n isHidden:\n showSaveCheckBox && !saveCheckBoxAddress ? true : !showBillingCheckBox,\n };\n\n const updatedAttributesFormList = [\n ...attributesFormList,\n shippingCheckBox,\n billingCheckBox,\n ];\n\n const sessionAddressForm = sessionStorage.getItem(\n `${formName}_addressData`\n );\n\n const sessionAddressFormData = sessionAddressForm\n ? transformSessionData(\n JSON.parse(sessionAddressForm).data as CustomerAddressesModel,\n regionOptions\n )\n : {};\n\n const fields = getFieldsConfig(\n findNonEmptyObject(sessionAddressFormData, inputsDefaultValueSet),\n updatedAttributesFormList\n );\n\n return prepareNormalizedData({\n fields,\n addressId,\n countryOptions,\n disableField,\n regionOptions,\n isRequiredRegion,\n isRequiredPostCode,\n });\n }, [\n attributesFormList,\n shippingCheckBoxValue,\n showSaveCheckBox,\n saveCheckBoxAddress,\n showShippingCheckBox,\n billingCheckBoxValue,\n showBillingCheckBox,\n formName,\n regionOptions,\n inputsDefaultValueSet,\n addressId,\n countryOptions,\n disableField,\n isRequiredRegion,\n isRequiredPostCode,\n ]);\n\n const handleInputChange = useCallback(\n (values: Record<string, string | number | boolean>) => {\n setInputChange((prev) => ({ ...prev, ...values }));\n },\n []\n );\n\n return {\n regionOptions,\n saveCheckBoxAddress,\n inLineAlert,\n addressId,\n submitLoading,\n normalizeFieldsConfig,\n handleSaveCheckBoxAddress,\n handleUpdateAddress,\n handleCreateAddress,\n handleOnCloseForm,\n handleInputChange,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CustomerAddressesModel } from '../data/models';\nimport { convertKeysCase } from './convertCase';\n\ntype CustomAttributesType = {\n customAttributes?: { code: string; value: string }[];\n};\n\nexport const transformDefaultValuesAddresses = (\n address?: CustomerAddressesModel & CustomAttributesType\n): CustomerAddressesModel => {\n if (!address || !Array.isArray(address.customAttributes)) {\n return address ?? {};\n }\n\n const customAttributesObject: Record<string, string> = {};\n\n address?.customAttributes?.forEach((attr) => {\n if (attr.code && Object.hasOwn(attr, 'value')) {\n customAttributesObject[attr.code] = attr.value;\n }\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { customAttributes, ...restOfObject } = address;\n\n return {\n ...restOfObject,\n ...convertKeysCase(customAttributesObject, 'camelCase', {}),\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\nimport { classes, Slot } from '@adobe-commerce/elsie/lib';\nimport { Button, InLineAlert } from '@adobe-commerce/elsie/components';\nimport { Form } from '@/account/components';\nimport { AddressFormWrapperProps, FieldsProps } from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { useAddressForm } from '@/account/hooks/containers/useAddressForm';\nimport '@/account/components/AddressFormWrapper/AddressFormWrapper.css';\nimport { transformDefaultValuesAddresses } from '@/account/lib/transformDefaultValuesAddresses';\n\nexport const AddressFormWrapper: FunctionComponent<AddressFormWrapperProps> = ({\n hideActionFormButtons,\n formName = '',\n showFormLoader = false,\n showSaveCheckBox = false,\n saveCheckBoxValue = false,\n forwardFormRef,\n slots,\n addressesFormTitle,\n className,\n addressFormId,\n inputsDefaultValueSet,\n showShippingCheckBox = true,\n showBillingCheckBox = true,\n shippingCheckBoxValue = true,\n billingCheckBoxValue = true,\n isOpen,\n fieldIdPrefix,\n onSubmit,\n onCloseBtnClick,\n onSuccess,\n onError,\n onChange,\n}) => {\n const translations = useText({\n secondaryButton: 'Account.AddressForm.formText.secondaryButton',\n primaryButton: 'Account.AddressForm.formText.primaryButton',\n saveAddressBook: 'Account.AddressForm.formText.saveAddressBook',\n });\n\n const {\n inLineAlert,\n addressId,\n submitLoading,\n normalizeFieldsConfig,\n handleUpdateAddress,\n handleCreateAddress,\n handleOnCloseForm,\n handleSaveCheckBoxAddress,\n saveCheckBoxAddress,\n handleInputChange,\n regionOptions,\n } = useAddressForm({\n showFormLoader,\n addressFormId,\n inputsDefaultValueSet: transformDefaultValuesAddresses(\n inputsDefaultValueSet\n ),\n shippingCheckBoxValue,\n billingCheckBoxValue,\n showShippingCheckBox,\n showBillingCheckBox,\n saveCheckBoxValue,\n showSaveCheckBox,\n onSuccess,\n onError,\n onCloseBtnClick,\n formName,\n });\n\n const [formKey, setFormKey] = useState(0);\n\n // Re-render form when inputsDefaultValueSet changes\n useEffect(() => {\n setFormKey((prevKey) => prevKey + 1);\n }, [inputsDefaultValueSet]);\n\n if (!isOpen) return null;\n\n return (\n <div className={classes(['account-address-form-wrapper', className])}>\n {addressesFormTitle ? (\n <div\n className=\"account-address-form-wrapper__title\"\n data-testid=\"addressesFormTitle\"\n >\n {addressesFormTitle}\n </div>\n ) : null}\n {inLineAlert.text ? (\n <InLineAlert\n data-testid=\"inLineAlert\"\n className=\"account-address-form-wrapper__notification\"\n type={inLineAlert.type}\n variant=\"secondary\"\n heading={inLineAlert.text}\n icon={inLineAlert.icon}\n />\n ) : null}\n <Form\n key={formKey}\n regionOptions={regionOptions}\n forwardFormRef={forwardFormRef}\n slots={slots}\n className=\"account-address-form\"\n name={formName || 'addressesForm'}\n fieldsConfig={normalizeFieldsConfig as FieldsProps[]}\n onSubmit={\n onSubmit || (addressId ? handleUpdateAddress : handleCreateAddress)\n }\n setInputChange={handleInputChange}\n loading={submitLoading}\n showFormLoader={showFormLoader}\n showSaveCheckBox={showSaveCheckBox}\n handleSaveCheckBoxAddress={handleSaveCheckBoxAddress}\n saveCheckBoxAddress={saveCheckBoxAddress}\n onChange={onChange}\n fieldIdPrefix={fieldIdPrefix}\n >\n {addressId ? (\n <input\n type=\"hidden\"\n name=\"addressId\"\n value={addressId}\n data-testid=\"hidden_test_id\"\n />\n ) : null}\n {!hideActionFormButtons ? (\n <div\n className={classes([\n 'dropin-field account-address-form-wrapper__buttons',\n [\n 'account-address-form-wrapper__buttons--empty',\n showSaveCheckBox,\n ],\n ])}\n >\n {slots?.AddressFormActions ? (\n <Slot\n data-testid=\"addressFormActions\"\n name=\"AddressFormActions\"\n slot={slots.AddressFormActions}\n context={{\n handleUpdateAddress,\n handleCreateAddress,\n addressId,\n }}\n />\n ) : (\n <>\n {!showSaveCheckBox ? (\n <>\n <Button\n // @ts-ignore\n type={'button'}\n onClick={handleOnCloseForm}\n variant=\"secondary\"\n disabled={submitLoading}\n >\n {translations.secondaryButton}\n </Button>\n <Button disabled={submitLoading}>\n {translations.primaryButton}\n </Button>\n </>\n ) : null}\n </>\n )}\n </div>\n ) : null}\n </Form>\n </div>\n );\n};\n"],"names":["AddressForm","hideActionFormButtons","formName","showFormLoader","showSaveCheckBox","saveCheckBoxValue","forwardFormRef","slots","addressesFormTitle","className","addressFormId","inputsDefaultValueSet","billingCheckBoxValue","shippingCheckBoxValue","showBillingCheckBox","showShippingCheckBox","isOpen","fieldIdPrefix","onSubmit","onCloseBtnClick","onSuccess","onError","onChange","classes","jsx","AddressFormWrapper","flattenObjectsArray","arr","acc","obj","validateNumeric","value","validateAlphanumWithSpaces","validateAlphanumeric","validateAlpha","validateEmail","validateDate","isDateWithinRange","date","minTimestamp","maxTimestamp","dateTimestamp","convertTimestampToDate","timestamp","validateUrl","url","validateLength","minLength","maxLength","length","validationFields","configs","translations","errorsList","requiredFieldError","lengthTextError","numericError","alphaNumWithSpacesError","alphaNumericError","alphaError","emailError","dateError","urlError","dateLengthError","fieldName","defaultFields","_a","validateRulesConfig","min","max","dateMin","dateMax","validation","_b","convertToBoolean","element","booleanList","dictionary","groupMultilineFields","inputObj","outputObj","multilineFields","key","match","baseKey","index","k","entries","a","b","entry","separateKeys","inputData","customAttributes","convertToSnakeCase","normalizeGetAddressData","fields","isForm","newFields","convertKeysCase","result","regionCode","regionId","getFormValuesFromRef","formRef","elements","el","areRequiredFieldsValid","forValues","checkIsFunction","initializeFormDataAndErrors","fieldsConfig","customUpperCode","required","defaultValue","isObjectNotEmpty","useForm","setInputChange","useText","useRef","formData","setFormData","useState","errors","setErrors","requiredFields","setRequiredFields","regionEnabled","setRegionEnabled","effectHasRun","setEffectHasRun","shouldBlockEffect","setShouldBlockEffect","shouldTriggerEffect","setShouldTriggerEffect","isDataValid","setIsDataValid","useEffect","getGridRowCount","rows","checkbox","handleValidationSubmit","useCallback","disableShowError","formValid","firstErrorField","name","fieldConfig","config","validationResult","input","collectFormData","fieldValue","requiredList","event","fieldsForm","data","initialData","errorList","prev","sessionAddressForm","hasCountryCode","hasRegion","handleInputChange","errorsProp","type","checked","updatedFormData","onFocus","handleBlur","handleSubmit","FieldEnumList","FormInputs","memo","loading","values","onBlur","itemClassName","translationKeys","useMemo","field","getAriaLabel","item","getFloatingLabel","getPlaceholder","renderSlot","errorMessage","contextValue","Slot","selectElement","valueMessage","defaultSelectValue","option","Fragment","Field","Picker","inputElement","Input","inputDateElement","InputDate","inputCheckBoxElement","Checkbox","textAreaElement","TextArea","CardLoader","testId","withCard","defaultSkeleton","jsxs","Skeleton","SkeletonRow","Card","AddressFormLoader","Form","forwardRef","children","regionOptions","handleSaveCheckBoxAddress","saveCheckBoxAddress","useImperativeHandle","modifyFormRef","getAddressButtonAriaLabel","defaultShipping","defaultBilling","isRemove","labelMap","AddressCard","selectable","selectShipping","selectBilling","variant","minifiedView","keysSortOrder","addressData","setAddressId","handleRenderModal","handleRenderForm","addressCardAriaId","useId","minifiedViewKey","defaultBillingLabel","defaultShippingLabel","defaultLabelText","getLabelStatus","handleRemove","handleEdit","normalizeAddress","region","address","modifyAddressData","shippingLabel","billingLabel","hideShipping","hideBilling","Button","Tag","SvgAdd","props","React","SvgAddressBook","SvgChevronRight","SvgEmptyBox","AddressActions","addNewAddress","routeAddressesPage","TagType","buttonProps","nonSelectableViewButton","buttonText","Icon","ChevronRight","Add","AddressModal","open","submitLoading","onRemoveAddress","closeModal","Modal","ProgressSpinner","EmptyList","typeList","isEmpty","AddressBook","EmptyBox","IllustratedMessage","manageAddressDeletion","removeId","addressesList","updateCustomerAddress","newDefaultAddress","fallbackDefaultAddress","updatedDefaultAddress","defaultAttributePreset","defaultAccountAttributePreset","sortingAddressesList","copyAddressList","useAddresses","defaultSelectAddressId","onAddressData","selectedAddressOption","setSelectedAddressOption","isModalRendered","setIsModalRendered","isFormRendered","setIsFormRendered","setLoading","setSubmitLoading","setAddNewAddress","addressId","setEditAddressId","setAddressesList","setKeysSortOrder","getAddressesList","getAttributesForm","getCustomerAddress","response","attributesFormResponse","addressResponse","orderNumber","label","convertToCamelCase","defaultAddresses","addressesToSet","normalizeAddressData","setEditingAddressId","id","handleSelectAddressOption","nextSibling","removeAddress","removeCustomerAddress","closeNewAddressForm","redirectToAddressesRoute","handleOnSuccess","AddressesWrapper","inputName","title","addressFormTitle","withHeader","withActionsInMinifiedView","withActionsInFullSizeView","headerTitle","addressesComponent","sortedAddressesList","addressesFooterSection","generalLabelId","valueForSelection","inputId","labelId","Header","defaultCheckBox","defaultShippingCheckBox","defaultBillingCheckBox","getFieldsConfig","itemValues","attributesFormList","newItemValues","newField","getFormValues","form","prepareNormalizedData","countryOptions","disableField","isRequiredRegion","isRequiredPostCode","normalizeAttributes","baseKeys","serializeAddressForm","formValues","streetListKeys","elementValues","streetList","modifyFormCheckBoxValues","street","streetMultiline_2","streetMultiline_1","regionConfigs","transformSessionData","regions","transformedData","foundRegion","val","findNonEmptyObject","obj1","obj2","useAddressForm","inLineAlert","setInLineAlert","setAttributesFormList","countriesData","setCountriesData","inputChange","savedData","setDisableField","setSaveCheckBoxAddress","attributeFormResponse","getCountries","availableCountries","countriesWithRequiredRegion","optionalZipCountries","country","c","handleOnCloseForm","handleUpdateAddress","valid","serializeValues","error","handleCreateAddress","saveAddressBook","createCustomerAddress","normalizeFieldsConfig","shippingCheckBox","billingCheckBox","updatedAttributesFormList","sessionAddressFormData","transformDefaultValuesAddresses","customAttributesObject","attr","restOfObject","formKey","setFormKey","prevKey","InLineAlert"],"mappings":"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","x_google_ignoreList":[15,16,17,18]}
|
|
1
|
+
{"version":3,"file":"AddressValidation.js","sources":["/@dropins/storefront-account/src/containers/AddressForm/AddressForm.tsx","/@dropins/storefront-account/src/lib/validationFields.ts","/@dropins/storefront-account/src/lib/convertToBoolean.ts","/@dropins/storefront-account/src/lib/normalizeGetAddressData.ts","/@dropins/storefront-account/src/lib/getFormValuesFromRef.ts","/@dropins/storefront-account/src/lib/areRequiredFieldsValid.ts","/@dropins/storefront-account/src/lib/checkIsFunction.ts","/@dropins/storefront-account/src/lib/initializeFormDataAndErrors.ts","/@dropins/storefront-account/src/hooks/components/useForm.tsx","/@dropins/storefront-account/src/data/models/attributes-form.ts","/@dropins/storefront-account/src/components/Form/FormInputs/FormInputs.tsx","/@dropins/storefront-account/src/components/AccountLoaders/AccountLoaders.tsx","/@dropins/storefront-account/src/components/Form/Form.tsx","/@dropins/storefront-account/src/lib/getAddressButtonAriaLabel.ts","/@dropins/storefront-account/src/components/AddressCard/AddressCard.tsx","../../node_modules/@adobe-commerce/elsie/src/icons/Add.svg","../../node_modules/@adobe-commerce/elsie/src/icons/AddressBook.svg","../../node_modules/@adobe-commerce/elsie/src/icons/ChevronRight.svg","../../node_modules/@adobe-commerce/elsie/src/icons/EmptyBox.svg","/@dropins/storefront-account/src/components/AddressActions/AddressActions.tsx","/@dropins/storefront-account/src/components/AddressModal/AddressModal.tsx","/@dropins/storefront-account/src/components/EmptyList/EmptyList.tsx","/@dropins/storefront-account/src/lib/manageAddressDeletion.ts","/@dropins/storefront-account/src/configs/defaultAttributePreset.config.ts","/@dropins/storefront-account/src/lib/sortingAddressesList.ts","/@dropins/storefront-account/src/hooks/containers/useAddresses.tsx","/@dropins/storefront-account/src/components/AddressesWrapper/AddressesWrapper.tsx","/@dropins/storefront-account/src/configs/addressField.config.ts","/@dropins/storefront-account/src/lib/getFieldsConfig.ts","/@dropins/storefront-account/src/lib/getFormValues.ts","/@dropins/storefront-account/src/lib/prepareNormalizedData.ts","/@dropins/storefront-account/src/lib/normalizeAttributes.ts","/@dropins/storefront-account/src/lib/serializeAddressForm.ts","/@dropins/storefront-account/src/lib/transformSessionData.ts","/@dropins/storefront-account/src/hooks/containers/useAddressForm.tsx","/@dropins/storefront-account/src/lib/transformDefaultValuesAddresses.ts","/@dropins/storefront-account/src/components/AddressFormWrapper/AddressFormWrapper.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes, Container } from '@adobe-commerce/elsie/lib';\nimport { AddressFormWrapper } from '@/account/components';\nimport { AddressFormProps } from '@/account/types';\n\nexport const AddressForm: Container<AddressFormProps> = ({\n hideActionFormButtons,\n formName,\n showFormLoader,\n showSaveCheckBox,\n saveCheckBoxValue,\n forwardFormRef,\n slots,\n addressesFormTitle,\n className,\n addressFormId,\n inputsDefaultValueSet,\n billingCheckBoxValue,\n shippingCheckBoxValue,\n showBillingCheckBox,\n showShippingCheckBox,\n isOpen,\n fieldIdPrefix,\n onSubmit,\n onCloseBtnClick,\n onSuccess,\n onError,\n onChange,\n}) => {\n return (\n <div className={classes(['account-address-form'])}>\n <AddressFormWrapper\n hideActionFormButtons={hideActionFormButtons}\n formName={formName}\n showFormLoader={showFormLoader}\n slots={slots}\n addressesFormTitle={addressesFormTitle}\n className={className}\n addressFormId={addressFormId}\n inputsDefaultValueSet={inputsDefaultValueSet}\n shippingCheckBoxValue={shippingCheckBoxValue}\n billingCheckBoxValue={billingCheckBoxValue}\n showShippingCheckBox={showShippingCheckBox}\n showBillingCheckBox={showBillingCheckBox}\n isOpen={isOpen}\n fieldIdPrefix={fieldIdPrefix}\n onSubmit={onSubmit}\n onCloseBtnClick={onCloseBtnClick}\n onSuccess={onSuccess}\n onError={onError}\n onChange={onChange}\n forwardFormRef={forwardFormRef}\n showSaveCheckBox={showSaveCheckBox}\n saveCheckBoxValue={saveCheckBoxValue}\n />\n </div>\n );\n};\n","/* eslint-disable no-useless-escape */\n\n/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\ntype ValidationConfig = Record<string, string>;\ntype TranslationList = Record<string, string>;\ntype ErrorsList = Record<string, string>;\nexport type ValidationFieldsConfig = {\n validateRules: Record<string, string>[];\n code?: string;\n customUpperCode: string;\n required: boolean;\n};\n\nenum ConfigEnumLength {\n MIN_TEXT_LENGTH = 'MIN_TEXT_LENGTH',\n MAX_TEXT_LENGTH = 'MAX_TEXT_LENGTH',\n DATE_RANGE_MIN = 'DATE_RANGE_MIN',\n DATE_RANGE_MAX = 'DATE_RANGE_MAX',\n}\n\nexport enum InputValidation {\n Numeric = 'numeric',\n AlphanumWithSpaces = 'alphanum-with-spaces',\n Alphanumeric = 'alphanumeric',\n Alpha = 'alpha',\n Email = 'email',\n Length = 'length',\n Date = 'date',\n Url = 'url',\n}\n\nconst flattenObjectsArray = (arr: ValidationConfig[]): ValidationConfig => {\n return arr.reduce((acc, obj) => {\n return { ...acc, [obj.name]: obj.value };\n }, {});\n};\n\n//The basic material for the functions responsible for validation was taken from https://github.com/magento/magento2/blob/2.4/app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js\nexport const validateNumeric = (value: string): boolean => /^\\d+$/.test(value);\n\nexport const validateAlphanumWithSpaces = (value: string): boolean =>\n /^[a-zA-Z0-9\\s]+$/.test(value);\n\nexport const validateAlphanumeric = (value: string): boolean =>\n /^[a-zA-Z0-9]+$/.test(value);\n\nexport const validateAlpha = (value: string): boolean =>\n /^[a-zA-Z]+$/.test(value);\n\nexport const validateEmail = (value: string): boolean =>\n /^[a-z0-9,!\\#\\$%&'\\*\\+\\/=\\?\\^_`\\{\\|\\}~-]+(\\.[a-z0-9,!\\#\\$%&'\\*\\+\\/=\\?\\^_`\\{\\|\\}~-]+)*@([a-z0-9-]+\\.)+[a-z]{2,}$/i.test(\n value\n );\n\nexport const validateDate = (value: string): boolean =>\n /^\\d{4}-\\d{2}-\\d{2}$/.test(value) && !isNaN(Date.parse(value));\n\nexport const isDateWithinRange = (\n date: string,\n minTimestamp?: number,\n maxTimestamp?: number\n): boolean => {\n const dateTimestamp = new Date(date).getTime() / 1000;\n\n if (isNaN(dateTimestamp) || dateTimestamp < 0) {\n return false;\n }\n\n if (minTimestamp !== undefined && dateTimestamp < minTimestamp) {\n return false;\n }\n\n if (maxTimestamp !== undefined && dateTimestamp > maxTimestamp) {\n return false;\n }\n\n return true;\n};\n\nexport const convertTimestampToDate = (\n timestamp: string | null | undefined\n): string => {\n if (!timestamp || isNaN(Number(timestamp))) {\n return '';\n }\n\n return new Date(parseInt(timestamp, 10) * 1000).toISOString().split('T')[0];\n};\n\nexport const validateUrl = (url: string) => {\n const urlPattern =\n /^(https?|ftp):\\/\\/(([A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))(\\.[A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))*)(:(\\d+))?(\\/[A-Z0-9~](([A-Z0-9_~-]|\\.)*[A-Z0-9~]|))*\\/?(.*)?$/i;\n return urlPattern.test(url);\n};\n\nexport const validateLength = (\n value: string,\n minLength: number,\n maxLength: number\n): boolean => {\n const length = value.length;\n return length >= minLength && length <= maxLength;\n};\n\nexport const validationFields = (\n value: string,\n configs: ValidationFieldsConfig,\n translations: TranslationList,\n errorsList: ErrorsList\n) => {\n const {\n requiredFieldError,\n lengthTextError,\n numericError,\n alphaNumWithSpacesError,\n alphaNumericError,\n alphaError,\n emailError,\n dateError,\n urlError,\n dateLengthError,\n } = translations;\n\n const fieldName = configs?.customUpperCode as string;\n\n const defaultFields = { [fieldName]: '' };\n\n if (errorsList[fieldName]) {\n delete errorsList[fieldName];\n }\n\n if (configs?.required && (!value || value === 'false')) {\n return { [fieldName]: requiredFieldError };\n }\n\n if (!configs?.required && !value) {\n return defaultFields;\n }\n\n if (!configs?.validateRules?.length) return defaultFields;\n\n const validateRulesConfig = flattenObjectsArray(configs?.validateRules);\n\n const min = validateRulesConfig[ConfigEnumLength.MIN_TEXT_LENGTH] ?? 1;\n const max = validateRulesConfig[ConfigEnumLength.MAX_TEXT_LENGTH] ?? 255;\n const dateMin = validateRulesConfig[ConfigEnumLength.DATE_RANGE_MIN];\n const dateMax = validateRulesConfig[ConfigEnumLength.DATE_RANGE_MAX];\n\n if (!validateLength(value, +min, +max) && !(dateMin || dateMax)) {\n return {\n [fieldName]: lengthTextError.replace('{min}', min).replace('{max}', max),\n };\n }\n\n if (!isDateWithinRange(value, +dateMin, +dateMax) && (dateMin || dateMax)) {\n return {\n [fieldName]: dateLengthError\n .replace('{min}', convertTimestampToDate(dateMin))\n .replace('{max}', convertTimestampToDate(dateMax)),\n };\n }\n\n const validationMap = {\n [InputValidation.Numeric]: {\n validate: validateNumeric,\n error: numericError,\n },\n [InputValidation.AlphanumWithSpaces]: {\n validate: validateAlphanumWithSpaces,\n error: alphaNumWithSpacesError,\n },\n [InputValidation.Alphanumeric]: {\n validate: validateAlphanumeric,\n error: alphaNumericError,\n },\n [InputValidation.Alpha]: {\n validate: validateAlpha,\n error: alphaError,\n },\n [InputValidation.Email]: {\n validate: validateEmail,\n error: emailError,\n },\n [InputValidation.Date]: {\n validate: validateDate,\n error: dateError,\n },\n [InputValidation.Url]: {\n validate: validateUrl,\n error: urlError,\n },\n };\n\n const validation =\n validationMap[\n validateRulesConfig['INPUT_VALIDATION'] as keyof typeof validationMap\n ];\n\n if (\n validation &&\n !validation.validate(value) &&\n !errorsList[fieldName]?.length\n ) {\n return { [fieldName]: validation.error };\n }\n\n return defaultFields;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const convertToBoolean = (element: string | number): boolean => {\n switch (element) {\n case 'on':\n case 'true':\n case 1:\n case '1':\n return true;\n case '0':\n case 'off':\n case 'false':\n case 0:\n return false;\n default:\n return false;\n }\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { convertKeysCase, convertToSnakeCase } from '@/account/lib/convertCase';\nimport { convertToBoolean } from './convertToBoolean';\n\nconst booleanList = ['true', 'false', 'yes', 'on', 'off'];\n\nconst dictionary: Record<string, string> = {\n firstName: '',\n lastName: '',\n city: '',\n company: '',\n countryCode: '',\n region: '',\n regionCode: '',\n regionId: '',\n id: '',\n telephone: '',\n vatId: '',\n postcode: '',\n defaultShipping: '',\n defaultBilling: '',\n street: '',\n saveAddressBook: '',\n prefix: '',\n middleName: '',\n fax: '',\n suffix: '',\n uid: '',\n} as const;\n\nexport const groupMultilineFields = (\n inputObj: Record<string, any>\n): Record<string, any> => {\n const outputObj: Record<string, any> = {};\n const multilineFields: Record<\n string,\n Array<{ index: number; value: any }>\n > = {};\n\n for (const key in inputObj) {\n if (Object.prototype.hasOwnProperty.call(inputObj, key)) {\n const value = inputObj[key];\n const match = key.match(/^(.*)Multiline_(\\d+)$/);\n\n if (match) {\n const baseKey: string = match[1];\n const index: number = parseInt(match[2], 10);\n\n if (!multilineFields[baseKey]) {\n multilineFields[baseKey] = [];\n }\n\n multilineFields[baseKey].push({ index, value });\n } else {\n const relatedMultilineKeys = Object.keys(inputObj).filter((k) =>\n k.startsWith(`${key}Multiline_`)\n );\n if (relatedMultilineKeys.length > 0) {\n multilineFields[key] = [{ index: 1, value }];\n } else {\n outputObj[key] = value;\n }\n }\n }\n }\n\n for (const baseKey in multilineFields) {\n if (Object.prototype.hasOwnProperty.call(multilineFields, baseKey)) {\n const entries = multilineFields[baseKey];\n entries.sort((a, b) => a.index - b.index);\n outputObj[baseKey] = entries.map((entry) => entry.value);\n }\n }\n\n return outputObj;\n};\n\nexport const separateKeys = (\n inputData: Record<string, any>\n): Record<keyof typeof dictionary, unknown> => {\n const defaultFields: Record<string, any> = {};\n const customAttributes: Record<string, string | boolean | number>[] = [];\n\n for (const key in inputData) {\n const value = booleanList.includes(inputData[key])\n ? convertToBoolean(inputData[key])\n : inputData[key];\n\n if (Object.prototype.hasOwnProperty.call(inputData, key)) {\n if (Object.prototype.hasOwnProperty.call(dictionary, key)) {\n defaultFields[key] = value;\n } else {\n customAttributes.push({ code: convertToSnakeCase(key), value });\n }\n }\n }\n\n return { ...defaultFields, customAttributes };\n};\n\nexport default (fields?: Record<string, any>, isForm = false) => {\n const newFields = convertKeysCase(fields, 'camelCase', {\n firstname: 'firstName',\n lastname: 'lastName',\n middlename: 'middleName',\n });\n\n const result = separateKeys(groupMultilineFields(newFields));\n\n if (!isForm) return result;\n\n const [regionCode, regionId] = result.region\n ? (result.region as string).split(',')\n : [];\n\n return {\n ...result,\n region: {\n regionCode,\n ...(regionId && { regionId: +regionId }),\n },\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { RefObject } from 'preact';\n\nexport default (formRef: RefObject<HTMLFormElement>): Record<string, any> => {\n if (!formRef.current) {\n return {};\n }\n\n const elements = formRef.current.elements;\n\n const formValues = Array.from(elements).reduce(\n (acc: Record<string, any>, el: any) => {\n if (el.name) {\n acc[el.name] = el.type === 'checkbox' ? el.checked : el.value;\n }\n return acc;\n },\n {}\n );\n\n return formValues;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\ntype ErrorsList = {\n [key: string]: string;\n};\n\nexport default (\n errorsList: ErrorsList,\n forValues: Record<string, string | number | boolean>\n): boolean => {\n if (!Object.keys(errorsList).length) return false;\n\n const result = Object.keys(errorsList).every(\n (key) => key in forValues && forValues[key] !== ''\n );\n\n return result;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const checkIsFunction = (value: any): value is Function => {\n return typeof value === 'function';\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport default (\n fieldsConfig: Array<{\n customUpperCode?: string;\n required?: boolean;\n defaultValue?: unknown;\n }>\n): {\n initialData: Record<string, unknown>;\n errorList: Record<string, string>;\n} => {\n return fieldsConfig.reduce(\n (\n acc: {\n initialData: Record<string, unknown>;\n errorList: Record<string, string>;\n },\n { customUpperCode, required, defaultValue }\n ) => {\n if (required && customUpperCode) {\n acc.initialData[customUpperCode] = defaultValue || '';\n acc.errorList[customUpperCode] = '';\n }\n\n return acc;\n },\n {\n initialData: {},\n errorList: {},\n }\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { useFormProps } from '@/account/types';\nimport {\n validationFields,\n ValidationFieldsConfig,\n} from '@/account/lib/validationFields';\nimport normalizeGetAddressData from '@/account/lib/normalizeGetAddressData';\nimport getFormValuesFromRef from '@/account/lib/getFormValuesFromRef';\nimport areRequiredFieldsValid from '@/account/lib/areRequiredFieldsValid';\nimport { checkIsFunction } from '@/account/lib/checkIsFunction';\nimport { CustomerAddressesModel } from '@/account/data/models';\nimport initializeFormDataAndErrors from '@/account/lib/initializeFormDataAndErrors';\n\nconst isObjectNotEmpty = (obj: Record<string, string>) =>\n Object.keys(obj).length > 0;\n\nexport const useForm = ({\n fieldsConfig,\n onSubmit,\n onChange,\n setInputChange,\n formName,\n}: useFormProps) => {\n const translations = useText({\n requiredFieldError: 'Account.FormText.requiredFieldError',\n lengthTextError: 'Account.FormText.lengthTextError',\n numericError: 'Account.FormText.numericError',\n alphaNumWithSpacesError: 'Account.FormText.alphaNumWithSpacesError',\n alphaNumericError: 'Account.FormText.alphaNumericError',\n alphaError: 'Account.FormText.alphaError',\n emailError: 'Account.FormText.emailError',\n dateError: 'Account.FormText.dateError',\n dateLengthError: 'Account.FormText.dateLengthError',\n urlError: 'Account.FormText.urlError',\n });\n\n const formRef = useRef<HTMLFormElement>(null);\n const [formData, setFormData] = useState<Record<string, string | number>>({});\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [requiredFields, setRequiredFields] = useState({});\n const [regionEnabled, setRegionEnabled] = useState(true);\n const [effectHasRun, setEffectHasRun] = useState(false);\n const [shouldBlockEffect, setShouldBlockEffect] = useState(false);\n const [shouldTriggerEffect, setShouldTriggerEffect] = useState(true);\n const [isDataValid, setIsDataValid] = useState(false);\n\n useEffect(() => {\n const getGridRowCount = () => {\n if (formRef.current) {\n const computedStyles = window.getComputedStyle(formRef.current);\n const rows = computedStyles\n .getPropertyValue('grid-template-rows')\n .split(' ').length;\n const checkbox = formRef.current.querySelector(\n '.account-address-form--saveAddressBook'\n );\n\n if (checkbox) {\n (checkbox as HTMLInputElement).style.gridRow = String(rows - 1);\n }\n }\n };\n\n getGridRowCount();\n\n window.addEventListener('resize', getGridRowCount);\n\n return () => {\n window.removeEventListener('resize', getGridRowCount);\n };\n }, [fieldsConfig?.length]);\n\n const handleValidationSubmit = useCallback(\n (disableShowError = false) => {\n let formValid = true;\n const errorsList = { ...errors };\n let firstErrorField: string | null = null;\n\n for (const [name, value] of Object.entries(formData)) {\n const fieldConfig = fieldsConfig?.find((config) =>\n config.customUpperCode.includes(name)\n );\n\n const validationResult = validationFields(\n value.toString(),\n fieldConfig as ValidationFieldsConfig,\n translations,\n errorsList\n );\n\n if (validationResult[name]) {\n Object.assign(errorsList, validationResult);\n formValid = false;\n }\n\n if (!firstErrorField) {\n firstErrorField =\n Object.keys(errorsList).find((key) => errorsList[key]) || null;\n }\n }\n\n if (!disableShowError) {\n setErrors(errorsList);\n }\n\n if (firstErrorField && formRef.current && !disableShowError) {\n const input = formRef.current.elements.namedItem(\n firstErrorField\n ) as HTMLElement;\n input?.focus();\n }\n\n return formValid;\n },\n [errors, fieldsConfig, formData, translations]\n );\n\n const collectFormData = useCallback(\n (\n fieldValue: string | number | boolean,\n name: string,\n requiredList: Record<string, string>,\n event: Event | null\n ) => {\n const fieldsForm = {\n ...getFormValuesFromRef(formRef),\n [name]: fieldValue,\n ...(name.includes('countryCode') ? { region: '' } : {}),\n };\n\n const data = {\n data: normalizeGetAddressData(fieldsForm, true),\n isDataValid: areRequiredFieldsValid(requiredList, fieldsForm),\n };\n setIsDataValid(data.isDataValid);\n handleValidationSubmit(true);\n\n ['selectedShippingAddress', 'selectedBillingAddress'].includes(\n formName\n ) &&\n sessionStorage.setItem(`${formName}_addressData`, JSON.stringify(data));\n // @ts-ignore\n onChange?.(data, {}, event);\n },\n [handleValidationSubmit, formName, onChange]\n );\n\n useEffect(() => {\n if (fieldsConfig?.length) {\n const { initialData, errorList } =\n initializeFormDataAndErrors(fieldsConfig);\n\n setFormData((prev) => ({\n ...(initialData as Record<string, string | number>),\n ...prev,\n }));\n\n setErrors(errorList);\n setRequiredFields(errorList);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(fieldsConfig)]);\n\n useEffect(() => {\n if (shouldBlockEffect) return;\n // This code is responsible for initializing data when we retrieve it from session storage. It validates the data, sets the initial configurations for the form, and sends the data through the callback to check if it's valid or not.\n const fields = getFormValuesFromRef(formRef);\n const sessionAddressForm = sessionStorage.getItem(\n `${formName}_addressData`\n );\n\n if (\n isObjectNotEmpty(formData as Record<string, string>) &&\n isObjectNotEmpty(requiredFields)\n ) {\n let data = {};\n\n const isDataValid = areRequiredFieldsValid(\n requiredFields,\n formData as Record<string, string | number | boolean>\n );\n\n if (sessionAddressForm) {\n data = JSON.parse(sessionAddressForm).data as CustomerAddressesModel;\n } else {\n // This code is used as an initializer and needs to run once during the page load in the default state, as the user can pass default parameters via props.\n data = normalizeGetAddressData(fields, true) ?? {};\n }\n\n // @ts-ignore\n onChange?.({ data, isDataValid }, {}, null);\n setIsDataValid(isDataValid);\n setShouldBlockEffect(true);\n }\n /* eslint-disable react-hooks/exhaustive-deps */\n }, [formData, requiredFields]);\n\n useEffect(() => {\n if (!shouldTriggerEffect) return;\n\n const fields = getFormValuesFromRef(formRef);\n const hasCountryCode = Boolean(fields?.countryCode);\n const hasRegion = Boolean(fields?.region?.length);\n const shouldTriggerChange =\n fields && hasCountryCode && !hasRegion && checkIsFunction(onChange);\n\n if (shouldTriggerChange) {\n collectFormData(fields?.region, 'region', requiredFields, null);\n }\n }, [\n shouldTriggerEffect,\n regionEnabled,\n fieldsConfig,\n formRef,\n onChange,\n collectFormData,\n requiredFields,\n effectHasRun,\n ]);\n\n const handleInputChange = useCallback(\n (event: Event, errorsProp?: Record<string, string>) => {\n const { name, value, type, checked } = event?.target as HTMLInputElement;\n const fieldValue = type === 'checkbox' ? checked : value;\n\n setFormData((prev) => {\n const updatedFormData = {\n ...prev,\n [name]: fieldValue,\n };\n\n if (name === 'countryCode') {\n updatedFormData.region = '';\n setRegionEnabled(true);\n setEffectHasRun(false);\n }\n\n return updatedFormData as Record<string, string | number>;\n });\n\n setInputChange?.({ [name]: fieldValue });\n setShouldBlockEffect(true);\n\n const fieldConfig = fieldsConfig?.find((config) =>\n config.customUpperCode.includes(name)\n );\n\n let errorsList = errorsProp ? { ...errorsProp } : { ...errors };\n\n if (fieldConfig) {\n const validationResult = validationFields(\n fieldValue.toString(),\n fieldConfig as ValidationFieldsConfig,\n translations,\n errorsList\n );\n\n if (validationResult) {\n Object.assign(errorsList, validationResult);\n }\n\n setErrors(errorsList);\n }\n\n collectFormData(fieldValue, name, requiredFields, event);\n },\n [\n setInputChange,\n fieldsConfig,\n errors,\n translations,\n collectFormData,\n requiredFields,\n regionEnabled,\n ]\n );\n\n const onFocus = useCallback((event: Event) => {\n const { name } = event?.target as HTMLInputElement;\n\n const fieldConfig = fieldsConfig?.find(\n (config) => config.customUpperCode === name\n );\n\n if (name === 'region' && fieldConfig?.options.length) {\n setShouldTriggerEffect(false);\n }\n\n if (name !== 'countryCode') {\n setShouldTriggerEffect(false);\n } else {\n setShouldTriggerEffect(true);\n }\n }, []);\n\n const handleBlur = useCallback(\n (event: Event, errorsProp?: Record<string, string>) => {\n const { name, value, type, checked } = event?.target as HTMLInputElement;\n const fieldValue = type === 'checkbox' ? checked : value;\n\n const fieldConfig = fieldsConfig?.find(\n (config) => config.customUpperCode === name\n );\n\n if (fieldConfig) {\n const errorsList = errorsProp ? { ...errorsProp } : { ...errors };\n\n const validationResult = validationFields(\n fieldValue.toString(),\n fieldConfig as ValidationFieldsConfig,\n translations,\n errorsList\n );\n\n if (validationResult) {\n Object.assign(errorsList, validationResult);\n }\n\n setErrors(errorsList);\n }\n },\n [errors, fieldsConfig, translations]\n );\n\n const handleSubmit = useCallback(\n (event: SubmitEvent) => {\n event.preventDefault();\n\n const formValid = handleValidationSubmit();\n\n onSubmit?.(event, formValid);\n },\n [handleValidationSubmit, onSubmit]\n );\n\n return {\n isDataValid,\n formData,\n errors,\n formRef,\n handleInputChange,\n onFocus,\n handleBlur,\n handleSubmit,\n handleValidationSubmit,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport enum FieldEnumList {\n BOOLEAN = 'BOOLEAN',\n DATE = 'DATE',\n DATETIME = 'DATETIME',\n DROPDOWN = 'DROPDOWN',\n FILE = 'FILE',\n GALLERY = 'GALLERY',\n HIDDEN = 'HIDDEN',\n IMAGE = 'IMAGE',\n MEDIA_IMAGE = 'MEDIA_IMAGE',\n MULTILINE = 'MULTILINE',\n MULTISELECT = 'MULTISELECT',\n PRICE = 'PRICE',\n SELECT = 'SELECT',\n TEXT = 'TEXT',\n TEXTAREA = 'TEXTAREA',\n UNDEFINED = 'UNDEFINED',\n VISUAL = 'VISUAL',\n WEIGHT = 'WEIGHT',\n EMPTY = '',\n}\n\nexport interface AttributesFormItemsProps {\n code: string;\n name: string;\n id: string;\n required: boolean;\n label: string;\n options: { isDefault: boolean; text: string; value: string }[];\n entityType: string;\n className: string;\n defaultValue: string | boolean | number;\n fieldType: FieldEnumList;\n multilineCount: number;\n isUnique: boolean;\n orderNumber: number;\n isHidden: boolean;\n customUpperCode: string;\n validateRules: Record<string, string | number | boolean>[];\n}\n\nexport interface AttributesFormModel extends AttributesFormItemsProps {}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { classes, Slot } from '@adobe-commerce/elsie/lib';\nimport { memo, useMemo } from 'preact/compat';\nimport {\n Field,\n Input,\n Picker,\n Checkbox,\n InputDate,\n TextArea,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { FieldEnumList } from '@/account/data/models';\nimport { FieldsProps, FormInputsProps } from '@/account/types';\n\nexport const FormInputs: FunctionComponent<FormInputsProps> = memo(\n ({\n loading,\n values,\n fields = [],\n errors,\n className = '',\n onChange,\n onBlur,\n onFocus,\n slots,\n fieldIdPrefix,\n }) => {\n const itemClassName = `${className}__field`;\n\n // Build translation keys dynamically from all fields\n const translationKeys = useMemo(\n () =>\n Object.fromEntries(\n fields.flatMap((field: FieldsProps) => [\n [\n `${field.code}.label`,\n `Account.AddressForm.fields.${field.code}.label`,\n ],\n [\n `${field.code}.placeholder`,\n `Account.AddressForm.fields.${field.code}.placeholder`,\n ],\n ])\n ),\n [fields]\n );\n\n const translations = useText(translationKeys);\n\n const getAriaLabel = (item: FieldsProps) =>\n translations[`${item.code}.label`] || item.label;\n\n const getFloatingLabel = (item: FieldsProps) =>\n `${getAriaLabel(item)} ${item.required ? '*' : ''}`;\n\n const getPlaceholder = (item: FieldsProps) =>\n translations[`${item.code}.placeholder`] || item.label;\n\n const renderSlot = (item: any, errorMessage: string) => {\n if (!slots?.[`AddressFormInput_${item.code}`]) return;\n\n const contextValue = {\n inputName: item.customUpperCode,\n handleOnChange: onChange,\n handleOnBlur: onBlur,\n handleOnFocus: onFocus,\n errorMessage,\n errors,\n config: item,\n };\n\n return (\n <Slot\n data-testid={`addressFormInput_${item.code}`}\n name={`AddressFormInput_${item.code}`}\n slot={slots[`AddressFormInput_${item.code}`]}\n context={contextValue}\n key={item.id}\n />\n );\n };\n\n const selectElement = (\n item: any,\n valueMessage: string,\n errorMessage: string\n ) => {\n const defaultSelectValue =\n item.defaultValue ?? item.options.find(\n (option: { isDefault: boolean; value: string; text: string }) =>\n option.isDefault\n )?.value ??\n valueMessage ??\n item.defaultValue;\n\n return (\n <>\n {renderSlot(item, errorMessage) ?? (\n <Field\n key={item.id}\n error={errorMessage}\n className={classes([\n itemClassName,\n `${itemClassName}--${item.id}`,\n [`${itemClassName}--${item.id}-hidden`, item.isHidden],\n item.className,\n ])}\n data-testid={`${className}--${item.id}`}\n disabled={loading || item.disabled}\n >\n <Picker\n aria-label={getAriaLabel(item)}\n aria-required={item.required ? 'true' : 'false'}\n id={fieldIdPrefix ? `${fieldIdPrefix}_${item.code}` : item.code}\n required={item?.required}\n name={item.customUpperCode}\n floatingLabel={getFloatingLabel(item)}\n placeholder={getPlaceholder(item)}\n options={item.options}\n onBlur={onBlur}\n onFocus={onFocus}\n handleSelect={onChange}\n defaultValue={defaultSelectValue}\n value={defaultSelectValue}\n />\n </Field>\n )}\n </>\n );\n };\n\n const inputElement = (\n item: any,\n valueMessage: string,\n errorMessage: string\n ) => {\n return (\n <>\n {renderSlot(item, errorMessage) ?? (\n <Field\n key={item.id}\n error={errorMessage}\n className={classes([\n itemClassName,\n `${itemClassName}--${item.id}`,\n [`${itemClassName}--${item.id}-hidden`, item.isHidden],\n item.className,\n ])}\n data-testid={`${className}--${item.id}`}\n disabled={loading}\n >\n <Input\n aria-label={getAriaLabel(item)}\n aria-required={item.required ? 'true' : 'false'}\n id={fieldIdPrefix ? `${fieldIdPrefix}_${item.code}` : item.code}\n type=\"text\"\n name={item.customUpperCode}\n value={valueMessage ?? item.defaultValue}\n placeholder={getPlaceholder(item)}\n floatingLabel={getFloatingLabel(item)}\n onBlur={onBlur}\n onFocus={onFocus}\n onChange={onChange}\n />\n </Field>\n )}\n </>\n );\n };\n\n const inputDateElement = (\n item: any,\n valueMessage: string,\n errorMessage: string\n ) => {\n return (\n <>\n {renderSlot(item, errorMessage) ?? (\n <Field\n key={item.id}\n error={errorMessage}\n className={classes([\n itemClassName,\n `${itemClassName}--${item.id}`,\n [`${itemClassName}--${item.id}-hidden`, item.isHidden],\n item.className,\n ])}\n data-testid={`${className}--${item.id}`}\n disabled={loading || item.disabled}\n >\n <InputDate\n aria-label={getAriaLabel(item)}\n aria-required={item.required ? 'true' : 'false'}\n id={fieldIdPrefix ? `${fieldIdPrefix}_${item.code}` : item.code}\n type=\"text\"\n name={item.customUpperCode}\n value={valueMessage || item.defaultValue}\n placeholder={getPlaceholder(item)}\n floatingLabel={getFloatingLabel(item)}\n onBlur={onBlur}\n onChange={onChange}\n disabled={loading || item.disabled}\n />\n </Field>\n )}\n </>\n );\n };\n\n const inputCheckBoxElement = (\n item: any,\n valueMessage: string,\n errorMessage: string\n ) => {\n return (\n <>\n {renderSlot(item, errorMessage) ?? (\n <Field\n key={item.id}\n error={errorMessage}\n className={classes([\n itemClassName,\n `${itemClassName}--${item.id}`,\n [`${itemClassName}--${item.id}-hidden`, item.isHidden],\n item.className,\n ])}\n data-testid={`${className}--${item.id}`}\n disabled={item?.isHidden ?? loading}\n >\n <Checkbox\n aria-label={getAriaLabel(item)}\n aria-required={item.required ? 'true' : 'false'}\n aria-hidden={item.isHidden}\n tabindex={item?.isHidden ? -1 : 0}\n id={fieldIdPrefix ? `${fieldIdPrefix}_${item.code}` : item.code}\n name={item.customUpperCode}\n checked={valueMessage || item.defaultValue}\n placeholder={getPlaceholder(item)}\n label={getFloatingLabel(item)}\n onBlur={onBlur}\n onChange={onChange}\n />\n </Field>\n )}\n </>\n );\n };\n\n const textAreaElement = (\n item: any,\n valueMessage: string,\n errorMessage: string\n ) => {\n return (\n <>\n {renderSlot(item, errorMessage) ?? (\n <Field\n key={item.id}\n error={errorMessage}\n className={classes([\n itemClassName,\n `${itemClassName}--${item.id}`,\n [`${itemClassName}--${item.id}-hidden`, item.isHidden],\n item.className,\n ])}\n data-testid={`${className}--${item.id}`}\n disabled={loading}\n >\n <TextArea\n aria-label={getAriaLabel(item)}\n aria-required={item.required ? 'true' : 'false'}\n id={fieldIdPrefix ? `${fieldIdPrefix}_${item.code}` : item.code}\n type=\"text\"\n name={item.customUpperCode}\n value={valueMessage ?? item.defaultValue}\n label={getFloatingLabel(item)}\n onBlur={onBlur}\n onChange={onChange}\n />\n </Field>\n )}\n </>\n );\n };\n\n if (!fields.length) return null;\n\n return (\n <>\n {fields.map((item: FieldsProps) => {\n const errorMessage = errors?.[item.customUpperCode] as string;\n const valueMessage = values?.[item.customUpperCode] as string;\n\n switch (item.fieldType) {\n case FieldEnumList.TEXT: {\n if (item.options.length) {\n return selectElement(item, valueMessage, errorMessage);\n }\n\n return inputElement(item, valueMessage, errorMessage);\n }\n\n case FieldEnumList.MULTILINE: {\n return inputElement(item, valueMessage, errorMessage);\n }\n\n case FieldEnumList.SELECT: {\n return selectElement(item, valueMessage, errorMessage);\n }\n\n case FieldEnumList.DATE: {\n return inputDateElement(item, valueMessage, errorMessage);\n }\n\n case FieldEnumList.BOOLEAN: {\n return inputCheckBoxElement(item, valueMessage, errorMessage);\n }\n\n case FieldEnumList.TEXTAREA: {\n return textAreaElement(item, valueMessage, errorMessage);\n }\n\n default:\n return null;\n }\n })}\n </>\n );\n }\n);\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Skeleton, SkeletonRow, Card } from '@adobe-commerce/elsie/components';\nimport '@/account/components/AccountLoaders/AccountLoaders.css';\nimport { classes } from '@adobe-commerce/elsie/lib';\n\nexport const CardLoader = ({\n testId,\n withCard = true,\n}: {\n testId?: string;\n withCard?: boolean;\n}) => {\n const defaultSkeleton = (\n <Skeleton data-testid={testId || 'skeletonLoader'}>\n <SkeletonRow\n variant=\"heading\"\n size=\"xlarge\"\n fullWidth={false}\n lines={1}\n />\n <SkeletonRow variant=\"heading\" size=\"xlarge\" fullWidth={true} lines={1} />\n <SkeletonRow variant=\"heading\" size=\"xlarge\" fullWidth={true} lines={1} />\n </Skeleton>\n );\n\n if (withCard) {\n return defaultSkeleton;\n }\n\n return (\n <Card\n variant=\"secondary\"\n className={classes([\n 'account-account-loaders',\n 'account-account-loaders--card-loader',\n ])}\n >\n {defaultSkeleton}\n </Card>\n );\n};\n\nexport const AddressFormLoader = () => {\n return (\n <Skeleton data-testid=\"addressFormLoader\">\n <SkeletonRow variant=\"heading\" size=\"medium\" />\n <SkeletonRow variant=\"empty\" size=\"medium\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" fullWidth={true} />\n <SkeletonRow size=\"large\" fullWidth={true} lines={3} />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" fullWidth={true} />\n </Skeleton>\n );\n};\n\nexport const PickerLoader = (props: any) => {\n return (\n <Skeleton\n {...props}\n rowGap={'xsmall'}\n className={classes([\n 'account-account-loaders',\n 'account-account-loaders--picker-loader',\n ])}\n >\n <SkeletonRow variant=\"heading\" size=\"xsmall\" />\n <SkeletonRow variant=\"empty\" size=\"small\" />\n <SkeletonRow size=\"small\" />\n </Skeleton>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useForm } from '@/account/hooks/components/useForm';\nimport { FormProps, FormRef } from '@/account/types';\nimport FormInputs from '@/account/components/Form/FormInputs';\nimport { forwardRef, memo, useImperativeHandle } from 'preact/compat';\nimport '@/account/components/Form/Form.css';\nimport { classes, Slot } from '@adobe-commerce/elsie/lib';\nimport normalizeGetAddressData from '@/account/lib/normalizeGetAddressData';\nimport getFormValuesFromRef from '@/account/lib/getFormValuesFromRef';\nimport { AddressFormLoader } from '../AccountLoaders';\nimport { Checkbox } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport const Form = memo(\n forwardRef<FormRef, FormProps>(\n ({\n setInputChange,\n showFormLoader,\n slots,\n name,\n loading,\n children,\n className = 'defaultForm',\n fieldsConfig,\n onSubmit,\n onChange,\n forwardFormRef,\n regionOptions,\n showSaveCheckBox,\n handleSaveCheckBoxAddress,\n saveCheckBoxAddress,\n fieldIdPrefix,\n }) => {\n const translations = useText({\n saveAddressBook: 'Account.AddressForm.formText.saveAddressBook',\n });\n\n const {\n isDataValid,\n formData,\n errors,\n formRef,\n handleInputChange,\n handleBlur,\n handleSubmit,\n handleValidationSubmit,\n onFocus,\n } = useForm({\n fieldsConfig,\n onSubmit,\n onChange,\n setInputChange,\n regionOptions,\n formName: name!,\n });\n\n useImperativeHandle(forwardFormRef, () => {\n const modifyFormRef = getFormValuesFromRef(formRef);\n\n return {\n handleValidationSubmit,\n requestSubmit: () => {\n formRef.current?.requestSubmit();\n },\n formData: normalizeGetAddressData(modifyFormRef, true),\n isDataValid,\n };\n });\n\n if (showFormLoader || !fieldsConfig?.length) return <AddressFormLoader />;\n\n return (\n <form\n className={classes(['account-form', className])}\n onSubmit={handleSubmit}\n name={name}\n ref={formRef}\n >\n <FormInputs\n className={className}\n loading={loading}\n fields={fieldsConfig}\n onChange={handleInputChange}\n onBlur={handleBlur}\n errors={errors}\n values={formData}\n onFocus={onFocus}\n slots={slots}\n fieldIdPrefix={fieldIdPrefix}\n />\n {slots?.AddressFormInputs ? (\n <Slot\n data-testid=\"addressFormInputs\"\n name=\"AddressFormInputs\"\n slot={slots.AddressFormInputs}\n context={{ formActions: { handleChange: handleInputChange } }}\n />\n ) : null}\n {showSaveCheckBox ? (\n <div className={'account-address-form--saveAddressBook'}>\n <Checkbox\n data-testid=\"testSaveAddressBook\"\n name=\"saveAddressBook\"\n label={translations.saveAddressBook}\n // @ts-ignore\n checked={saveCheckBoxAddress}\n onChange={(event) => {\n handleInputChange(event);\n handleSaveCheckBoxAddress?.(event);\n }}\n />\n </div>\n ) : null}\n {children}\n </form>\n );\n }\n )\n);\n","export const getAddressButtonAriaLabel = (\n defaultShipping?: boolean,\n defaultBilling?: boolean,\n translations: Record<string, string> = {},\n type: 'removeButton' | 'editButton' = 'editButton'\n): string => {\n const isRemove = type === 'removeButton';\n\n const labelMap = {\n shippingAndBilling: {\n edit: translations.editAddressAriaLabelShippingAndBilling,\n remove: translations.removeAddressAriaLabelShippingAndBilling,\n },\n shipping: {\n edit: translations.editAddressAriaLabelShipping,\n remove: translations.removeAddressAriaLabelShipping,\n },\n billing: {\n edit: translations.editAddressAriaLabelBilling,\n remove: translations.removeAddressAriaLabelBilling,\n },\n default: {\n edit: translations.editAddressAriaLabelDefault,\n remove: translations.removeAddressAriaLabelDefault,\n },\n };\n\n let key: keyof typeof labelMap = 'default';\n if (defaultShipping && defaultBilling) key = 'shippingAndBilling';\n else if (defaultShipping) key = 'shipping';\n else if (defaultBilling) key = 'billing';\n\n return isRemove ? labelMap[key].remove : labelMap[key].edit;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { useCallback, useId, useMemo } from 'preact/compat';\nimport { Card, Button, Tag } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport CardLoader from '@/account/components/AccountLoaders';\nimport { AddressCardProps } from '@/account/types';\nimport { CustomerAddressesModel } from '@/account/data/models';\nimport '@/account/components/AddressCard/AddressCard.css';\nimport { Slot } from '@adobe-commerce/elsie/lib';\nimport { getAddressButtonAriaLabel } from '@/account/lib/getAddressButtonAriaLabel';\n\nexport const AddressCard: FunctionComponent<AddressCardProps> = ({\n slots,\n selectable,\n selectShipping,\n selectBilling,\n variant = 'secondary',\n minifiedView,\n keysSortOrder,\n addressData,\n loading,\n setAddressId,\n handleRenderModal,\n handleRenderForm,\n}) => {\n const addressCardAriaId = useId();\n\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n actionRemove: `Account.${minifiedViewKey}.Addresses.addressCard.actionRemove`,\n actionEdit: `Account.${minifiedViewKey}.Addresses.addressCard.actionEdit`,\n cardLabelShipping: `Account.${minifiedViewKey}.Addresses.addressCard.cardLabelShipping`,\n cardLabelBilling: `Account.${minifiedViewKey}.Addresses.addressCard.cardLabelBilling`,\n defaultLabelText: `Account.${minifiedViewKey}.Addresses.addressCard.defaultLabelText`,\n\n editAddressAriaLabelDefault: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.editButton.default`,\n editAddressAriaLabelShipping: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.editButton.shipping`,\n editAddressAriaLabelBilling: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.editButton.billing`,\n editAddressAriaLabelShippingAndBilling: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.editButton.shippingAndBilling`,\n\n removeAddressAriaLabelDefault: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.removeButton.default`,\n removeAddressAriaLabelShipping: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.removeButton.shipping`,\n removeAddressAriaLabelBilling: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.removeButton.billing`,\n removeAddressAriaLabelShippingAndBilling: `Account.${minifiedViewKey}.Addresses.addressCard.ariaLabel.removeButton.shippingAndBilling`,\n });\n\n const defaultBillingLabel = translations.cardLabelBilling.toLocaleUpperCase();\n const defaultShippingLabel =\n translations.cardLabelShipping.toLocaleUpperCase();\n const defaultLabelText = translations.defaultLabelText.toLocaleUpperCase();\n\n const getLabelStatus = useMemo(() => {\n const defaultValue = {\n shippingLabel: defaultShippingLabel,\n billingLabel: defaultBillingLabel,\n hideShipping: false,\n hideBilling: false,\n };\n\n if (!selectable) {\n return defaultValue;\n }\n\n if (selectShipping && !selectBilling) {\n return {\n shippingLabel: defaultLabelText,\n billingLabel: defaultLabelText,\n hideShipping: false,\n hideBilling: true,\n };\n } else if (selectBilling && !selectShipping) {\n return {\n shippingLabel: defaultLabelText,\n billingLabel: defaultLabelText,\n hideShipping: true,\n hideBilling: false,\n };\n } else if (selectBilling && selectShipping) {\n return defaultValue;\n }\n\n return defaultValue;\n }, [\n defaultBillingLabel,\n defaultLabelText,\n defaultShippingLabel,\n selectBilling,\n selectShipping,\n selectable,\n ]);\n\n const handleRemove = useCallback(() => {\n setAddressId?.(addressData?.id as string);\n handleRenderModal?.();\n }, [handleRenderModal, addressData?.id, setAddressId]);\n\n const handleEdit = useCallback(() => {\n setAddressId?.(addressData?.id as string);\n handleRenderForm?.();\n }, [handleRenderForm, addressData?.id, setAddressId]);\n\n const normalizeAddress = useMemo(() => {\n if (!keysSortOrder) return [];\n\n const { region, ...address } = addressData as CustomerAddressesModel;\n\n const modifyAddressData = {\n ...address,\n ...region,\n } as any;\n\n return keysSortOrder\n .filter(({ name }) => modifyAddressData[name as string])\n .map((item) => {\n return {\n name: item.name,\n orderNumber: item.orderNumber,\n value: modifyAddressData[item.name as string],\n label: item.label,\n };\n });\n }, [addressData, keysSortOrder]);\n\n const { shippingLabel, billingLabel, hideShipping, hideBilling } =\n getLabelStatus;\n\n return (\n <Card\n variant={variant}\n className=\"account-address-card\"\n data-testid=\"addressCard\"\n >\n {loading ? (\n <CardLoader />\n ) : (\n <>\n <div className=\"account-address-card__action\">\n {handleRenderModal ? (\n <Button\n // @ts-ignore\n type={'button'}\n variant=\"tertiary\"\n onClick={handleRemove}\n data-testid=\"removeButton\"\n aria-label={getAddressButtonAriaLabel(\n addressData?.defaultShipping,\n addressData?.defaultBilling,\n translations,\n 'removeButton'\n )}\n aria-describedby={addressCardAriaId}\n >\n {translations.actionRemove}\n </Button>\n ) : null}\n {handleRenderForm ? (\n <Button\n // @ts-ignore\n type={'button'}\n variant=\"tertiary\"\n onClick={handleEdit}\n className=\"account-address-card__action--editbutton\"\n data-testid=\"editButton\"\n aria-label={getAddressButtonAriaLabel(\n addressData?.defaultShipping,\n addressData?.defaultBilling,\n translations,\n 'editButton'\n )}\n aria-describedby={addressCardAriaId}\n >\n {translations.actionEdit}\n </Button>\n ) : null}\n </div>\n <div\n className=\"account-address-card__description\"\n id={addressCardAriaId}\n >\n {slots?.AddressCard ? (\n <Slot\n name=\"AddressCard\"\n slot={slots?.AddressCard}\n context={{ addressData: normalizeAddress }}\n />\n ) : (\n <>\n {normalizeAddress.map((el, index) => {\n const value = !el.label\n ? el?.value\n : `${el.label}: ${el?.value}`;\n\n return (\n <p key={index} data-testid={`${el.name}_${index}`}>\n {value}\n </p>\n );\n })}\n </>\n )}\n </div>\n {(addressData?.defaultShipping || addressData?.defaultBilling) &&\n !selectable ? (\n <div className=\"account-address-card__labels\">\n {addressData?.defaultShipping ? (\n <Tag label={defaultShippingLabel} />\n ) : null}\n {addressData?.defaultBilling ? (\n <Tag label={defaultBillingLabel} />\n ) : null}\n </div>\n ) : null}\n {selectable ? (\n <div className=\"account-address-card__labels\">\n {!hideShipping && addressData?.defaultShipping ? (\n <Tag label={shippingLabel} />\n ) : null}\n {!hideBilling && addressData?.defaultBilling ? (\n <Tag label={billingLabel} />\n ) : null}\n </div>\n ) : null}\n </>\n )}\n </Card>\n );\n};\n","import * as React from \"react\";\nconst SvgAdd = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Add_Base\", \"data-name\": \"Icon \\\\u2013 Add \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Add_icon\", \"data-name\": \"Add icon\", transform: \"translate(9.734 9.737)\" }, /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_579\", \"data-name\": \"Line 579\", y2: 12.7, transform: \"translate(2.216 -4.087)\", fill: \"none\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_580\", \"data-name\": \"Line 580\", x2: 12.7, transform: \"translate(-4.079 2.263)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgAdd;\n","import * as React from \"react\";\nconst SvgAddressBook = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M3.375 7.38672C3.09886 7.38672 2.875 7.61058 2.875 7.88672C2.875 8.16286 3.09886 8.38672 3.375 8.38672V7.38672ZM5.88409 8.38672C6.16023 8.38672 6.38409 8.16286 6.38409 7.88672C6.38409 7.61058 6.16023 7.38672 5.88409 7.38672V8.38672ZM3.375 11.1836C3.09886 11.1836 2.875 11.4075 2.875 11.6836C2.875 11.9597 3.09886 12.1836 3.375 12.1836V11.1836ZM5.88409 12.1836C6.16023 12.1836 6.38409 11.9597 6.38409 11.6836C6.38409 11.4075 6.16023 11.1836 5.88409 11.1836V12.1836ZM3.375 15.6133C3.09886 15.6133 2.875 15.8371 2.875 16.1133C2.875 16.3894 3.09886 16.6133 3.375 16.6133V15.6133ZM5.88409 16.6133C6.16023 16.6133 6.38409 16.3894 6.38409 16.1133C6.38409 15.8371 6.16023 15.6133 5.88409 15.6133V16.6133ZM8.52059 16.4182C8.51422 16.6942 8.73286 16.9232 9.00893 16.9296C9.285 16.9359 9.51396 16.7173 9.52032 16.4412L8.52059 16.4182ZM9.19302 14.8261L8.70612 14.7124C8.70434 14.72 8.70274 14.7277 8.70132 14.7354L9.19302 14.8261ZM11.2762 13.3887L11.4404 13.8611L11.4499 13.8576L11.2762 13.3887ZM12.3195 13.1013C12.4035 12.8382 12.2583 12.5569 11.9953 12.4729C11.7322 12.3889 11.4509 12.5341 11.3669 12.7971L12.3195 13.1013ZM15.7342 16.4412C15.7406 16.7173 15.9695 16.9359 16.2456 16.9296C16.5217 16.9232 16.7403 16.6942 16.734 16.4182L15.7342 16.4412ZM16.0615 14.8261L16.5532 14.7354C16.5518 14.7277 16.5502 14.72 16.5484 14.7124L16.0615 14.8261ZM13.9784 13.3887L13.8046 13.8577L13.8142 13.861L13.9784 13.3887ZM13.8877 12.7971C13.8037 12.5341 13.5223 12.3889 13.2593 12.4729C12.9962 12.5569 12.8511 12.8382 12.9351 13.1013L13.8877 12.7971ZM10.9023 10.418L11.4023 10.418V10.418H10.9023ZM11.2309 8.60993L11.6861 8.81678L11.6861 8.81678L11.2309 8.60993ZM12.0518 12.7684L11.7218 13.1441L11.7682 13.1848L11.823 13.213L12.0518 12.7684ZM13.202 12.7684L13.4308 13.213L13.4787 13.1884L13.5203 13.1541L13.202 12.7684ZM3.375 8.38672H5.88409V7.38672H3.375V8.38672ZM3.375 12.1836H5.88409V11.1836H3.375V12.1836ZM3.375 16.6133H5.88409V15.6133H3.375V16.6133ZM6.41058 2.375H18.844V1.375H6.41058V2.375ZM18.844 2.375C19.4866 2.375 20.125 2.99614 20.125 3.9225H21.125C21.125 2.57636 20.1627 1.375 18.844 1.375V2.375ZM20.125 3.9225V20.0775H21.125V3.9225H20.125ZM20.125 20.0775C20.125 20.9945 19.485 21.625 18.844 21.625V22.625C20.1643 22.625 21.125 21.4105 21.125 20.0775H20.125ZM18.844 21.625H6.41058V22.625H18.844V21.625ZM6.41058 21.625C5.76792 21.625 5.12955 21.0039 5.12955 20.0775H4.12955C4.12955 21.4236 5.09185 22.625 6.41058 22.625V21.625ZM5.12955 20.0775V3.9225H4.12955V20.0775H5.12955ZM5.12955 3.9225C5.12955 3.0055 5.76956 2.375 6.41058 2.375V1.375C5.0902 1.375 4.12955 2.5895 4.12955 3.9225H5.12955ZM9.52032 16.4412C9.53194 15.9373 9.59014 15.4295 9.68473 14.9168L8.70132 14.7354C8.59869 15.2917 8.53362 15.853 8.52059 16.4182L9.52032 16.4412ZM9.67993 14.9397C9.69157 14.8899 9.78099 14.7261 10.1128 14.496C10.4223 14.2813 10.8711 14.0589 11.4404 13.861L11.112 12.9165C10.4856 13.1343 9.94827 13.3931 9.54284 13.6743C9.15974 13.94 8.80542 14.2871 8.70612 14.7124L9.67993 14.9397ZM11.4499 13.8576C11.5852 13.8074 11.7547 13.7102 11.8933 13.6105C11.9656 13.5584 12.0441 13.4954 12.1133 13.4247C12.1723 13.3646 12.2709 13.2534 12.3195 13.1013L11.3669 12.7971C11.3809 12.7532 11.3985 12.7277 11.4022 12.7225C11.407 12.7157 11.4073 12.7164 11.3993 12.7246C11.3827 12.7416 11.3525 12.7676 11.3092 12.7988C11.2674 12.8288 11.222 12.8575 11.1805 12.8808C11.1363 12.9057 11.1089 12.9175 11.1024 12.9199L11.4499 13.8576ZM16.734 16.4182C16.7209 15.853 16.6559 15.2917 16.5532 14.7354L15.5698 14.9168C15.6644 15.4295 15.7226 15.9373 15.7342 16.4412L16.734 16.4182ZM16.5484 14.7124C16.4491 14.2871 16.0948 13.94 15.7117 13.6743C15.3063 13.3931 14.769 13.1343 14.1426 12.9165L13.8142 13.861C14.3834 14.0589 14.8322 14.2813 15.1417 14.496C15.4736 14.7261 15.563 14.8899 15.5746 14.9397L16.5484 14.7124ZM14.1521 12.9199C14.1456 12.9175 14.1183 12.9057 14.074 12.8808C14.0325 12.8575 13.9871 12.8288 13.9453 12.7988C13.9021 12.7676 13.8719 12.7416 13.8552 12.7246C13.8472 12.7164 13.8476 12.7157 13.8524 12.7225C13.856 12.7277 13.8736 12.7532 13.8877 12.7971L12.9351 13.1013C12.9836 13.2534 13.0823 13.3646 13.1412 13.4247C13.2105 13.4954 13.2889 13.5584 13.3612 13.6105C13.4999 13.7102 13.6694 13.8074 13.8046 13.8576L14.1521 12.9199ZM11.4023 10.418C11.4023 9.83385 11.4811 9.26803 11.6861 8.81678L10.7757 8.40309C10.4878 9.03666 10.4023 9.76284 10.4023 10.418H11.4023ZM11.6861 8.81678C11.8053 8.55448 12.0796 8.38672 12.5813 8.38672V7.38672C11.8704 7.38672 11.1213 7.6426 10.7757 8.40309L11.6861 8.81678ZM12.5813 8.38672C13.087 8.38672 13.4614 8.60522 13.5777 8.83539L14.4703 8.38448C14.1169 7.685 13.2884 7.38672 12.5813 7.38672V8.38672ZM13.5777 8.83539C13.7606 9.19738 13.8523 9.72518 13.8523 10.418H14.8523C14.8523 9.66433 14.757 8.95213 14.4703 8.38448L13.5777 8.83539ZM12.5813 12.4492C12.5364 12.4492 12.5158 12.4464 12.5087 12.4451C12.5046 12.4444 12.5042 12.4442 12.5008 12.4428C12.4922 12.4391 12.4782 12.4321 12.438 12.4096C12.4018 12.3893 12.3471 12.358 12.2805 12.3238L11.823 13.213C11.8698 13.2371 11.9055 13.2576 11.9494 13.2821C11.9893 13.3045 12.0449 13.3354 12.1079 13.3623C12.2569 13.426 12.403 13.4492 12.5813 13.4492V12.4492ZM12.3817 12.3927C11.8273 11.9058 11.4022 11.3083 11.4023 10.418L10.4023 10.4179C10.4022 11.6973 11.0412 12.5462 11.7218 13.1441L12.3817 12.3927ZM13.8523 10.418C13.8523 11.3319 13.4575 11.9093 12.8838 12.3828L13.5203 13.1541C14.2611 12.5427 14.8523 11.7035 14.8523 10.418H13.8523ZM12.9733 12.3238C12.7638 12.4316 12.717 12.4492 12.5813 12.4492V13.4492C12.9639 13.4492 13.1869 13.3385 13.4308 13.213L12.9733 12.3238Z\", fill: \"currentColor\" }));\nexport default SvgAddressBook;\n","import * as React from \"react\";\nconst SvgChevronRight = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Chevron_right_Base\", \"data-name\": \"Icon \\\\u2013 Chevron right \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Chevron_right_icon\", \"data-name\": \"Chevron right icon\" }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", id: \"chevron\", d: \"M199.75,367.5l4.255,-4.255-4.255,-4.255\", transform: \"translate(-189.25 -351.0)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgChevronRight;\n","import * as React from \"react\";\nconst SvgEmptyBox = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12.002 21L11.8275 21.4686C11.981 21.5257 12.1528 21.5041 12.2873 21.4106C12.4218 21.3172 12.502 21.1638 12.502 21H12.002ZM3.89502 17.9823H3.39502C3.39502 18.1912 3.52485 18.378 3.72059 18.4509L3.89502 17.9823ZM3.89502 8.06421L4.07193 7.59655C3.91831 7.53844 3.74595 7.55948 3.61082 7.65284C3.47568 7.74619 3.39502 7.89997 3.39502 8.06421H3.89502ZM12.0007 21H11.5007C11.5007 21.1638 11.5809 21.3172 11.7154 21.4106C11.8499 21.5041 12.0216 21.5257 12.1751 21.4686L12.0007 21ZM20.1076 17.9823L20.282 18.4509C20.4778 18.378 20.6076 18.1912 20.6076 17.9823H20.1076ZM20.1076 8.06421H20.6076C20.6076 7.89997 20.527 7.74619 20.3918 7.65284C20.2567 7.55948 20.0843 7.53844 19.9307 7.59655L20.1076 8.06421ZM12.0007 11.1311L11.8238 10.6634C11.6293 10.737 11.5007 10.9232 11.5007 11.1311H12.0007ZM20.2858 8.53191C20.5441 8.43421 20.6743 8.14562 20.5766 7.88734C20.4789 7.62906 20.1903 7.49889 19.932 7.5966L20.2858 8.53191ZM12.002 4.94826L12.1775 4.48008C12.0605 4.43623 11.9314 4.43775 11.8154 4.48436L12.002 4.94826ZM5.87955 6.87106C5.62334 6.97407 5.49915 7.26528 5.60217 7.52149C5.70518 7.77769 5.99639 7.90188 6.2526 7.79887L5.87955 6.87106ZM18.1932 7.80315C18.4518 7.90008 18.74 7.76904 18.8369 7.51047C18.9338 7.2519 18.8028 6.96371 18.5442 6.86678L18.1932 7.80315ZM12 4.94827L11.5879 5.23148C11.6812 5.36719 11.8353 5.44827 12 5.44827C12.1647 5.44827 12.3188 5.36719 12.4121 5.23148L12 4.94827ZM14.0263 2L14.2028 1.53218C13.9875 1.45097 13.7446 1.52717 13.6143 1.71679L14.0263 2ZM21.8421 4.94827L22.2673 5.2113C22.3459 5.08422 22.3636 4.92863 22.3154 4.78717C22.2673 4.64571 22.1584 4.53319 22.0186 4.48045L21.8421 4.94827ZM9.97368 2L10.3857 1.71679C10.2554 1.52717 10.0125 1.45097 9.79721 1.53218L9.97368 2ZM2.15789 4.94827L1.98142 4.48045C1.84161 4.53319 1.73271 4.64571 1.68456 4.78717C1.63641 4.92863 1.65406 5.08422 1.73267 5.2113L2.15789 4.94827ZM12 11.1256L11.6702 11.5014C11.8589 11.667 12.1411 11.667 12.3298 11.5014L12 11.1256ZM15.0395 8.45812L14.8732 7.98659C14.8131 8.00779 14.7576 8.04028 14.7097 8.08232L15.0395 8.45812ZM23 5.65024L23.3288 6.0269C23.5095 5.86916 23.5527 5.60532 23.4318 5.39817C23.3109 5.19102 23.0599 5.09893 22.8337 5.17871L23 5.65024ZM8.96053 8.45812L9.29034 8.08232C9.24244 8.04028 9.18695 8.00779 9.12685 7.98659L8.96053 8.45812ZM1 5.65024L1.16632 5.17871C0.940115 5.09893 0.689119 5.19102 0.568192 5.39817C0.447264 5.60532 0.49048 5.86916 0.671176 6.0269L1 5.65024ZM12.1764 20.5314L4.06945 17.5137L3.72059 18.4509L11.8275 21.4686L12.1764 20.5314ZM4.39502 17.9823V8.06421H3.39502V17.9823H4.39502ZM3.71811 8.53187L11.8251 11.5987L12.1789 10.6634L4.07193 7.59655L3.71811 8.53187ZM11.502 11.1311V21H12.502V11.1311H11.502ZM12.1751 21.4686L20.282 18.4509L19.9332 17.5137L11.8262 20.5314L12.1751 21.4686ZM20.6076 17.9823V8.06421H19.6076V17.9823H20.6076ZM19.9307 7.59655L11.8238 10.6634L12.1776 11.5987L20.2845 8.53187L19.9307 7.59655ZM11.5007 11.1311V21H12.5007V11.1311H11.5007ZM19.932 7.5966L11.8251 10.6634L12.1789 11.5987L20.2858 8.53191L19.932 7.5966ZM11.8154 4.48436L5.87955 6.87106L6.2526 7.79887L12.1885 5.41217L11.8154 4.48436ZM11.8265 5.41645L18.1932 7.80315L18.5442 6.86678L12.1775 4.48008L11.8265 5.41645ZM11.502 4.94826V11.1311H12.502V4.94826H11.502ZM12.4121 5.23148L14.4384 2.28321L13.6143 1.71679L11.5879 4.66507L12.4121 5.23148ZM13.8498 2.46782L21.6656 5.4161L22.0186 4.48045L14.2028 1.53218L13.8498 2.46782ZM21.4169 4.68525L20.5485 6.08919L21.3989 6.61524L22.2673 5.2113L21.4169 4.68525ZM12.4121 4.66507L10.3857 1.71679L9.56162 2.28321L11.5879 5.23148L12.4121 4.66507ZM9.79721 1.53218L1.98142 4.48045L2.33437 5.4161L10.1502 2.46782L9.79721 1.53218ZM1.73267 5.2113L2.60109 6.61524L3.45154 6.08919L2.58312 4.68525L1.73267 5.2113ZM12.3298 11.5014L15.3693 8.83392L14.7097 8.08232L11.6702 10.7498L12.3298 11.5014ZM15.2058 8.92965L23.1663 6.12177L22.8337 5.17871L14.8732 7.98659L15.2058 8.92965ZM22.6712 5.27358L19.7764 7.80067L20.4341 8.554L23.3288 6.0269L22.6712 5.27358ZM12.3298 10.7498L9.29034 8.08232L8.63072 8.83392L11.6702 11.5014L12.3298 10.7498ZM9.12685 7.98659L1.16632 5.17871L0.83368 6.12177L8.79421 8.92965L9.12685 7.98659ZM0.671176 6.0269L3.56591 8.554L4.22356 7.80067L1.32882 5.27358L0.671176 6.0269Z\", fill: \"currentColor\" }));\nexport default SvgEmptyBox;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Add, ChevronRight } from '@adobe-commerce/elsie/icons';\nimport { Icon } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/account/components/AddressActions/AddressActions.css';\nimport { AddressActionsProps } from '@/account/types';\n\nexport const AddressActions: FunctionComponent<AddressActionsProps> = ({\n selectable,\n className,\n addNewAddress,\n minifiedView,\n routeAddressesPage,\n}) => {\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n viewAllAddressesButton: `Account.${minifiedViewKey}.Addresses.viewAllAddressesButton`,\n addNewAddressButton: `Account.${minifiedViewKey}.Addresses.addNewAddressButton`,\n differentAddressButton: `Account.${minifiedViewKey}.Addresses.differentAddressButton`,\n });\n\n const TagType = selectable ? 'span' : 'button';\n const buttonProps = selectable ? {} : { AriaRole: 'button', type: 'button' };\n\n const nonSelectableViewButton =\n minifiedView && !addNewAddress\n ? translations.viewAllAddressesButton\n : translations.addNewAddressButton;\n\n const buttonText = selectable\n ? translations.differentAddressButton\n : nonSelectableViewButton;\n\n return (\n <TagType\n {...buttonProps}\n className={classes([\n 'account-actions-address',\n ['account-actions-address--viewall', minifiedView],\n ['account-actions-address--address', !minifiedView],\n ['account-actions-address--selectable', selectable],\n className,\n ])}\n data-testid=\"showRouteFullAddress\"\n onClick={routeAddressesPage}\n >\n <span\n className=\"account-actions-address__title\"\n data-testid=\"addressActionsText\"\n >\n {buttonText}\n </span>\n <Icon\n source={minifiedView && !addNewAddress ? ChevronRight : Add}\n size=\"32\"\n />\n </TagType>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { Button, Modal, ProgressSpinner } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport AddressCard from '@/account/components/AddressCard';\nimport '@/account/components/AddressModal/AddressModal.css';\nimport { AddressModalProps } from '@/account/types';\n\nexport const AddressModal: FunctionComponent<AddressModalProps> = ({\n minifiedView,\n keysSortOrder,\n addressData,\n open,\n submitLoading,\n onRemoveAddress,\n closeModal,\n}) => {\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n title: `Account.${minifiedViewKey}.Addresses.removeAddressModal.title`,\n description: `Account.${minifiedViewKey}.Addresses.removeAddressModal.description`,\n actionCancel: `Account.${minifiedViewKey}.Addresses.removeAddressModal.actionCancel`,\n actionConfirm: `Account.${minifiedViewKey}.Addresses.removeAddressModal.actionConfirm`,\n });\n\n if (!open) return null;\n\n return (\n <Modal\n className=\"account-address-modal--overlay\"\n title={<h3>{translations.title}</h3>}\n size=\"full\"\n data-testid=\"addressModal\"\n showCloseButton\n onClose={closeModal}\n >\n <div className=\"account-address-modal\">\n {submitLoading ? (\n <div\n className=\"account-address-modal__spinner\"\n data-testid=\"progressSpinner\"\n >\n <ProgressSpinner stroke={'4'} size={'large'} />\n </div>\n ) : null}\n <p>{translations.description}</p>\n <AddressCard\n minifiedView={minifiedView}\n addressData={addressData}\n keysSortOrder={keysSortOrder}\n />\n <div className=\"account-address-modal__buttons\">\n <Button\n // @ts-ignore\n type={'button'}\n onClick={closeModal}\n variant=\"secondary\"\n disabled={submitLoading}\n >\n {translations.actionCancel}\n </Button>\n <Button disabled={submitLoading} onClick={onRemoveAddress}>\n {translations.actionConfirm}\n </Button>\n </div>\n </div>\n </Modal>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useMemo } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Icon, IllustratedMessage } from '@adobe-commerce/elsie/components';\nimport { AddressBook, EmptyBox } from '@adobe-commerce/elsie/icons';\nimport '@/account/components/EmptyList/EmptyList.css';\nimport { EmptyListProps } from '@/account/types';\n\nexport const EmptyList: FunctionComponent<EmptyListProps> = ({\n typeList,\n isEmpty,\n minifiedView,\n className,\n}) => {\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n addressesMessage: `Account.${minifiedViewKey}.EmptyList.Addresses.message`,\n ordersListMessage: `Account.${minifiedViewKey}.EmptyList.OrdersList.message`,\n });\n\n const config = useMemo(() => {\n switch (typeList) {\n case 'address':\n return {\n icon: AddressBook,\n text: <p>{translations.addressesMessage}</p>,\n };\n case 'orders':\n return {\n icon: EmptyBox,\n text: <p>{translations.ordersListMessage}</p>,\n };\n default:\n return { icon: '', text: '' };\n }\n }, [typeList, translations]);\n\n if (!isEmpty || !typeList || !config.text) return null;\n\n return (\n <IllustratedMessage\n className={classes([\n 'account-empty-list',\n minifiedView ? 'account-empty-list--minified' : '',\n className,\n ])}\n message={config.text as VNode<HTMLAttributes<HTMLElement>>}\n icon={<Icon source={config.icon} />}\n data-testid=\"emptyList\"\n />\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { updateCustomerAddress } from '../api';\nimport { CustomerAddressesModel } from '../data/models';\n\n/**\n\nManages the deletion of an address from a list. If the address is the last one in the list, it removes any default properties before deletion. If the address is not the last, it ensures that no default properties are set on the item, transfers them if necessary to another address, and then deletes the address.\n\n*/\n\nexport const manageAddressDeletion = async (\n removeId: string,\n addressesList: CustomerAddressesModel[]\n) => {\n if (addressesList.length === 1) {\n const address = addressesList[0];\n const isRegionValid = Object.values(address.region as any).every((el) =>\n Boolean(el)\n );\n\n const region = isRegionValid\n ? {}\n : { region: { ...address.region, regionId: 0 } };\n\n const result = await updateCustomerAddress({\n addressId: Number(address?.id),\n defaultShipping: false,\n defaultBilling: false,\n ...(region as any),\n });\n\n return !!result;\n }\n\n const newDefaultAddress = addressesList.filter((item) => {\n return (\n (item.id !== removeId && (item.defaultBilling || item.defaultShipping)) ||\n item.id !== removeId\n );\n });\n\n const fallbackDefaultAddress = addressesList[addressesList.length - 1];\n const updatedDefaultAddress =\n newDefaultAddress[0] ||\n (fallbackDefaultAddress?.id !== removeId ? fallbackDefaultAddress : null);\n\n if (!updatedDefaultAddress || !updatedDefaultAddress.id) return false;\n\n const result = await updateCustomerAddress({\n addressId: +updatedDefaultAddress.id,\n defaultShipping: true,\n defaultBilling: true,\n });\n\n return !!result;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const defaultAttributePreset = [\n 'firstname',\n 'lastname',\n 'city',\n 'company',\n 'country_code',\n 'region',\n 'region_code',\n 'region_id',\n 'telephone',\n 'id',\n 'vat_id',\n 'postcode',\n 'street',\n 'street_multiline_2',\n 'default_shipping',\n 'default_billing',\n 'fax',\n 'prefix',\n 'suffix',\n 'middlename',\n];\n\nexport const defaultAccountAttributePreset = [\n 'email',\n 'firstname',\n 'lastname',\n 'middlename',\n 'gender',\n 'dob',\n 'prefix',\n 'suffix',\n 'fax',\n];\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CustomerAddressesModel } from '../data/models';\n\nexport default (\n data: CustomerAddressesModel[],\n selectShipping: boolean,\n selectBilling: boolean\n): CustomerAddressesModel[] => {\n if (\n (selectShipping && selectBilling) ||\n (!selectShipping && !selectBilling)\n ) {\n return data;\n }\n\n const copyAddressList: CustomerAddressesModel[] = data.slice();\n\n if (selectShipping) {\n return copyAddressList.sort(\n (a, b) => Number(b.defaultShipping) - Number(a.defaultShipping)\n );\n }\n\n if (selectBilling) {\n return copyAddressList.sort(\n (a, b) => Number(b.defaultBilling) - Number(a.defaultBilling)\n );\n }\n\n return data;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useState, useEffect, useCallback } from 'preact/hooks';\nimport {\n getAttributesForm,\n getCustomerAddress,\n removeCustomerAddress,\n} from '@/account/api/';\nimport { CustomerAddressesModel } from '@/account/data/models';\nimport { checkIsFunction } from '@/account/lib/checkIsFunction';\nimport { KeysSortOrderProps, useAddressesProps } from '@/account/types';\nimport { manageAddressDeletion } from '@/account/lib/manageAddressDeletion';\nimport { defaultAttributePreset } from '@/account/configs/defaultAttributePreset.config';\nimport { convertToCamelCase } from '@/account/lib/convertCase';\nimport normalizeGetAddressData from '@/account/lib/normalizeGetAddressData';\nimport sortingAddressesList from '@/account/lib/sortingAddressesList';\n\nconst isEmpty = (obj: any): boolean => {\n if (obj === undefined || obj === null) return true;\n if (typeof obj !== 'object') return false;\n return Object.keys(obj).length === 0 || Object.values(obj).every(isEmpty);\n};\n\nexport const useAddresses = ({\n selectShipping,\n selectBilling,\n defaultSelectAddressId,\n onAddressData,\n minifiedView,\n routeAddressesPage,\n onSuccess,\n}: useAddressesProps) => {\n const [selectedAddressOption, setSelectedAddressOption] =\n useState<string>('');\n const [isModalRendered, setIsModalRendered] = useState<boolean>(false);\n const [isFormRendered, setIsFormRendered] = useState<boolean>(false);\n const [loading, setLoading] = useState<boolean>(false);\n const [submitLoading, setSubmitLoading] = useState<boolean>(false);\n const [addNewAddress, setAddNewAddress] = useState<boolean>(false);\n const [addressId, setEditAddressId] = useState<string>('');\n const [addressesList, setAddressesList] = useState<CustomerAddressesModel[]>(\n []\n );\n const [keysSortOrder, setKeysSortOrder] = useState<KeysSortOrderProps[] | []>(\n []\n );\n\n const getAddressesList = useCallback(async () => {\n setLoading(true);\n\n Promise.all([getAttributesForm('shortRequest'), getCustomerAddress()])\n .then((response) => {\n const [attributesFormResponse, addressResponse] = response;\n\n if (attributesFormResponse) {\n const result: KeysSortOrderProps[] = attributesFormResponse.map(\n ({ name, orderNumber, label }) => ({\n name: convertToCamelCase(name as string),\n orderNumber,\n label: !defaultAttributePreset.includes(name as string)\n ? label\n : null,\n })\n );\n\n setKeysSortOrder(result);\n }\n\n if (addressResponse) {\n if (minifiedView) {\n const defaultAddresses = addressResponse.filter(\n (el) => Boolean(el.defaultShipping) || Boolean(el.defaultBilling)\n );\n\n const addressesToSet = defaultAddresses.length\n ? defaultAddresses\n : addressResponse.slice(-1);\n\n setAddressesList(addressesToSet);\n } else {\n setAddressesList(addressResponse);\n }\n }\n })\n .finally(() => {\n setLoading(false);\n });\n }, [minifiedView]);\n\n useEffect(() => {\n getAddressesList();\n }, [getAddressesList]);\n\n useEffect(() => {\n if (!addressesList.length) return;\n\n if (defaultSelectAddressId === 0) {\n setAddNewAddress(true);\n setSelectedAddressOption('0');\n } else {\n const item =\n addressesList.find((el) => {\n if (typeof defaultSelectAddressId === 'string') {\n return (\n el.uid === defaultSelectAddressId ||\n el.id?.toString() === defaultSelectAddressId\n );\n }\n return +el.id! === defaultSelectAddressId;\n }) ||\n sortingAddressesList(addressesList, selectShipping!, selectBilling!)[0];\n\n const normalizeAddressData = {\n data: normalizeGetAddressData(item),\n isDataValid: !isEmpty(item),\n };\n\n setSelectedAddressOption(item?.id?.toString() || item?.uid || '');\n\n onAddressData?.(normalizeAddressData);\n }\n }, [\n addressesList,\n defaultSelectAddressId,\n onAddressData,\n selectBilling,\n selectShipping,\n ]);\n\n const setEditingAddressId = useCallback((id: string) => {\n setEditAddressId(id);\n setAddNewAddress(false);\n }, []);\n\n const handleSelectAddressOption = useCallback(\n (event: Event, item?: {} | CustomerAddressesModel | undefined) => {\n const value = (event?.target as HTMLInputElement).value;\n const nextSibling = (event?.target as HTMLInputElement)\n .nextSibling as HTMLElement;\n\n setSelectedAddressOption(value);\n\n const normalizeAddressData = {\n data: normalizeGetAddressData(item),\n isDataValid: !isEmpty(normalizeGetAddressData(item)),\n };\n\n onAddressData?.(normalizeAddressData);\n setAddNewAddress(value === '0');\n\n if (nextSibling) {\n nextSibling.focus();\n window.scrollBy(0, 100);\n }\n },\n [onAddressData]\n );\n\n const handleRenderForm = useCallback(() => {\n setIsFormRendered(true);\n }, []);\n\n const onCloseBtnClick = useCallback(() => {\n setEditAddressId('');\n setIsFormRendered(false);\n setIsModalRendered(false);\n }, []);\n\n const handleRenderModal = useCallback(() => {\n setIsModalRendered(true);\n }, []);\n\n const removeAddress = useCallback(async () => {\n setSubmitLoading(true);\n\n await manageAddressDeletion(addressId, addressesList);\n\n removeCustomerAddress(+addressId)\n .then(() => {\n getAddressesList();\n onCloseBtnClick();\n })\n .finally(() => {\n setSubmitLoading(false);\n });\n }, [addressesList, addressId, onCloseBtnClick, getAddressesList]);\n\n const closeNewAddressForm = useCallback(() => {\n setAddNewAddress(false);\n }, []);\n\n const redirectToAddressesRoute = useCallback(() => {\n const isClientRoute =\n checkIsFunction(routeAddressesPage) && minifiedView && !addNewAddress;\n\n if (isClientRoute) {\n window.location.href = routeAddressesPage();\n } else {\n setAddNewAddress(true);\n setEditAddressId('');\n }\n }, [addNewAddress, routeAddressesPage, minifiedView]);\n\n const handleOnSuccess = useCallback(async () => {\n await getAddressesList();\n await onSuccess?.();\n }, [getAddressesList, onSuccess]);\n\n return {\n keysSortOrder,\n submitLoading,\n isModalRendered,\n isFormRendered,\n loading,\n addNewAddress,\n addressesList,\n addressId,\n handleRenderForm,\n handleRenderModal,\n removeAddress,\n onCloseBtnClick,\n setEditingAddressId,\n closeNewAddressForm,\n redirectToAddressesRoute,\n handleOnSuccess,\n handleSelectAddressOption,\n selectedAddressOption,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { memo } from 'preact/compat';\nimport { Fragment, FunctionComponent } from 'preact';\nimport { useAddresses } from '@/account/hooks/containers/useAddresses';\nimport { AddressForm } from '@/account/containers/AddressForm';\nimport { Card, Header } from '@adobe-commerce/elsie/components';\nimport {\n AddressActions,\n AddressCard,\n AddressModal,\n CardLoader,\n EmptyList,\n} from '@/account/components';\nimport { AddressesWrapperProps } from '@/account/types';\nimport '@/account/components/AddressesWrapper/AddressesWrapper.css';\nimport sortingAddressesList from '@/account/lib/sortingAddressesList';\n\nexport const AddressesWrapper: FunctionComponent<AddressesWrapperProps> = memo(\n ({\n minifiedViewKey,\n hideActionFormButtons = false,\n inputName,\n slots,\n title = '',\n addressFormTitle = '',\n defaultSelectAddressId = '',\n showFormLoader = false,\n onAddressData,\n forwardFormRef,\n className,\n showSaveCheckBox = false,\n saveCheckBoxValue = false,\n selectShipping = false,\n selectBilling = false,\n selectable = false,\n withHeader = true,\n minifiedView = false,\n withActionsInMinifiedView = false,\n withActionsInFullSizeView = true,\n inputsDefaultValueSet,\n showShippingCheckBox = true,\n showBillingCheckBox = true,\n shippingCheckBoxValue = true,\n billingCheckBoxValue = true,\n routeAddressesPage,\n onSubmit,\n onSuccess,\n onError,\n }) => {\n const translations = useText({\n containerTitle: `Account.${minifiedViewKey}.Addresses.containerTitle`,\n differentAddressFormTitle: `Account.${minifiedViewKey}.Addresses.differentAddressFormTitle`,\n editAddressFormTitle: `Account.${minifiedViewKey}.Addresses.editAddressFormTitle`,\n viewAllAddressesButton: `Account.${minifiedViewKey}.Addresses.viewAllAddressesButton`,\n newAddressFormTitle: `Account.${minifiedViewKey}.Addresses.newAddressFormTitle`,\n ariaLabelAddressPicker: `Account.${minifiedViewKey}.Addresses.ariaLabelAddressPicker`,\n });\n\n const {\n keysSortOrder,\n submitLoading,\n isModalRendered,\n isFormRendered,\n loading,\n addNewAddress,\n addressesList,\n addressId,\n handleRenderForm,\n handleRenderModal,\n removeAddress,\n onCloseBtnClick,\n handleOnSuccess,\n setEditingAddressId,\n closeNewAddressForm,\n redirectToAddressesRoute,\n handleSelectAddressOption,\n selectedAddressOption,\n } = useAddresses({\n defaultSelectAddressId,\n minifiedView,\n routeAddressesPage,\n onSuccess,\n onAddressData,\n selectShipping,\n selectBilling,\n });\n\n const headerTitle = title || translations.containerTitle;\n\n let addressesComponent = null;\n\n if (selectable) {\n const sortedAddressesList =\n sortingAddressesList(addressesList, selectShipping, selectBilling) ||\n [];\n\n let addressesFooterSection;\n\n if (addNewAddress) {\n addressesFooterSection = (\n <div\n className={classes([\n 'account-addresses-form__footer__wrapper',\n ['account-addresses-form__footer__wrapper-show', addNewAddress],\n ])}\n >\n <AddressForm\n slots={slots}\n hideActionFormButtons={hideActionFormButtons}\n formName={inputName}\n showFormLoader={showFormLoader}\n isOpen={addNewAddress}\n forwardFormRef={forwardFormRef}\n showSaveCheckBox={showSaveCheckBox}\n saveCheckBoxValue={saveCheckBoxValue}\n shippingCheckBoxValue={shippingCheckBoxValue}\n billingCheckBoxValue={billingCheckBoxValue}\n addressesFormTitle={\n addressFormTitle || translations.differentAddressFormTitle\n }\n inputsDefaultValueSet={inputsDefaultValueSet}\n showShippingCheckBox={showShippingCheckBox}\n showBillingCheckBox={showBillingCheckBox}\n onCloseBtnClick={closeNewAddressForm}\n onChange={onAddressData}\n onError={onError}\n onSubmit={onSubmit}\n onSuccess={handleOnSuccess}\n />\n </div>\n );\n } else if (sortedAddressesList.length) {\n addressesFooterSection = (\n <AddressActions\n selectable={selectable}\n minifiedView={minifiedView}\n addNewAddress={addNewAddress}\n routeAddressesPage={redirectToAddressesRoute}\n />\n );\n } else {\n addressesFooterSection = null;\n }\n\n const generalLabelId = `generalLabel_${headerTitle.replace(/\\s+/g, '')}`;\n\n addressesComponent = (\n <div className={'account-addresses-wrapper--select-view'}>\n <span id={generalLabelId} style=\"display: none;\">\n {headerTitle}\n </span>\n {sortedAddressesList.map((item, index) => {\n const valueForSelection = item.id?.toString() || item.uid;\n const inputId = `${inputName}_${valueForSelection}`;\n const labelId = `${inputId}_label`;\n\n return (\n <Fragment key={valueForSelection}>\n <input\n data-testid={`radio-${index + 1}`}\n type=\"radio\"\n name={inputName}\n id={inputId}\n value={valueForSelection}\n checked={selectedAddressOption === valueForSelection}\n onChange={(event) => handleSelectAddressOption(event, item)}\n aria-labelledby={`${generalLabelId} ${labelId}`}\n />\n <label\n id={labelId}\n htmlFor={inputId}\n className={'account-addresses-wrapper__label'}\n >\n <AddressCard\n slots={slots}\n selectable={selectable}\n selectShipping={selectShipping}\n selectBilling={selectBilling}\n minifiedView={minifiedView}\n addressData={item}\n keysSortOrder={keysSortOrder}\n loading={loading}\n />\n </label>\n </Fragment>\n );\n })}\n\n {addressesFooterSection && (\n <div className=\"account-addresses-wrapper__footer-section\">\n <input\n aria-label={`${headerTitle} ${translations.ariaLabelAddressPicker}`}\n data-testid={`radio-0`}\n type=\"radio\"\n name={inputName}\n id={`${inputName}_addressActions`}\n value={'0'}\n checked={selectedAddressOption === '0'}\n onChange={(event) => handleSelectAddressOption(event, {})}\n tabindex={addressesFooterSection ? 0 : -1}\n />\n <label\n htmlFor={`${inputName}_addressActions`}\n className={'account-addresses-wrapper__label'}\n >\n {addressesFooterSection}\n </label>\n </div>\n )}\n </div>\n );\n } else {\n addressesComponent = (\n <>\n {addressesList.map((item) => (\n <Fragment key={item.id}>\n {addressId === item.id && isFormRendered ? (\n <Card variant=\"secondary\" style={{ marginBottom: 20 }}>\n <AddressForm\n slots={slots}\n isOpen={addressId === item.id && isFormRendered}\n addressFormId={addressId}\n inputsDefaultValueSet={item}\n addressesFormTitle={translations.editAddressFormTitle}\n showShippingCheckBox={showShippingCheckBox}\n showBillingCheckBox={showBillingCheckBox}\n shippingCheckBoxValue={shippingCheckBoxValue}\n billingCheckBoxValue={billingCheckBoxValue}\n forwardFormRef={forwardFormRef}\n onCloseBtnClick={onCloseBtnClick}\n onChange={onAddressData}\n onError={onError}\n onSubmit={onSubmit}\n onSuccess={handleOnSuccess}\n />\n </Card>\n ) : (\n <AddressCard\n slots={slots}\n key={item.id}\n minifiedView={minifiedView}\n addressData={item}\n keysSortOrder={keysSortOrder}\n loading={loading}\n setAddressId={setEditingAddressId}\n handleRenderModal={\n (minifiedView && withActionsInMinifiedView) ||\n (!minifiedView && withActionsInFullSizeView)\n ? handleRenderModal\n : undefined\n }\n handleRenderForm={\n (minifiedView && withActionsInMinifiedView) ||\n (!minifiedView && withActionsInFullSizeView)\n ? handleRenderForm\n : undefined\n }\n />\n )}\n </Fragment>\n ))}\n\n <div className=\"account-addresses__footer\">\n {addNewAddress ? (\n <Card variant=\"secondary\">\n <AddressForm\n slots={slots}\n isOpen={addNewAddress}\n addressesFormTitle={translations.newAddressFormTitle}\n inputsDefaultValueSet={inputsDefaultValueSet}\n showShippingCheckBox={!!addressesList?.length}\n showBillingCheckBox={!!addressesList?.length}\n shippingCheckBoxValue={shippingCheckBoxValue}\n billingCheckBoxValue={billingCheckBoxValue}\n forwardFormRef={forwardFormRef}\n onChange={onAddressData}\n onCloseBtnClick={closeNewAddressForm}\n onError={onError}\n onSubmit={onSubmit}\n onSuccess={handleOnSuccess}\n />\n </Card>\n ) : (\n <AddressActions\n minifiedView={minifiedView}\n addNewAddress={addNewAddress}\n routeAddressesPage={redirectToAddressesRoute}\n />\n )}\n </div>\n </>\n );\n }\n\n return (\n <div>\n {withHeader ? (\n <Header\n title={headerTitle}\n divider={!minifiedView}\n className={minifiedView ? 'account-addresses-header' : ''}\n />\n ) : null}\n <div\n className={classes(['account-addresses-wrapper', className])}\n data-testid=\"addressesIdWrapper\"\n >\n <AddressModal\n minifiedView={minifiedView}\n addressData={addressesList?.find((el) => el.id === addressId)}\n keysSortOrder={keysSortOrder}\n submitLoading={submitLoading}\n open={isModalRendered}\n closeModal={onCloseBtnClick}\n onRemoveAddress={removeAddress}\n />\n {loading ? (\n <CardLoader testId={'addressSkeletonLoader'} withCard={false} />\n ) : !selectable ? (\n <EmptyList\n isEmpty={!addressesList?.length}\n typeList=\"address\"\n minifiedView={minifiedView}\n />\n ) : (\n <AddressForm\n slots={slots}\n hideActionFormButtons={hideActionFormButtons}\n formName={inputName}\n isOpen={!addressesList?.length}\n forwardFormRef={forwardFormRef}\n showSaveCheckBox={showSaveCheckBox}\n saveCheckBoxValue={saveCheckBoxValue}\n shippingCheckBoxValue={shippingCheckBoxValue}\n billingCheckBoxValue={billingCheckBoxValue}\n inputsDefaultValueSet={inputsDefaultValueSet}\n showShippingCheckBox={showShippingCheckBox}\n showBillingCheckBox={showBillingCheckBox}\n onChange={onAddressData}\n onCloseBtnClick={closeNewAddressForm}\n onError={onError}\n onSubmit={onSubmit}\n onSuccess={handleOnSuccess}\n />\n )}\n {addressesComponent}\n </div>\n </div>\n );\n }\n);\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FieldEnumList } from '../data/models';\n\nconst defaultCheckBox = {\n entityType: 'CUSTOMER_ADDRESS',\n isUnique: false,\n options: [],\n multilineCount: 0,\n validateRules: [],\n defaultValue: false,\n fieldType: FieldEnumList.BOOLEAN,\n className: '',\n required: false,\n orderNumber: 90,\n isHidden: false,\n};\n\nexport const defaultShippingCheckBox = {\n ...defaultCheckBox,\n label: 'Set as default shipping address',\n name: 'default_shipping',\n id: 'default_shipping',\n code: 'default_shipping',\n customUpperCode: 'defaultShipping',\n};\n\nexport const defaultBillingCheckBox = {\n ...defaultCheckBox,\n label: 'Set as default billing address',\n name: 'default_billing',\n id: 'default_billing',\n code: 'default_billing',\n customUpperCode: 'defaultBilling',\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { AttributesFormModel } from '../data/models';\n\nexport const getFieldsConfig = (\n itemValues: Record<string, any>,\n attributesFormList: AttributesFormModel[]\n) => {\n return attributesFormList?.map((field) => {\n const newItemValues = {\n ...itemValues,\n firstName: itemValues.firstname ?? itemValues.firstName,\n lastName: itemValues.lastname ?? itemValues.lastName,\n middleName: itemValues.middlename ?? itemValues.middleName,\n };\n const newField = JSON.parse(JSON.stringify(field));\n\n if (Object.hasOwn(newItemValues, field.customUpperCode)) {\n const value =\n newItemValues[field.customUpperCode as keyof typeof newItemValues];\n\n if (field.customUpperCode === 'region' && typeof value === 'object') {\n newField.defaultValue =\n value.regionCode && value.regionId\n ? `${value.regionCode},${value.regionId}`\n : value.region ?? value.regionCode;\n } else {\n newField.defaultValue = value;\n }\n }\n\n return newField;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const getFormValues = (form: HTMLFormElement) => {\n if (!form) return null;\n\n const formData = new FormData(form);\n\n const checkboxes = form.querySelectorAll(\n 'input[type=\"checkbox\"]'\n // eslint-disable-next-line no-undef\n ) as NodeListOf<HTMLInputElement>;\n checkboxes.forEach((checkbox: HTMLInputElement) => {\n if (!formData.has(checkbox.name)) {\n formData.set(checkbox.name, 'false');\n }\n if (checkbox.checked) {\n formData.set(checkbox.name, 'true');\n }\n });\n\n if (formData && typeof formData.entries === 'function') {\n const entries = formData.entries();\n if (entries && typeof entries[Symbol.iterator] === 'function') {\n return JSON.parse(JSON.stringify(Object.fromEntries(entries))) || {};\n }\n }\n\n return {};\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Country, RegionTransform } from '../data/models';\n\ntype Field = {\n customUpperCode: string;\n defaultValue?: string | boolean | number;\n options?: any[];\n required?: boolean;\n disabled?: boolean;\n};\n\ninterface ProcessFieldsProps {\n fields: Field[];\n countryOptions: Country[];\n regionOptions: RegionTransform[];\n isRequiredRegion: boolean;\n isRequiredPostCode: boolean;\n disableField: boolean;\n addressId?: string | number;\n}\n\nexport default ({\n fields,\n addressId,\n countryOptions,\n disableField,\n regionOptions,\n isRequiredRegion,\n isRequiredPostCode,\n}: ProcessFieldsProps): Field[] => {\n const result = fields\n .filter((item) => {\n const defaultShippingBilling =\n addressId &&\n (item.customUpperCode === 'defaultShipping' ||\n item.customUpperCode === 'defaultBilling');\n\n return !(defaultShippingBilling && item.defaultValue);\n })\n .map((element) => {\n if (element.customUpperCode === 'countryCode') {\n return {\n ...element,\n options: countryOptions,\n disabled: disableField,\n };\n }\n\n if (element.customUpperCode === 'postcode') {\n return { ...element, required: isRequiredPostCode };\n }\n\n if (element.customUpperCode === 'region') {\n return {\n ...element,\n options: regionOptions,\n required: isRequiredRegion,\n disabled: disableField,\n };\n }\n\n return element;\n });\n\n return result;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { convertToSnakeCase } from './convertCase';\n\nexport const normalizeAttributes = (\n input: Record<string, any>,\n type = 'address'\n) => {\n const baseKeys =\n type === 'address'\n ? [\n 'region',\n 'city',\n 'company',\n 'countryCode',\n 'countryId',\n 'defaultBilling',\n 'defaultShipping',\n 'fax',\n 'firstName',\n 'lastName',\n 'middleName',\n 'postcode',\n 'prefix',\n 'street',\n 'suffix',\n 'telephone',\n 'vatId',\n 'addressId',\n ]\n : [\n 'email',\n 'firstName',\n 'lastName',\n 'middleName',\n 'gender',\n 'dob',\n 'prefix',\n 'suffix',\n 'fax',\n ];\n\n const result: Record<string, any> = {};\n const customAttributes: Record<string, any>[] = [];\n\n Object.keys(input).forEach((key: string) => {\n if (baseKeys.includes(key)) {\n result[key] = input[key];\n } else {\n customAttributes.push({\n attribute_code: convertToSnakeCase(key),\n value: input[key],\n });\n }\n });\n\n if (customAttributes.length > 0) {\n result.custom_attributesV2 = customAttributes;\n }\n\n return result;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CustomerAddressesModel } from '../data/models';\nimport { convertToBoolean } from './convertToBoolean';\nimport { normalizeAttributes } from './normalizeAttributes';\n\nexport const serializeAddressForm = (\n formValues: Record<string, string>\n): CustomerAddressesModel => {\n const streetListKeys = ['street', 'streetMultiline_1', 'streetMultiline_2'];\n const elementValues = ['on', 'off', 'true', 'false'];\n const streetList: string[] = [];\n const modifyFormCheckBoxValues: Record<string, boolean> = {};\n\n for (const key in formValues) {\n const value = formValues[key];\n\n if (elementValues.includes(value)) {\n modifyFormCheckBoxValues[key] = convertToBoolean(value);\n }\n\n if (streetListKeys.includes(key)) {\n streetList.push(value);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { street, streetMultiline_2, streetMultiline_1, region, ...props } =\n formValues;\n const [regionCode, regionId] = region\n ? region.split(',')\n : [undefined, undefined];\n\n const regionConfigs =\n regionId && regionCode\n ? {\n regionId: +regionId,\n regionCode,\n }\n : { region: regionCode };\n\n const result = normalizeAttributes({\n ...props,\n ...modifyFormCheckBoxValues,\n region: { ...regionConfigs },\n street: streetList,\n });\n\n return result;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { RegionTransform } from '../data/models';\n\ntype InputData = Record<string, any>;\n\nexport default (input: InputData, regions: RegionTransform[]): InputData => {\n const transformedData: InputData = {};\n\n for (const key in input) {\n if (Object.prototype.hasOwnProperty.call(input, key)) {\n const value = input[key];\n\n if (key === 'region' && value.regionId) {\n const foundRegion = regions.find(\n (region) => region?.id === value.regionId\n );\n if (foundRegion) {\n transformedData[key] = {\n ...value,\n text: foundRegion.text,\n };\n } else {\n transformedData[key] = value;\n }\n } else if (Array.isArray(value)) {\n transformedData[key] = value[0] || '';\n value.slice(1).forEach((val: any, index: number) => {\n transformedData[`${key}Multiline_${index + 2}`] = val;\n });\n } else {\n transformedData[key] = value;\n }\n }\n }\n\n return transformedData;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n createCustomerAddress,\n getAttributesForm,\n updateCustomerAddress,\n getCountries,\n} from '@/account/api';\nimport {\n defaultShippingCheckBox,\n defaultBillingCheckBox,\n} from '@/account/configs/addressField.config';\nimport {\n AttributesFormModel,\n Country,\n CustomerAddressesModel,\n} from '@/account/data/models';\nimport { getFieldsConfig } from '@/account/lib/getFieldsConfig';\nimport { getFormValues } from '@/account/lib/getFormValues';\nimport prepareNormalizedData from '@/account/lib/prepareNormalizedData';\nimport { serializeAddressForm } from '@/account/lib/serializeAddressForm';\nimport transformSessionData from '@/account/lib/transformSessionData';\nimport { useAddressFormProps } from '@/account/types';\nimport { VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { useCallback, useEffect, useMemo, useState } from 'preact/hooks';\n\nexport const findNonEmptyObject = (\n obj1: Record<string, unknown> | undefined,\n obj2: CustomerAddressesModel | undefined\n): CustomerAddressesModel | Record<string, unknown> => {\n if (obj1 && Object.keys(obj1).length > 0) {\n return obj1;\n }\n\n if (obj2 && Object.keys(obj2).length > 0) {\n return obj2;\n }\n\n return {};\n};\n\nexport const useAddressForm = ({\n showFormLoader,\n showSaveCheckBox,\n saveCheckBoxValue,\n addressFormId,\n billingCheckBoxValue,\n shippingCheckBoxValue,\n showShippingCheckBox,\n showBillingCheckBox,\n inputsDefaultValueSet,\n onCloseBtnClick,\n onSuccess,\n onError,\n formName,\n}: useAddressFormProps) => {\n const [inLineAlert, setInLineAlert] = useState<{\n text: string;\n type: 'success' | 'warning' | 'error';\n icon?: VNode<HTMLAttributes<SVGSVGElement>>;\n }>({\n text: '',\n type: 'success',\n });\n const [submitLoading, setSubmitLoading] = useState(showFormLoader ?? false);\n const [addressId, setAddressId] = useState<string>(addressFormId || '');\n const [attributesFormList, setAttributesFormList] = useState<\n AttributesFormModel[]\n >([]);\n const [countriesData, setCountriesData] = useState<{\n availableCountries: Country[];\n countriesWithRequiredRegion: string[];\n optionalZipCountries: string[];\n } | null>(null);\n const [inputChange, setInputChange] = useState(() => {\n const savedData = sessionStorage.getItem(`${formName}_addressData`);\n return savedData\n ? { countryCode: JSON.parse(savedData)?.data?.countryCode }\n : inputsDefaultValueSet;\n });\n const [disableField, setDisableField] = useState(false);\n const [saveCheckBoxAddress, setSaveCheckBoxAddress] = useState<boolean>(\n () => {\n const sessionAddressForm = sessionStorage.getItem(\n `${formName}_addressData`\n );\n\n const sessionAddressFormData = sessionAddressForm\n ? JSON.parse(sessionAddressForm)?.data?.['saveAddressBook']\n : (saveCheckBoxValue as boolean);\n\n return sessionAddressFormData;\n }\n );\n\n const handleSaveCheckBoxAddress = useCallback((event: Event) => {\n setSaveCheckBoxAddress((event.target as HTMLInputElement).checked);\n }, []);\n\n useEffect(() => {\n if (typeof showFormLoader === 'undefined') return;\n setSubmitLoading(showFormLoader);\n }, [showFormLoader]);\n\n useEffect(() => {\n getAttributesForm(\n addressId ? 'customer_address_edit' : 'customer_register_address'\n ).then((attributeFormResponse) => {\n setAttributesFormList(attributeFormResponse);\n });\n }, [addressId]);\n\n useEffect(() => {\n setDisableField(true);\n getCountries().then(\n ({\n availableCountries,\n countriesWithRequiredRegion,\n optionalZipCountries,\n }) => {\n setCountriesData({\n availableCountries,\n countriesWithRequiredRegion,\n optionalZipCountries,\n });\n setDisableField(false);\n }\n );\n }, []);\n\n const countryOptions = useMemo(() => {\n return countriesData?.availableCountries || [];\n }, [countriesData]);\n\n const isRequiredRegion = useMemo(() => {\n if (!inputChange?.countryCode || !countriesData) return false;\n return countriesData.countriesWithRequiredRegion.includes(\n inputChange.countryCode as string\n );\n }, [inputChange?.countryCode, countriesData]);\n\n const isRequiredPostCode = useMemo(() => {\n if (!inputChange?.countryCode || !countriesData) return true;\n return !countriesData.optionalZipCountries.includes(\n inputChange.countryCode as string\n );\n }, [inputChange?.countryCode, countriesData]);\n\n const regionOptions = useMemo(() => {\n if (!inputChange?.countryCode || !countriesData) return [];\n\n const country = countriesData.availableCountries.find(\n (c) => c.value === inputChange.countryCode\n );\n\n return (\n country?.availableRegions?.map((region) => ({\n text: region.name,\n value: `${region.code},${region.id}`,\n })) || []\n );\n }, [inputChange?.countryCode, countriesData]);\n\n const handleOnCloseForm = useCallback(() => {\n setInLineAlert({\n text: '',\n type: 'success',\n });\n onCloseBtnClick?.();\n }, [onCloseBtnClick]);\n\n const handleUpdateAddress = useCallback(\n async (event: Event, valid: boolean): Promise<void | null | undefined> => {\n if (!valid) return null;\n\n setSubmitLoading(true);\n\n const formValues = getFormValues(event.target as HTMLFormElement);\n const serializeValues = serializeAddressForm(formValues);\n\n await updateCustomerAddress(serializeValues as any)\n .then(() => {\n onSuccess?.();\n onCloseBtnClick?.();\n (event?.target as HTMLFormElement)?.reset();\n })\n .catch((error) => {\n setInLineAlert((prev) => ({\n ...prev,\n text: error.message,\n type: 'error',\n }));\n onError?.(error);\n })\n .finally(() => {\n setAddressId('');\n setSubmitLoading(false);\n });\n },\n [onCloseBtnClick, onError, onSuccess]\n );\n\n const handleCreateAddress = useCallback(\n async (event: Event, valid: boolean): Promise<void | null | undefined> => {\n if (!valid) return;\n\n setSubmitLoading(true);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { saveAddressBook, ...formValues } = getFormValues(\n event.target as HTMLFormElement\n );\n\n const serializeValues = serializeAddressForm(formValues);\n\n await createCustomerAddress(serializeValues as any)\n .then(() => {\n onSuccess?.();\n onCloseBtnClick?.();\n (event?.target as HTMLFormElement)?.reset();\n })\n .catch((error) => {\n setInLineAlert((prev) => ({\n ...prev,\n text: error.message,\n type: 'error',\n }));\n onError?.(error);\n })\n .finally(() => {\n setAddressId('');\n setSubmitLoading(false);\n });\n },\n [onCloseBtnClick, onError, onSuccess]\n );\n\n const normalizeFieldsConfig = useMemo(() => {\n if (!attributesFormList.length) return [];\n\n const shippingCheckBox = {\n ...defaultShippingCheckBox,\n defaultValue: shippingCheckBoxValue ?? false,\n isHidden:\n showSaveCheckBox && !saveCheckBoxAddress ? true : !showShippingCheckBox,\n };\n\n const billingCheckBox = {\n ...defaultBillingCheckBox,\n defaultValue: billingCheckBoxValue ?? false,\n isHidden:\n showSaveCheckBox && !saveCheckBoxAddress ? true : !showBillingCheckBox,\n };\n\n const updatedAttributesFormList = [\n ...attributesFormList,\n shippingCheckBox,\n billingCheckBox,\n ];\n\n const sessionAddressForm = sessionStorage.getItem(\n `${formName}_addressData`\n );\n\n const sessionAddressFormData = sessionAddressForm\n ? transformSessionData(\n JSON.parse(sessionAddressForm).data as CustomerAddressesModel,\n regionOptions\n )\n : {};\n\n const fields = getFieldsConfig(\n findNonEmptyObject(sessionAddressFormData, inputsDefaultValueSet),\n updatedAttributesFormList\n );\n\n return prepareNormalizedData({\n fields,\n addressId,\n countryOptions,\n disableField,\n regionOptions,\n isRequiredRegion,\n isRequiredPostCode,\n });\n }, [\n attributesFormList,\n shippingCheckBoxValue,\n showSaveCheckBox,\n saveCheckBoxAddress,\n showShippingCheckBox,\n billingCheckBoxValue,\n showBillingCheckBox,\n formName,\n regionOptions,\n inputsDefaultValueSet,\n addressId,\n countryOptions,\n disableField,\n isRequiredRegion,\n isRequiredPostCode,\n ]);\n\n const handleInputChange = useCallback(\n (values: Record<string, string | number | boolean>) => {\n setInputChange((prev) => ({ ...prev, ...values }));\n },\n []\n );\n\n return {\n regionOptions,\n saveCheckBoxAddress,\n inLineAlert,\n addressId,\n submitLoading,\n normalizeFieldsConfig,\n handleSaveCheckBoxAddress,\n handleUpdateAddress,\n handleCreateAddress,\n handleOnCloseForm,\n handleInputChange,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CustomerAddressesModel } from '../data/models';\nimport { convertKeysCase } from './convertCase';\n\ntype CustomAttributesType = {\n customAttributes?: { code: string; value: string }[];\n};\n\nexport const transformDefaultValuesAddresses = (\n address?: CustomerAddressesModel & CustomAttributesType\n): CustomerAddressesModel => {\n if (!address || !Array.isArray(address.customAttributes)) {\n return address ?? {};\n }\n\n const customAttributesObject: Record<string, string> = {};\n\n address?.customAttributes?.forEach((attr) => {\n if (attr.code && Object.hasOwn(attr, 'value')) {\n customAttributesObject[attr.code] = attr.value;\n }\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { customAttributes, ...restOfObject } = address;\n\n return {\n ...restOfObject,\n ...convertKeysCase(customAttributesObject, 'camelCase', {}),\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\nimport { classes, Slot } from '@adobe-commerce/elsie/lib';\nimport { Button, InLineAlert } from '@adobe-commerce/elsie/components';\nimport { Form } from '@/account/components';\nimport { AddressFormWrapperProps, FieldsProps } from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { useAddressForm } from '@/account/hooks/containers/useAddressForm';\nimport '@/account/components/AddressFormWrapper/AddressFormWrapper.css';\nimport { transformDefaultValuesAddresses } from '@/account/lib/transformDefaultValuesAddresses';\n\nexport const AddressFormWrapper: FunctionComponent<AddressFormWrapperProps> = ({\n hideActionFormButtons,\n formName = '',\n showFormLoader = false,\n showSaveCheckBox = false,\n saveCheckBoxValue = false,\n forwardFormRef,\n slots,\n addressesFormTitle,\n className,\n addressFormId,\n inputsDefaultValueSet,\n showShippingCheckBox = true,\n showBillingCheckBox = true,\n shippingCheckBoxValue = true,\n billingCheckBoxValue = true,\n isOpen,\n fieldIdPrefix,\n onSubmit,\n onCloseBtnClick,\n onSuccess,\n onError,\n onChange,\n}) => {\n const translations = useText({\n secondaryButton: 'Account.AddressForm.formText.secondaryButton',\n primaryButton: 'Account.AddressForm.formText.primaryButton',\n saveAddressBook: 'Account.AddressForm.formText.saveAddressBook',\n });\n\n const {\n inLineAlert,\n addressId,\n submitLoading,\n normalizeFieldsConfig,\n handleUpdateAddress,\n handleCreateAddress,\n handleOnCloseForm,\n handleSaveCheckBoxAddress,\n saveCheckBoxAddress,\n handleInputChange,\n regionOptions,\n } = useAddressForm({\n showFormLoader,\n addressFormId,\n inputsDefaultValueSet: transformDefaultValuesAddresses(\n inputsDefaultValueSet\n ),\n shippingCheckBoxValue,\n billingCheckBoxValue,\n showShippingCheckBox,\n showBillingCheckBox,\n saveCheckBoxValue,\n showSaveCheckBox,\n onSuccess,\n onError,\n onCloseBtnClick,\n formName,\n });\n\n const [formKey, setFormKey] = useState(0);\n\n // Re-render form when inputsDefaultValueSet changes\n useEffect(() => {\n setFormKey((prevKey) => prevKey + 1);\n }, [inputsDefaultValueSet]);\n\n if (!isOpen) return null;\n\n return (\n <div className={classes(['account-address-form-wrapper', className])}>\n {addressesFormTitle ? (\n <div\n className=\"account-address-form-wrapper__title\"\n data-testid=\"addressesFormTitle\"\n >\n {addressesFormTitle}\n </div>\n ) : null}\n {inLineAlert.text ? (\n <InLineAlert\n data-testid=\"inLineAlert\"\n className=\"account-address-form-wrapper__notification\"\n type={inLineAlert.type}\n variant=\"secondary\"\n heading={inLineAlert.text}\n icon={inLineAlert.icon}\n />\n ) : null}\n <Form\n key={formKey}\n regionOptions={regionOptions}\n forwardFormRef={forwardFormRef}\n slots={slots}\n className=\"account-address-form\"\n name={formName || 'addressesForm'}\n fieldsConfig={normalizeFieldsConfig as FieldsProps[]}\n onSubmit={\n onSubmit || (addressId ? handleUpdateAddress : handleCreateAddress)\n }\n setInputChange={handleInputChange}\n loading={submitLoading}\n showFormLoader={showFormLoader}\n showSaveCheckBox={showSaveCheckBox}\n handleSaveCheckBoxAddress={handleSaveCheckBoxAddress}\n saveCheckBoxAddress={saveCheckBoxAddress}\n onChange={onChange}\n fieldIdPrefix={fieldIdPrefix}\n >\n {addressId ? (\n <input\n type=\"hidden\"\n name=\"addressId\"\n value={addressId}\n data-testid=\"hidden_test_id\"\n />\n ) : null}\n {!hideActionFormButtons ? (\n <div\n className={classes([\n 'dropin-field account-address-form-wrapper__buttons',\n [\n 'account-address-form-wrapper__buttons--empty',\n showSaveCheckBox,\n ],\n ])}\n >\n {slots?.AddressFormActions ? (\n <Slot\n data-testid=\"addressFormActions\"\n name=\"AddressFormActions\"\n slot={slots.AddressFormActions}\n context={{\n handleUpdateAddress,\n handleCreateAddress,\n addressId,\n }}\n />\n ) : (\n <>\n {!showSaveCheckBox ? (\n <>\n <Button\n // @ts-ignore\n type={'button'}\n onClick={handleOnCloseForm}\n variant=\"secondary\"\n disabled={submitLoading}\n >\n {translations.secondaryButton}\n </Button>\n <Button disabled={submitLoading}>\n {translations.primaryButton}\n </Button>\n </>\n ) : null}\n </>\n )}\n </div>\n ) : null}\n </Form>\n </div>\n );\n};\n"],"names":["AddressForm","hideActionFormButtons","formName","showFormLoader","showSaveCheckBox","saveCheckBoxValue","forwardFormRef","slots","addressesFormTitle","className","addressFormId","inputsDefaultValueSet","billingCheckBoxValue","shippingCheckBoxValue","showBillingCheckBox","showShippingCheckBox","isOpen","fieldIdPrefix","onSubmit","onCloseBtnClick","onSuccess","onError","onChange","classes","jsx","AddressFormWrapper","flattenObjectsArray","arr","acc","obj","validateNumeric","value","validateAlphanumWithSpaces","validateAlphanumeric","validateAlpha","validateEmail","validateDate","isDateWithinRange","date","minTimestamp","maxTimestamp","dateTimestamp","convertTimestampToDate","timestamp","validateUrl","url","validateLength","minLength","maxLength","length","validationFields","configs","translations","errorsList","requiredFieldError","lengthTextError","numericError","alphaNumWithSpacesError","alphaNumericError","alphaError","emailError","dateError","urlError","dateLengthError","fieldName","defaultFields","_a","validateRulesConfig","min","max","dateMin","dateMax","validation","_b","convertToBoolean","element","booleanList","dictionary","groupMultilineFields","inputObj","outputObj","multilineFields","key","match","baseKey","index","k","entries","a","b","entry","separateKeys","inputData","customAttributes","convertToSnakeCase","normalizeGetAddressData","fields","isForm","newFields","convertKeysCase","result","regionCode","regionId","getFormValuesFromRef","formRef","elements","el","areRequiredFieldsValid","forValues","checkIsFunction","initializeFormDataAndErrors","fieldsConfig","customUpperCode","required","defaultValue","isObjectNotEmpty","useForm","setInputChange","useText","useRef","formData","setFormData","useState","errors","setErrors","requiredFields","setRequiredFields","regionEnabled","setRegionEnabled","effectHasRun","setEffectHasRun","shouldBlockEffect","setShouldBlockEffect","shouldTriggerEffect","setShouldTriggerEffect","isDataValid","setIsDataValid","useEffect","getGridRowCount","rows","checkbox","handleValidationSubmit","useCallback","disableShowError","formValid","firstErrorField","name","fieldConfig","config","validationResult","input","collectFormData","fieldValue","requiredList","event","fieldsForm","data","initialData","errorList","prev","sessionAddressForm","hasCountryCode","hasRegion","handleInputChange","errorsProp","type","checked","updatedFormData","onFocus","handleBlur","handleSubmit","FieldEnumList","FormInputs","memo","loading","values","onBlur","itemClassName","translationKeys","useMemo","field","getAriaLabel","item","getFloatingLabel","getPlaceholder","renderSlot","errorMessage","contextValue","Slot","selectElement","valueMessage","defaultSelectValue","option","Fragment","Field","Picker","inputElement","Input","inputDateElement","InputDate","inputCheckBoxElement","Checkbox","textAreaElement","TextArea","CardLoader","testId","withCard","defaultSkeleton","jsxs","Skeleton","SkeletonRow","Card","AddressFormLoader","Form","forwardRef","children","regionOptions","handleSaveCheckBoxAddress","saveCheckBoxAddress","useImperativeHandle","modifyFormRef","getAddressButtonAriaLabel","defaultShipping","defaultBilling","isRemove","labelMap","AddressCard","selectable","selectShipping","selectBilling","variant","minifiedView","keysSortOrder","addressData","setAddressId","handleRenderModal","handleRenderForm","addressCardAriaId","useId","minifiedViewKey","defaultBillingLabel","defaultShippingLabel","defaultLabelText","getLabelStatus","handleRemove","handleEdit","normalizeAddress","region","address","modifyAddressData","shippingLabel","billingLabel","hideShipping","hideBilling","Button","Tag","SvgAdd","props","React","SvgAddressBook","SvgChevronRight","SvgEmptyBox","AddressActions","addNewAddress","routeAddressesPage","TagType","buttonProps","nonSelectableViewButton","buttonText","Icon","ChevronRight","Add","AddressModal","open","submitLoading","onRemoveAddress","closeModal","Modal","ProgressSpinner","EmptyList","typeList","isEmpty","AddressBook","EmptyBox","IllustratedMessage","manageAddressDeletion","removeId","addressesList","updateCustomerAddress","newDefaultAddress","fallbackDefaultAddress","updatedDefaultAddress","defaultAttributePreset","defaultAccountAttributePreset","sortingAddressesList","copyAddressList","useAddresses","defaultSelectAddressId","onAddressData","selectedAddressOption","setSelectedAddressOption","isModalRendered","setIsModalRendered","isFormRendered","setIsFormRendered","setLoading","setSubmitLoading","setAddNewAddress","addressId","setEditAddressId","setAddressesList","setKeysSortOrder","getAddressesList","getAttributesForm","getCustomerAddress","response","attributesFormResponse","addressResponse","orderNumber","label","convertToCamelCase","defaultAddresses","addressesToSet","normalizeAddressData","setEditingAddressId","id","handleSelectAddressOption","nextSibling","removeAddress","removeCustomerAddress","closeNewAddressForm","redirectToAddressesRoute","handleOnSuccess","AddressesWrapper","inputName","title","addressFormTitle","withHeader","withActionsInMinifiedView","withActionsInFullSizeView","headerTitle","addressesComponent","sortedAddressesList","addressesFooterSection","generalLabelId","valueForSelection","inputId","labelId","Header","defaultCheckBox","defaultShippingCheckBox","defaultBillingCheckBox","getFieldsConfig","itemValues","attributesFormList","newItemValues","newField","getFormValues","form","prepareNormalizedData","countryOptions","disableField","isRequiredRegion","isRequiredPostCode","normalizeAttributes","baseKeys","serializeAddressForm","formValues","streetListKeys","elementValues","streetList","modifyFormCheckBoxValues","street","streetMultiline_2","streetMultiline_1","regionConfigs","transformSessionData","regions","transformedData","foundRegion","val","findNonEmptyObject","obj1","obj2","useAddressForm","inLineAlert","setInLineAlert","setAttributesFormList","countriesData","setCountriesData","inputChange","savedData","setDisableField","setSaveCheckBoxAddress","attributeFormResponse","getCountries","availableCountries","countriesWithRequiredRegion","optionalZipCountries","country","c","handleOnCloseForm","handleUpdateAddress","valid","serializeValues","error","handleCreateAddress","saveAddressBook","createCustomerAddress","normalizeFieldsConfig","shippingCheckBox","billingCheckBox","updatedAttributesFormList","sessionAddressFormData","transformDefaultValuesAddresses","customAttributesObject","attr","restOfObject","formKey","setFormKey","prevKey","InLineAlert"],"mappings":"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","x_google_ignoreList":[15,16,17,18]}
|