@dropins/storefront-account 4.2.0-beta.0 → 4.2.0-beta.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.
@@ -1 +1 @@
1
- {"version":3,"file":"AddressForm.js","sources":["/@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/Card.svg","../../node_modules/@adobe-commerce/elsie/src/icons/CheckWithCircle.svg","../../node_modules/@adobe-commerce/elsie/src/icons/ChevronRight.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Close.svg","../../node_modules/@adobe-commerce/elsie/src/icons/EmptyBox.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Search.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Warning.svg","../../node_modules/@adobe-commerce/elsie/src/icons/WarningWithCircle.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/components/OrdersListAction/OrdersListAction.tsx","/@dropins/storefront-account/src/hooks/useIsMobile.tsx","/@dropins/storefront-account/src/components/OrdersListCard/OrdersListCard.tsx","/@dropins/storefront-account/src/lib/addressFlowRules.ts","/@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/types/api/companyAddress.types.ts","/@dropins/storefront-account/src/lib/filterB2BCheckoutAddressesByType.ts","/@dropins/storefront-account/src/hooks/useCustomerType.tsx","/@dropins/storefront-account/src/hooks/useCompanyAddressPermissions.tsx","/@dropins/storefront-account/src/lib/addressSelectionPayloadRules.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/lib/addressFormRules.ts","/@dropins/storefront-account/src/hooks/containers/useAddressForm.tsx","/@dropins/storefront-account/src/lib/transformDefaultValuesAddresses.ts","/@dropins/storefront-account/src/components/AddressFormWrapper/AddressFormWrapper.tsx","/@dropins/storefront-account/src/hooks/containers/useGetStoreConfigs.tsx","/@dropins/storefront-account/src/lib/validationChangePassword.ts","/@dropins/storefront-account/src/lib/validationUniqueSymbolsPassword.ts","/@dropins/storefront-account/src/hooks/components/useChangePassword.tsx","/@dropins/storefront-account/src/hooks/components/usePasswordValidationMessage.tsx","/@dropins/storefront-account/src/components/ChangePassword/ChangePassword.tsx","/@dropins/storefront-account/src/components/EditCustomerInformation/EditCustomerInformation.tsx","/@dropins/storefront-account/src/components/CustomerInformationCard/CustomerInformationCard.tsx","/@dropins/storefront-account/src/components/AddressValidation/AddressValidation.tsx","/@dropins/storefront-account/src/components/SellerAssistedBuyingSettingsControl/SellerAssistedBuyingSettingsControl.tsx","/@dropins/storefront-account/src/components/SellerAssistedBuyingActivityTable/SellerAssistedBuyingActivityTable.tsx","/@dropins/storefront-account/src/components/PaymentCard/PaymentCard.tsx","/@dropins/storefront-account/src/hooks/containers/usePaymentMethods.tsx","/@dropins/storefront-account/src/components/PaymentMethodsWrapper/PaymentMethodsWrapper.tsx","/@dropins/storefront-account/src/components/PaymentModal/PaymentModal.tsx","/@dropins/storefront-account/src/containers/AddressForm/AddressForm.tsx","/@dropins/storefront-account/src/hooks/useInLineAlert.tsx","/@dropins/storefront-account/src/hooks/containers/useOrdersList.tsx","/@dropins/storefront-account/src/lib/getDateRange.ts","/@dropins/storefront-account/src/hooks/containers/useOrderSelectList.tsx","/@dropins/storefront-account/src/components/OrdersListWrapper/OrdersListWrapper.tsx"],"sourcesContent":["/* 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 nickname: '',\n city: '',\n company: '',\n countryCode: '',\n addressType: '',\n addressTypeShipping: '',\n addressTypeBilling: '',\n isDefault: '',\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 overrideValues?: Record<string, string | number | boolean>\n ) => {\n const fieldsForm = {\n ...getFormValuesFromRef(formRef),\n ...(overrideValues || {}),\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 const exclusiveToggleValues: Record<string, boolean> =\n type === 'checkbox' && name === 'defaultShipping' && checked\n ? { defaultBilling: false }\n : type === 'checkbox' && name === 'defaultBilling' && checked\n ? { defaultShipping: false }\n : type === 'checkbox' && name === 'addressTypeShipping' && checked\n ? { addressTypeBilling: false }\n : type === 'checkbox' && name === 'addressTypeBilling' && checked\n ? { addressTypeShipping: false }\n : {};\n\n setFormData((prev) => {\n const updatedFormData = {\n ...prev,\n ...exclusiveToggleValues,\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?.({\n ...exclusiveToggleValues,\n [name]: fieldValue,\n });\n setShouldBlockEffect(true);\n\n const fieldConfig = fieldsConfig?.find((config) =>\n config.customUpperCode.includes(name)\n );\n\n const 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(\n fieldValue,\n name,\n requiredFields,\n event,\n exclusiveToggleValues\n );\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\nconst AUTOCOMPLETE_BY_CODE: Record<string, string> = {\n firstname: 'given-name',\n middlename: 'additional-name',\n lastname: 'family-name',\n email: 'email',\n};\n\nconst getAutoComplete = (code: string) => AUTOCOMPLETE_BY_CODE[code];\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 item.forceLabel ? item.label : 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 ??\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 disabled={loading || item.disabled}\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 || item.disabled}\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 autoComplete={getAutoComplete(item.code)}\n value={valueMessage ?? item.defaultValue}\n placeholder={getPlaceholder(item)}\n floatingLabel={getFloatingLabel(item)}\n onBlur={onBlur}\n onFocus={onFocus}\n onChange={onChange}\n disabled={loading || item.disabled}\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={loading || item.disabled || item?.isHidden}\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={\n typeof valueMessage === 'boolean'\n ? valueMessage\n : Boolean(item.defaultValue)\n }\n placeholder={getPlaceholder(item)}\n label={getFloatingLabel(item)}\n onBlur={onBlur}\n onChange={onChange}\n disabled={loading || item.disabled || item?.isHidden}\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 || item.disabled}\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 disabled={loading || item.disabled}\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 AddressActionsLoader = () => {\n return (\n <Skeleton\n data-testid=\"addressActionsLoader\"\n className=\"account-account-loaders--address-actions-loader\"\n >\n <SkeletonRow size=\"medium\" />\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 isB2BFlow,\n permissions,\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 cardLabelDefaultShipping: `Account.${minifiedViewKey}.Addresses.addressCard.cardLabelDefaultShipping`,\n cardLabelDefaultBilling: `Account.${minifiedViewKey}.Addresses.addressCard.cardLabelDefaultBilling`,\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 // Company address book (isB2BFlow) shows explicit DEFAULT SHIPPING/BILLING\n // tags on the address-book card; regular B2C/B2B-without-book keep SHIPPING/BILLING.\n const bookShippingLabel = isB2BFlow\n ? translations.cardLabelDefaultShipping.toLocaleUpperCase()\n : defaultShippingLabel;\n const bookBillingLabel = isB2BFlow\n ? translations.cardLabelDefaultBilling.toLocaleUpperCase()\n : defaultBillingLabel;\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 || !addressData) return [];\n\n const { region, ...address } = addressData as CustomerAddressesModel;\n\n const modifyAddressData = {\n ...address,\n ...(region || {}),\n } as any;\n\n const normalizedAddress = 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\n if (\n modifyAddressData.nickname &&\n !normalizedAddress.some(({ name }) => name === 'nickname')\n ) {\n normalizedAddress.push({\n name: 'nickname',\n orderNumber: Number.MAX_SAFE_INTEGER,\n value: modifyAddressData.nickname,\n label: null,\n });\n }\n\n return normalizedAddress;\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 && (!isB2BFlow || permissions?.canDeleteAddress) ? (\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 (!isB2BFlow ||\n permissions?.canEditAddress ||\n permissions?.canSetDefaultAddress) ? (\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={bookShippingLabel} />\n ) : null}\n {addressData?.defaultBilling ? (\n <Tag label={bookBillingLabel} />\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 SvgCard = (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\", { vectorEffect: \"non-scaling-stroke\", d: \"M2.00718 5H22.1507C22.7047 5 23.1579 5.45323 23.1579 6.00718V7.51794C23.1579 7.51794 1.01007 7.58844 1 7.55823V6.00718C1 5.45323 1.45323 5 2.00718 5Z\", stroke: \"currentColor\", strokeWidth: 1 }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M23.1579 9.78409V18.3451C23.1579 18.899 22.7047 19.3523 22.1507 19.3523H2.00718C1.45323 19.3523 1 18.899 1 18.3451V9.78409H23.1579Z\", stroke: \"currentColor\", strokeWidth: 1 }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M3.01465 15.9682H8.40305\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M17.6192 17.5897C18.4535 17.5897 19.1299 16.9133 19.1299 16.0789C19.1299 15.2446 18.4535 14.5682 17.6192 14.5682C16.7848 14.5682 16.1084 15.2446 16.1084 16.0789C16.1084 16.9133 16.7848 17.5897 17.6192 17.5897Z\", stroke: \"currentColor\", strokeWidth: 1 }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M19.8848 17.5897C20.7192 17.5897 21.3956 16.9133 21.3956 16.0789C21.3956 15.2446 20.7192 14.5682 19.8848 14.5682C19.0504 14.5682 18.374 15.2446 18.374 16.0789C18.374 16.9133 19.0504 17.5897 19.8848 17.5897Z\", stroke: \"currentColor\", strokeWidth: 1 }));\nexport default SvgCard;\n","import * as React from \"react\";\nconst SvgCheckWithCircle = (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\", { vectorEffect: \"non-scaling-stroke\", d: \"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M6.75 12.762L10.2385 15.75L17.25 9\", stroke: \"currentColor\" }));\nexport default SvgCheckWithCircle;\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 SvgClose = (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\", { vectorEffect: \"non-scaling-stroke\", d: \"M18.3599 5.64001L5.62988 18.37\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M18.3599 18.37L5.62988 5.64001\", stroke: \"currentColor\" }));\nexport default SvgClose;\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","import * as React from \"react\";\nconst SvgSearch = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Search_Base\", \"data-name\": \"Icon \\\\u2013 Search \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, fill: \"none\", 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: \"Search_icon\", \"data-name\": \"Search icon\", transform: \"translate(3.75 3.75)\" }, /* @__PURE__ */ React.createElement(\"circle\", { vectorEffect: \"non-scaling-stroke\", id: \"Ellipse_186\", \"data-name\": \"Ellipse 186\", cx: 6, cy: 6, r: 6, fill: \"none\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_556\", \"data-name\": \"Line 556\", x2: 6, y2: 6, transform: \"translate(10.5 10.5)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgSearch;\n","import * as React from \"react\";\nconst SvgWarning = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Warning_Base\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { clipPath: \"url(#clip0_841_1324)\" }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M11.9949 2.30237L0.802734 21.6977H23.1977L11.9949 2.30237Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M12.4336 10.5504L12.3373 14.4766H11.6632L11.5669 10.5504V9.51273H12.4336V10.5504ZM11.5883 18.2636V17.2687H12.4229V18.2636H11.5883Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" })), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"clipPath\", { id: \"clip0_841_1324\" }, /* @__PURE__ */ React.createElement(\"rect\", { width: 24, height: 21, fill: \"white\", transform: \"translate(0 1.5)\", strokeWidth: 1 }))));\nexport default SvgWarning;\n","import * as React from \"react\";\nconst SvgWarningWithCircle = (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\", { vectorEffect: \"non-scaling-stroke\", d: \"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M11.75 5.88423V4.75H12.25V5.88423L12.0485 13.0713H11.9515L11.75 5.88423ZM11.7994 18.25V16.9868H12.2253V18.25H11.7994Z\", stroke: \"currentColor\" }));\nexport default SvgWarningWithCircle;\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 { AddressActionsLoader } from '@/account/components/AccountLoaders';\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 isB2BFlow,\n permissions,\n loading,\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 noPermissionCreateAddresses:\n 'Account.AddressForm.notifications.noPermissionCreateAddresses',\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 // Show a skeleton in place of the button while eligibility checks (permissions/address list) are still in progress\n if (loading) {\n return (\n <div\n className={classes([\n 'account-actions-address',\n 'account-actions-address--loading',\n className,\n ])}\n data-testid=\"addressActionsLoaderWrapper\"\n >\n <AddressActionsLoader />\n </div>\n );\n }\n\n // Show no permission message for B2B users without create rights\n if (isB2BFlow && !permissions?.canCreateAddress) {\n return (\n <div\n className={classes([\n 'account-actions-address',\n 'account-actions-address--no-permission',\n className,\n ])}\n data-testid=\"noPermissionMessage\"\n >\n <span className=\"account-actions-address__title\">\n {translations.noPermissionCreateAddresses}\n </span>\n </div>\n );\n }\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 isB2BFlow,\n permissions,\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 // Disable delete button if B2B user doesn't have delete permission\n const isDeleteDisabled =\n submitLoading || (isB2BFlow && !permissions?.canDeleteAddress);\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 {addressData ? (\n <AddressCard\n minifiedView={minifiedView}\n addressData={addressData}\n keysSortOrder={keysSortOrder}\n />\n ) : null}\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={isDeleteDisabled} 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, Card, 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 paymentsMessage: `Account.${minifiedViewKey}.EmptyList.Payments.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 case 'payments':\n return {\n icon: Card,\n text: <p>{translations.paymentsMessage}</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 { FunctionComponent } from 'preact';\nimport { OrdersListActionProps } from '@/account/types';\nimport { Icon, Card } from '@adobe-commerce/elsie/components';\nimport { ChevronRight } from '@adobe-commerce/elsie/icons';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { checkIsFunction } from '@/account/lib/checkIsFunction';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/account/components/OrdersListAction/OrdersListAction.css';\n\ninterface IconConfig {\n size: '12' | '16' | '24' | '32' | '64' | '80' | undefined;\n stroke: '4' | '1' | '2' | '3' | undefined;\n}\n\nconst iconConfig: IconConfig = { size: '32', stroke: '2' };\n\nexport const OrdersListAction: FunctionComponent<OrdersListActionProps> = ({\n minifiedView,\n orderNumber,\n orderToken,\n routeOrdersList,\n routeOrderDetails,\n}) => {\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n viewAllOrdersButton: `Account.${minifiedViewKey}.OrdersList.viewAllOrdersButton`,\n ariaLabelLink: `Account.${minifiedViewKey}.OrdersList.ariaLabelLink`,\n });\n\n if (routeOrdersList) {\n return (\n <a\n className={classes([\n 'account-orders-list-action',\n ['account-orders-list-action--minifiedView', minifiedView],\n ])}\n data-testid=\"ordersListActionButtonMinifiedView\"\n href={routeOrdersList()}\n >\n <Card data-testid=\"ordersListActionMinifiedView\" variant=\"secondary\">\n <div className=\"account-orders-list-action__card-wrapper\">\n <p>{translations.viewAllOrdersButton}</p>\n\n <Icon source={ChevronRight} {...iconConfig} />\n </div>\n </Card>\n </a>\n );\n }\n\n return (\n <a\n aria-label={`${translations.ariaLabelLink} ${orderNumber ?? orderToken}`}\n href={\n checkIsFunction(routeOrderDetails)\n ? routeOrderDetails(orderNumber, orderToken)\n : '#'\n }\n className=\"account-orders-list-action\"\n data-testid=\"ordersListActionButton\"\n >\n <Icon source={ChevronRight} {...iconConfig} />\n </a>\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 { useState, useEffect } from 'preact/hooks';\n\nexport const useIsMobile = () => {\n const [isMobile, setIsMobile] = useState(window.innerWidth < 768);\n\n useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth < 768);\n };\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n return isMobile;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 { OrdersListCardProps } from '@/account/types';\nimport {\n Card,\n Image,\n ContentGrid,\n Price,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/account/components/OrdersListCard/OrdersListCard.css';\nimport { OrderItem } from '@/account/data/models';\nimport { useIsMobile } from '@/account/hooks/useIsMobile';\nimport { checkIsFunction } from '@/account/lib/checkIsFunction';\nimport { useMemo } from 'preact/hooks';\n\nexport const OrdersListCard: FunctionComponent<OrdersListCardProps> = ({\n placeholderImage,\n minifiedView,\n item,\n withThumbnails,\n children,\n slots,\n routeTracking,\n routeOrderProduct,\n routeReturnDetails,\n ...props\n}) => {\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n orderNumber: `Account.${minifiedViewKey}.OrdersList.OrdersListCard.orderNumber`,\n itemsAmount: `Account.${minifiedViewKey}.OrdersList.OrdersListCard.itemsAmount`,\n carrier: `Account.${minifiedViewKey}.OrdersList.OrdersListCard.carrier`,\n returnsText: `Account.${minifiedViewKey}.OrdersList.OrdersListCard.returns`,\n deliveryDateText: `Account.${minifiedViewKey}.OrdersList.OrdersListCard.orderDate`,\n placedByAdministrator: `Account.${minifiedViewKey}.OrdersList.OrdersListCard.placedByAdministrator`,\n });\n\n const isMobile = useIsMobile();\n const hasProductRoute = checkIsFunction(routeOrderProduct);\n\n const orderItemsImages = useMemo(() => {\n return (item?.items ?? []).map((orderItem: OrderItem, index) => {\n const defaultImageProps = {\n title: orderItem?.productName ?? '',\n src: orderItem?.product?.smallImage?.url || placeholderImage,\n alt: orderItem?.productName ?? '',\n width: 65,\n height: 65,\n loading: 'eager',\n } as const;\n\n return (\n <Slot\n key={`${index}_${orderItem.id}`}\n name=\"OrderItemImage\"\n slot={slots?.OrderItemImage}\n context={{\n data: orderItem,\n defaultImageProps,\n }}\n >\n {hasProductRoute ? (\n <a\n href={routeOrderProduct?.(orderItem) ?? ''}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <Image {...defaultImageProps} />\n </a>\n ) : (\n <Image {...defaultImageProps} />\n )}\n </Slot>\n );\n });\n }, [\n hasProductRoute,\n item.items,\n placeholderImage,\n routeOrderProduct,\n slots?.OrderItemImage,\n ]);\n\n return (\n <Card\n variant=\"secondary\"\n {...props}\n className={classes([\n 'account-orders-list-card',\n ['account-orders-list-card--full', item?.items?.length > 6],\n ])}\n >\n <div className=\"account-orders-list-card__content\">\n {slots?.OrdersListCard ? (\n <Slot\n data-testid={`ordersListCard${item.id}`}\n name=\"OrdersListCard\"\n slot={slots?.OrdersListCard}\n context={{ orderHistoryListItem: item }}\n />\n ) : (\n <>\n <div>{item?.status}</div>\n {item?.adminAssistedOrder > 0 && (\n <div>{translations.placedByAdministrator}</div>\n )}\n {slots?.OrdersListOrderTime ? (\n <Slot\n data-testid={`ordersListOrderTime${item.id}`}\n name=\"OrdersListOrderTime\"\n slot={slots?.OrdersListOrderTime}\n context={{\n deliveryDateText: translations.deliveryDateText,\n orderDate: item?.orderDate,\n orderTime: item?.orderTime,\n }}\n />\n ) : (\n <p>\n {translations.deliveryDateText} {item?.orderDate}\n </p>\n )}\n\n <p>\n {translations.orderNumber} {item.number}\n </p>\n {item?.shipments?.map((element) => {\n return element?.tracking?.map((item) => {\n const trackingRoute = routeTracking?.(item);\n\n return (\n <p key={element.id} data-testid={item.number}>\n <span>{`${\n translations.carrier\n } ${item.carrier.toLocaleUpperCase()} `}</span>\n {trackingRoute ? (\n <a\n href={trackingRoute}\n target={'_blank'}\n className=\"account-orders-list-card__content--track_number\"\n rel=\"noreferrer\"\n >\n {item.number}\n </a>\n ) : (\n <span className=\"account-orders-list-card__content--track_number\">\n {item.number}\n </span>\n )}\n </p>\n );\n });\n })}\n {item?.returns && item.returns?.length ? (\n <p key={item.id} data-testid={item.number}>\n <span>{translations.returnsText} </span>\n {item?.returns?.map((returnData) => (\n <span key={returnData.uid} data-testid={returnData.number}>\n <a\n href={\n routeReturnDetails?.({\n orderNumber: item.number,\n orderToken: item.token,\n returnNumber: returnData.number,\n }) ?? '#'\n }\n className=\"account-orders-list-card__content--return_number\"\n >\n {returnData.number}{' '}\n </a>\n </span>\n ))}\n </p>\n ) : null}\n <p>\n <Price\n amount={item?.total?.grandTotal?.value ?? 0}\n currency={item?.total?.grandTotal?.currency}\n weight=\"normal\"\n size=\"medium\"\n />\n </p>\n <p data-testid={'itemsAmount'}>\n {item?.items?.length\n ? item?.items?.reduce((sum, element) => {\n const quantityOrdered = element?.quantityOrdered || 0;\n return sum + quantityOrdered;\n }, 0)\n : 0}{' '}\n {translations.itemsAmount}\n </p>\n {item?.items?.length ? (\n <ul className=\"account-orders-list-card__product-list\">\n {item.items.map((element, index) => {\n if (index >= 0 && index < 10) {\n return (\n <li\n key={`${index}_${element.id}`}\n className={\n 'account-orders-list-card__content--product-name'\n }\n >\n <span className=\"account-orders-list-card__content--quantity\">\n {element?.quantityOrdered > 1\n ? element?.quantityOrdered\n : null}{' '}\n </span>\n {element?.productName.replaceAll('-', ' ')}\n </li>\n );\n }\n\n if (index === 11) return <li key={'ellipsis'}>...</li>;\n })}\n </ul>\n ) : null}\n </>\n )}\n </div>\n {withThumbnails && item?.items?.length ? (\n <ContentGrid\n maxColumns={isMobile ? 3 : 9}\n emptyGridContent={<></>}\n className={classes([\n 'account-orders-list-card__images',\n ['account-orders-list-card__images-3', isMobile],\n ])}\n data-testid=\"ordersListCardImages\"\n >\n {orderItemsImages}\n </ContentGrid>\n ) : null}\n\n <div className=\"account-orders-list-card__actions\">{children}</div>\n </Card>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 { AddressContextMode } from '@/account/types';\n\ntype AddressPermissionsFlags = {\n canAccessAddressBook?: boolean;\n canViewAddress?: boolean;\n loading?: boolean;\n};\n\nexport const resolveAddressesContextMode = (\n contextMode?: AddressContextMode,\n selectable?: boolean\n): AddressContextMode => {\n return contextMode || (selectable ? 'checkout' : 'addressBook');\n};\n\nexport const resolveEnforceB2BPermissions = (\n resolvedContextMode: AddressContextMode\n): boolean => {\n return resolvedContextMode === 'addressBook';\n};\n\nexport const resolveIsCheckoutContext = (\n resolvedContextMode: AddressContextMode\n): boolean => {\n return resolvedContextMode === 'checkout';\n};\n\nexport const resolveIsB2BCandidate = (\n b2bEnabled?: boolean,\n isB2BCustomer?: boolean\n): boolean => {\n return Boolean(b2bEnabled) && Boolean(isB2BCustomer);\n};\n\nexport const resolveHasB2BContainerAccess = (\n permissions?: AddressPermissionsFlags\n): boolean => {\n return (\n Boolean(permissions?.canAccessAddressBook) &&\n Boolean(permissions?.canViewAddress)\n );\n};\n\nexport const resolveIsB2BWithoutViewAccess = ({\n isB2BCandidate,\n isCompanyAddressBookEnabled,\n enforceB2BPermissions,\n permissions,\n hasB2BContainerAccess,\n}: {\n isB2BCandidate: boolean;\n isCompanyAddressBookEnabled: boolean;\n enforceB2BPermissions: boolean;\n permissions?: AddressPermissionsFlags;\n hasB2BContainerAccess: boolean;\n}): boolean => {\n return (\n Boolean(isB2BCandidate) &&\n Boolean(isCompanyAddressBookEnabled) &&\n enforceB2BPermissions &&\n !permissions?.loading &&\n !hasB2BContainerAccess\n );\n};\n\nexport const resolveIsB2BFlow = ({\n isB2BCandidate,\n isCompanyAddressBookEnabled,\n isB2BWithoutViewAccess,\n}: {\n isB2BCandidate: boolean;\n isCompanyAddressBookEnabled: boolean;\n isB2BWithoutViewAccess: boolean;\n}): boolean => {\n return (\n Boolean(isB2BCandidate) &&\n (isCompanyAddressBookEnabled || isB2BWithoutViewAccess)\n );\n};\n\nexport const resolveIsAddressSelectionLocked = ({\n isCheckoutContext,\n isB2BFlow,\n selectable,\n isCustomShippingAddressAllowed,\n selectShipping,\n selectBilling,\n}: {\n isCheckoutContext: boolean;\n isB2BFlow: boolean;\n selectable?: boolean;\n isCustomShippingAddressAllowed: boolean;\n selectShipping?: boolean;\n selectBilling?: boolean;\n}): boolean => {\n // \"Allow Custom Shipping Address\" only ever unlocks shipping selection —\n // a billing-only instance has no equivalent flag and must stay locked to company addresses.\n const isBillingOnlySelection = Boolean(selectBilling) && !selectShipping;\n\n return (\n isCheckoutContext &&\n Boolean(isB2BFlow) &&\n Boolean(selectable) &&\n (isBillingOnlySelection || !isCustomShippingAddressAllowed)\n );\n};\n\nexport const shouldSkipAddressFetchForCustomerType = ({\n b2bEnabled,\n customerTypeLoading,\n}: {\n b2bEnabled?: boolean;\n customerTypeLoading: boolean;\n}): boolean => {\n return Boolean(b2bEnabled) && customerTypeLoading;\n};\n\nexport const shouldSkipAddressFetchForPermissions = ({\n isB2BCandidate,\n enforceB2BPermissions,\n permissionsLoading,\n}: {\n isB2BCandidate: boolean;\n enforceB2BPermissions: boolean;\n permissionsLoading?: boolean;\n}): boolean => {\n return isB2BCandidate && enforceB2BPermissions && Boolean(permissionsLoading);\n};\n\nexport const shouldReturnEmptyForRestrictedB2B = ({\n isB2BCandidate,\n enforceB2BPermissions,\n hasB2BContainerAccess,\n}: {\n isB2BCandidate: boolean;\n enforceB2BPermissions: boolean;\n hasB2BContainerAccess: boolean;\n}): boolean => {\n return isB2BCandidate && enforceB2BPermissions && !hasB2BContainerAccess;\n};\n\nexport const shouldApplyB2BAddressBookFlow = (\n isB2BCandidate: boolean\n): boolean => {\n return isB2BCandidate;\n};\n\nexport const shouldReturnEmptyWithinAddressBook = ({\n enforceB2BPermissions,\n hasB2BContainerAccess,\n}: {\n enforceB2BPermissions: boolean;\n hasB2BContainerAccess: boolean;\n}): boolean => {\n return enforceB2BPermissions && !hasB2BContainerAccess;\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 return copyAddressList.sort(\n (a, b) => Number(b.defaultBilling) - Number(a.defaultBilling)\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 CompanyAddressTypeEnum {\n SHIPPING = 'SHIPPING',\n BILLING = 'BILLING',\n}\n\nexport type CompanyAddressType = `${CompanyAddressTypeEnum}`;\n\nexport interface CompanyAddressAttribute {\n code?: string;\n attribute_code?: string;\n value?: string | number | boolean | null;\n}\n\nexport interface CompanyAddressSchema {\n id: string;\n company_id: string;\n address_type: CompanyAddressType;\n is_default: boolean;\n company?: string;\n city?: string;\n country_code?: string;\n street?: string[];\n telephone?: string;\n postcode?: string;\n firstname?: string;\n lastname?: string;\n middlename?: string;\n nickname?: string;\n prefix?: string;\n suffix?: string;\n fax?: string;\n vat_id?: string;\n uid?: string;\n region_id?: string | number;\n region?: {\n region?: string;\n region_code?: string;\n region_id?: string | number;\n };\n custom_attributes?: CompanyAddressAttribute[];\n extension_attributes?: CompanyAddressAttribute[];\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 '@/account/data/models';\nimport {\n CompanyAddressTypeEnum,\n type CompanyAddressType,\n} from '@/account/types/api/companyAddress.types';\n\ntype FilterB2BCheckoutAddressesByTypeArgs = {\n addresses: CustomerAddressesModel[];\n isCheckoutContext: boolean;\n selectable?: boolean;\n selectShipping?: boolean;\n selectBilling?: boolean;\n};\n\nconst resolveAddressType = (\n address: CustomerAddressesModel\n): CompanyAddressType | undefined => {\n if (\n address?.addressType === CompanyAddressTypeEnum.SHIPPING ||\n address?.addressType === CompanyAddressTypeEnum.BILLING\n ) {\n return address.addressType;\n }\n\n const hasDefaultShipping = Boolean(address?.defaultShipping);\n const hasDefaultBilling = Boolean(address?.defaultBilling);\n\n if (hasDefaultShipping === hasDefaultBilling) {\n return undefined;\n }\n\n return hasDefaultShipping\n ? CompanyAddressTypeEnum.SHIPPING\n : CompanyAddressTypeEnum.BILLING;\n};\n\nexport const filterB2BCheckoutAddressesByType = ({\n addresses,\n isCheckoutContext,\n selectable,\n selectShipping,\n selectBilling,\n}: FilterB2BCheckoutAddressesByTypeArgs): CustomerAddressesModel[] => {\n if (!isCheckoutContext || !selectable) {\n return addresses;\n }\n\n const isShippingOnly = Boolean(selectShipping && !selectBilling);\n const isBillingOnly = Boolean(selectBilling && !selectShipping);\n\n if (!isShippingOnly && !isBillingOnly) {\n return addresses;\n }\n\n const expectedType: CompanyAddressType = isShippingOnly\n ? CompanyAddressTypeEnum.SHIPPING\n : CompanyAddressTypeEnum.BILLING;\n\n return addresses.filter(\n (address) => resolveAddressType(address) === expectedType\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 } from 'preact/hooks';\nimport { getCustomerCompanyContext } from '@/account/api/getCustomerCompanyContext';\n\n/**\n * Hook to determine customer type (B2B vs B2C).\n * Pass `enabled: false` to skip the company-context request entirely\n * (e.g. when the host page already knows B2B is off for this storefront).\n */\nexport const useCustomerType = (enabled: boolean = true) => {\n const [loading, setLoading] = useState<boolean>(enabled);\n const [isB2BCustomer, setIsB2BCustomer] = useState<boolean>(false);\n\n useEffect(() => {\n if (!enabled) {\n setIsB2BCustomer(false);\n setLoading(false);\n return;\n }\n\n let isSubscribed = true;\n setLoading(true);\n\n getCustomerCompanyContext()\n .then((isB2BContext) => {\n if (!isSubscribed) return;\n setIsB2BCustomer(isB2BContext);\n })\n .catch((error) => {\n console.error('[Account][useCustomerType] Failed to resolve company context', error);\n\n if (!isSubscribed) return;\n setIsB2BCustomer(false);\n })\n .finally(() => {\n if (!isSubscribed) return;\n setLoading(false);\n });\n\n return () => {\n isSubscribed = false;\n };\n }, [enabled]);\n\n return {\n isB2BCustomer,\n loading,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 } from 'preact/hooks';\nimport { getCustomerRolePermissions } from '@/account/api/getCustomerRolePermissions';\nimport {\n getDefaultCompanyAddressPermissions,\n} from '@/account/lib/companyAddressPermissionsResolver';\n\n/**\n * Company address-specific permissions interface\n */\nexport interface CompanyAddressPermissions {\n canAccessAddressBook: boolean;\n canViewAddress: boolean;\n canCreateAddress: boolean;\n canEditAddress: boolean;\n canDeleteAddress: boolean;\n canSetDefaultAddress: boolean;\n loading: boolean;\n}\n\n/**\n * Hook to fetch company address management permissions.\n * Pass `enabled: false` to skip the role-permissions request entirely\n * (e.g. when the host page already knows B2B is off for this storefront).\n */\nexport const useCompanyAddressPermissions = (\n enabled: boolean = true\n): CompanyAddressPermissions => {\n const [loading, setLoading] = useState<boolean>(enabled);\n const [permissions, setPermissions] = useState<\n Omit<CompanyAddressPermissions, 'loading'>\n >(getDefaultCompanyAddressPermissions());\n\n useEffect(() => {\n if (!enabled) {\n setPermissions(getDefaultCompanyAddressPermissions());\n setLoading(false);\n return;\n }\n\n let isSubscribed = true;\n setLoading(true);\n\n getCustomerRolePermissions()\n .then((resolvedPermissions) => {\n if (!isSubscribed) return;\n setPermissions(resolvedPermissions);\n })\n .catch((error) => {\n console.error(\n '[Account][useCompanyAddressPermissions] Failed to resolve role permissions',\n error\n );\n\n if (!isSubscribed) return;\n\n setPermissions(getDefaultCompanyAddressPermissions());\n })\n .finally(() => {\n if (!isSubscribed) return;\n setLoading(false);\n });\n\n return () => {\n isSubscribed = false;\n };\n }, [enabled]);\n\n return {\n ...permissions,\n loading,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 '@/account/data/models';\nimport normalizeGetAddressData from '@/account/lib/normalizeGetAddressData';\n\nexport const 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 sanitizeB2BCheckoutAddressPayload = (\n payloadData: Record<string, any>\n): Record<string, any> => {\n const region = payloadData?.region;\n\n if (!region || typeof region !== 'object') {\n return payloadData;\n }\n\n const sanitizedRegion = { ...region } as Record<string, any>;\n const rawRegionId = sanitizedRegion.regionId;\n\n if (\n rawRegionId === '' ||\n rawRegionId === null ||\n rawRegionId === undefined\n ) {\n delete sanitizedRegion.regionId;\n } else if (typeof rawRegionId === 'string') {\n const trimmedRegionId = rawRegionId.trim();\n\n if (!trimmedRegionId || !/^\\d+$/.test(trimmedRegionId)) {\n delete sanitizedRegion.regionId;\n } else {\n sanitizedRegion.regionId = Number(trimmedRegionId);\n }\n } else if (typeof rawRegionId === 'number' && !Number.isFinite(rawRegionId)) {\n delete sanitizedRegion.regionId;\n }\n\n return {\n ...payloadData,\n region: sanitizedRegion,\n };\n};\n\nexport const resolveAddressSelectionPayloadData = ({\n item,\n isCheckoutContext,\n selectable,\n isB2BFlow,\n}: {\n item?: CustomerAddressesModel;\n isCheckoutContext: boolean;\n selectable?: boolean;\n isB2BFlow: boolean;\n}) => {\n const normalizedData = normalizeGetAddressData(item);\n\n if (isCheckoutContext && selectable && isB2BFlow) {\n const payload = { ...(normalizedData as Record<string, any>) };\n\n // Hand the selected address to checkout as a COMPANY address reference.\n // When the company address book is enabled the backend rejects both a new\n // address payload (\"Use a company address instead\") and a customer address\n // (\"Customer address cannot be used when the company address book is\n // enabled\") — it only accepts `company_address_id`, which is this id.\n // `id` is dropped so downstream can't mistake it for a customer address;\n // the remaining fields stay for display and address events.\n if (payload.id) {\n payload.companyAddressId = payload.id;\n }\n delete payload.id;\n\n const sanitizedPayload = sanitizeB2BCheckoutAddressPayload(payload);\n\n return {\n selectedItem: item,\n data: sanitizedPayload,\n };\n }\n\n return {\n selectedItem: item,\n data: normalizedData,\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 getCompanyAddressBook,\n deleteCompanyAddress,\n} from '@/account/api/';\nimport { CustomerAddressesModel } from '@/account/data/models';\nimport { checkIsFunction } from '@/account/lib/checkIsFunction';\nimport { KeysSortOrderProps, useAddressesProps } from '@/account/types';\nimport {\n resolveAddressesContextMode,\n resolveEnforceB2BPermissions,\n resolveHasB2BContainerAccess,\n resolveIsAddressSelectionLocked,\n resolveIsB2BCandidate,\n resolveIsB2BFlow,\n resolveIsB2BWithoutViewAccess,\n resolveIsCheckoutContext,\n shouldApplyB2BAddressBookFlow,\n shouldReturnEmptyWithinAddressBook,\n shouldSkipAddressFetchForCustomerType,\n shouldSkipAddressFetchForPermissions,\n} from '@/account/lib/addressFlowRules';\nimport { manageAddressDeletion } from '@/account/lib/manageAddressDeletion';\nimport { defaultAttributePreset } from '@/account/configs/defaultAttributePreset.config';\nimport { convertToCamelCase } from '@/account/lib/convertCase';\nimport sortingAddressesList from '@/account/lib/sortingAddressesList';\nimport { filterB2BCheckoutAddressesByType } from '../../lib/filterB2BCheckoutAddressesByType';\nimport { useCustomerType } from '@/account/hooks/useCustomerType';\nimport { useCompanyAddressPermissions } from '@/account/hooks/useCompanyAddressPermissions';\nimport {\n isEmpty,\n resolveAddressSelectionPayloadData,\n} from '@/account/lib/addressSelectionPayloadRules';\n\nexport const useAddresses = ({\n b2bEnabled,\n selectShipping,\n selectBilling,\n selectable,\n contextMode,\n defaultSelectAddressId,\n onAddressData,\n minifiedView,\n routeAddressesPage,\n onSuccess,\n}: useAddressesProps) => {\n // B2B context detection\n const { isB2BCustomer, loading: customerTypeLoading } = useCustomerType(\n Boolean(b2bEnabled)\n );\n const permissions = useCompanyAddressPermissions(Boolean(b2bEnabled));\n const isB2BCandidate = resolveIsB2BCandidate(b2bEnabled, isB2BCustomer);\n const resolvedContextMode = resolveAddressesContextMode(\n contextMode,\n selectable\n );\n const enforceB2BPermissions =\n resolveEnforceB2BPermissions(resolvedContextMode);\n const isCheckoutContext = resolveIsCheckoutContext(resolvedContextMode);\n\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 const [isCompanyAddressBookEnabled, setIsCompanyAddressBookEnabled] =\n useState<boolean>(false);\n const [isCustomShippingAddressAllowed, setIsCustomShippingAddressAllowed] =\n useState<boolean>(true);\n\n const hasB2BContainerAccess = resolveHasB2BContainerAccess(permissions);\n const isB2BWithoutViewAccess = resolveIsB2BWithoutViewAccess({\n isB2BCandidate,\n isCompanyAddressBookEnabled,\n enforceB2BPermissions,\n permissions,\n hasB2BContainerAccess,\n });\n\n // Company address flow is active only when company address book is enabled.\n const isB2BFlow = resolveIsB2BFlow({\n isB2BCandidate,\n isCompanyAddressBookEnabled,\n isB2BWithoutViewAccess,\n });\n const isAddressSelectionLocked = resolveIsAddressSelectionLocked({\n isCheckoutContext,\n isB2BFlow,\n selectable,\n isCustomShippingAddressAllowed,\n selectShipping,\n selectBilling,\n });\n\n const applyAttributesSortOrder = useCallback(\n (attributesFormResponse: any[] | undefined) => {\n if (!attributesFormResponse) return;\n\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 );\n\n const getAddressesList = useCallback(async () => {\n const shouldWaitForCustomerType = shouldSkipAddressFetchForCustomerType({\n b2bEnabled,\n customerTypeLoading,\n });\n\n const shouldWaitForPermissions = shouldSkipAddressFetchForPermissions({\n isB2BCandidate,\n enforceB2BPermissions,\n permissionsLoading: permissions?.loading,\n });\n\n if (shouldWaitForCustomerType || shouldWaitForPermissions) {\n setLoading(true);\n return;\n }\n\n setLoading(true);\n\n try {\n if (shouldApplyB2BAddressBookFlow(isB2BCandidate)) {\n try {\n const result = await getCompanyAddressBook();\n const isAddressBookEnabled = Boolean(result?.addressBookEnabled);\n const allowCustomShippingAddress = Boolean(\n result?.addressBookCustomShippingAddressEnabled\n );\n\n setIsCompanyAddressBookEnabled(isAddressBookEnabled);\n setIsCustomShippingAddressAllowed(allowCustomShippingAddress);\n\n if (isAddressBookEnabled) {\n if (\n shouldReturnEmptyWithinAddressBook({\n enforceB2BPermissions,\n hasB2BContainerAccess,\n })\n ) {\n setAddressesList([]);\n return;\n }\n\n const attributesFormResponse = await getAttributesForm('shortRequest');\n applyAttributesSortOrder(attributesFormResponse);\n\n const addressItems = result?.addresses?.items ?? [];\n const normalizedAddressItems =\n filterB2BCheckoutAddressesByType({\n addresses: addressItems,\n isCheckoutContext,\n selectable,\n selectShipping,\n selectBilling,\n });\n\n if (minifiedView) {\n const defaultAddresses = normalizedAddressItems.filter(\n (el) => Boolean(el.defaultShipping) || Boolean(el.defaultBilling)\n );\n\n const addressesToSet = defaultAddresses.length\n ? defaultAddresses\n : normalizedAddressItems.slice(-1);\n\n setAddressesList(addressesToSet);\n } else {\n setAddressesList(normalizedAddressItems);\n }\n\n return;\n }\n } catch {\n // Graceful fallback: if company address-book endpoint is unavailable\n // or access is denied, continue with personal address flow.\n setIsCompanyAddressBookEnabled(false);\n setIsCustomShippingAddressAllowed(true);\n }\n }\n\n setIsCompanyAddressBookEnabled(false);\n setIsCustomShippingAddressAllowed(true);\n\n // B2C: Existing flow unchanged\n\n const [attributesFormResponse, addressResponse] = await Promise.all([\n getAttributesForm('shortRequest'),\n getCustomerAddress(),\n ]);\n\n applyAttributesSortOrder(attributesFormResponse);\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 } catch {\n // Keep UI behavior stable without emitting additional debug logs.\n } finally {\n setLoading(false);\n }\n }, [\n b2bEnabled,\n customerTypeLoading,\n minifiedView,\n isB2BCandidate,\n isCheckoutContext,\n selectable,\n selectShipping,\n selectBilling,\n enforceB2BPermissions,\n hasB2BContainerAccess,\n permissions?.loading,\n applyAttributesSortOrder,\n ]);\n\n useEffect(() => {\n getAddressesList();\n }, [getAddressesList]);\n\n useEffect(() => {\n if (!addressesList.length) {\n if (isAddressSelectionLocked) {\n setSelectedAddressOption('');\n setAddNewAddress(false);\n onAddressData?.({\n data: {},\n isDataValid: false,\n } as any);\n }\n\n return;\n }\n\n // A non-empty list always wins: prefer the requested/default address, falling\n // back to the type-default (sortingAddressesList puts it first). Only an empty\n // list (handled above) should ever fall back to opening the \"new address\" form —\n // defaultSelectAddressId === 0 must not override an address that already exists.\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 { selectedItem, data } = resolveAddressSelectionPayloadData({\n item,\n isCheckoutContext,\n selectable,\n isB2BFlow,\n });\n\n const normalizeAddressData = {\n data,\n isDataValid: !isEmpty(selectedItem),\n };\n\n const selectedValue = item?.id?.toString() || item?.uid || '';\n setSelectedAddressOption(selectedValue);\n\n onAddressData?.(normalizeAddressData);\n }, [\n addressesList,\n defaultSelectAddressId,\n onAddressData,\n selectBilling,\n selectShipping,\n isAddressSelectionLocked,\n isCheckoutContext,\n selectable,\n isB2BFlow,\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\n if (isAddressSelectionLocked && value === '0') {\n return;\n }\n\n const nextSibling = (event?.target as HTMLInputElement)\n .nextSibling as HTMLElement;\n\n setSelectedAddressOption(value);\n\n const { data } = resolveAddressSelectionPayloadData({\n item: item as CustomerAddressesModel | undefined,\n isCheckoutContext,\n selectable,\n isB2BFlow,\n });\n\n const normalizeAddressData = {\n data,\n isDataValid: !isEmpty(data),\n };\n\n onAddressData?.(normalizeAddressData);\n setAddNewAddress(value === '0');\n\n if (nextSibling) {\n nextSibling.focus();\n window.scrollBy(0, 100);\n }\n },\n [\n onAddressData,\n isAddressSelectionLocked,\n isCheckoutContext,\n selectable,\n isB2BFlow,\n ]\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 try {\n if (isB2BFlow) {\n if (!permissions?.canDeleteAddress) return;\n\n // B2B: Use company address delete API\n await deleteCompanyAddress(addressId);\n } else {\n // B2C: Existing flow unchanged\n await manageAddressDeletion(addressId, addressesList);\n await removeCustomerAddress(+addressId);\n }\n\n onCloseBtnClick();\n await getAddressesList();\n } catch {\n // Keep UI behavior stable without emitting additional debug logs.\n } finally {\n setSubmitLoading(false);\n }\n }, [\n addressesList,\n addressId,\n onCloseBtnClick,\n getAddressesList,\n isB2BFlow,\n permissions?.canDeleteAddress,\n ]);\n\n const closeNewAddressForm = useCallback(() => {\n setAddNewAddress(false);\n }, []);\n\n const redirectToAddressesRoute = useCallback(() => {\n if (isAddressSelectionLocked) {\n return;\n }\n\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 }, [\n addNewAddress,\n routeAddressesPage,\n minifiedView,\n isAddressSelectionLocked,\n ]);\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 permissions,\n isB2BFlow,\n enforceB2BPermissions,\n isAddressSelectionLocked,\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, LiveRegion } 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 b2bEnabled,\n slots,\n title = '',\n headerLevel,\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 fieldIdPrefix,\n contextMode,\n }) => {\n const translations = useText({\n containerTitle: `Account.${minifiedViewKey}.Addresses.containerTitle`,\n differentAddressButton: `Account.${minifiedViewKey}.Addresses.differentAddressButton`,\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 loading: 'Account.Addresses.loading',\n loaded: 'Account.Addresses.loaded',\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 isAddressSelectionLocked,\n permissions,\n isB2BFlow,\n enforceB2BPermissions,\n } = useAddresses({\n b2bEnabled,\n defaultSelectAddressId,\n minifiedView,\n routeAddressesPage,\n onSuccess,\n onAddressData,\n selectShipping,\n selectBilling,\n selectable,\n contextMode,\n });\n\n const shouldEnforceB2BPermissions = enforceB2BPermissions !== false;\n const aclRestrictedB2BFlow =\n Boolean(isB2BFlow) && shouldEnforceB2BPermissions;\n\n const headerTitle = title || translations.containerTitle;\n const hasDefaultShippingAddress = addressesList.some((address) =>\n Boolean(address.defaultShipping)\n );\n const hasDefaultBillingAddress = addressesList.some((address) =>\n Boolean(address.defaultBilling)\n );\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 && !isAddressSelectionLocked) {\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 fieldIdPrefix={fieldIdPrefix}\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 hasDefaultShippingAddress={hasDefaultShippingAddress}\n hasDefaultBillingAddress={hasDefaultBillingAddress}\n onCloseBtnClick={closeNewAddressForm}\n onChange={onAddressData}\n onError={onError}\n onSubmit={onSubmit}\n onSuccess={handleOnSuccess}\n isB2BFlow={isB2BFlow}\n enforceB2BPermissions={shouldEnforceB2BPermissions}\n permissions={permissions}\n />\n </div>\n );\n } else if (sortedAddressesList.length && !isAddressSelectionLocked) {\n addressesFooterSection = (\n <AddressActions\n selectable={selectable}\n minifiedView={minifiedView}\n addNewAddress={addNewAddress}\n routeAddressesPage={redirectToAddressesRoute}\n isB2BFlow={aclRestrictedB2BFlow}\n permissions={permissions}\n loading={loading}\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={translations.differentAddressButton}\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 fieldIdPrefix={fieldIdPrefix}\n isOpen={addressId === item.id && isFormRendered}\n addressFormId={addressId}\n inputsDefaultValueSet={item}\n addressesFormTitle={translations.editAddressFormTitle}\n showShippingCheckBox={showShippingCheckBox}\n showBillingCheckBox={showBillingCheckBox}\n hasDefaultShippingAddress={hasDefaultShippingAddress}\n hasDefaultBillingAddress={hasDefaultBillingAddress}\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 isB2BFlow={isB2BFlow}\n enforceB2BPermissions={shouldEnforceB2BPermissions}\n permissions={permissions}\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 isB2BFlow={aclRestrictedB2BFlow}\n permissions={permissions}\n />\n )}\n </Fragment>\n ))}\n\n <div className=\"account-addresses__footer\">\n {addNewAddress ? (\n <Card variant=\"secondary\">\n <AddressForm\n slots={slots}\n fieldIdPrefix={fieldIdPrefix}\n isOpen={addNewAddress}\n addressesFormTitle={translations.newAddressFormTitle}\n inputsDefaultValueSet={inputsDefaultValueSet}\n showShippingCheckBox={!!addressesList?.length}\n showBillingCheckBox={!!addressesList?.length}\n hasDefaultShippingAddress={hasDefaultShippingAddress}\n hasDefaultBillingAddress={hasDefaultBillingAddress}\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 isB2BFlow={isB2BFlow}\n enforceB2BPermissions={shouldEnforceB2BPermissions}\n permissions={permissions}\n />\n </Card>\n ) : (\n <AddressActions\n minifiedView={minifiedView}\n addNewAddress={addNewAddress}\n routeAddressesPage={redirectToAddressesRoute}\n isB2BFlow={aclRestrictedB2BFlow}\n permissions={permissions}\n loading={loading}\n />\n )}\n </div>\n </>\n );\n }\n\n return (\n <div>\n {withHeader ? (\n <Header\n title={headerTitle}\n divider={!minifiedView}\n className={classes([\n 'account-addresses-header-title',\n ['account-addresses-header', minifiedView],\n ])}\n level={headerLevel ?? (minifiedView ? 2 : 1)}\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 isB2BFlow={aclRestrictedB2BFlow}\n permissions={permissions}\n />\n <LiveRegion message={loading ? translations.loading : translations.loaded} />\n {loading ? (\n <CardLoader testId={'addressSkeletonLoader'} withCard={false} />\n ) : !selectable ? (\n <EmptyList\n isEmpty={!addressesList?.length}\n typeList=\"address\"\n minifiedView={minifiedView}\n />\n ) : isAddressSelectionLocked ? (\n <EmptyList\n isEmpty={!addressesList?.length}\n typeList=\"address\"\n minifiedView={minifiedView}\n />\n ) : (\n <AddressForm\n slots={slots}\n hideActionFormButtons={hideActionFormButtons}\n fieldIdPrefix={fieldIdPrefix}\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 hasDefaultShippingAddress={hasDefaultShippingAddress}\n hasDefaultBillingAddress={hasDefaultBillingAddress}\n onChange={onAddressData}\n onCloseBtnClick={closeNewAddressForm}\n onError={onError}\n onSubmit={onSubmit}\n onSuccess={handleOnSuccess}\n isB2BFlow={isB2BFlow}\n enforceB2BPermissions={shouldEnforceB2BPermissions}\n permissions={permissions}\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\nconst defaultTextField = {\n entityType: 'CUSTOMER_ADDRESS',\n isUnique: false,\n options: [],\n multilineCount: 0,\n validateRules: [],\n defaultValue: '',\n fieldType: FieldEnumList.TEXT,\n className: '',\n required: false,\n orderNumber: 50,\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\nexport const defaultAddressTypeShippingCheckBox = {\n ...defaultCheckBox,\n label: 'Shipping Address',\n name: 'address_type_shipping',\n id: 'address_type_shipping',\n code: 'address_type_shipping',\n customUpperCode: 'addressTypeShipping',\n orderNumber: 90,\n};\n\nexport const defaultAddressTypeBillingCheckBox = {\n ...defaultCheckBox,\n label: 'Billing Address',\n name: 'address_type_billing',\n id: 'address_type_billing',\n code: 'address_type_billing',\n customUpperCode: 'addressTypeBilling',\n orderNumber: 91,\n};\n\nexport const defaultIsDefaultCheckBox = {\n ...defaultCheckBox,\n label: 'Set as default address',\n name: 'is_default',\n id: 'is_default',\n code: 'is_default',\n customUpperCode: 'isDefault',\n orderNumber: 92,\n};\n\nexport const defaultNicknameField = {\n ...defaultTextField,\n label: 'Nickname',\n name: 'nickname',\n id: 'nickname',\n code: 'nickname',\n customUpperCode: 'nickname',\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 keepDefaultCheckBoxesOnEdit?: boolean;\n}\n\nexport default ({\n fields,\n addressId,\n countryOptions,\n disableField,\n regionOptions,\n isRequiredRegion,\n isRequiredPostCode,\n keepDefaultCheckBoxesOnEdit,\n}: ProcessFieldsProps): Field[] => {\n const result = fields\n .filter((item) => {\n const defaultShippingBilling =\n addressId &&\n !keepDefaultCheckBoxesOnEdit &&\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 'addressType',\n 'addressTypeShipping',\n 'addressTypeBilling',\n 'isDefault',\n 'defaultBilling',\n 'defaultShipping',\n 'fax',\n 'firstName',\n 'lastName',\n 'nickname',\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 2026 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 '@/account/data/models';\n\ntype AddressPermissionFlags = {\n canCreateAddress?: boolean;\n canSetDefaultAddress?: boolean;\n loading?: boolean;\n};\n\nexport type B2BDefaultCheckBoxRules = {\n showShipping: boolean;\n showBilling: boolean;\n shippingDefaultValue: boolean;\n billingDefaultValue: boolean;\n};\n\nexport type AddressValidationAlertKey =\n | 'noPermissionEditAddresses'\n | 'noPermissionCreateAddresses'\n | 'companyAddressSingleDefaultType';\n\nexport const resolveShouldEnforceB2BPermissions = (\n isB2BFlow?: boolean,\n enforceB2BPermissions?: boolean\n): boolean => {\n return Boolean(isB2BFlow) && enforceB2BPermissions !== false;\n};\n\nexport const resolveTemporaryCheckoutAddressMode = ({\n isB2BFlow,\n shouldEnforceB2BPermissions,\n permissions,\n}: {\n isB2BFlow?: boolean;\n shouldEnforceB2BPermissions: boolean;\n permissions?: AddressPermissionFlags;\n}): boolean => {\n return (\n Boolean(isB2BFlow) &&\n !shouldEnforceB2BPermissions &&\n permissions?.loading === false &&\n permissions?.canCreateAddress === false\n );\n};\n\nexport const hasSingleDefaultTypeViolation = (\n isB2BFlow: boolean | undefined,\n requestPayload: CustomerAddressesModel\n): boolean => {\n const hasConflictingTypeSelection =\n Boolean(requestPayload.addressTypeShipping) &&\n Boolean(requestPayload.addressTypeBilling);\n\n return (\n Boolean(isB2BFlow) &&\n (hasConflictingTypeSelection ||\n (Boolean(requestPayload.defaultShipping) &&\n Boolean(requestPayload.defaultBilling)))\n );\n};\n\nexport const shouldOmitDefaultFlagsFromPayload = (\n shouldEnforceB2BPermissions: boolean,\n canSetDefaultAddress?: boolean\n): boolean => {\n return shouldEnforceB2BPermissions && !canSetDefaultAddress;\n};\n\nexport const canSetAddressAsDefault = ({\n requestPayload,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress,\n}: {\n requestPayload: CustomerAddressesModel;\n shouldEnforceB2BPermissions: boolean;\n canSetDefaultAddress?: boolean;\n}): boolean => {\n const shouldSetAsDefault =\n typeof requestPayload.isDefault === 'boolean'\n ? requestPayload.isDefault\n : Boolean(requestPayload.defaultShipping) ||\n Boolean(requestPayload.defaultBilling);\n\n return (\n shouldSetAsDefault &&\n (!shouldEnforceB2BPermissions || Boolean(canSetDefaultAddress))\n );\n};\n\nexport const canSetDefaultAddressInForm = ({\n isTemporaryCheckoutAddressMode,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress,\n}: {\n isTemporaryCheckoutAddressMode: boolean;\n shouldEnforceB2BPermissions: boolean;\n canSetDefaultAddress?: boolean;\n}): boolean => {\n return (\n !isTemporaryCheckoutAddressMode &&\n (!shouldEnforceB2BPermissions || Boolean(canSetDefaultAddress))\n );\n};\n\nexport const getSanitizedAddressPayload = ({\n requestPayload,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress,\n}: {\n requestPayload: CustomerAddressesModel;\n shouldEnforceB2BPermissions: boolean;\n canSetDefaultAddress?: boolean;\n}): CustomerAddressesModel => {\n if (\n !shouldOmitDefaultFlagsFromPayload(\n shouldEnforceB2BPermissions,\n canSetDefaultAddress\n )\n ) {\n return requestPayload;\n }\n\n const sanitizedPayload = { ...requestPayload };\n delete sanitizedPayload.defaultShipping;\n delete sanitizedPayload.defaultBilling;\n delete sanitizedPayload.isDefault;\n\n return sanitizedPayload;\n};\n\nexport const resolveUpdateAddressAlertKey = ({\n shouldEnforceB2BPermissions,\n canEditAddress,\n isB2BFlow,\n requestPayload,\n}: {\n shouldEnforceB2BPermissions: boolean;\n canEditAddress?: boolean;\n isB2BFlow?: boolean;\n requestPayload: CustomerAddressesModel;\n}): AddressValidationAlertKey | undefined => {\n if (shouldEnforceB2BPermissions && !canEditAddress) {\n return 'noPermissionEditAddresses';\n }\n\n if (hasSingleDefaultTypeViolation(isB2BFlow, requestPayload)) {\n return 'companyAddressSingleDefaultType';\n }\n\n return undefined;\n};\n\nexport const resolveCreateAddressAlertKey = ({\n shouldEnforceB2BPermissions,\n canCreateAddress,\n isB2BFlow,\n requestPayload,\n}: {\n shouldEnforceB2BPermissions: boolean;\n canCreateAddress?: boolean;\n isB2BFlow?: boolean;\n requestPayload: CustomerAddressesModel;\n}): AddressValidationAlertKey | undefined => {\n if (shouldEnforceB2BPermissions && !canCreateAddress) {\n return 'noPermissionCreateAddresses';\n }\n\n if (hasSingleDefaultTypeViolation(isB2BFlow, requestPayload)) {\n return 'companyAddressSingleDefaultType';\n }\n\n return undefined;\n};\n\nexport const resolveAddressFormErrorMessage = (error: unknown): string => {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n\n if (typeof error === 'string' && error.trim()) {\n return error;\n }\n\n return 'Unknown error';\n};\n\ntype ResolveB2BDefaultCheckBoxRulesArgs = {\n isB2BFlow?: boolean;\n showShippingCheckBox?: boolean;\n showBillingCheckBox?: boolean;\n shippingCheckBoxValue?: boolean;\n billingCheckBoxValue?: boolean;\n addressId?: string;\n hasDefaultShippingAddress?: boolean;\n hasDefaultBillingAddress?: boolean;\n};\n\nconst resolveBaseCheckBoxRules = ({\n showShippingCheckBox,\n showBillingCheckBox,\n shippingCheckBoxValue,\n billingCheckBoxValue,\n}: ResolveB2BDefaultCheckBoxRulesArgs): B2BDefaultCheckBoxRules => ({\n showShipping: Boolean(showShippingCheckBox),\n showBilling: Boolean(showBillingCheckBox),\n shippingDefaultValue: shippingCheckBoxValue ?? false,\n billingDefaultValue: billingCheckBoxValue ?? false,\n});\n\nconst normalizeB2CCreateDefaults = (\n baseRules: B2BDefaultCheckBoxRules\n): B2BDefaultCheckBoxRules => {\n const rules = { ...baseRules };\n\n if (rules.showShipping && rules.showBilling) {\n const hasAmbiguousSelection =\n rules.shippingDefaultValue === rules.billingDefaultValue;\n\n if (hasAmbiguousSelection) {\n rules.shippingDefaultValue = true;\n rules.billingDefaultValue = false;\n }\n\n return rules;\n }\n\n if (rules.showShipping && !rules.showBilling && !rules.shippingDefaultValue) {\n rules.shippingDefaultValue = true;\n\n return rules;\n }\n\n if (!rules.showShipping && rules.showBilling && !rules.billingDefaultValue) {\n rules.billingDefaultValue = true;\n }\n\n return rules;\n};\n\ntype B2BCreateDefaultCaseKey =\n | 'none'\n | 'shippingOnly'\n | 'billingOnly'\n | 'both';\n\nconst B2B_CREATE_DEFAULT_RULES: Record<\n B2BCreateDefaultCaseKey,\n B2BDefaultCheckBoxRules\n> = {\n none: {\n showShipping: true,\n showBilling: true,\n shippingDefaultValue: false,\n billingDefaultValue: false,\n },\n shippingOnly: {\n showShipping: false,\n showBilling: true,\n shippingDefaultValue: false,\n billingDefaultValue: true,\n },\n billingOnly: {\n showShipping: true,\n showBilling: false,\n shippingDefaultValue: true,\n billingDefaultValue: false,\n },\n both: {\n showShipping: false,\n showBilling: false,\n shippingDefaultValue: false,\n billingDefaultValue: false,\n },\n};\n\nconst resolveB2BCreateDefaults = ({\n hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n}: ResolveB2BDefaultCheckBoxRulesArgs): B2BDefaultCheckBoxRules => {\n const hasShipping = Boolean(hasDefaultShippingAddress);\n const hasBilling = Boolean(hasDefaultBillingAddress);\n\n let ruleKey: B2BCreateDefaultCaseKey = 'none';\n\n if (hasShipping && hasBilling) {\n ruleKey = 'both';\n } else if (hasShipping) {\n ruleKey = 'shippingOnly';\n } else if (hasBilling) {\n ruleKey = 'billingOnly';\n }\n\n return B2B_CREATE_DEFAULT_RULES[ruleKey];\n};\n\nexport const resolveB2BDefaultCheckBoxRules = ({\n isB2BFlow,\n showShippingCheckBox,\n showBillingCheckBox,\n shippingCheckBoxValue,\n billingCheckBoxValue,\n addressId,\n hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n}: ResolveB2BDefaultCheckBoxRulesArgs): B2BDefaultCheckBoxRules => {\n const baseRules = resolveBaseCheckBoxRules({\n showShippingCheckBox,\n showBillingCheckBox,\n shippingCheckBoxValue,\n billingCheckBoxValue,\n });\n const isCreateMode = !addressId;\n\n if (!isB2BFlow) {\n return isCreateMode ? normalizeB2CCreateDefaults(baseRules) : baseRules;\n }\n\n if (!isCreateMode) {\n return baseRules;\n }\n\n return resolveB2BCreateDefaults({\n hasDefaultShippingAddress,\n hasDefaultBillingAddress,\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 {\n createCustomerAddress,\n getAttributesForm,\n updateCustomerAddress,\n getCountries,\n createCompanyAddress,\n updateCompanyAddress,\n setDefaultCompanyAddress,\n} from '@/account/api';\nimport {\n defaultNicknameField,\n defaultShippingCheckBox,\n defaultBillingCheckBox,\n defaultAddressTypeShippingCheckBox,\n defaultAddressTypeBillingCheckBox,\n defaultIsDefaultCheckBox,\n} from '@/account/configs/addressField.config';\nimport {\n AttributesFormModel,\n Country,\n CustomerAddressesModel,\n FieldEnumList,\n} from '@/account/data/models';\nimport type { CompanyAddressType } from '@/account/types/api/companyAddress.types';\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 {\n AddressValidationAlertKey,\n canSetAddressAsDefault,\n canSetDefaultAddressInForm,\n getSanitizedAddressPayload,\n resolveAddressFormErrorMessage,\n resolveB2BDefaultCheckBoxRules,\n resolveCreateAddressAlertKey,\n resolveShouldEnforceB2BPermissions,\n resolveTemporaryCheckoutAddressMode,\n resolveUpdateAddressAlertKey,\n} from '@/account/lib/addressFormRules';\nimport { useAddressFormProps } from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\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\nconst isNicknameField = (field?: Partial<AttributesFormModel>): boolean =>\n field?.name === 'nickname' ||\n field?.code === 'nickname' ||\n field?.customUpperCode === 'nickname';\n\nexport const useAddressForm = ({\n showFormLoader,\n showSaveCheckBox,\n saveCheckBoxValue,\n addressFormId,\n billingCheckBoxValue,\n shippingCheckBoxValue,\n showShippingCheckBox,\n showBillingCheckBox,\n hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n inputsDefaultValueSet,\n onCloseBtnClick,\n onSuccess,\n onError,\n formName,\n isB2BFlow,\n enforceB2BPermissions,\n permissions,\n}: useAddressFormProps) => {\n const translations = useText({\n noPermissionEditAddresses:\n 'Account.AddressForm.notifications.noPermissionEditAddresses',\n noPermissionCreateAddresses:\n 'Account.AddressForm.notifications.noPermissionCreateAddresses',\n companyAddressSingleDefaultType:\n 'Account.AddressForm.notifications.companyAddressSingleDefaultType',\n b2bShippingTypeLabel: 'Account.AddressForm.formText.b2bShippingTypeLabel',\n b2bBillingTypeLabel: 'Account.AddressForm.formText.b2bBillingTypeLabel',\n b2bIsDefaultLabel: 'Account.AddressForm.formText.b2bIsDefaultLabel',\n b2bIsDefaultShippingLabel:\n 'Account.AddressForm.formText.b2bIsDefaultShippingLabel',\n b2bIsDefaultBillingLabel:\n 'Account.AddressForm.formText.b2bIsDefaultBillingLabel',\n });\n\n const shouldEnforceB2BPermissions = resolveShouldEnforceB2BPermissions(\n isB2BFlow,\n enforceB2BPermissions\n );\n const isTemporaryCheckoutAddressMode = resolveTemporaryCheckoutAddressMode({\n isB2BFlow,\n shouldEnforceB2BPermissions,\n permissions,\n });\n\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 const canEditAddressInCurrentMode =\n !shouldEnforceB2BPermissions || Boolean(permissions?.canEditAddress);\n const canSetDefaultAddressInCurrentMode =\n !shouldEnforceB2BPermissions || Boolean(permissions?.canSetDefaultAddress);\n const isB2BEditMode = Boolean(isB2BFlow && addressId);\n const isSetDefaultOnlyEditMode =\n isB2BEditMode &&\n shouldEnforceB2BPermissions &&\n !canEditAddressInCurrentMode &&\n canSetDefaultAddressInCurrentMode;\n const isAddressTypeSelectionOnlyMode =\n isB2BEditMode &&\n shouldEnforceB2BPermissions &&\n canEditAddressInCurrentMode &&\n !canSetDefaultAddressInCurrentMode;\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 resolveSelectedAddressType = useCallback(\n (requestPayload: CustomerAddressesModel): CompanyAddressType => {\n if (requestPayload.addressType === 'BILLING') {\n return 'BILLING';\n }\n\n if (requestPayload.addressType === 'SHIPPING') {\n return 'SHIPPING';\n }\n\n if (\n requestPayload.addressTypeBilling &&\n !requestPayload.addressTypeShipping\n ) {\n return 'BILLING';\n }\n\n if (\n requestPayload.addressTypeShipping &&\n !requestPayload.addressTypeBilling\n ) {\n return 'SHIPPING';\n }\n\n if (requestPayload.defaultBilling && !requestPayload.defaultShipping) {\n return 'BILLING';\n }\n\n if (requestPayload.defaultShipping && !requestPayload.defaultBilling) {\n return 'SHIPPING';\n }\n\n return inputsDefaultValueSet?.addressType ?? 'SHIPPING';\n },\n [inputsDefaultValueSet?.addressType]\n );\n\n const resolveIsDefaultSelection = useCallback(\n (requestPayload: CustomerAddressesModel): boolean => {\n if (typeof requestPayload.isDefault === 'boolean') {\n return requestPayload.isDefault;\n }\n\n if (\n typeof requestPayload.defaultShipping === 'boolean' ||\n typeof requestPayload.defaultBilling === 'boolean'\n ) {\n return Boolean(\n requestPayload.defaultShipping || requestPayload.defaultBilling\n );\n }\n\n return Boolean(\n inputsDefaultValueSet?.defaultShipping ||\n inputsDefaultValueSet?.defaultBilling\n );\n },\n [inputsDefaultValueSet?.defaultBilling, inputsDefaultValueSet?.defaultShipping]\n );\n\n const handleUpdateAddress = useCallback(\n async (event: Event, valid: boolean): Promise<void | null | undefined> => {\n if (!valid) return null;\n\n const formValues = getFormValues(event.target as HTMLFormElement);\n const serializeValues = serializeAddressForm(formValues);\n const requestPayload: CustomerAddressesModel = {\n ...(serializeValues as CustomerAddressesModel),\n };\n const originalAddressType = inputsDefaultValueSet?.addressType;\n\n if (isB2BFlow) {\n const selectedAddressType = resolveSelectedAddressType(requestPayload);\n const selectedIsDefault = resolveIsDefaultSelection(requestPayload);\n const normalizedAddressType =\n isB2BEditMode && originalAddressType\n ? originalAddressType\n : selectedAddressType;\n\n requestPayload.addressType = normalizedAddressType;\n requestPayload.addressTypeShipping =\n normalizedAddressType === 'SHIPPING';\n requestPayload.addressTypeBilling = normalizedAddressType === 'BILLING';\n requestPayload.isDefault = selectedIsDefault;\n requestPayload.defaultShipping =\n normalizedAddressType === 'SHIPPING' ? selectedIsDefault : false;\n requestPayload.defaultBilling =\n normalizedAddressType === 'BILLING' ? selectedIsDefault : false;\n\n }\n\n if (isB2BFlow && isSetDefaultOnlyEditMode) {\n setSubmitLoading(true);\n\n try {\n if (requestPayload.isDefault) {\n await setDefaultCompanyAddress(addressId);\n }\n\n onSuccess?.();\n onCloseBtnClick?.();\n (event?.target as HTMLFormElement)?.reset();\n } catch (error) {\n const errorMessage = resolveAddressFormErrorMessage(error);\n\n setInLineAlert((prev) => ({\n ...prev,\n text: errorMessage,\n type: 'error',\n }));\n onError?.(errorMessage);\n } finally {\n setSubmitLoading(false);\n }\n\n return null;\n }\n\n const validationAlertKey = resolveUpdateAddressAlertKey({\n shouldEnforceB2BPermissions,\n canEditAddress: permissions?.canEditAddress,\n isB2BFlow,\n requestPayload,\n });\n\n if (validationAlertKey) {\n setInLineAlert((prev) => ({\n ...prev,\n text: translations[validationAlertKey as AddressValidationAlertKey],\n type: 'warning',\n }));\n\n return null;\n }\n\n setSubmitLoading(true);\n\n const sanitizedPayload = getSanitizedAddressPayload({\n requestPayload,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress: permissions?.canSetDefaultAddress,\n });\n\n const b2bUpdatePayload = isB2BFlow\n ? {\n ...sanitizedPayload,\n isDefault: resolveIsDefaultSelection(requestPayload),\n }\n : sanitizedPayload;\n\n try {\n if (isB2BFlow) {\n // B2B: Use company address API\n const shouldSetAsDefault = canSetAddressAsDefault({\n requestPayload,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress: permissions?.canSetDefaultAddress,\n });\n\n await updateCompanyAddress(addressId, b2bUpdatePayload);\n\n if (shouldSetAsDefault) {\n await setDefaultCompanyAddress(addressId);\n }\n } else {\n // B2C: Use customer address API\n const customerUpdatePayload: Parameters<\n typeof updateCustomerAddress\n >[0] = {\n ...sanitizedPayload,\n addressId: Number(addressId),\n };\n\n await updateCustomerAddress(customerUpdatePayload);\n }\n \n onSuccess?.();\n onCloseBtnClick?.();\n (event?.target as HTMLFormElement)?.reset();\n } catch (error) {\n const errorMessage = resolveAddressFormErrorMessage(error);\n\n setInLineAlert((prev) => ({\n ...prev,\n text: errorMessage,\n type: 'error',\n }));\n onError?.(errorMessage);\n } finally {\n setSubmitLoading(false);\n }\n },\n [\n onCloseBtnClick,\n onError,\n onSuccess,\n isB2BFlow,\n shouldEnforceB2BPermissions,\n translations,\n addressId,\n inputsDefaultValueSet,\n permissions?.canEditAddress,\n permissions?.canSetDefaultAddress,\n resolveSelectedAddressType,\n resolveIsDefaultSelection,\n isB2BEditMode,\n isSetDefaultOnlyEditMode,\n ]\n );\n\n const handleCreateAddress = useCallback(\n async (event: Event, valid: boolean): Promise<void | null | undefined> => {\n if (!valid) return;\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 const requestPayload: CustomerAddressesModel = {\n ...(serializeValues as CustomerAddressesModel),\n };\n\n if (isB2BFlow) {\n const selectedAddressType = resolveSelectedAddressType(requestPayload);\n const selectedIsDefault = resolveIsDefaultSelection(requestPayload);\n\n requestPayload.addressType = selectedAddressType;\n requestPayload.addressTypeShipping = selectedAddressType === 'SHIPPING';\n requestPayload.addressTypeBilling = selectedAddressType === 'BILLING';\n requestPayload.isDefault = selectedIsDefault;\n requestPayload.defaultShipping =\n selectedAddressType === 'SHIPPING' ? selectedIsDefault : false;\n requestPayload.defaultBilling =\n selectedAddressType === 'BILLING' ? selectedIsDefault : false;\n\n }\n\n setSubmitLoading(true);\n\n if (isTemporaryCheckoutAddressMode) {\n onSuccess?.();\n onCloseBtnClick?.();\n (event?.target as HTMLFormElement)?.reset();\n setAddressId('');\n setSubmitLoading(false);\n return null;\n }\n\n const validationAlertKey = resolveCreateAddressAlertKey({\n shouldEnforceB2BPermissions,\n canCreateAddress: permissions?.canCreateAddress,\n isB2BFlow,\n requestPayload,\n });\n\n if (validationAlertKey) {\n setInLineAlert((prev) => ({\n ...prev,\n text: translations[validationAlertKey as AddressValidationAlertKey],\n type: 'warning',\n }));\n\n setSubmitLoading(false);\n return null;\n }\n\n const sanitizedPayload = getSanitizedAddressPayload({\n requestPayload,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress: permissions?.canSetDefaultAddress,\n });\n\n try {\n if (isB2BFlow) {\n // B2B: Use company address API\n const createdAddress = await createCompanyAddress(sanitizedPayload);\n\n if (\n canSetAddressAsDefault({\n requestPayload: sanitizedPayload,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress: permissions?.canSetDefaultAddress,\n })\n ) {\n await setDefaultCompanyAddress(String(createdAddress?.id ?? ''));\n }\n } else {\n // B2C: Use customer address API\n await createCustomerAddress(sanitizedPayload);\n }\n \n onSuccess?.();\n onCloseBtnClick?.();\n (event?.target as HTMLFormElement)?.reset();\n } catch (error) {\n const errorMessage = resolveAddressFormErrorMessage(error);\n\n setInLineAlert((prev) => ({\n ...prev,\n text: errorMessage,\n type: 'error',\n }));\n onError?.(errorMessage);\n } finally {\n setAddressId('');\n setSubmitLoading(false);\n }\n },\n [\n onCloseBtnClick,\n onError,\n onSuccess,\n isB2BFlow,\n shouldEnforceB2BPermissions,\n isTemporaryCheckoutAddressMode,\n translations,\n permissions?.canCreateAddress,\n permissions?.canSetDefaultAddress,\n resolveSelectedAddressType,\n resolveIsDefaultSelection,\n ]\n );\n\n const b2bDefaultCheckBoxRules = useMemo(() => {\n return resolveB2BDefaultCheckBoxRules({\n isB2BFlow,\n showShippingCheckBox,\n showBillingCheckBox,\n shippingCheckBoxValue,\n billingCheckBoxValue,\n addressId,\n hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n });\n }, [\n isB2BFlow,\n showShippingCheckBox,\n showBillingCheckBox,\n shippingCheckBoxValue,\n billingCheckBoxValue,\n addressId,\n hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n ]);\n\n const normalizeFieldsConfig = useMemo(() => {\n if (!attributesFormList.length) return [];\n\n const hasRenderableNicknameField = attributesFormList.some(\n (field) =>\n isNicknameField(field) &&\n field.fieldType === FieldEnumList.TEXT &&\n !field.isHidden\n );\n\n const shouldForceNicknameField =\n isB2BFlow && !hasRenderableNicknameField;\n\n const normalizedAttributesFormList =\n shouldForceNicknameField\n ? [\n ...attributesFormList.filter((field) => !isNicknameField(field)),\n defaultNicknameField,\n ]\n : attributesFormList;\n\n const canSetDefaultAddress = canSetDefaultAddressInForm({\n isTemporaryCheckoutAddressMode,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress: permissions?.canSetDefaultAddress,\n });\n const liveAddressTypeBilling = inputChange?.addressTypeBilling;\n const liveAddressTypeShipping = inputChange?.addressTypeShipping;\n const selectedAddressType =\n typeof liveAddressTypeBilling === 'boolean' ||\n typeof liveAddressTypeShipping === 'boolean'\n ? liveAddressTypeBilling\n ? 'BILLING'\n : 'SHIPPING'\n : inputsDefaultValueSet?.addressType ?? 'SHIPPING';\n const isDefaultAddressSelected = Boolean(\n inputsDefaultValueSet?.defaultShipping ||\n inputsDefaultValueSet?.defaultBilling\n );\n const isB2BTypeSelectionDisabled = Boolean(isB2BFlow && addressId);\n const isB2BIsDefaultDisabled =\n !canSetDefaultAddress ||\n isAddressTypeSelectionOnlyMode ||\n (isSetDefaultOnlyEditMode && isDefaultAddressSelected);\n const shouldHideB2BAddressOptions = Boolean(\n !shouldEnforceB2BPermissions ||\n isTemporaryCheckoutAddressMode ||\n (showSaveCheckBox && !saveCheckBoxAddress)\n );\n\n const shippingCheckBox = {\n ...defaultShippingCheckBox,\n defaultValue: b2bDefaultCheckBoxRules.shippingDefaultValue,\n isHidden: Boolean(\n showSaveCheckBox && !saveCheckBoxAddress\n ? true\n : !b2bDefaultCheckBoxRules.showShipping || !canSetDefaultAddress\n ),\n };\n\n const billingCheckBox = {\n ...defaultBillingCheckBox,\n defaultValue: b2bDefaultCheckBoxRules.billingDefaultValue,\n isHidden: Boolean(\n showSaveCheckBox && !saveCheckBoxAddress\n ? true\n : !b2bDefaultCheckBoxRules.showBilling || !canSetDefaultAddress\n ),\n };\n\n const b2bAddressTypeShippingCheckBox = {\n ...defaultAddressTypeShippingCheckBox,\n label: translations.b2bShippingTypeLabel,\n forceLabel: true,\n defaultValue: selectedAddressType === 'SHIPPING',\n isHidden: shouldHideB2BAddressOptions,\n disabled: isB2BTypeSelectionDisabled,\n };\n\n const b2bAddressTypeBillingCheckBox = {\n ...defaultAddressTypeBillingCheckBox,\n label: translations.b2bBillingTypeLabel,\n forceLabel: true,\n defaultValue: selectedAddressType === 'BILLING',\n isHidden: shouldHideB2BAddressOptions,\n disabled: isB2BTypeSelectionDisabled,\n };\n\n const b2bIsDefaultLabel =\n selectedAddressType === 'BILLING'\n ? translations.b2bIsDefaultBillingLabel\n : translations.b2bIsDefaultShippingLabel;\n\n const b2bIsDefaultCheckBox = {\n ...defaultIsDefaultCheckBox,\n label: b2bIsDefaultLabel,\n forceLabel: true,\n defaultValue: isDefaultAddressSelected,\n isHidden: shouldHideB2BAddressOptions,\n disabled: isB2BIsDefaultDisabled,\n };\n\n const updatedAttributesFormList = isB2BFlow\n ? [\n ...normalizedAttributesFormList,\n b2bAddressTypeShippingCheckBox,\n b2bAddressTypeBillingCheckBox,\n b2bIsDefaultCheckBox,\n ]\n : [...normalizedAttributesFormList, shippingCheckBox, billingCheckBox];\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 baseItemValues = findNonEmptyObject(\n sessionAddressFormData,\n inputsDefaultValueSet\n ) as Record<string, unknown>;\n const itemValuesForFields = isB2BFlow\n ? {\n ...baseItemValues,\n addressTypeShipping: selectedAddressType === 'SHIPPING',\n addressTypeBilling: selectedAddressType === 'BILLING',\n isDefault: isDefaultAddressSelected,\n }\n : baseItemValues;\n\n const fields = getFieldsConfig(itemValuesForFields, updatedAttributesFormList);\n\n const normalizedFields = prepareNormalizedData({\n fields,\n addressId,\n countryOptions,\n disableField,\n regionOptions,\n isRequiredRegion,\n isRequiredPostCode,\n keepDefaultCheckBoxesOnEdit: Boolean(isB2BFlow && addressId),\n });\n\n if (!isSetDefaultOnlyEditMode) {\n return normalizedFields;\n }\n\n return normalizedFields.map((field) => {\n const isB2BSelectionCheckBox =\n field.customUpperCode === 'addressTypeShipping' ||\n field.customUpperCode === 'addressTypeBilling' ||\n field.customUpperCode === 'isDefault';\n\n if (isB2BSelectionCheckBox) {\n return {\n ...field,\n disabled:\n field.customUpperCode === 'isDefault'\n ? isB2BIsDefaultDisabled\n : true,\n };\n }\n\n return {\n ...field,\n disabled: true,\n };\n });\n }, [\n attributesFormList,\n isB2BFlow,\n showSaveCheckBox,\n saveCheckBoxAddress,\n b2bDefaultCheckBoxRules,\n isTemporaryCheckoutAddressMode,\n shouldEnforceB2BPermissions,\n permissions?.canSetDefaultAddress,\n formName,\n regionOptions,\n inputsDefaultValueSet,\n addressId,\n countryOptions,\n disableField,\n isRequiredRegion,\n isRequiredPostCode,\n isSetDefaultOnlyEditMode,\n isAddressTypeSelectionOnlyMode,\n inputChange?.addressTypeShipping,\n inputChange?.addressTypeBilling,\n translations.b2bShippingTypeLabel,\n translations.b2bBillingTypeLabel,\n translations.b2bIsDefaultShippingLabel,\n translations.b2bIsDefaultBillingLabel,\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, useRef, 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 hasDefaultShippingAddress = false,\n hasDefaultBillingAddress = false,\n shippingCheckBoxValue = true,\n billingCheckBoxValue = true,\n isOpen,\n fieldIdPrefix,\n onSubmit,\n onCloseBtnClick,\n onSuccess,\n onError,\n onChange,\n isB2BFlow,\n enforceB2BPermissions,\n permissions,\n}) => {\n const translations = useText({\n secondaryButton: 'Account.AddressForm.formText.secondaryButton',\n primaryButton: 'Account.AddressForm.formText.primaryButton',\n saveAddressBook: 'Account.AddressForm.formText.saveAddressBook',\n noPermissionEditAddresses:\n 'Account.AddressForm.notifications.noPermissionEditAddresses',\n noPermissionCreateAddresses:\n 'Account.AddressForm.notifications.noPermissionCreateAddresses',\n });\n\n const shouldEnforceB2BPermissions =\n Boolean(isB2BFlow) && enforceB2BPermissions !== false;\n const shouldShowSaveCheckBox =\n Boolean(showSaveCheckBox) &&\n !(Boolean(isB2BFlow) && !shouldEnforceB2BPermissions);\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 hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n saveCheckBoxValue,\n showSaveCheckBox: shouldShowSaveCheckBox,\n onSuccess,\n onError,\n onCloseBtnClick,\n formName,\n isB2BFlow,\n enforceB2BPermissions,\n permissions,\n });\n\n const isEditMode = Boolean(addressFormId);\n const canEditInB2B =\n !shouldEnforceB2BPermissions || Boolean(permissions?.canEditAddress);\n const canSetDefaultInB2B =\n !shouldEnforceB2BPermissions || Boolean(permissions?.canSetDefaultAddress);\n const canCreateInB2B =\n !shouldEnforceB2BPermissions || Boolean(permissions?.canCreateAddress);\n\n // Check if form should be disabled based on operation-specific B2B permissions.\n const isFormDisabled = isEditMode\n ? !canEditInB2B && !canSetDefaultInB2B\n : !canCreateInB2B;\n const noPermissionMessage = isEditMode\n ? translations.noPermissionEditAddresses\n : translations.noPermissionCreateAddresses;\n\n const [formKey, setFormKey] = useState(0);\n const previousDefaultValuesRef = useRef<string | null>(null);\n\n // Re-mount form only when the default values really change. Comparing by\n // object identity remounts the form on every parent re-render (the address\n // list is re-created on each refetch), which drops focus and typed values.\n useEffect(() => {\n const serializedDefaultValues = JSON.stringify(\n inputsDefaultValueSet ?? null\n );\n\n if (previousDefaultValuesRef.current === serializedDefaultValues) return;\n\n const isInitialRun = previousDefaultValuesRef.current === null;\n\n previousDefaultValuesRef.current = serializedDefaultValues;\n\n if (isInitialRun) return;\n\n setFormKey((prevKey) => prevKey + 1);\n }, [inputsDefaultValueSet]);\n\n if (!isOpen) return null;\n\n // Show no permission message if B2B user doesn't have required rights\n if (isFormDisabled) {\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\n data-testid=\"noPermissionAlert\"\n className=\"account-address-form-wrapper__notification\"\n type=\"warning\"\n variant=\"secondary\"\n heading={noPermissionMessage}\n />\n </div>\n );\n }\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={shouldShowSaveCheckBox}\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 shouldShowSaveCheckBox,\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 {!shouldShowSaveCheckBox ? (\n <>\n <Button\n // @ts-ignore\n type={'button'}\n onClick={handleOnCloseForm}\n variant=\"secondary\"\n disabled={submitLoading || isFormDisabled}\n >\n {translations.secondaryButton}\n </Button>\n <Button disabled={submitLoading || isFormDisabled}>\n {translations.primaryButton}\n </Button>\n </>\n ) : null}\n </>\n )}\n </div>\n ) : null}\n </Form>\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 { getStoreConfig } from '@/account/api';\nimport { StoreConfigModel } from '@/account/data/models';\nimport { useEffect, useState } from 'preact/hooks';\n\nconst getCachedStoreConfig = (): StoreConfigModel | null => {\n const storeConfigString = sessionStorage.getItem('accountStoreConfig');\n\n if (!storeConfigString) return null;\n\n try {\n return JSON.parse(storeConfigString);\n } catch (error) {\n console.error('Failed to parse cached store config:', error);\n sessionStorage.removeItem('accountStoreConfig');\n return null;\n }\n};\n\nexport const useGetStoreConfigs = () => {\n const [loading, setLoading] = useState<boolean>(true);\n const [passwordConfigs, setPasswordConfigs] = useState<{\n minLength: number;\n requiredCharacterClasses: number;\n } | null>(null);\n const [remoteShoppingAssistanceConfigs, setRemoteShoppingAssistanceConfigs] =\n useState<{\n shoppingAssistanceEnabled: boolean;\n shoppingAssistanceCheckboxTitle: string;\n shoppingAssistanceCheckboxTooltip: string;\n } | null>(null);\n const applyStoreConfig = (config: StoreConfigModel) => {\n const {\n minLength,\n requiredCharacterClasses,\n shoppingAssistanceEnabled,\n shoppingAssistanceCheckboxTitle,\n shoppingAssistanceCheckboxTooltip,\n } = config;\n\n setPasswordConfigs({\n minLength,\n requiredCharacterClasses,\n });\n\n setRemoteShoppingAssistanceConfigs({\n shoppingAssistanceEnabled,\n shoppingAssistanceCheckboxTitle,\n shoppingAssistanceCheckboxTooltip,\n });\n };\n\n useEffect(() => {\n const cachedStoreConfig = getCachedStoreConfig();\n\n if (cachedStoreConfig) {\n applyStoreConfig(cachedStoreConfig);\n setLoading(false);\n return;\n }\n\n getStoreConfig()\n .then((response) => {\n if (!response) return;\n\n sessionStorage.setItem('accountStoreConfig', JSON.stringify(response));\n applyStoreConfig(response);\n })\n .catch((error) => {\n console.error('Failed to load store config:', error);\n })\n .finally(() => {\n setLoading(false);\n });\n }, []);\n\n return { loading, passwordConfigs, remoteShoppingAssistanceConfigs };\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 { DEFAULT_ERRORS_STATE } from '../hooks/components/useChangePassword';\n\ninterface PasswordValidationParams {\n currentPassword: string;\n newPassword: string;\n confirmPassword: string;\n translations: Record<string, string>;\n}\n\ninterface PasswordErrors {\n currentPassword: string;\n newPassword: string;\n confirmPassword: string;\n}\n\nexport const validationChangePassword = ({\n currentPassword,\n newPassword,\n confirmPassword,\n translations,\n}: PasswordValidationParams): { isValid: boolean; errors: PasswordErrors } => {\n let errors: PasswordErrors = { ...DEFAULT_ERRORS_STATE };\n\n const arePasswordsEmpty =\n !currentPassword.length && !newPassword.length && !confirmPassword.length;\n const isNewPasswordMismatch =\n currentPassword.length && newPassword !== confirmPassword;\n\n if (arePasswordsEmpty) {\n errors = {\n ...errors,\n currentPassword: translations.requiredFieldError,\n newPassword: translations.requiredFieldError,\n confirmPassword: translations.requiredFieldError,\n };\n return { isValid: false, errors };\n }\n\n if (!currentPassword.length) {\n errors = {\n ...errors,\n currentPassword: translations.requiredFieldError,\n };\n return { isValid: false, errors };\n }\n\n if (!newPassword.length) {\n errors = {\n ...errors,\n newPassword: translations.requiredFieldError,\n };\n return { isValid: false, errors };\n }\n\n if (!confirmPassword.length) {\n errors = {\n ...errors,\n confirmPassword: translations.requiredFieldError,\n };\n return { isValid: false, errors };\n }\n\n if (isNewPasswordMismatch) {\n errors = {\n ...errors,\n currentPassword: '',\n newPassword: '',\n confirmPassword: translations.passwordMismatch,\n };\n return { isValid: false, errors };\n }\n\n return { isValid: true, errors };\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 validationUniqueSymbolsPassword = (\n password: string,\n uniqueSymbolsCount: number\n) => {\n if (uniqueSymbolsCount <= 1) return true;\n\n const numbers = /[0-9]/.test(password) ? 1 : 0;\n const lowerCaseLetter = /[a-z]/.test(password) ? 1 : 0;\n const upperCaseLetter = /[A-Z]/.test(password) ? 1 : 0;\n const specialSymbols = /[^a-zA-Z0-9\\s]/.test(password) ? 1 : 0;\n\n return (\n numbers + lowerCaseLetter + upperCaseLetter + specialSymbols >=\n uniqueSymbolsCount\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 { updateCustomerPassword } from '@/account/api';\nimport { validationChangePassword } from '@/account/lib/validationChangePassword';\nimport { validationUniqueSymbolsPassword } from '@/account/lib/validationUniqueSymbolsPassword';\nimport { UseChangePasswordProps } from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { useCallback, useState } from 'preact/hooks';\n\nexport const DEFAULT_ERRORS_STATE = {\n currentPassword: '',\n newPassword: '',\n confirmPassword: '',\n};\n\nexport const useChangePassword = ({\n passwordConfigs,\n handleSetInLineAlert,\n handleHideChangePassword,\n}: UseChangePasswordProps) => {\n const translations = useText({\n requiredFieldError: 'Account.FormText.requiredFieldError',\n passwordMismatch:\n 'Account.minifiedView.CustomerInformation.changePassword.passwordValidationMessage.passwordMismatch',\n incorrectCurrentPassword:\n 'Account.minifiedView.CustomerInformation.changePassword.passwordValidationMessage.incorrectCurrentPassword',\n passwordUpdateMessage:\n 'Account.minifiedView.CustomerInformation.changePassword.passwordValidationMessage.passwordUpdateMessage',\n });\n const [isClickSubmit, setIsClickSubmit] = useState(false);\n const [submitLoading, setSubmitLoading] = useState(false);\n const [currentPassword, setCurrentPassword] = useState('');\n const [newPassword, setNewPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [passwordErrors, setPasswordErrors] = useState({\n currentPassword: '',\n newPassword: '',\n confirmPassword: '',\n });\n\n const hideChangePassword = useCallback(() => {\n handleHideChangePassword(() => {\n handleSetInLineAlert({});\n setPasswordErrors(DEFAULT_ERRORS_STATE);\n });\n }, [handleHideChangePassword, handleSetInLineAlert]);\n\n const handleCurrentPasswordChange = useCallback(\n (value: string) => {\n setCurrentPassword(value);\n setPasswordErrors((prev) => ({\n ...prev,\n currentPassword: value ? '' : translations.requiredFieldError,\n }));\n },\n [translations]\n );\n\n const handleNewPasswordChange = useCallback(\n (value: string) => {\n setNewPassword(value);\n setPasswordErrors((prev) => ({\n ...prev,\n newPassword: value ? '' : translations.requiredFieldError,\n }));\n },\n [translations]\n );\n\n const handleConfirmPasswordChange = useCallback(\n (value: string) => {\n setConfirmPassword(value);\n setPasswordErrors((prev) => ({\n ...prev,\n confirmPassword: value ? '' : translations.requiredFieldError,\n }));\n },\n [translations]\n );\n\n const handleOnBlurPassword = useCallback(\n (event: Event) => {\n const { name, value } = event?.target as HTMLInputElement;\n\n setPasswordErrors((prev) => ({\n ...prev,\n [name]: value ? '' : translations.requiredFieldError,\n }));\n },\n [translations]\n );\n\n const validatePasswords = useCallback(() => {\n const { isValid, errors } = validationChangePassword({\n currentPassword,\n newPassword,\n confirmPassword,\n translations,\n });\n\n setPasswordErrors(errors);\n return isValid;\n }, [currentPassword, newPassword, confirmPassword, translations]);\n\n const mutationChangePassword = useCallback(\n (event: Event) => {\n event.preventDefault();\n\n setSubmitLoading(true);\n\n const requiredCharacterClasses =\n passwordConfigs?.requiredCharacterClasses ?? 0;\n const requiredPasswordLength = passwordConfigs?.minLength ?? 1;\n\n if (!validatePasswords()) {\n setIsClickSubmit(true);\n setSubmitLoading(false);\n return;\n }\n\n if (\n !validationUniqueSymbolsPassword(\n newPassword,\n requiredCharacterClasses\n ) ||\n requiredPasswordLength > newPassword?.length\n ) {\n setIsClickSubmit(true);\n setSubmitLoading(false);\n\n return;\n }\n\n updateCustomerPassword({ currentPassword, newPassword })\n .then((result) => {\n if (!result?.length) {\n setSubmitLoading(false);\n return;\n }\n\n setCurrentPassword('');\n setNewPassword('');\n setConfirmPassword('');\n setPasswordErrors(DEFAULT_ERRORS_STATE);\n setIsClickSubmit(false);\n handleSetInLineAlert({\n type: 'success',\n text: translations.passwordUpdateMessage,\n });\n })\n .catch((error) => {\n if (error.message === 'Invalid login or password.') {\n handleSetInLineAlert({\n type: 'error',\n text: translations.incorrectCurrentPassword,\n });\n }\n\n if (error.message === 'The account is locked.') {\n handleSetInLineAlert({\n type: 'error',\n text: error.message,\n });\n }\n });\n\n setSubmitLoading(false);\n },\n [\n passwordConfigs,\n validatePasswords,\n newPassword,\n currentPassword,\n handleSetInLineAlert,\n translations,\n ]\n );\n\n return {\n hideChangePassword,\n handleOnBlurPassword,\n handleConfirmPasswordChange,\n handleNewPasswordChange,\n handleCurrentPasswordChange,\n mutationChangePassword,\n currentPassword,\n newPassword,\n confirmPassword,\n passwordErrors,\n submitLoading,\n isClickSubmit,\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 { validationUniqueSymbolsPassword } from '@/account/lib/validationUniqueSymbolsPassword';\nimport { useEffect, useMemo, useState } from 'preact/hooks';\nimport { ValidateLengthConfigProps, statusTypes } from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\ninterface UsePasswordValidationMessageProps {\n passwordConfigs: {\n minLength: number;\n requiredCharacterClasses: number;\n } | null;\n isClickSubmit: boolean;\n password: string;\n}\n\nexport const usePasswordValidationMessage = ({\n passwordConfigs,\n isClickSubmit,\n password,\n}: UsePasswordValidationMessageProps) => {\n const translations = useText({\n messageLengthPassword:\n 'Account.minifiedView.CustomerInformation.changePassword.passwordValidationMessage.messageLengthPassword',\n });\n\n const [isValidUniqueSymbols, setIsValidUniqueSymbols] =\n useState<statusTypes>('pending');\n\n useEffect(() => {\n if (!passwordConfigs) return;\n\n const result = validationUniqueSymbolsPassword(\n password,\n passwordConfigs.requiredCharacterClasses\n );\n\n if (isClickSubmit && password.length > 0) {\n result\n ? setIsValidUniqueSymbols('success')\n : setIsValidUniqueSymbols('error');\n } else if (isClickSubmit && password.length === 0) {\n setIsValidUniqueSymbols('pending');\n } else {\n result\n ? setIsValidUniqueSymbols('success')\n : setIsValidUniqueSymbols('pending');\n }\n }, [isClickSubmit, passwordConfigs, password]);\n\n const defaultLengthMessage: ValidateLengthConfigProps | undefined =\n useMemo(() => {\n if (!passwordConfigs) return;\n\n const defaultMessage: ValidateLengthConfigProps = {\n status: 'pending',\n icon: 'pending',\n message: translations.messageLengthPassword?.replace(\n '{minLength}',\n `${passwordConfigs.minLength}`\n ),\n };\n\n if (password.length && password.length >= passwordConfigs.minLength) {\n return { ...defaultMessage, icon: 'success', status: 'success' };\n }\n\n if (password.length && password.length < passwordConfigs.minLength) {\n return isClickSubmit\n ? { ...defaultMessage, icon: 'error', status: 'error' }\n : { ...defaultMessage, icon: 'pending', status: 'pending' };\n }\n\n return defaultMessage;\n }, [\n passwordConfigs,\n translations.messageLengthPassword,\n password?.length,\n isClickSubmit,\n ]);\n\n return { isValidUniqueSymbols, defaultLengthMessage };\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 {\n ChangePasswordProps,\n ValidateLengthConfigProps,\n} from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n Button,\n Card,\n Header,\n InLineAlert,\n InputPassword,\n} from '@adobe-commerce/elsie/components';\nimport '@/account/components/ChangePassword/ChangePassword.css';\nimport { useGetStoreConfigs } from '@/account/hooks/containers/useGetStoreConfigs';\nimport { useChangePassword } from '@/account/hooks/components/useChangePassword';\nimport { usePasswordValidationMessage } from '@/account/hooks/components/usePasswordValidationMessage';\n\nexport const getErrorMessage = (\n isValidUniqueSymbols: string,\n defaultLengthMessage: ValidateLengthConfigProps | undefined,\n isSubmit: boolean,\n newPassword: string,\n passwordErrors: { newPassword: string }\n) => {\n const hasError =\n isValidUniqueSymbols === 'error' ||\n defaultLengthMessage?.status === 'error' ||\n (isSubmit && newPassword.trim().length === 0);\n\n return hasError ? passwordErrors.newPassword : undefined;\n};\n\nexport const ChangePassword: FunctionComponent<ChangePasswordProps> = ({\n handleHideChangePassword,\n handleSetInLineAlert,\n inLineAlertProps,\n}) => {\n const { passwordConfigs } = useGetStoreConfigs();\n\n const {\n hideChangePassword,\n handleOnBlurPassword,\n handleConfirmPasswordChange,\n handleNewPasswordChange,\n handleCurrentPasswordChange,\n mutationChangePassword,\n currentPassword,\n newPassword,\n confirmPassword,\n passwordErrors,\n submitLoading,\n isClickSubmit,\n } = useChangePassword({\n passwordConfigs,\n handleSetInLineAlert,\n handleHideChangePassword,\n });\n\n const { isValidUniqueSymbols, defaultLengthMessage } =\n usePasswordValidationMessage({\n password: newPassword,\n isClickSubmit,\n passwordConfigs,\n });\n\n const translations = useText({\n containerTitle:\n 'Account.minifiedView.CustomerInformation.changePassword.containerTitle',\n currentPasswordPlaceholder:\n 'Account.minifiedView.CustomerInformation.changePassword.currentPassword.placeholder',\n currentPasswordFloatingLabel:\n 'Account.minifiedView.CustomerInformation.changePassword.currentPassword.floatingLabel',\n newPasswordPlaceholder:\n 'Account.minifiedView.CustomerInformation.changePassword.newPassword.placeholder',\n newPasswordFloatingLabel:\n 'Account.minifiedView.CustomerInformation.changePassword.newPassword.floatingLabel',\n confirmPasswordPlaceholder:\n 'Account.minifiedView.CustomerInformation.changePassword.confirmPassword.placeholder',\n confirmPasswordFloatingLabel:\n 'Account.minifiedView.CustomerInformation.changePassword.confirmPassword.floatingLabel',\n buttonSecondary:\n 'Account.minifiedView.CustomerInformation.changePassword.buttonSecondary',\n buttonPrimary:\n 'Account.minifiedView.CustomerInformation.changePassword.buttonPrimary',\n });\n\n return (\n <Card className=\"account-change-password\" variant=\"secondary\">\n <Header\n title={translations.containerTitle}\n divider={false}\n className={'account-change-password__title'}\n level={3}\n />\n {inLineAlertProps.text ? (\n <InLineAlert\n className=\"account-change-password__notification\"\n type={inLineAlertProps.type}\n variant=\"secondary\"\n heading={inLineAlertProps.text}\n icon={inLineAlertProps.icon}\n data-testid=\"changePasswordInLineAlert\"\n />\n ) : null}\n <div className=\"account-change-password__fields\">\n <InputPassword\n className=\"account-change-password__fields-item\"\n autoComplete=\"current-password\"\n name=\"currentPassword\"\n placeholder={translations.currentPasswordPlaceholder}\n floatingLabel={translations.currentPasswordFloatingLabel}\n errorMessage={passwordErrors.currentPassword}\n defaultValue={currentPassword}\n onValue={handleCurrentPasswordChange}\n onBlur={handleOnBlurPassword}\n />\n <InputPassword\n className=\"account-change-password__fields-item\"\n autoComplete=\"new-password\"\n name=\"newPassword\"\n placeholder={translations.newPasswordPlaceholder}\n floatingLabel={translations.newPasswordFloatingLabel}\n minLength={passwordConfigs?.minLength}\n validateLengthConfig={defaultLengthMessage}\n uniqueSymbolsStatus={isValidUniqueSymbols}\n requiredCharacterClasses={passwordConfigs?.requiredCharacterClasses}\n errorMessage={getErrorMessage(\n isValidUniqueSymbols,\n defaultLengthMessage,\n isClickSubmit,\n newPassword,\n passwordErrors\n )}\n defaultValue={newPassword}\n onValue={handleNewPasswordChange}\n onBlur={handleOnBlurPassword}\n />\n <InputPassword\n className=\"account-change-password__fields-item\"\n autoComplete=\"new-password\"\n name=\"confirmPassword\"\n placeholder={translations.confirmPasswordPlaceholder}\n floatingLabel={translations.confirmPasswordFloatingLabel}\n errorMessage={passwordErrors.confirmPassword}\n defaultValue={confirmPassword}\n onValue={handleConfirmPasswordChange}\n onBlur={handleOnBlurPassword}\n />\n </div>\n\n <div className=\"account-change-password__actions\">\n <Button\n // @ts-ignore\n type=\"button\"\n disabled={submitLoading}\n onClick={hideChangePassword}\n variant=\"secondary\"\n >\n {translations.buttonSecondary}\n </Button>\n <Button\n variant=\"primary\"\n // @ts-ignore\n type=\"button\"\n disabled={submitLoading}\n onClick={mutationChangePassword}\n >\n {translations.buttonPrimary}\n </Button>\n </div>\n </Card>\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 { EditCustomerInformationProps, FieldsProps } from '@/account/types';\nimport {\n Button,\n Card,\n Header,\n InLineAlert,\n InputPassword,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Form } from '@/account/components';\nimport '@/account/components/EditCustomerInformation/EditCustomerInformation.css';\n\nexport const EditCustomerInformation: FunctionComponent<\n EditCustomerInformationProps\n> = ({\n inLineAlertProps,\n errorPasswordEmpty,\n passwordValue,\n showPasswordOnEmailChange,\n submitLoading,\n formFieldsList,\n handleHideEditForm,\n handleUpdateCustomerInformation,\n handleInputChange,\n handleSetPassword,\n handleOnBlurPassword,\n}) => {\n const translations = useText({\n buttonSecondary:\n 'Account.minifiedView.CustomerInformation.editCustomerInformation.buttonSecondary',\n buttonPrimary:\n 'Account.minifiedView.CustomerInformation.editCustomerInformation.buttonPrimary',\n placeholder:\n 'Account.minifiedView.CustomerInformation.editCustomerInformation.passwordField.placeholder',\n floatingLabel:\n 'Account.minifiedView.CustomerInformation.editCustomerInformation.passwordField.floatingLabel',\n containerTitle:\n 'Account.minifiedView.CustomerInformation.editCustomerInformation.containerTitle',\n requiredFieldError: 'Account.FormText.requiredFieldError',\n });\n\n return (\n <Card variant=\"secondary\" className={'account-edit-customer-information'}>\n <Header\n title={translations.containerTitle}\n divider={false}\n className={'account-edit-customer-information__title'}\n level={3}\n />\n {inLineAlertProps.text ? (\n <InLineAlert\n className=\"account-edit-customer-information__notification\"\n type={inLineAlertProps.type}\n variant=\"secondary\"\n heading={inLineAlertProps.text}\n icon={inLineAlertProps.icon}\n data-testid=\"editCustomerInLineAlert\"\n />\n ) : null}\n <Form\n loading={submitLoading}\n fieldsConfig={(formFieldsList as FieldsProps[]) || []}\n name=\"editCustomerInformation\"\n className=\"account-edit-customer-information-form\"\n onSubmit={handleUpdateCustomerInformation}\n setInputChange={handleInputChange}\n >\n {showPasswordOnEmailChange ? (\n <div className=\"account-edit-customer-information__password\">\n <InputPassword\n autoComplete=\"current-password\"\n name=\"password\"\n placeholder={translations.placeholder}\n floatingLabel={translations.floatingLabel}\n errorMessage={\n errorPasswordEmpty ? translations.requiredFieldError : undefined\n }\n defaultValue={passwordValue}\n onValue={handleSetPassword}\n onBlur={handleOnBlurPassword}\n />\n </div>\n ) : null}\n <div className=\"account-edit-customer-information__actions\">\n <Button\n disabled={submitLoading}\n // @ts-ignore\n type=\"button\"\n variant=\"secondary\"\n onClick={() => handleHideEditForm()}\n >\n {translations.buttonSecondary}\n </Button>\n <Button disabled={submitLoading} type=\"submit\" variant=\"primary\">\n {translations.buttonPrimary}\n </Button>\n </div>\n </Form>\n </Card>\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 { CustomerInformationCardProps } from '@/account/types';\nimport { Card, Button } from '@adobe-commerce/elsie/components';\nimport { classes, Slot } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/account/components/CustomerInformationCard/CustomerInformationCard.css';\n\nexport const CustomerInformationCard: FunctionComponent<\n CustomerInformationCardProps\n> = ({\n createdAt,\n slots,\n orderedCustomerData,\n showEditForm,\n showChangePassword,\n handleShowChangePassword,\n handleShowEditForm,\n}) => {\n const translations = useText({\n buttonSecondary:\n 'Account.minifiedView.CustomerInformation.customerInformationCard.buttonSecondary',\n buttonSecondaryAriaLabel:\n 'Account.minifiedView.CustomerInformation.customerInformationCard.buttonSecondaryAriaLabel',\n buttonPrimary:\n 'Account.minifiedView.CustomerInformation.customerInformationCard.buttonPrimary',\n buttonPrimaryAriaLabel:\n 'Account.minifiedView.CustomerInformation.customerInformationCard.buttonPrimaryAriaLabel',\n accountCreation:\n 'Account.minifiedView.CustomerInformation.customerInformationCard.accountCreation',\n });\n\n return (\n <Card\n variant=\"secondary\"\n className={classes([\n 'account-customer-information-card',\n [\n 'account-customer-information-card-short',\n showChangePassword || showEditForm,\n ],\n ])}\n >\n <div className=\"account-customer-information-card__wrapper\">\n <div className=\"account-customer-information-card__actions\">\n <Button\n // @ts-ignore\n type=\"button\"\n variant=\"tertiary\"\n aria-label={translations.buttonSecondaryAriaLabel}\n onClick={handleShowChangePassword}\n >\n {translations.buttonSecondary}\n </Button>\n\n <Button\n // @ts-ignore\n type=\"button\"\n variant=\"tertiary\"\n aria-label={translations.buttonPrimaryAriaLabel}\n onClick={handleShowEditForm}\n >\n {translations.buttonPrimary}\n </Button>\n </div>\n <div className=\"account-customer-information-card__content\">\n {slots?.CustomerData ? (\n <Slot\n name=\"CustomerData\"\n slot={slots?.CustomerData}\n context={{ customerData: orderedCustomerData }}\n />\n ) : (\n <>\n {orderedCustomerData?.map((el, index) => {\n const value = !el?.label\n ? el?.value\n : `${el.label}: ${el?.value}`;\n\n return (\n <p\n key={`${el.name}_${index}`}\n data-testid={`${el.name}_${index}`}\n >\n {value}\n </p>\n );\n })}\n <p>\n {translations.accountCreation}: {createdAt}\n </p>\n </>\n )}\n </div>\n </div>\n </Card>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 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 '@/account/components/AddressValidation/AddressValidation.css';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { Header, ToggleButton } from '@adobe-commerce/elsie/components';\nimport { CustomerAddressesModel } from '@/account/data/models';\n\nexport interface AddressValidationProps extends HTMLAttributes<HTMLDivElement> {\n busy?: boolean;\n originalAddress: CustomerAddressesModel | null;\n selection: 'suggested' | 'original' | null;\n suggestedAddress: CustomerAddressesModel | null;\n onSelectionChange: (selection: 'suggested' | 'original') => void;\n}\n\nexport function formatAddressLine(\n address: CustomerAddressesModel | null | undefined\n): string[] {\n if (!address) return [];\n const name = `${address.firstName} ${address.lastName}`.trim();\n const street = address.street ?? '';\n const city = address.city ?? '';\n const region = address.region || undefined;\n const post = address.postcode ?? '';\n const country = address.countryCode ?? '';\n\n let cityRegion = '';\n if (city && region) {\n cityRegion = `${city}, ${region?.regionCode ?? ''}`.trim();\n } else if (city) {\n cityRegion = city;\n } else if (region) {\n cityRegion = region?.regionCode ?? '';\n }\n\n let cityRegionPost = cityRegion;\n if (post) {\n cityRegionPost = cityRegion ? `${cityRegion} ${post}` : post;\n }\n\n let line3 = cityRegionPost;\n if (country) {\n line3 = cityRegionPost ? `${cityRegionPost}, ${country}` : country;\n }\n\n return [name, street, line3];\n}\n\nconst AddressBlock: FunctionComponent<{\n title: string;\n address: CustomerAddressesModel | null | undefined;\n selected: boolean;\n busy?: boolean;\n onChange: () => void;\n}> = ({ title, address, selected, busy, onChange }) => {\n const [line1, line2, line3] = formatAddressLine(address);\n const label = (\n <div>\n <div className=\"account-address-validation__option-title\">\n <strong>{title}</strong>\n </div>\n {line1 && <div>{line1}</div>}\n {line2 && <div>{line2}</div>}\n {line3 && <div>{line3}</div>}\n </div>\n );\n return (\n <div className=\"account-address-validation__option\">\n <ToggleButton\n busy={busy}\n className=\"account-address-validation__radio\"\n label={label}\n name=\"address-validation-choice\"\n selected={selected}\n value={title}\n onChange={onChange}\n />\n </div>\n );\n};\n\nexport const AddressValidation: FunctionComponent<AddressValidationProps> = ({\n busy = false,\n className,\n originalAddress,\n onSelectionChange,\n selection,\n suggestedAddress,\n}) => {\n const hasSuggestion = !!suggestedAddress;\n const translations = useText({\n title: 'Account.AddressValidation.title',\n subtitle: 'Account.AddressValidation.subtitle',\n suggestedAddress: 'Account.AddressValidation.suggestedAddress',\n originalAddress: 'Account.AddressValidation.originalAddress',\n });\n\n return (\n <div className={classes(['account-address-validation', className])}>\n <Header\n className=\"account-address-validation__title\"\n divider={false}\n title={translations.title}\n level={1}\n />\n <div className=\"account-address-validation__subtitle\">\n {translations.subtitle}\n </div>\n\n <div\n className={classes([\n 'account-address-validation__options',\n busy && 'account-address-validation__options--busy',\n ])}\n >\n {hasSuggestion && (\n <AddressBlock\n address={suggestedAddress}\n busy={busy}\n selected={selection === 'suggested'}\n title={translations.suggestedAddress}\n onChange={() => onSelectionChange('suggested')}\n />\n )}\n\n <AddressBlock\n address={originalAddress}\n busy={busy}\n selected={selection === 'original'}\n title={translations.originalAddress}\n onChange={() => onSelectionChange('original')}\n />\n </div>\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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, JSX } from 'preact';\nimport { useState } from 'preact/hooks';\nimport {\n Checkbox,\n Field,\n IllustratedMessage,\n InLineAlert,\n Skeleton,\n SkeletonRow,\n} from '@adobe-commerce/elsie/components';\nimport { SellerAssistedBuyingSettingsControlProps } from '@/account/types';\nimport '@/account/components/SellerAssistedBuyingSettingsControl/SellerAssistedBuyingSettingsControl.css';\n\nexport const SellerAssistedBuyingSettingsControl: FunctionComponent<\n SellerAssistedBuyingSettingsControlProps\n> = ({\n loading,\n isRemoteShoppingAssistanceAvailable,\n isRemoteShoppingAssistanceEnabled,\n showAlert,\n checkboxLabel,\n checkboxTooltip,\n alertMessage,\n featureDisabledMessage,\n handleCheckboxChange,\n handleDismissAlert,\n}) => {\n const [showTooltip, setShowTooltip] = useState(false);\n\n if (loading) {\n return (\n <Skeleton>\n <SkeletonRow variant=\"row\" />\n </Skeleton>\n );\n }\n\n if (!loading && !isRemoteShoppingAssistanceAvailable) {\n return (\n <div className=\"account-seller-assisted-buying-settings-control__alert\">\n <IllustratedMessage heading={featureDisabledMessage} />\n </div>\n );\n }\n\n return (\n <div className=\"account-seller-assisted-buying-settings-control\">\n {!isRemoteShoppingAssistanceEnabled && showAlert && (\n <div className=\"account-seller-assisted-buying-settings-control__alert\">\n <InLineAlert\n variant=\"secondary\"\n type=\"warning\"\n heading={alertMessage}\n onDismiss={handleDismissAlert}\n />\n </div>\n )}\n <div className=\"account-seller-assisted-buying-settings-control__checkbox-row\">\n <Field>\n <Checkbox\n name=\"allowRemoteShoppingAssistance\"\n value=\"true\"\n placeholder={checkboxLabel}\n label={checkboxLabel}\n checked={isRemoteShoppingAssistanceEnabled}\n onChange={(event: JSX.TargetedEvent<HTMLInputElement>) =>\n handleCheckboxChange(event.currentTarget.checked)\n }\n />\n </Field>\n {checkboxTooltip ? (\n <div className=\"account-seller-assisted-buying-settings-control__info-container\">\n <button\n type=\"button\"\n className=\"account-seller-assisted-buying-settings-control__info-icon\"\n onMouseEnter={() => setShowTooltip(true)}\n onMouseLeave={() => setShowTooltip(false)}\n onFocusCapture={() => setShowTooltip(true)}\n onBlurCapture={() => setShowTooltip(false)}\n aria-label={checkboxTooltip}\n >\n ?\n </button>\n {showTooltip ? (\n <span\n className=\"account-seller-assisted-buying-settings-control__tooltip\"\n role=\"tooltip\"\n >\n {checkboxTooltip}\n <span className=\"account-seller-assisted-buying-settings-control__tooltip-arrow\" />\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 {\n Table,\n Skeleton,\n SkeletonRow,\n Pagination,\n IllustratedMessage,\n Card,\n} from '@adobe-commerce/elsie/components';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { SellerAssistedBuyingActivityTableProps } from '@/account/types';\nimport '@/account/components/SellerAssistedBuyingActivityTable/SellerAssistedBuyingActivityTable.css';\n\nexport const SellerAssistedBuyingActivityTable: FunctionComponent<\n SellerAssistedBuyingActivityTableProps\n> = ({\n loading,\n adminAssistanceActions,\n tableHeaders,\n actionTypesMap,\n emptyStateMessage,\n featureDisabledMessage,\n isRemoteShoppingAssistanceAvailable = true,\n errorMessage,\n currentPage,\n onPageChange,\n withWrapper = true,\n}) => {\n if (loading) {\n return (\n <Skeleton>\n <SkeletonRow variant=\"row\" fullWidth={true} />\n <SkeletonRow variant=\"row\" fullWidth={true} />\n <SkeletonRow variant=\"row\" fullWidth={true} />\n </Skeleton>\n );\n }\n\n if (!isRemoteShoppingAssistanceAvailable) {\n return (\n <div className=\"account-seller-assisted-buying-activity-table__alert\">\n <IllustratedMessage heading={featureDisabledMessage} />\n </div>\n );\n }\n\n if (errorMessage) {\n return (\n <div className=\"account-seller-assisted-buying-activity-table__error\">\n <IllustratedMessage heading={errorMessage} />\n </div>\n );\n }\n\n if (!adminAssistanceActions?.items?.length) {\n return (\n <div className=\"account-seller-assisted-buying-activity-table__empty\">\n <IllustratedMessage heading={emptyStateMessage} />\n </div>\n );\n }\n\n const columns = [\n {\n label: tableHeaders.action,\n key: 'action',\n ariaLabel: tableHeaders.action,\n },\n { label: tableHeaders.date, key: 'date', ariaLabel: tableHeaders.date },\n {\n label: tableHeaders.details,\n key: 'details',\n ariaLabel: tableHeaders.details,\n },\n ];\n\n const rowData = adminAssistanceActions.items.map((item) => ({\n action: actionTypesMap[item.action] || item.action,\n date: item.date,\n details: item.details,\n }));\n\n const totalPages = adminAssistanceActions.pageInfo.totalPages;\n const showPagination = totalPages > 1;\n const table = (\n <div className=\"account-seller-assisted-buying-activity-table\">\n <div className=\"account-seller-assisted-buying-activity-table__table-wrapper\">\n <Table\n columns={columns}\n rowData={rowData}\n mobileLayout=\"stacked\"\n className=\"account-seller-assisted-buying-activity-table__table\"\n />\n </div>\n </div>\n );\n\n return (\n <>\n {withWrapper ? (\n <Card\n variant=\"secondary\"\n className={classes([\n 'account-seller-assisted-buying-activity-table-card',\n ])}\n >\n {table}\n </Card>\n ) : (\n table\n )}\n {showPagination && (\n <div className=\"account-seller-assisted-buying-activity-table__pagination\">\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onChange={onPageChange}\n />\n </div>\n )}\n </>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Card, Button, Tag } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { PaymentCardProps } from '@/account/types';\nimport '@/account/components/PaymentCard/PaymentCard.css';\n\nexport const PaymentCard: FunctionComponent<PaymentCardProps> = ({\n cardBrand,\n lastFourDigits,\n expired = false,\n onRemove,\n variant = 'secondary',\n minifiedView = false,\n}) => {\n const paymentCardAriaId = useId();\n\n const translations = useText({\n actionRemove: 'Account.Payments.paymentCard.actionRemove',\n cardEndingIn: 'Account.Payments.paymentCard.cardEndingIn',\n expiredLabel: 'Account.Payments.paymentCard.expiredLabel',\n });\n\n const handleRemove = useCallback(() => {\n onRemove?.();\n }, [onRemove]);\n\n const maskedNumber = `•••• ${lastFourDigits}`;\n const cardDescription = `${translations.cardEndingIn} ${maskedNumber}`;\n\n return (\n <Card\n variant={variant}\n className={classes([\n 'account-payment-card',\n minifiedView && 'account-payment-card--minified',\n ])}\n data-testid=\"paymentCard\"\n >\n <div className=\"account-payment-card__action\">\n {onRemove ? (\n <Button\n // @ts-ignore\n type=\"button\"\n variant=\"tertiary\"\n onClick={handleRemove}\n data-testid=\"removeButton\"\n aria-label={`${translations.actionRemove} ${cardBrand} ${cardDescription}`}\n aria-describedby={paymentCardAriaId}\n >\n {translations.actionRemove}\n </Button>\n ) : null}\n </div>\n <div className=\"account-payment-card__description\" id={paymentCardAriaId}>\n <p className=\"account-payment-card__card-brand\" data-testid=\"cardBrand\">\n {cardBrand}\n </p>\n <p\n className=\"account-payment-card__card-number\"\n data-testid=\"cardNumber\"\n >\n {cardDescription}\n </p>\n </div>\n {expired ? (\n <div className=\"account-payment-card__labels\" data-testid=\"expiredTag\">\n <Tag\n label={(translations.expiredLabel ?? 'Expired').toLocaleUpperCase()}\n />\n </div>\n ) : null}\n </Card>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 deletePaymentToken,\n getCustomerPaymentTokens,\n} from '@/account/api';\nimport { StoredPaymentMethodDisplay } from '@/account/data/models/stored-payment-method';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\n\n/** @see `Events` augmentation in `src/types/events.d.ts` */\nconst customerPaymentTokensEvent = 'account/customerPaymentTokens';\n\n/** Sentinel for `actionError` when delete succeeds at the transport layer but returns false. */\nexport const PAYMENT_METHOD_REMOVE_FAILED = '__REMOVE_FAILED__';\n\nexport const usePaymentMethods = (filterPaymentMethodCodes?: string[]) => {\n const itemsSourceRef = useRef<'event' | 'api'>('api');\n const prevFilterKeyRef = useRef<string | undefined>(undefined);\n\n const [items, setItems] = useState<StoredPaymentMethodDisplay[]>([]);\n const [loading, setLoading] = useState(true);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [actionError, setActionError] = useState<string | null>(null);\n const [removingHash, setRemovingHash] = useState<string | null>(null);\n\n const load = useCallback(async () => {\n setLoading(true);\n setLoadError(null);\n setActionError(null);\n\n try {\n const next = await getCustomerPaymentTokens(filterPaymentMethodCodes);\n\n itemsSourceRef.current = 'api';\n setItems(next);\n } catch (e) {\n setItems([]);\n setLoadError(e instanceof Error ? e.message : String(e));\n } finally {\n setLoading(false);\n }\n }, [filterPaymentMethodCodes]);\n\n useEffect(() => {\n let cancelled = false;\n let consumedFromBus = false;\n\n const sub = events.on(\n customerPaymentTokensEvent,\n (payload) => {\n if (cancelled) return;\n consumedFromBus = true;\n itemsSourceRef.current = 'event';\n setItems(Array.isArray(payload) ? payload : []);\n setLoadError(null);\n setLoading(false);\n },\n { eager: true }\n );\n\n if (!sub || !consumedFromBus) {\n void load();\n }\n\n return () => {\n cancelled = true;\n sub?.off();\n };\n }, [load]);\n\n const filterKey = filterPaymentMethodCodes?.join(',') ?? '';\n\n useEffect(() => {\n if (itemsSourceRef.current !== 'api') return;\n\n if (prevFilterKeyRef.current === undefined) {\n prevFilterKeyRef.current = filterKey;\n return;\n }\n\n if (prevFilterKeyRef.current === filterKey) return;\n\n prevFilterKeyRef.current = filterKey;\n void load();\n }, [filterKey, load]);\n\n const removeToken = useCallback(async (publicHash: string) => {\n setActionError(null);\n setRemovingHash(publicHash);\n\n try {\n const ok = await deletePaymentToken(publicHash);\n\n if (ok) {\n setItems((prev) => prev.filter((t) => t.publicHash !== publicHash));\n } else {\n setActionError(PAYMENT_METHOD_REMOVE_FAILED);\n }\n } catch (e) {\n setActionError(e instanceof Error ? e.message : String(e));\n } finally {\n setRemovingHash(null);\n }\n }, []);\n\n const refetch = useCallback(async () => {\n if (itemsSourceRef.current === 'event') {\n const last = events.lastPayload(customerPaymentTokensEvent);\n\n if (last === undefined) return;\n\n setItems(Array.isArray(last) ? last : []);\n setLoadError(null);\n setActionError(null);\n return;\n }\n\n await load();\n }, [load]);\n\n return {\n items,\n loading,\n loadError,\n actionError,\n removingHash,\n removeToken,\n refetch,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 { Header, InLineAlert } from '@adobe-commerce/elsie/components';\nimport { WarningWithCircle as ErrorIcon } from '@adobe-commerce/elsie/icons';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { useCallback, useState } from 'preact/hooks';\nimport { CardLoader, EmptyList, PaymentCard, PaymentModal } from '@/account/components';\nimport {\n PAYMENT_METHOD_REMOVE_FAILED,\n usePaymentMethods,\n} from '@/account/hooks/containers/usePaymentMethods';\nimport type { StoredPaymentMethodDisplay } from '@/account/data/models';\nimport { PaymentMethodsWrapperProps } from '@/account/types';\nimport '@/account/components/PaymentMethodsWrapper/PaymentMethodsWrapper.css';\n\nexport const PaymentMethodsWrapper: Container<PaymentMethodsWrapperProps> = ({\n className,\n withHeader = true,\n minifiedView = false,\n filterPaymentMethodCodes,\n}) => {\n const translations = useText({\n containerTitle: 'Account.Payments.containerTitle',\n loadError: 'Account.Payments.loadError',\n removeError: 'Account.Payments.removeError',\n });\n\n const {\n items,\n loading,\n loadError,\n actionError,\n removingHash,\n removeToken,\n } = usePaymentMethods(filterPaymentMethodCodes);\n\n const [pendingRemoval, setPendingRemoval] =\n useState<StoredPaymentMethodDisplay | null>(null);\n\n const closeRemovalModal = useCallback(() => {\n setPendingRemoval(null);\n }, []);\n\n const confirmRemoveToken = useCallback(async () => {\n if (!pendingRemoval) return;\n\n await removeToken(pendingRemoval.publicHash);\n setPendingRemoval(null);\n }, [pendingRemoval, removeToken]);\n\n const removeErrorMessage: string =\n actionError === PAYMENT_METHOD_REMOVE_FAILED ?\n translations.removeError\n : (actionError ?? '');\n\n const paymentMethodRows =\n items.length > 0 ?\n items.map((token) => {\n const { publicHash, ...paymentCardProps } = token;\n\n return (\n <PaymentCard\n key={publicHash}\n {...paymentCardProps}\n minifiedView={minifiedView}\n onRemove={\n removingHash !== null ?\n undefined\n : () => setPendingRemoval(token)\n }\n />\n );\n })\n : null;\n\n const emptyPaymentsView =\n items.length === 0 && !loadError ?\n <div\n className=\"account-payment-methods__empty\"\n data-testid=\"paymentMethodsEmpty\"\n >\n <EmptyList\n isEmpty\n typeList=\"payments\"\n minifiedView={minifiedView}\n />\n </div>\n : null;\n\n return (\n <div\n className={classes(['account-payment-methods', className])}\n data-testid=\"paymentMethods\"\n >\n {withHeader ? (\n <Header\n aria-label={translations.containerTitle}\n role=\"region\"\n title={translations.containerTitle}\n divider={!minifiedView}\n className={classes([\n 'account-payment-methods-header-title',\n ['account-payment-methods-header', minifiedView],\n ])}\n level={minifiedView ? 2 : 1}\n />\n ) : null}\n\n {loadError ? (\n <InLineAlert\n className=\"account-payment-methods__alert\"\n type=\"error\"\n variant=\"secondary\"\n heading={translations.loadError}\n description={loadError}\n icon={<ErrorIcon />}\n data-testid=\"paymentMethodsLoadError\"\n />\n ) : null}\n\n {actionError && !loadError ? (\n <InLineAlert\n className=\"account-payment-methods__alert\"\n type=\"error\"\n variant=\"secondary\"\n heading={removeErrorMessage}\n icon={<ErrorIcon />}\n data-testid=\"paymentMethodsActionError\"\n />\n ) : null}\n\n <PaymentModal\n open={pendingRemoval !== null}\n submitLoading={\n pendingRemoval !== null &&\n removingHash === pendingRemoval.publicHash\n }\n onRemoveToken={() => {\n void confirmRemoveToken();\n }}\n closeModal={closeRemovalModal}\n cardBrand={pendingRemoval?.cardBrand}\n lastFourDigits={pendingRemoval?.lastFourDigits}\n expired={pendingRemoval?.expired}\n variant={pendingRemoval?.variant}\n minifiedView={minifiedView}\n />\n\n {loading ? (\n <CardLoader testId=\"paymentMethodsLoader\" />\n ) : (\n <div className=\"account-payment-methods__list\">\n {paymentMethodRows ?? emptyPaymentsView}\n </div>\n )}\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 { PaymentCard } from '@/account/components/PaymentCard';\nimport { PaymentModalProps } from '@/account/types';\nimport '@/account/components/PaymentModal/PaymentModal.css';\n\nexport const PaymentModal: FunctionComponent<PaymentModalProps> = ({\n open,\n submitLoading,\n onRemoveToken,\n closeModal,\n cardBrand,\n lastFourDigits,\n expired,\n variant,\n minifiedView,\n}) => {\n const translations = useText({\n title: 'Account.Payments.removePaymentModal.title',\n description: 'Account.Payments.removePaymentModal.description',\n actionCancel: 'Account.Payments.removePaymentModal.actionCancel',\n actionConfirm: 'Account.Payments.removePaymentModal.actionConfirm',\n });\n\n if (!open) return null;\n\n return (\n <Modal\n className=\"account-payment-modal--overlay\"\n title={<h3>{translations.title}</h3>}\n size=\"full\"\n data-testid=\"paymentModal\"\n showCloseButton\n onClose={closeModal}\n >\n <div className=\"account-payment-modal\">\n {submitLoading ? (\n <div\n className=\"account-payment-modal__spinner\"\n data-testid=\"progressSpinner\"\n >\n <ProgressSpinner stroke={'4'} size={'large'} />\n </div>\n ) : null}\n <p>{translations.description}</p>\n {cardBrand && lastFourDigits ? (\n <PaymentCard\n cardBrand={cardBrand}\n lastFourDigits={lastFourDigits}\n expired={expired}\n variant={variant}\n minifiedView={minifiedView}\n />\n ) : null}\n <div className=\"account-payment-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={onRemoveToken}>\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 { 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 hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n isOpen,\n fieldIdPrefix,\n onSubmit,\n onCloseBtnClick,\n onSuccess,\n onError,\n onChange,\n isB2BFlow,\n enforceB2BPermissions,\n permissions,\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 hasDefaultShippingAddress={hasDefaultShippingAddress}\n hasDefaultBillingAddress={hasDefaultBillingAddress}\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 isB2BFlow={isB2BFlow}\n enforceB2BPermissions={enforceB2BPermissions}\n permissions={permissions}\n />\n </div>\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 { useState, useCallback } from 'preact/hooks';\nimport { InLineAlertProps } from '../types';\nimport {\n CheckWithCircle as Success,\n Warning,\n WarningWithCircle as Error,\n} from '@adobe-commerce/elsie/icons';\n\nconst iconsList = {\n success: <Success />,\n warning: <Warning />,\n error: <Error />,\n};\n\nexport const useInLineAlert = () => {\n const [inLineAlertProps, setInLineAlertProps] = useState<InLineAlertProps>(\n {}\n );\n\n const handleSetInLineAlert = useCallback(\n (notification: InLineAlertProps | undefined) => {\n if (!notification?.type) {\n setInLineAlertProps({});\n return;\n }\n\n const icon = iconsList[notification.type];\n\n setInLineAlertProps({\n ...notification,\n icon,\n });\n },\n []\n );\n\n return { inLineAlertProps, handleSetInLineAlert };\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 { getOrderHistoryList, getStoreConfig } from '@/account/api';\nimport { OrderDetails } from '@/account/data/models';\nimport { UseOrdersListProps } from '@/account/types';\nimport { useCallback, useEffect, useState } from 'preact/hooks';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport const useOrdersList = ({\n ordersInMinifiedView,\n minifiedView,\n pageSize,\n selectedDate,\n selectedPage,\n searchText,\n handleSetFirstOrderDate,\n handleSetInLineAlert,\n}: UseOrdersListProps) => {\n const translations = useText({\n searchError: 'Account.fullSizeView.OrdersList.OrdersListSearch.error',\n });\n\n const [orderHistoryListItems, setOrderHistoryListItems] = useState<\n OrderDetails[]\n >([]);\n const [pageInfo, setPageInfo] = useState<{\n totalPages: number;\n currentPage: number;\n pageSize: number;\n }>({ totalPages: 1, currentPage: 1, pageSize: 1 });\n const [loading, setLoading] = useState(false);\n const [placeholderImage, setPlaceholderImage] = useState('');\n const [refetchTrigger, setRefetchTrigger] = useState(0);\n const refetchOrders = useCallback(() => {\n setRefetchTrigger((prev) => prev + 1);\n }, []);\n\n useEffect(() => {\n getStoreConfig().then((response) => {\n setPlaceholderImage(response.baseMediaUrl);\n });\n }, []);\n\n // Listen for company context changes to refetch orders\n useEffect(() => {\n const companyContextEvent = events.on(\n 'companyContext/changed',\n refetchOrders\n );\n\n return () => {\n companyContextEvent?.off();\n };\n }, [refetchOrders]);\n\n useEffect(() => {\n const abortController = new AbortController();\n\n setLoading(true);\n handleSetInLineAlert?.();\n\n getOrderHistoryList(\n minifiedView ? ordersInMinifiedView : pageSize,\n selectedDate,\n selectedPage,\n searchText,\n abortController.signal\n )\n .then((response) => {\n if (abortController.signal.aborted) return;\n if (!response?.items) {\n setOrderHistoryListItems([]);\n handleSetInLineAlert?.({\n type: 'error',\n text: translations.searchError,\n });\n return;\n }\n\n setPageInfo(response.pageInfo);\n setOrderHistoryListItems(response.items);\n handleSetFirstOrderDate?.(response.dateOfFirstOrder);\n })\n .catch(() => {\n if (abortController.signal.aborted) return;\n\n setOrderHistoryListItems([]);\n handleSetInLineAlert?.({\n type: 'error',\n text: translations.searchError,\n });\n })\n .finally(() => {\n if (abortController.signal.aborted) return;\n setLoading(false);\n });\n\n return () => {\n abortController.abort();\n };\n }, [\n handleSetFirstOrderDate,\n handleSetInLineAlert,\n minifiedView,\n ordersInMinifiedView,\n pageSize,\n selectedDate,\n selectedPage,\n searchText,\n refetchTrigger,\n translations.searchError,\n ]);\n\n return {\n loading,\n orderHistoryListItems,\n pageInfo,\n placeholderImage,\n refetchOrders,\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 interface FilterDateProps {\n from: string;\n to: string;\n}\n\nexport const getDateRange = (\n key: 'sixMonthsAgo' | 'oneYearAgo' | '',\n numberRange = 1\n): FilterDateProps | '' => {\n const currentDate = new Date();\n const pastDate = new Date(currentDate);\n\n switch (key) {\n case 'sixMonthsAgo': {\n pastDate.setMonth(pastDate.getMonth() - numberRange);\n break;\n }\n case 'oneYearAgo': {\n pastDate.setFullYear(pastDate.getFullYear() - numberRange);\n break;\n }\n default:\n return '';\n }\n\n const result = {\n from: pastDate?.toISOString().split('T')[0],\n to: `${currentDate?.toISOString().split('T')[0]} 23:59:59`,\n };\n\n return result;\n};\n\nexport const addYearsToList = (\n startYear: number\n): { value: string; text: string }[] => {\n const result = [];\n const currentYear = new Date().getFullYear();\n\n for (let year = startYear; year <= currentYear - 1; year++) {\n result.push({\n value: `{\"from\":\"${year}-01-01\",\"to\":\"${year + 1}-01-01 23:59:59\"}`,\n text: year.toString(),\n });\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 { addYearsToList, getDateRange } from '@/account/lib/getDateRange';\nimport type { OrdersListSearchScope } from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { useCallback, useMemo, useState, useEffect } from 'preact/hooks';\n\nexport const useOrderSelectList = (\n searchScope: OrdersListSearchScope = 'selectedDate'\n) => {\n const translations = useText({\n pastSixMonths:\n 'Account.fullSizeView.OrdersList.OrdersListSelectDate.pastSixMonths',\n currentYear:\n 'Account.fullSizeView.OrdersList.OrdersListSelectDate.currentYear',\n viewAll: 'Account.fullSizeView.OrdersList.OrdersListSelectDate.viewAll',\n });\n\n const [firstOrderDate, setFirstOrderDate] = useState<string>();\n const [selectedDate, setSelectedDate] = useState<string>(\n JSON.stringify(getDateRange('sixMonthsAgo', 6))\n );\n const [selectedPage, setSelectedPage] = useState<number>(1);\n const [searchText, setSearchText] = useState<string>('');\n\n useEffect(() => {\n window?.scrollTo({\n top: 100,\n behavior: 'smooth',\n });\n }, [selectedPage]);\n\n const selectableDateList = useMemo(() => {\n const result = [\n {\n value: JSON.stringify(getDateRange('sixMonthsAgo', 6)),\n text: translations.pastSixMonths,\n },\n {\n value: JSON.stringify(getDateRange('oneYearAgo', 1)),\n text: translations.currentYear,\n },\n {\n value: 'viewAll',\n text: translations.viewAll,\n },\n ];\n\n if (firstOrderDate) {\n const date = new Date(firstOrderDate);\n const year = date.getFullYear();\n\n result?.splice(2, 0, ...addYearsToList(year));\n }\n\n return result;\n }, [translations, firstOrderDate]);\n\n const handleSetFirstOrderDate = useCallback((date: string) => {\n setFirstOrderDate(date);\n }, []);\n\n const handleSelectDate = useCallback((event: Event) => {\n const selectElement = event.target as HTMLSelectElement;\n\n const selectedValue = selectElement.value;\n\n setSelectedDate(selectedValue);\n setSelectedPage(1);\n }, []);\n\n const handleSearch = useCallback(\n (value: string) => {\n setSearchText(value);\n if (value && searchScope === 'allOrders') {\n setSelectedDate('viewAll');\n }\n setSelectedPage(1);\n },\n [searchScope]\n );\n\n return {\n selectableDateList,\n selectedDate,\n selectedPage,\n searchText,\n handleSelectDate,\n handleSearch,\n setSelectedPage,\n handleSetFirstOrderDate,\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 { useId } from 'preact/compat';\nimport { useRef, useState } from 'preact/hooks';\nimport { classes, Container, Slot } from '@adobe-commerce/elsie/lib';\nimport {\n CardLoader,\n EmptyList,\n OrdersListAction,\n OrdersListCard,\n} from '@/account/components';\nimport {\n Button,\n Field,\n Header,\n InLineAlert,\n Input,\n type InputProps,\n LiveRegion,\n Pagination,\n Picker,\n} from '@adobe-commerce/elsie/components';\nimport { Close, Search } from '@adobe-commerce/elsie/icons';\nimport { useOrdersList } from '@/account/hooks/containers/useOrdersList';\nimport { useInLineAlert } from '@/account/hooks/useInLineAlert';\nimport { OrdersListWrapperProps } from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n ORDER_SEARCH_MAX_LENGTH,\n ORDER_SEARCH_MIN_LENGTH,\n} from '@/account/configs/orderSearch.config';\nimport '@/account/components/OrdersListWrapper/OrdersListWrapper.css';\nimport { useOrderSelectList } from '@/account/hooks/containers/useOrderSelectList';\n\ninterface OrderSearchInputProps extends InputProps {\n actionLabel: string;\n actionDisabled: boolean;\n clearLabel: string;\n onClear: () => void;\n}\n\ninterface OrderSearchProps {\n handleSearch: (value: string) => void;\n refetchOrders: () => void;\n searchText: string;\n}\n\nconst OrderSearchInput: FunctionComponent<OrderSearchInputProps> = ({\n actionLabel,\n actionDisabled,\n clearLabel,\n onClear,\n error,\n ...inputProps\n}) => (\n <div\n className={classes([\n 'account-orders-list__search-input',\n ['account-orders-list__search-input--has-clear', !actionDisabled],\n ['account-orders-list__search-input--error', !!error],\n ])}\n >\n <Input {...inputProps} error={error} aria-invalid={!!error} />\n <div className=\"account-orders-list__search-actions\">\n {!actionDisabled ? (\n <Button\n className=\"account-orders-list__search-clear\"\n type=\"button\"\n variant=\"tertiary\"\n icon={<Close />}\n aria-label={clearLabel}\n onClick={onClear}\n />\n ) : null}\n <Button\n className=\"account-orders-list__search-submit\"\n type=\"submit\"\n variant=\"tertiary\"\n icon={<Search />}\n aria-label={actionLabel}\n disabled={actionDisabled}\n />\n </div>\n </div>\n);\n\nconst OrderSearch: FunctionComponent<OrderSearchProps> = ({\n handleSearch,\n refetchOrders,\n searchText,\n}) => {\n const translations = useText({\n action: 'Account.fullSizeView.OrdersList.OrdersListSearch.action',\n clear: 'Account.fullSizeView.OrdersList.OrdersListSearch.clear',\n label: 'Account.fullSizeView.OrdersList.OrdersListSearch.label',\n minimumLength:\n 'Account.fullSizeView.OrdersList.OrdersListSearch.minimumLength',\n placeholder: 'Account.fullSizeView.OrdersList.OrdersListSearch.placeholder',\n });\n const [searchInput, setSearchInput] = useState(searchText);\n const [searchError, setSearchError] = useState('');\n const searchFormRef = useRef<HTMLFormElement>(null);\n const searchInputId = `${useId()}-order-search`;\n const hasSearchTerm = Boolean(searchInput.trim() || searchText);\n\n const applySearch = (term: string) => {\n setSearchError('');\n setSearchInput(term);\n\n if (term !== searchText) {\n handleSearch(term);\n } else if (term) {\n // re-submitting the same term refreshes the current results\n refetchOrders();\n }\n };\n\n const runSearch = () => {\n const term = searchInput.trim();\n\n if (term.length > 0 && term.length < ORDER_SEARCH_MIN_LENGTH) {\n setSearchError(translations.minimumLength);\n return;\n }\n\n applySearch(term);\n };\n\n const clearSearch = () => {\n applySearch('');\n\n const input = searchFormRef.current?.elements.namedItem('orderSearch');\n\n if (input instanceof HTMLInputElement) {\n input.focus();\n }\n };\n\n return (\n <form\n ref={searchFormRef}\n className=\"account-orders-list__search\"\n role=\"search\"\n aria-label={translations.action}\n onSubmit={(event) => {\n event.preventDefault();\n runSearch();\n }}\n >\n <Field label={translations.label} error={searchError || undefined}>\n <OrderSearchInput\n id={searchInputId}\n name=\"orderSearch\"\n value={searchInput}\n maxLength={ORDER_SEARCH_MAX_LENGTH}\n placeholder={translations.placeholder}\n actionLabel={translations.action}\n actionDisabled={!hasSearchTerm}\n clearLabel={translations.clear}\n onClear={clearSearch}\n onInput={(event) => {\n setSearchInput(event.currentTarget.value);\n setSearchError('');\n }}\n />\n </Field>\n </form>\n );\n};\n\nexport const OrdersListWrapper: Container<OrdersListWrapperProps> = ({\n className,\n withHeader = true,\n minifiedView = false,\n withThumbnails = true,\n withFilter = true,\n withSearch = false,\n searchScope = 'selectedDate',\n ordersInMinifiedView = 1,\n pageSize = 10,\n routeOrdersList,\n routeOrderDetails,\n routeReturnDetails,\n routeTracking,\n routeOrderProduct,\n slots,\n}) => {\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n containerTitle: `Account.${minifiedViewKey}.OrdersList.containerTitle`,\n dateOrderPlaced: `Account.${minifiedViewKey}.OrdersList.dateOrderPlaced`,\n loading: 'Account.OrdersList.loading',\n loaded: 'Account.OrdersList.loaded',\n });\n\n const {\n selectableDateList,\n selectedDate,\n handleSelectDate,\n selectedPage,\n searchText,\n handleSearch,\n setSelectedPage,\n handleSetFirstOrderDate,\n } = useOrderSelectList(searchScope);\n\n const { inLineAlertProps, handleSetInLineAlert } = useInLineAlert();\n\n const {\n pageInfo,\n loading,\n orderHistoryListItems,\n placeholderImage,\n refetchOrders,\n } = useOrdersList({\n minifiedView,\n pageSize,\n ordersInMinifiedView,\n selectedDate,\n selectedPage,\n searchText,\n handleSetFirstOrderDate,\n handleSetInLineAlert,\n });\n\n return (\n <div>\n {withHeader ? (\n <Header\n aria-label={translations.containerTitle}\n role=\"region\"\n title={translations.containerTitle}\n divider={!minifiedView}\n className={classes([\n 'account-orders-list-header-title',\n ['account-orders-list-header', minifiedView],\n ])}\n level={minifiedView ? 2 : 1}\n />\n ) : null}\n\n <div className={classes(['account-orders-list', className])}>\n <LiveRegion\n message={loading ? translations.loading : translations.loaded}\n />\n {!minifiedView && (withSearch || withFilter) ? (\n <div className={'account-orders-list__controls'}>\n {withFilter ? (\n <Field\n className=\"account-orders-list__date-select\"\n label={translations.dateOrderPlaced}\n >\n <Picker\n id=\"orderDatePicker\"\n value={selectedDate}\n name=\"orderDatePicker\"\n aria-label={translations.dateOrderPlaced}\n options={selectableDateList}\n handleSelect={handleSelectDate}\n />\n </Field>\n ) : null}\n\n {withSearch ? (\n <OrderSearch\n handleSearch={handleSearch}\n refetchOrders={refetchOrders}\n searchText={searchText}\n />\n ) : null}\n </div>\n ) : null}\n\n {inLineAlertProps.text ? (\n <InLineAlert\n data-testid=\"ordersListInLineAlert\"\n className=\"account-orders-list__notification\"\n type={inLineAlertProps.type}\n variant=\"secondary\"\n heading={inLineAlertProps.text}\n icon={inLineAlertProps.icon}\n />\n ) : null}\n\n {!loading ? (\n <>\n {orderHistoryListItems.length ? (\n <>\n {orderHistoryListItems.map((el, index) => {\n return (\n <OrdersListCard\n placeholderImage={placeholderImage}\n routeTracking={routeTracking}\n routeOrderProduct={routeOrderProduct}\n routeReturnDetails={routeReturnDetails}\n minifiedView={minifiedView}\n item={el}\n withThumbnails={withThumbnails}\n key={index}\n slots={slots}\n >\n {slots?.OrdersListAction ? (\n <Slot\n data-testid={`ordersListActionSlot_${index}`}\n name=\"OrdersListAction\"\n slot={slots?.OrdersListAction}\n context={{ orderHistoryListItem: el }}\n />\n ) : (\n <OrdersListAction\n minifiedView={minifiedView}\n orderNumber={el.number}\n orderToken={el.token}\n routeOrderDetails={routeOrderDetails}\n />\n )}\n </OrdersListCard>\n );\n })}\n </>\n ) : (\n <EmptyList\n isEmpty={!orderHistoryListItems.length}\n typeList=\"orders\"\n minifiedView={minifiedView}\n />\n )}\n </>\n ) : (\n <>\n {Array.from(Array(pageInfo?.pageSize).keys()).map((i) => (\n <CardLoader\n testId={'orderSkeletonLoader'}\n withCard={false}\n key={i}\n />\n ))}\n </>\n )}\n {!minifiedView && pageInfo?.totalPages > 1 ? (\n <Pagination\n totalPages={pageInfo?.totalPages}\n currentPage={selectedPage}\n onChange={setSelectedPage}\n />\n ) : null}\n\n {minifiedView ? (\n <OrdersListAction\n minifiedView={minifiedView}\n routeOrdersList={routeOrdersList}\n />\n ) : null}\n </div>\n </div>\n );\n};\n"],"names":["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","onSubmit","onChange","setInputChange","formName","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","overrideValues","fieldsForm","data","initialData","errorList","prev","sessionAddressForm","hasCountryCode","hasRegion","handleInputChange","errorsProp","type","checked","exclusiveToggleValues","updatedFormData","onFocus","handleBlur","handleSubmit","FieldEnumList","AUTOCOMPLETE_BY_CODE","getAutoComplete","code","FormInputs","memo","loading","values","className","onBlur","slots","fieldIdPrefix","itemClassName","translationKeys","useMemo","field","getAriaLabel","item","getFloatingLabel","getPlaceholder","renderSlot","errorMessage","contextValue","jsx","Slot","selectElement","valueMessage","defaultSelectValue","option","Fragment","Field","classes","Picker","inputElement","Input","inputDateElement","InputDate","inputCheckBoxElement","Checkbox","textAreaElement","TextArea","CardLoader","testId","withCard","defaultSkeleton","jsxs","Skeleton","SkeletonRow","Card","AddressFormLoader","AddressActionsLoader","Form","forwardRef","showFormLoader","children","forwardFormRef","regionOptions","showSaveCheckBox","handleSaveCheckBoxAddress","saveCheckBoxAddress","useImperativeHandle","modifyFormRef","getAddressButtonAriaLabel","defaultShipping","defaultBilling","isRemove","labelMap","AddressCard","selectable","selectShipping","selectBilling","variant","minifiedView","keysSortOrder","addressData","setAddressId","handleRenderModal","handleRenderForm","isB2BFlow","permissions","addressCardAriaId","useId","minifiedViewKey","defaultBillingLabel","defaultShippingLabel","defaultLabelText","bookShippingLabel","bookBillingLabel","getLabelStatus","handleRemove","handleEdit","normalizeAddress","region","address","modifyAddressData","normalizedAddress","shippingLabel","billingLabel","hideShipping","hideBilling","Button","Tag","SvgAdd","props","React","SvgAddressBook","SvgCard","SvgCheckWithCircle","SvgChevronRight","SvgClose","SvgEmptyBox","SvgSearch","SvgWarning","SvgWarningWithCircle","AddressActions","addNewAddress","routeAddressesPage","TagType","buttonProps","nonSelectableViewButton","buttonText","Icon","ChevronRight","Add","AddressModal","open","submitLoading","onRemoveAddress","closeModal","isDeleteDisabled","Modal","ProgressSpinner","EmptyList","typeList","isEmpty","AddressBook","EmptyBox","IllustratedMessage","iconConfig","OrdersListAction","orderNumber","orderToken","routeOrdersList","routeOrderDetails","useIsMobile","isMobile","setIsMobile","handleResize","OrdersListCard","placeholderImage","withThumbnails","routeTracking","routeOrderProduct","routeReturnDetails","hasProductRoute","orderItemsImages","orderItem","defaultImageProps","Image","trackingRoute","_c","_d","returnData","Price","_f","_e","_h","_g","_i","_j","sum","quantityOrdered","_k","_l","ContentGrid","resolveAddressesContextMode","contextMode","resolveEnforceB2BPermissions","resolvedContextMode","resolveIsCheckoutContext","resolveIsB2BCandidate","b2bEnabled","isB2BCustomer","resolveHasB2BContainerAccess","resolveIsB2BWithoutViewAccess","isB2BCandidate","isCompanyAddressBookEnabled","enforceB2BPermissions","hasB2BContainerAccess","resolveIsB2BFlow","isB2BWithoutViewAccess","resolveIsAddressSelectionLocked","isCheckoutContext","isCustomShippingAddressAllowed","shouldSkipAddressFetchForCustomerType","customerTypeLoading","shouldSkipAddressFetchForPermissions","permissionsLoading","shouldApplyB2BAddressBookFlow","shouldReturnEmptyWithinAddressBook","manageAddressDeletion","removeId","addressesList","updateCustomerAddress","newDefaultAddress","fallbackDefaultAddress","updatedDefaultAddress","defaultAttributePreset","defaultAccountAttributePreset","sortingAddressesList","copyAddressList","CompanyAddressTypeEnum","resolveAddressType","hasDefaultShipping","hasDefaultBilling","filterB2BCheckoutAddressesByType","addresses","isShippingOnly","expectedType","useCustomerType","enabled","setLoading","setIsB2BCustomer","isSubscribed","getCustomerCompanyContext","isB2BContext","error","useCompanyAddressPermissions","setPermissions","getDefaultCompanyAddressPermissions","getCustomerRolePermissions","resolvedPermissions","sanitizeB2BCheckoutAddressPayload","payloadData","sanitizedRegion","rawRegionId","trimmedRegionId","resolveAddressSelectionPayloadData","normalizedData","payload","sanitizedPayload","useAddresses","defaultSelectAddressId","onAddressData","onSuccess","selectedAddressOption","setSelectedAddressOption","isModalRendered","setIsModalRendered","isFormRendered","setIsFormRendered","setSubmitLoading","setAddNewAddress","addressId","setEditAddressId","setAddressesList","setKeysSortOrder","setIsCompanyAddressBookEnabled","setIsCustomShippingAddressAllowed","isAddressSelectionLocked","applyAttributesSortOrder","attributesFormResponse","label","convertToCamelCase","getAddressesList","shouldWaitForCustomerType","shouldWaitForPermissions","getCompanyAddressBook","isAddressBookEnabled","allowCustomShippingAddress","getAttributesForm","addressItems","normalizedAddressItems","defaultAddresses","addressesToSet","addressResponse","getCustomerAddress","selectedItem","normalizeAddressData","selectedValue","setEditingAddressId","id","handleSelectAddressOption","nextSibling","onCloseBtnClick","removeAddress","deleteCompanyAddress","removeCustomerAddress","closeNewAddressForm","redirectToAddressesRoute","handleOnSuccess","AddressesWrapper","hideActionFormButtons","inputName","title","headerLevel","addressFormTitle","saveCheckBoxValue","withHeader","withActionsInMinifiedView","withActionsInFullSizeView","inputsDefaultValueSet","showShippingCheckBox","showBillingCheckBox","shippingCheckBoxValue","billingCheckBoxValue","onError","shouldEnforceB2BPermissions","aclRestrictedB2BFlow","headerTitle","hasDefaultShippingAddress","hasDefaultBillingAddress","addressesComponent","sortedAddressesList","addressesFooterSection","AddressForm","generalLabelId","valueForSelection","inputId","labelId","Header","LiveRegion","defaultCheckBox","defaultTextField","defaultShippingCheckBox","defaultBillingCheckBox","defaultAddressTypeShippingCheckBox","defaultAddressTypeBillingCheckBox","defaultIsDefaultCheckBox","defaultNicknameField","getFieldsConfig","itemValues","attributesFormList","newItemValues","newField","getFormValues","form","prepareNormalizedData","countryOptions","disableField","isRequiredRegion","isRequiredPostCode","keepDefaultCheckBoxesOnEdit","normalizeAttributes","baseKeys","serializeAddressForm","formValues","streetListKeys","elementValues","streetList","modifyFormCheckBoxValues","street","streetMultiline_2","streetMultiline_1","regionConfigs","transformSessionData","regions","transformedData","foundRegion","val","resolveShouldEnforceB2BPermissions","resolveTemporaryCheckoutAddressMode","hasSingleDefaultTypeViolation","requestPayload","hasConflictingTypeSelection","shouldOmitDefaultFlagsFromPayload","canSetDefaultAddress","canSetAddressAsDefault","canSetDefaultAddressInForm","isTemporaryCheckoutAddressMode","getSanitizedAddressPayload","resolveUpdateAddressAlertKey","canEditAddress","resolveCreateAddressAlertKey","canCreateAddress","resolveAddressFormErrorMessage","resolveBaseCheckBoxRules","normalizeB2CCreateDefaults","baseRules","rules","B2B_CREATE_DEFAULT_RULES","resolveB2BCreateDefaults","hasShipping","hasBilling","ruleKey","resolveB2BDefaultCheckBoxRules","isCreateMode","findNonEmptyObject","obj1","obj2","isNicknameField","useAddressForm","addressFormId","inLineAlert","setInLineAlert","setAttributesFormList","countriesData","setCountriesData","inputChange","savedData","setDisableField","setSaveCheckBoxAddress","canEditAddressInCurrentMode","canSetDefaultAddressInCurrentMode","isB2BEditMode","isSetDefaultOnlyEditMode","isAddressTypeSelectionOnlyMode","attributeFormResponse","getCountries","availableCountries","countriesWithRequiredRegion","optionalZipCountries","country","c","handleOnCloseForm","resolveSelectedAddressType","resolveIsDefaultSelection","handleUpdateAddress","valid","originalAddressType","selectedAddressType","selectedIsDefault","normalizedAddressType","setDefaultCompanyAddress","validationAlertKey","b2bUpdatePayload","shouldSetAsDefault","updateCompanyAddress","customerUpdatePayload","handleCreateAddress","saveAddressBook","createdAddress","createCompanyAddress","createCustomerAddress","b2bDefaultCheckBoxRules","normalizeFieldsConfig","hasRenderableNicknameField","normalizedAttributesFormList","liveAddressTypeBilling","liveAddressTypeShipping","isDefaultAddressSelected","isB2BTypeSelectionDisabled","isB2BIsDefaultDisabled","shouldHideB2BAddressOptions","shippingCheckBox","billingCheckBox","b2bAddressTypeShippingCheckBox","b2bAddressTypeBillingCheckBox","b2bIsDefaultLabel","b2bIsDefaultCheckBox","updatedAttributesFormList","sessionAddressFormData","baseItemValues","itemValuesForFields","normalizedFields","transformDefaultValuesAddresses","customAttributesObject","attr","restOfObject","AddressFormWrapper","addressesFormTitle","isOpen","shouldShowSaveCheckBox","isEditMode","canEditInB2B","canSetDefaultInB2B","canCreateInB2B","isFormDisabled","noPermissionMessage","formKey","setFormKey","previousDefaultValuesRef","serializedDefaultValues","isInitialRun","prevKey","InLineAlert","getCachedStoreConfig","storeConfigString","useGetStoreConfigs","passwordConfigs","setPasswordConfigs","remoteShoppingAssistanceConfigs","setRemoteShoppingAssistanceConfigs","applyStoreConfig","requiredCharacterClasses","shoppingAssistanceEnabled","shoppingAssistanceCheckboxTitle","shoppingAssistanceCheckboxTooltip","cachedStoreConfig","getStoreConfig","response","validationChangePassword","currentPassword","newPassword","confirmPassword","DEFAULT_ERRORS_STATE","arePasswordsEmpty","isNewPasswordMismatch","validationUniqueSymbolsPassword","password","uniqueSymbolsCount","numbers","lowerCaseLetter","upperCaseLetter","specialSymbols","useChangePassword","handleSetInLineAlert","handleHideChangePassword","isClickSubmit","setIsClickSubmit","setCurrentPassword","setNewPassword","setConfirmPassword","passwordErrors","setPasswordErrors","hideChangePassword","handleCurrentPasswordChange","handleNewPasswordChange","handleConfirmPasswordChange","handleOnBlurPassword","validatePasswords","isValid","mutationChangePassword","requiredPasswordLength","updateCustomerPassword","usePasswordValidationMessage","isValidUniqueSymbols","setIsValidUniqueSymbols","defaultLengthMessage","defaultMessage","getErrorMessage","isSubmit","ChangePassword","inLineAlertProps","InputPassword","EditCustomerInformation","errorPasswordEmpty","passwordValue","showPasswordOnEmailChange","formFieldsList","handleHideEditForm","handleUpdateCustomerInformation","handleSetPassword","CustomerInformationCard","createdAt","orderedCustomerData","showEditForm","showChangePassword","handleShowChangePassword","handleShowEditForm","formatAddressLine","city","post","cityRegion","cityRegionPost","line3","AddressBlock","selected","busy","line1","line2","ToggleButton","AddressValidation","originalAddress","onSelectionChange","selection","suggestedAddress","hasSuggestion","SellerAssistedBuyingSettingsControl","isRemoteShoppingAssistanceAvailable","isRemoteShoppingAssistanceEnabled","showAlert","checkboxLabel","checkboxTooltip","alertMessage","featureDisabledMessage","handleCheckboxChange","handleDismissAlert","showTooltip","setShowTooltip","SellerAssistedBuyingActivityTable","adminAssistanceActions","tableHeaders","actionTypesMap","emptyStateMessage","currentPage","onPageChange","withWrapper","columns","rowData","totalPages","showPagination","table","Table","Pagination","PaymentCard","cardBrand","lastFourDigits","expired","onRemove","paymentCardAriaId","maskedNumber","cardDescription","customerPaymentTokensEvent","PAYMENT_METHOD_REMOVE_FAILED","usePaymentMethods","filterPaymentMethodCodes","itemsSourceRef","prevFilterKeyRef","items","setItems","loadError","setLoadError","actionError","setActionError","removingHash","setRemovingHash","load","next","getCustomerPaymentTokens","e","cancelled","consumedFromBus","sub","events","filterKey","removeToken","publicHash","deletePaymentToken","t","refetch","last","PaymentMethodsWrapper","pendingRemoval","setPendingRemoval","closeRemovalModal","confirmRemoveToken","removeErrorMessage","paymentMethodRows","token","paymentCardProps","emptyPaymentsView","ErrorIcon","PaymentModal","onRemoveToken","iconsList","Success","Warning","Error","useInLineAlert","setInLineAlertProps","notification","icon","useOrdersList","ordersInMinifiedView","pageSize","selectedDate","selectedPage","searchText","handleSetFirstOrderDate","orderHistoryListItems","setOrderHistoryListItems","pageInfo","setPageInfo","setPlaceholderImage","refetchTrigger","setRefetchTrigger","refetchOrders","companyContextEvent","abortController","getOrderHistoryList","getDateRange","numberRange","currentDate","pastDate","addYearsToList","startYear","currentYear","year","useOrderSelectList","searchScope","firstOrderDate","setFirstOrderDate","setSelectedDate","setSelectedPage","setSearchText","selectableDateList","handleSelectDate","handleSearch","OrderSearchInput","actionLabel","actionDisabled","clearLabel","onClear","inputProps","Close","Search","OrderSearch","searchInput","setSearchInput","searchError","setSearchError","searchFormRef","searchInputId","hasSearchTerm","applySearch","term","runSearch","ORDER_SEARCH_MIN_LENGTH","clearSearch","ORDER_SEARCH_MAX_LENGTH","OrdersListWrapper","withFilter","withSearch","i"],"mappings":"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","x_google_ignoreList":[14,15,16,17,18,19,20,21,22,23]}
1
+ {"version":3,"file":"AddressForm.js","sources":["/@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/Card.svg","../../node_modules/@adobe-commerce/elsie/src/icons/CheckWithCircle.svg","../../node_modules/@adobe-commerce/elsie/src/icons/ChevronRight.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Close.svg","../../node_modules/@adobe-commerce/elsie/src/icons/EmptyBox.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Search.svg","../../node_modules/@adobe-commerce/elsie/src/icons/Warning.svg","../../node_modules/@adobe-commerce/elsie/src/icons/WarningWithCircle.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/components/OrdersListAction/OrdersListAction.tsx","/@dropins/storefront-account/src/hooks/useIsMobile.tsx","/@dropins/storefront-account/src/components/OrdersListCard/OrdersListCard.tsx","/@dropins/storefront-account/src/lib/addressFlowRules.ts","/@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/types/api/companyAddress.types.ts","/@dropins/storefront-account/src/lib/filterB2BCheckoutAddressesByType.ts","/@dropins/storefront-account/src/hooks/useCustomerType.tsx","/@dropins/storefront-account/src/hooks/useCompanyAddressPermissions.tsx","/@dropins/storefront-account/src/lib/addressSelectionPayloadRules.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/lib/addressFormRules.ts","/@dropins/storefront-account/src/hooks/containers/useAddressForm.tsx","/@dropins/storefront-account/src/lib/transformDefaultValuesAddresses.ts","/@dropins/storefront-account/src/components/AddressFormWrapper/AddressFormWrapper.tsx","/@dropins/storefront-account/src/hooks/containers/useGetStoreConfigs.tsx","/@dropins/storefront-account/src/lib/validationChangePassword.ts","/@dropins/storefront-account/src/lib/validationUniqueSymbolsPassword.ts","/@dropins/storefront-account/src/hooks/components/useChangePassword.tsx","/@dropins/storefront-account/src/hooks/components/usePasswordValidationMessage.tsx","/@dropins/storefront-account/src/components/ChangePassword/ChangePassword.tsx","/@dropins/storefront-account/src/components/EditCustomerInformation/EditCustomerInformation.tsx","/@dropins/storefront-account/src/components/CustomerInformationCard/CustomerInformationCard.tsx","/@dropins/storefront-account/src/components/AddressValidation/AddressValidation.tsx","/@dropins/storefront-account/src/components/SellerAssistedBuyingSettingsControl/SellerAssistedBuyingSettingsControl.tsx","/@dropins/storefront-account/src/components/SellerAssistedBuyingActivityTable/SellerAssistedBuyingActivityTable.tsx","/@dropins/storefront-account/src/components/PaymentCard/PaymentCard.tsx","/@dropins/storefront-account/src/hooks/containers/usePaymentMethods.tsx","/@dropins/storefront-account/src/components/PaymentMethodsWrapper/PaymentMethodsWrapper.tsx","/@dropins/storefront-account/src/components/PaymentModal/PaymentModal.tsx","/@dropins/storefront-account/src/containers/AddressForm/AddressForm.tsx","/@dropins/storefront-account/src/hooks/useInLineAlert.tsx","/@dropins/storefront-account/src/hooks/containers/useOrdersList.tsx","/@dropins/storefront-account/src/lib/getDateRange.ts","/@dropins/storefront-account/src/hooks/containers/useOrderSelectList.tsx","/@dropins/storefront-account/src/components/OrdersListWrapper/OrdersListWrapper.tsx"],"sourcesContent":["/* 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 nickname: '',\n city: '',\n company: '',\n countryCode: '',\n addressType: '',\n addressTypeShipping: '',\n addressTypeBilling: '',\n isDefault: '',\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 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 overrideValues?: Record<string, string | number | boolean>\n ) => {\n const fieldsForm = {\n ...getFormValuesFromRef(formRef),\n ...(overrideValues || {}),\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 // Only the company address book restricts an address to a single type,\n // and it expresses that through the addressType pair below. A personal\n // address keeps two independent default flags, so defaultShipping and\n // defaultBilling must stay selectable together — those fields are only\n // ever rendered outside the company address book flow.\n const exclusiveToggleValues: Record<string, boolean> =\n type === 'checkbox' && name === 'addressTypeShipping' && checked\n ? { addressTypeBilling: false }\n : type === 'checkbox' && name === 'addressTypeBilling' && checked\n ? { addressTypeShipping: false }\n : {};\n\n setFormData((prev) => {\n const updatedFormData = {\n ...prev,\n ...exclusiveToggleValues,\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?.({\n ...exclusiveToggleValues,\n [name]: fieldValue,\n });\n setShouldBlockEffect(true);\n\n const fieldConfig = fieldsConfig?.find((config) =>\n config.customUpperCode.includes(name)\n );\n\n const 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(\n fieldValue,\n name,\n requiredFields,\n event,\n exclusiveToggleValues\n );\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\nconst AUTOCOMPLETE_BY_CODE: Record<string, string> = {\n firstname: 'given-name',\n middlename: 'additional-name',\n lastname: 'family-name',\n email: 'email',\n};\n\nconst getAutoComplete = (code: string) => AUTOCOMPLETE_BY_CODE[code];\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 item.forceLabel ? item.label : 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 ??\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 disabled={loading || item.disabled}\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 || item.disabled}\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 autoComplete={getAutoComplete(item.code)}\n value={valueMessage ?? item.defaultValue}\n placeholder={getPlaceholder(item)}\n floatingLabel={getFloatingLabel(item)}\n onBlur={onBlur}\n onFocus={onFocus}\n onChange={onChange}\n disabled={loading || item.disabled}\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={loading || item.disabled || item?.isHidden}\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={\n typeof valueMessage === 'boolean'\n ? valueMessage\n : Boolean(item.defaultValue)\n }\n placeholder={getPlaceholder(item)}\n label={getFloatingLabel(item)}\n onBlur={onBlur}\n onChange={onChange}\n disabled={loading || item.disabled || item?.isHidden}\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 || item.disabled}\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 disabled={loading || item.disabled}\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 AddressActionsLoader = () => {\n return (\n <Skeleton\n data-testid=\"addressActionsLoader\"\n className=\"account-account-loaders--address-actions-loader\"\n >\n <SkeletonRow size=\"medium\" />\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 isB2BFlow,\n permissions,\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 cardLabelDefaultShipping: `Account.${minifiedViewKey}.Addresses.addressCard.cardLabelDefaultShipping`,\n cardLabelDefaultBilling: `Account.${minifiedViewKey}.Addresses.addressCard.cardLabelDefaultBilling`,\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 // Company address book (isB2BFlow) shows explicit DEFAULT SHIPPING/BILLING\n // tags on the address-book card; regular B2C/B2B-without-book keep SHIPPING/BILLING.\n const bookShippingLabel = isB2BFlow\n ? translations.cardLabelDefaultShipping.toLocaleUpperCase()\n : defaultShippingLabel;\n const bookBillingLabel = isB2BFlow\n ? translations.cardLabelDefaultBilling.toLocaleUpperCase()\n : defaultBillingLabel;\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 || !addressData) return [];\n\n const { region, ...address } = addressData as CustomerAddressesModel;\n\n const modifyAddressData = {\n ...address,\n ...(region || {}),\n } as any;\n\n const normalizedAddress = 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\n if (\n modifyAddressData.nickname &&\n !normalizedAddress.some(({ name }) => name === 'nickname')\n ) {\n normalizedAddress.push({\n name: 'nickname',\n orderNumber: Number.MAX_SAFE_INTEGER,\n value: modifyAddressData.nickname,\n label: null,\n });\n }\n\n return normalizedAddress;\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 && (!isB2BFlow || permissions?.canDeleteAddress) ? (\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 (!isB2BFlow ||\n permissions?.canEditAddress ||\n permissions?.canSetDefaultAddress) ? (\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={bookShippingLabel} />\n ) : null}\n {addressData?.defaultBilling ? (\n <Tag label={bookBillingLabel} />\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 SvgCard = (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\", { vectorEffect: \"non-scaling-stroke\", d: \"M2.00718 5H22.1507C22.7047 5 23.1579 5.45323 23.1579 6.00718V7.51794C23.1579 7.51794 1.01007 7.58844 1 7.55823V6.00718C1 5.45323 1.45323 5 2.00718 5Z\", stroke: \"currentColor\", strokeWidth: 1 }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M23.1579 9.78409V18.3451C23.1579 18.899 22.7047 19.3523 22.1507 19.3523H2.00718C1.45323 19.3523 1 18.899 1 18.3451V9.78409H23.1579Z\", stroke: \"currentColor\", strokeWidth: 1 }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M3.01465 15.9682H8.40305\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M17.6192 17.5897C18.4535 17.5897 19.1299 16.9133 19.1299 16.0789C19.1299 15.2446 18.4535 14.5682 17.6192 14.5682C16.7848 14.5682 16.1084 15.2446 16.1084 16.0789C16.1084 16.9133 16.7848 17.5897 17.6192 17.5897Z\", stroke: \"currentColor\", strokeWidth: 1 }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M19.8848 17.5897C20.7192 17.5897 21.3956 16.9133 21.3956 16.0789C21.3956 15.2446 20.7192 14.5682 19.8848 14.5682C19.0504 14.5682 18.374 15.2446 18.374 16.0789C18.374 16.9133 19.0504 17.5897 19.8848 17.5897Z\", stroke: \"currentColor\", strokeWidth: 1 }));\nexport default SvgCard;\n","import * as React from \"react\";\nconst SvgCheckWithCircle = (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\", { vectorEffect: \"non-scaling-stroke\", d: \"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M6.75 12.762L10.2385 15.75L17.25 9\", stroke: \"currentColor\" }));\nexport default SvgCheckWithCircle;\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 SvgClose = (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\", { vectorEffect: \"non-scaling-stroke\", d: \"M18.3599 5.64001L5.62988 18.37\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M18.3599 18.37L5.62988 5.64001\", stroke: \"currentColor\" }));\nexport default SvgClose;\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","import * as React from \"react\";\nconst SvgSearch = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Search_Base\", \"data-name\": \"Icon \\\\u2013 Search \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, fill: \"none\", 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: \"Search_icon\", \"data-name\": \"Search icon\", transform: \"translate(3.75 3.75)\" }, /* @__PURE__ */ React.createElement(\"circle\", { vectorEffect: \"non-scaling-stroke\", id: \"Ellipse_186\", \"data-name\": \"Ellipse 186\", cx: 6, cy: 6, r: 6, fill: \"none\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"line\", { vectorEffect: \"non-scaling-stroke\", id: \"Line_556\", \"data-name\": \"Line 556\", x2: 6, y2: 6, transform: \"translate(10.5 10.5)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgSearch;\n","import * as React from \"react\";\nconst SvgWarning = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Warning_Base\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { clipPath: \"url(#clip0_841_1324)\" }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M11.9949 2.30237L0.802734 21.6977H23.1977L11.9949 2.30237Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M12.4336 10.5504L12.3373 14.4766H11.6632L11.5669 10.5504V9.51273H12.4336V10.5504ZM11.5883 18.2636V17.2687H12.4229V18.2636H11.5883Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" })), /* @__PURE__ */ React.createElement(\"defs\", null, /* @__PURE__ */ React.createElement(\"clipPath\", { id: \"clip0_841_1324\" }, /* @__PURE__ */ React.createElement(\"rect\", { width: 24, height: 21, fill: \"white\", transform: \"translate(0 1.5)\", strokeWidth: 1 }))));\nexport default SvgWarning;\n","import * as React from \"react\";\nconst SvgWarningWithCircle = (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\", { vectorEffect: \"non-scaling-stroke\", d: \"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z\", stroke: \"currentColor\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M11.75 5.88423V4.75H12.25V5.88423L12.0485 13.0713H11.9515L11.75 5.88423ZM11.7994 18.25V16.9868H12.2253V18.25H11.7994Z\", stroke: \"currentColor\" }));\nexport default SvgWarningWithCircle;\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 { AddressActionsLoader } from '@/account/components/AccountLoaders';\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 isB2BFlow,\n permissions,\n loading,\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 noPermissionCreateAddresses:\n 'Account.AddressForm.notifications.noPermissionCreateAddresses',\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 // Show a skeleton in place of the button while eligibility checks (permissions/address list) are still in progress\n if (loading) {\n return (\n <div\n className={classes([\n 'account-actions-address',\n 'account-actions-address--loading',\n className,\n ])}\n data-testid=\"addressActionsLoaderWrapper\"\n >\n <AddressActionsLoader />\n </div>\n );\n }\n\n // Show no permission message for B2B users without create rights\n if (isB2BFlow && !permissions?.canCreateAddress) {\n return (\n <div\n className={classes([\n 'account-actions-address',\n 'account-actions-address--no-permission',\n className,\n ])}\n data-testid=\"noPermissionMessage\"\n >\n <span className=\"account-actions-address__title\">\n {translations.noPermissionCreateAddresses}\n </span>\n </div>\n );\n }\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 isB2BFlow,\n permissions,\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 // Disable delete button if B2B user doesn't have delete permission\n const isDeleteDisabled =\n submitLoading || (isB2BFlow && !permissions?.canDeleteAddress);\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 {addressData ? (\n <AddressCard\n minifiedView={minifiedView}\n addressData={addressData}\n keysSortOrder={keysSortOrder}\n />\n ) : null}\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={isDeleteDisabled} 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, Card, 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 paymentsMessage: `Account.${minifiedViewKey}.EmptyList.Payments.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 case 'payments':\n return {\n icon: Card,\n text: <p>{translations.paymentsMessage}</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 { FunctionComponent } from 'preact';\nimport { OrdersListActionProps } from '@/account/types';\nimport { Icon, Card } from '@adobe-commerce/elsie/components';\nimport { ChevronRight } from '@adobe-commerce/elsie/icons';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { checkIsFunction } from '@/account/lib/checkIsFunction';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/account/components/OrdersListAction/OrdersListAction.css';\n\ninterface IconConfig {\n size: '12' | '16' | '24' | '32' | '64' | '80' | undefined;\n stroke: '4' | '1' | '2' | '3' | undefined;\n}\n\nconst iconConfig: IconConfig = { size: '32', stroke: '2' };\n\nexport const OrdersListAction: FunctionComponent<OrdersListActionProps> = ({\n minifiedView,\n orderNumber,\n orderToken,\n routeOrdersList,\n routeOrderDetails,\n}) => {\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n viewAllOrdersButton: `Account.${minifiedViewKey}.OrdersList.viewAllOrdersButton`,\n ariaLabelLink: `Account.${minifiedViewKey}.OrdersList.ariaLabelLink`,\n });\n\n if (routeOrdersList) {\n return (\n <a\n className={classes([\n 'account-orders-list-action',\n ['account-orders-list-action--minifiedView', minifiedView],\n ])}\n data-testid=\"ordersListActionButtonMinifiedView\"\n href={routeOrdersList()}\n >\n <Card data-testid=\"ordersListActionMinifiedView\" variant=\"secondary\">\n <div className=\"account-orders-list-action__card-wrapper\">\n <p>{translations.viewAllOrdersButton}</p>\n\n <Icon source={ChevronRight} {...iconConfig} />\n </div>\n </Card>\n </a>\n );\n }\n\n return (\n <a\n aria-label={`${translations.ariaLabelLink} ${orderNumber ?? orderToken}`}\n href={\n checkIsFunction(routeOrderDetails)\n ? routeOrderDetails(orderNumber, orderToken)\n : '#'\n }\n className=\"account-orders-list-action\"\n data-testid=\"ordersListActionButton\"\n >\n <Icon source={ChevronRight} {...iconConfig} />\n </a>\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 { useState, useEffect } from 'preact/hooks';\n\nexport const useIsMobile = () => {\n const [isMobile, setIsMobile] = useState(window.innerWidth < 768);\n\n useEffect(() => {\n const handleResize = () => {\n setIsMobile(window.innerWidth < 768);\n };\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n return isMobile;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 { OrdersListCardProps } from '@/account/types';\nimport {\n Card,\n Image,\n ContentGrid,\n Price,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/account/components/OrdersListCard/OrdersListCard.css';\nimport { OrderItem } from '@/account/data/models';\nimport { useIsMobile } from '@/account/hooks/useIsMobile';\nimport { checkIsFunction } from '@/account/lib/checkIsFunction';\nimport { useMemo } from 'preact/hooks';\n\nexport const OrdersListCard: FunctionComponent<OrdersListCardProps> = ({\n placeholderImage,\n minifiedView,\n item,\n withThumbnails,\n children,\n slots,\n routeTracking,\n routeOrderProduct,\n routeReturnDetails,\n ...props\n}) => {\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n orderNumber: `Account.${minifiedViewKey}.OrdersList.OrdersListCard.orderNumber`,\n itemsAmount: `Account.${minifiedViewKey}.OrdersList.OrdersListCard.itemsAmount`,\n carrier: `Account.${minifiedViewKey}.OrdersList.OrdersListCard.carrier`,\n returnsText: `Account.${minifiedViewKey}.OrdersList.OrdersListCard.returns`,\n deliveryDateText: `Account.${minifiedViewKey}.OrdersList.OrdersListCard.orderDate`,\n placedByAdministrator: `Account.${minifiedViewKey}.OrdersList.OrdersListCard.placedByAdministrator`,\n });\n\n const isMobile = useIsMobile();\n const hasProductRoute = checkIsFunction(routeOrderProduct);\n\n const orderItemsImages = useMemo(() => {\n return (item?.items ?? []).map((orderItem: OrderItem, index) => {\n const defaultImageProps = {\n title: orderItem?.productName ?? '',\n src: orderItem?.product?.smallImage?.url || placeholderImage,\n alt: orderItem?.productName ?? '',\n width: 65,\n height: 65,\n loading: 'eager',\n } as const;\n\n return (\n <Slot\n key={`${index}_${orderItem.id}`}\n name=\"OrderItemImage\"\n slot={slots?.OrderItemImage}\n context={{\n data: orderItem,\n defaultImageProps,\n }}\n >\n {hasProductRoute ? (\n <a\n href={routeOrderProduct?.(orderItem) ?? ''}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <Image {...defaultImageProps} />\n </a>\n ) : (\n <Image {...defaultImageProps} />\n )}\n </Slot>\n );\n });\n }, [\n hasProductRoute,\n item.items,\n placeholderImage,\n routeOrderProduct,\n slots?.OrderItemImage,\n ]);\n\n return (\n <Card\n variant=\"secondary\"\n {...props}\n className={classes([\n 'account-orders-list-card',\n ['account-orders-list-card--full', item?.items?.length > 6],\n ])}\n >\n <div className=\"account-orders-list-card__content\">\n {slots?.OrdersListCard ? (\n <Slot\n data-testid={`ordersListCard${item.id}`}\n name=\"OrdersListCard\"\n slot={slots?.OrdersListCard}\n context={{ orderHistoryListItem: item }}\n />\n ) : (\n <>\n <div>{item?.status}</div>\n {item?.adminAssistedOrder > 0 && (\n <div>{translations.placedByAdministrator}</div>\n )}\n {slots?.OrdersListOrderTime ? (\n <Slot\n data-testid={`ordersListOrderTime${item.id}`}\n name=\"OrdersListOrderTime\"\n slot={slots?.OrdersListOrderTime}\n context={{\n deliveryDateText: translations.deliveryDateText,\n orderDate: item?.orderDate,\n orderTime: item?.orderTime,\n }}\n />\n ) : (\n <p>\n {translations.deliveryDateText} {item?.orderDate}\n </p>\n )}\n\n <p>\n {translations.orderNumber} {item.number}\n </p>\n {item?.shipments?.map((element) => {\n return element?.tracking?.map((item) => {\n const trackingRoute = routeTracking?.(item);\n\n return (\n <p key={element.id} data-testid={item.number}>\n <span>{`${\n translations.carrier\n } ${item.carrier.toLocaleUpperCase()} `}</span>\n {trackingRoute ? (\n <a\n href={trackingRoute}\n target={'_blank'}\n className=\"account-orders-list-card__content--track_number\"\n rel=\"noreferrer\"\n >\n {item.number}\n </a>\n ) : (\n <span className=\"account-orders-list-card__content--track_number\">\n {item.number}\n </span>\n )}\n </p>\n );\n });\n })}\n {item?.returns && item.returns?.length ? (\n <p key={item.id} data-testid={item.number}>\n <span>{translations.returnsText} </span>\n {item?.returns?.map((returnData) => (\n <span key={returnData.uid} data-testid={returnData.number}>\n <a\n href={\n routeReturnDetails?.({\n orderNumber: item.number,\n orderToken: item.token,\n returnNumber: returnData.number,\n }) ?? '#'\n }\n className=\"account-orders-list-card__content--return_number\"\n >\n {returnData.number}{' '}\n </a>\n </span>\n ))}\n </p>\n ) : null}\n <p>\n <Price\n amount={item?.total?.grandTotal?.value ?? 0}\n currency={item?.total?.grandTotal?.currency}\n weight=\"normal\"\n size=\"medium\"\n />\n </p>\n <p data-testid={'itemsAmount'}>\n {item?.items?.length\n ? item?.items?.reduce((sum, element) => {\n const quantityOrdered = element?.quantityOrdered || 0;\n return sum + quantityOrdered;\n }, 0)\n : 0}{' '}\n {translations.itemsAmount}\n </p>\n {item?.items?.length ? (\n <ul className=\"account-orders-list-card__product-list\">\n {item.items.map((element, index) => {\n if (index >= 0 && index < 10) {\n return (\n <li\n key={`${index}_${element.id}`}\n className={\n 'account-orders-list-card__content--product-name'\n }\n >\n <span className=\"account-orders-list-card__content--quantity\">\n {element?.quantityOrdered > 1\n ? element?.quantityOrdered\n : null}{' '}\n </span>\n {element?.productName.replaceAll('-', ' ')}\n </li>\n );\n }\n\n if (index === 11) return <li key={'ellipsis'}>...</li>;\n })}\n </ul>\n ) : null}\n </>\n )}\n </div>\n {withThumbnails && item?.items?.length ? (\n <ContentGrid\n maxColumns={isMobile ? 3 : 9}\n emptyGridContent={<></>}\n className={classes([\n 'account-orders-list-card__images',\n ['account-orders-list-card__images-3', isMobile],\n ])}\n data-testid=\"ordersListCardImages\"\n >\n {orderItemsImages}\n </ContentGrid>\n ) : null}\n\n <div className=\"account-orders-list-card__actions\">{children}</div>\n </Card>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 { AddressContextMode } from '@/account/types';\n\ntype AddressPermissionsFlags = {\n canAccessAddressBook?: boolean;\n canViewAddress?: boolean;\n loading?: boolean;\n};\n\nexport const resolveAddressesContextMode = (\n contextMode?: AddressContextMode,\n selectable?: boolean\n): AddressContextMode => {\n return contextMode || (selectable ? 'checkout' : 'addressBook');\n};\n\nexport const resolveEnforceB2BPermissions = (\n resolvedContextMode: AddressContextMode\n): boolean => {\n return resolvedContextMode === 'addressBook';\n};\n\nexport const resolveIsCheckoutContext = (\n resolvedContextMode: AddressContextMode\n): boolean => {\n return resolvedContextMode === 'checkout';\n};\n\nexport const resolveIsB2BCandidate = (\n b2bEnabled?: boolean,\n isB2BCustomer?: boolean\n): boolean => {\n return Boolean(b2bEnabled) && Boolean(isB2BCustomer);\n};\n\nexport const resolveHasB2BContainerAccess = (\n permissions?: AddressPermissionsFlags\n): boolean => {\n return (\n Boolean(permissions?.canAccessAddressBook) &&\n Boolean(permissions?.canViewAddress)\n );\n};\n\nexport const resolveIsB2BWithoutViewAccess = ({\n isB2BCandidate,\n isCompanyAddressBookEnabled,\n enforceB2BPermissions,\n permissions,\n hasB2BContainerAccess,\n}: {\n isB2BCandidate: boolean;\n isCompanyAddressBookEnabled: boolean;\n enforceB2BPermissions: boolean;\n permissions?: AddressPermissionsFlags;\n hasB2BContainerAccess: boolean;\n}): boolean => {\n return (\n Boolean(isB2BCandidate) &&\n Boolean(isCompanyAddressBookEnabled) &&\n enforceB2BPermissions &&\n !permissions?.loading &&\n !hasB2BContainerAccess\n );\n};\n\nexport const resolveIsB2BFlow = ({\n isB2BCandidate,\n isCompanyAddressBookEnabled,\n isB2BWithoutViewAccess,\n}: {\n isB2BCandidate: boolean;\n isCompanyAddressBookEnabled: boolean;\n isB2BWithoutViewAccess: boolean;\n}): boolean => {\n return (\n Boolean(isB2BCandidate) &&\n (isCompanyAddressBookEnabled || isB2BWithoutViewAccess)\n );\n};\n\nexport const resolveIsAddressSelectionLocked = ({\n isCheckoutContext,\n isB2BFlow,\n selectable,\n isCustomShippingAddressAllowed,\n selectShipping,\n selectBilling,\n}: {\n isCheckoutContext: boolean;\n isB2BFlow: boolean;\n selectable?: boolean;\n isCustomShippingAddressAllowed: boolean;\n selectShipping?: boolean;\n selectBilling?: boolean;\n}): boolean => {\n // \"Allow Custom Shipping Address\" only ever unlocks shipping selection —\n // a billing-only instance has no equivalent flag and must stay locked to company addresses.\n const isBillingOnlySelection = Boolean(selectBilling) && !selectShipping;\n\n return (\n isCheckoutContext &&\n Boolean(isB2BFlow) &&\n Boolean(selectable) &&\n (isBillingOnlySelection || !isCustomShippingAddressAllowed)\n );\n};\n\nexport const shouldSkipAddressFetchForCustomerType = ({\n b2bEnabled,\n customerTypeLoading,\n}: {\n b2bEnabled?: boolean;\n customerTypeLoading: boolean;\n}): boolean => {\n return Boolean(b2bEnabled) && customerTypeLoading;\n};\n\nexport const shouldSkipAddressFetchForPermissions = ({\n isB2BCandidate,\n enforceB2BPermissions,\n permissionsLoading,\n}: {\n isB2BCandidate: boolean;\n enforceB2BPermissions: boolean;\n permissionsLoading?: boolean;\n}): boolean => {\n return isB2BCandidate && enforceB2BPermissions && Boolean(permissionsLoading);\n};\n\nexport const shouldReturnEmptyForRestrictedB2B = ({\n isB2BCandidate,\n enforceB2BPermissions,\n hasB2BContainerAccess,\n}: {\n isB2BCandidate: boolean;\n enforceB2BPermissions: boolean;\n hasB2BContainerAccess: boolean;\n}): boolean => {\n return isB2BCandidate && enforceB2BPermissions && !hasB2BContainerAccess;\n};\n\nexport const shouldApplyB2BAddressBookFlow = (\n isB2BCandidate: boolean\n): boolean => {\n return isB2BCandidate;\n};\n\nexport const shouldReturnEmptyWithinAddressBook = ({\n enforceB2BPermissions,\n hasB2BContainerAccess,\n}: {\n enforceB2BPermissions: boolean;\n hasB2BContainerAccess: boolean;\n}): boolean => {\n return enforceB2BPermissions && !hasB2BContainerAccess;\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 return copyAddressList.sort(\n (a, b) => Number(b.defaultBilling) - Number(a.defaultBilling)\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 CompanyAddressTypeEnum {\n SHIPPING = 'SHIPPING',\n BILLING = 'BILLING',\n}\n\nexport type CompanyAddressType = `${CompanyAddressTypeEnum}`;\n\nexport interface CompanyAddressAttribute {\n code?: string;\n attribute_code?: string;\n value?: string | number | boolean | null;\n}\n\nexport interface CompanyAddressSchema {\n id: string;\n company_id: string;\n address_type: CompanyAddressType;\n is_default: boolean;\n company?: string;\n city?: string;\n country_code?: string;\n street?: string[];\n telephone?: string;\n postcode?: string;\n firstname?: string;\n lastname?: string;\n middlename?: string;\n nickname?: string;\n prefix?: string;\n suffix?: string;\n fax?: string;\n vat_id?: string;\n uid?: string;\n region_id?: string | number;\n region?: {\n region?: string;\n region_code?: string;\n region_id?: string | number;\n };\n custom_attributes?: CompanyAddressAttribute[];\n extension_attributes?: CompanyAddressAttribute[];\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 '@/account/data/models';\nimport {\n CompanyAddressTypeEnum,\n type CompanyAddressType,\n} from '@/account/types/api/companyAddress.types';\n\ntype FilterB2BCheckoutAddressesByTypeArgs = {\n addresses: CustomerAddressesModel[];\n isCheckoutContext: boolean;\n selectable?: boolean;\n selectShipping?: boolean;\n selectBilling?: boolean;\n};\n\nconst resolveAddressType = (\n address: CustomerAddressesModel\n): CompanyAddressType | undefined => {\n if (\n address?.addressType === CompanyAddressTypeEnum.SHIPPING ||\n address?.addressType === CompanyAddressTypeEnum.BILLING\n ) {\n return address.addressType;\n }\n\n const hasDefaultShipping = Boolean(address?.defaultShipping);\n const hasDefaultBilling = Boolean(address?.defaultBilling);\n\n if (hasDefaultShipping === hasDefaultBilling) {\n return undefined;\n }\n\n return hasDefaultShipping\n ? CompanyAddressTypeEnum.SHIPPING\n : CompanyAddressTypeEnum.BILLING;\n};\n\nexport const filterB2BCheckoutAddressesByType = ({\n addresses,\n isCheckoutContext,\n selectable,\n selectShipping,\n selectBilling,\n}: FilterB2BCheckoutAddressesByTypeArgs): CustomerAddressesModel[] => {\n if (!isCheckoutContext || !selectable) {\n return addresses;\n }\n\n const isShippingOnly = Boolean(selectShipping && !selectBilling);\n const isBillingOnly = Boolean(selectBilling && !selectShipping);\n\n if (!isShippingOnly && !isBillingOnly) {\n return addresses;\n }\n\n const expectedType: CompanyAddressType = isShippingOnly\n ? CompanyAddressTypeEnum.SHIPPING\n : CompanyAddressTypeEnum.BILLING;\n\n return addresses.filter(\n (address) => resolveAddressType(address) === expectedType\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 } from 'preact/hooks';\nimport { getCustomerCompanyContext } from '@/account/api/getCustomerCompanyContext';\n\n/**\n * Hook to determine customer type (B2B vs B2C).\n * Pass `enabled: false` to skip the company-context request entirely\n * (e.g. when the host page already knows B2B is off for this storefront).\n */\nexport const useCustomerType = (enabled: boolean = true) => {\n const [loading, setLoading] = useState<boolean>(enabled);\n const [isB2BCustomer, setIsB2BCustomer] = useState<boolean>(false);\n\n useEffect(() => {\n if (!enabled) {\n setIsB2BCustomer(false);\n setLoading(false);\n return;\n }\n\n let isSubscribed = true;\n setLoading(true);\n\n getCustomerCompanyContext()\n .then((isB2BContext) => {\n if (!isSubscribed) return;\n setIsB2BCustomer(isB2BContext);\n })\n .catch((error) => {\n console.error('[Account][useCustomerType] Failed to resolve company context', error);\n\n if (!isSubscribed) return;\n setIsB2BCustomer(false);\n })\n .finally(() => {\n if (!isSubscribed) return;\n setLoading(false);\n });\n\n return () => {\n isSubscribed = false;\n };\n }, [enabled]);\n\n return {\n isB2BCustomer,\n loading,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 } from 'preact/hooks';\nimport { getCustomerRolePermissions } from '@/account/api/getCustomerRolePermissions';\nimport {\n getDefaultCompanyAddressPermissions,\n} from '@/account/lib/companyAddressPermissionsResolver';\n\n/**\n * Company address-specific permissions interface\n */\nexport interface CompanyAddressPermissions {\n canAccessAddressBook: boolean;\n canViewAddress: boolean;\n canCreateAddress: boolean;\n canEditAddress: boolean;\n canDeleteAddress: boolean;\n canSetDefaultAddress: boolean;\n loading: boolean;\n}\n\n/**\n * Hook to fetch company address management permissions.\n * Pass `enabled: false` to skip the role-permissions request entirely\n * (e.g. when the host page already knows B2B is off for this storefront).\n */\nexport const useCompanyAddressPermissions = (\n enabled: boolean = true\n): CompanyAddressPermissions => {\n const [loading, setLoading] = useState<boolean>(enabled);\n const [permissions, setPermissions] = useState<\n Omit<CompanyAddressPermissions, 'loading'>\n >(getDefaultCompanyAddressPermissions());\n\n useEffect(() => {\n if (!enabled) {\n setPermissions(getDefaultCompanyAddressPermissions());\n setLoading(false);\n return;\n }\n\n let isSubscribed = true;\n setLoading(true);\n\n getCustomerRolePermissions()\n .then((resolvedPermissions) => {\n if (!isSubscribed) return;\n setPermissions(resolvedPermissions);\n })\n .catch((error) => {\n console.error(\n '[Account][useCompanyAddressPermissions] Failed to resolve role permissions',\n error\n );\n\n if (!isSubscribed) return;\n\n setPermissions(getDefaultCompanyAddressPermissions());\n })\n .finally(() => {\n if (!isSubscribed) return;\n setLoading(false);\n });\n\n return () => {\n isSubscribed = false;\n };\n }, [enabled]);\n\n return {\n ...permissions,\n loading,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 '@/account/data/models';\nimport normalizeGetAddressData from '@/account/lib/normalizeGetAddressData';\n\nexport const 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 sanitizeB2BCheckoutAddressPayload = (\n payloadData: Record<string, any>\n): Record<string, any> => {\n const region = payloadData?.region;\n\n if (!region || typeof region !== 'object') {\n return payloadData;\n }\n\n const sanitizedRegion = { ...region } as Record<string, any>;\n const rawRegionId = sanitizedRegion.regionId;\n\n if (\n rawRegionId === '' ||\n rawRegionId === null ||\n rawRegionId === undefined\n ) {\n delete sanitizedRegion.regionId;\n } else if (typeof rawRegionId === 'string') {\n const trimmedRegionId = rawRegionId.trim();\n\n if (!trimmedRegionId || !/^\\d+$/.test(trimmedRegionId)) {\n delete sanitizedRegion.regionId;\n } else {\n sanitizedRegion.regionId = Number(trimmedRegionId);\n }\n } else if (typeof rawRegionId === 'number' && !Number.isFinite(rawRegionId)) {\n delete sanitizedRegion.regionId;\n }\n\n return {\n ...payloadData,\n region: sanitizedRegion,\n };\n};\n\nexport const resolveAddressSelectionPayloadData = ({\n item,\n isCheckoutContext,\n selectable,\n isB2BFlow,\n}: {\n item?: CustomerAddressesModel;\n isCheckoutContext: boolean;\n selectable?: boolean;\n isB2BFlow: boolean;\n}) => {\n const normalizedData = normalizeGetAddressData(item);\n\n if (isCheckoutContext && selectable && isB2BFlow) {\n const payload = { ...(normalizedData as Record<string, any>) };\n\n // Hand the selected address to checkout as a COMPANY address reference.\n // When the company address book is enabled the backend rejects both a new\n // address payload (\"Use a company address instead\") and a customer address\n // (\"Customer address cannot be used when the company address book is\n // enabled\") — it only accepts `company_address_id`, which is this id.\n // `id` is dropped so downstream can't mistake it for a customer address;\n // the remaining fields stay for display and address events.\n if (payload.id) {\n payload.companyAddressId = payload.id;\n }\n delete payload.id;\n\n const sanitizedPayload = sanitizeB2BCheckoutAddressPayload(payload);\n\n return {\n selectedItem: item,\n data: sanitizedPayload,\n };\n }\n\n return {\n selectedItem: item,\n data: normalizedData,\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 getCompanyAddressBook,\n deleteCompanyAddress,\n} from '@/account/api/';\nimport { CustomerAddressesModel } from '@/account/data/models';\nimport { checkIsFunction } from '@/account/lib/checkIsFunction';\nimport { KeysSortOrderProps, useAddressesProps } from '@/account/types';\nimport {\n resolveAddressesContextMode,\n resolveEnforceB2BPermissions,\n resolveHasB2BContainerAccess,\n resolveIsAddressSelectionLocked,\n resolveIsB2BCandidate,\n resolveIsB2BFlow,\n resolveIsB2BWithoutViewAccess,\n resolveIsCheckoutContext,\n shouldApplyB2BAddressBookFlow,\n shouldReturnEmptyWithinAddressBook,\n shouldSkipAddressFetchForCustomerType,\n shouldSkipAddressFetchForPermissions,\n} from '@/account/lib/addressFlowRules';\nimport { manageAddressDeletion } from '@/account/lib/manageAddressDeletion';\nimport { defaultAttributePreset } from '@/account/configs/defaultAttributePreset.config';\nimport { convertToCamelCase } from '@/account/lib/convertCase';\nimport sortingAddressesList from '@/account/lib/sortingAddressesList';\nimport { filterB2BCheckoutAddressesByType } from '../../lib/filterB2BCheckoutAddressesByType';\nimport { useCustomerType } from '@/account/hooks/useCustomerType';\nimport { useCompanyAddressPermissions } from '@/account/hooks/useCompanyAddressPermissions';\nimport {\n isEmpty,\n resolveAddressSelectionPayloadData,\n} from '@/account/lib/addressSelectionPayloadRules';\n\nexport const useAddresses = ({\n b2bEnabled,\n selectShipping,\n selectBilling,\n selectable,\n contextMode,\n defaultSelectAddressId,\n onAddressData,\n minifiedView,\n routeAddressesPage,\n onSuccess,\n}: useAddressesProps) => {\n // B2B context detection\n const { isB2BCustomer, loading: customerTypeLoading } = useCustomerType(\n Boolean(b2bEnabled)\n );\n const permissions = useCompanyAddressPermissions(Boolean(b2bEnabled));\n const isB2BCandidate = resolveIsB2BCandidate(b2bEnabled, isB2BCustomer);\n const resolvedContextMode = resolveAddressesContextMode(\n contextMode,\n selectable\n );\n const enforceB2BPermissions =\n resolveEnforceB2BPermissions(resolvedContextMode);\n const isCheckoutContext = resolveIsCheckoutContext(resolvedContextMode);\n\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 const [isCompanyAddressBookEnabled, setIsCompanyAddressBookEnabled] =\n useState<boolean>(false);\n const [isCustomShippingAddressAllowed, setIsCustomShippingAddressAllowed] =\n useState<boolean>(true);\n\n const hasB2BContainerAccess = resolveHasB2BContainerAccess(permissions);\n const isB2BWithoutViewAccess = resolveIsB2BWithoutViewAccess({\n isB2BCandidate,\n isCompanyAddressBookEnabled,\n enforceB2BPermissions,\n permissions,\n hasB2BContainerAccess,\n });\n\n // Company address flow is active only when company address book is enabled.\n const isB2BFlow = resolveIsB2BFlow({\n isB2BCandidate,\n isCompanyAddressBookEnabled,\n isB2BWithoutViewAccess,\n });\n const isAddressSelectionLocked = resolveIsAddressSelectionLocked({\n isCheckoutContext,\n isB2BFlow,\n selectable,\n isCustomShippingAddressAllowed,\n selectShipping,\n selectBilling,\n });\n\n const applyAttributesSortOrder = useCallback(\n (attributesFormResponse: any[] | undefined) => {\n if (!attributesFormResponse) return;\n\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 );\n\n const getAddressesList = useCallback(async () => {\n const shouldWaitForCustomerType = shouldSkipAddressFetchForCustomerType({\n b2bEnabled,\n customerTypeLoading,\n });\n\n const shouldWaitForPermissions = shouldSkipAddressFetchForPermissions({\n isB2BCandidate,\n enforceB2BPermissions,\n permissionsLoading: permissions?.loading,\n });\n\n if (shouldWaitForCustomerType || shouldWaitForPermissions) {\n setLoading(true);\n return;\n }\n\n setLoading(true);\n\n try {\n if (shouldApplyB2BAddressBookFlow(isB2BCandidate)) {\n try {\n const result = await getCompanyAddressBook();\n const isAddressBookEnabled = Boolean(result?.addressBookEnabled);\n const allowCustomShippingAddress = Boolean(\n result?.addressBookCustomShippingAddressEnabled\n );\n\n setIsCompanyAddressBookEnabled(isAddressBookEnabled);\n setIsCustomShippingAddressAllowed(allowCustomShippingAddress);\n\n if (isAddressBookEnabled) {\n if (\n shouldReturnEmptyWithinAddressBook({\n enforceB2BPermissions,\n hasB2BContainerAccess,\n })\n ) {\n setAddressesList([]);\n return;\n }\n\n const attributesFormResponse = await getAttributesForm('shortRequest');\n applyAttributesSortOrder(attributesFormResponse);\n\n const addressItems = result?.addresses?.items ?? [];\n const normalizedAddressItems =\n filterB2BCheckoutAddressesByType({\n addresses: addressItems,\n isCheckoutContext,\n selectable,\n selectShipping,\n selectBilling,\n });\n\n if (minifiedView) {\n const defaultAddresses = normalizedAddressItems.filter(\n (el) => Boolean(el.defaultShipping) || Boolean(el.defaultBilling)\n );\n\n const addressesToSet = defaultAddresses.length\n ? defaultAddresses\n : normalizedAddressItems.slice(-1);\n\n setAddressesList(addressesToSet);\n } else {\n setAddressesList(normalizedAddressItems);\n }\n\n return;\n }\n } catch {\n // Graceful fallback: if company address-book endpoint is unavailable\n // or access is denied, continue with personal address flow.\n setIsCompanyAddressBookEnabled(false);\n setIsCustomShippingAddressAllowed(true);\n }\n }\n\n setIsCompanyAddressBookEnabled(false);\n setIsCustomShippingAddressAllowed(true);\n\n // B2C: Existing flow unchanged\n\n const [attributesFormResponse, addressResponse] = await Promise.all([\n getAttributesForm('shortRequest'),\n getCustomerAddress(),\n ]);\n\n applyAttributesSortOrder(attributesFormResponse);\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 } catch {\n // Keep UI behavior stable without emitting additional debug logs.\n } finally {\n setLoading(false);\n }\n }, [\n b2bEnabled,\n customerTypeLoading,\n minifiedView,\n isB2BCandidate,\n isCheckoutContext,\n selectable,\n selectShipping,\n selectBilling,\n enforceB2BPermissions,\n hasB2BContainerAccess,\n permissions?.loading,\n applyAttributesSortOrder,\n ]);\n\n useEffect(() => {\n getAddressesList();\n }, [getAddressesList]);\n\n useEffect(() => {\n const clearSelection = () => {\n setSelectedAddressOption('');\n setAddNewAddress(false);\n onAddressData?.({\n data: {},\n isDataValid: false,\n } as any);\n };\n\n if (!addressesList.length) {\n if (isAddressSelectionLocked) {\n clearSelection();\n }\n\n return;\n }\n\n // `0` is the caller saying it has no address to restore, so preselecting an\n // entry from the list would claim a selection the caller does not hold.\n if (defaultSelectAddressId === 0) {\n // A locked selection is restricted to company addresses, so there is no\n // new-address form to offer instead. Leave the list unselected and let the\n // customer pick, rather than highlighting an address the caller will then\n // refuse to act on.\n if (isAddressSelectionLocked) {\n clearSelection();\n\n return;\n }\n\n setAddNewAddress(true);\n setSelectedAddressOption('0');\n\n return;\n }\n\n // Otherwise prefer the requested address, falling back to the type-default,\n // which sortingAddressesList puts first.\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 { selectedItem, data } = resolveAddressSelectionPayloadData({\n item,\n isCheckoutContext,\n selectable,\n isB2BFlow,\n });\n\n const normalizeAddressData = {\n data,\n isDataValid: !isEmpty(selectedItem),\n };\n\n const selectedValue = item?.id?.toString() || item?.uid || '';\n setSelectedAddressOption(selectedValue);\n\n onAddressData?.(normalizeAddressData);\n }, [\n addressesList,\n defaultSelectAddressId,\n onAddressData,\n selectBilling,\n selectShipping,\n isAddressSelectionLocked,\n isCheckoutContext,\n selectable,\n isB2BFlow,\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\n if (isAddressSelectionLocked && value === '0') {\n return;\n }\n\n const nextSibling = (event?.target as HTMLInputElement)\n .nextSibling as HTMLElement;\n\n setSelectedAddressOption(value);\n\n const { data } = resolveAddressSelectionPayloadData({\n item: item as CustomerAddressesModel | undefined,\n isCheckoutContext,\n selectable,\n isB2BFlow,\n });\n\n const normalizeAddressData = {\n data,\n isDataValid: !isEmpty(data),\n };\n\n onAddressData?.(normalizeAddressData);\n setAddNewAddress(value === '0');\n\n if (nextSibling) {\n nextSibling.focus();\n window.scrollBy(0, 100);\n }\n },\n [\n onAddressData,\n isAddressSelectionLocked,\n isCheckoutContext,\n selectable,\n isB2BFlow,\n ]\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 try {\n if (isB2BFlow) {\n if (!permissions?.canDeleteAddress) return;\n\n // B2B: Use company address delete API\n await deleteCompanyAddress(addressId);\n } else {\n // B2C: Existing flow unchanged\n await manageAddressDeletion(addressId, addressesList);\n await removeCustomerAddress(+addressId);\n }\n\n onCloseBtnClick();\n await getAddressesList();\n } catch {\n // Keep UI behavior stable without emitting additional debug logs.\n } finally {\n setSubmitLoading(false);\n }\n }, [\n addressesList,\n addressId,\n onCloseBtnClick,\n getAddressesList,\n isB2BFlow,\n permissions?.canDeleteAddress,\n ]);\n\n const closeNewAddressForm = useCallback(() => {\n setAddNewAddress(false);\n }, []);\n\n const redirectToAddressesRoute = useCallback(() => {\n if (isAddressSelectionLocked) {\n return;\n }\n\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 }, [\n addNewAddress,\n routeAddressesPage,\n minifiedView,\n isAddressSelectionLocked,\n ]);\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 permissions,\n isB2BFlow,\n enforceB2BPermissions,\n isAddressSelectionLocked,\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, LiveRegion } 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 b2bEnabled,\n slots,\n title = '',\n headerLevel,\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 fieldIdPrefix,\n contextMode,\n }) => {\n const translations = useText({\n containerTitle: `Account.${minifiedViewKey}.Addresses.containerTitle`,\n differentAddressButton: `Account.${minifiedViewKey}.Addresses.differentAddressButton`,\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 loading: 'Account.Addresses.loading',\n loaded: 'Account.Addresses.loaded',\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 isAddressSelectionLocked,\n permissions,\n isB2BFlow,\n enforceB2BPermissions,\n } = useAddresses({\n b2bEnabled,\n defaultSelectAddressId,\n minifiedView,\n routeAddressesPage,\n onSuccess,\n onAddressData,\n selectShipping,\n selectBilling,\n selectable,\n contextMode,\n });\n\n const shouldEnforceB2BPermissions = enforceB2BPermissions !== false;\n const aclRestrictedB2BFlow =\n Boolean(isB2BFlow) && shouldEnforceB2BPermissions;\n\n const headerTitle = title || translations.containerTitle;\n const hasDefaultShippingAddress = addressesList.some((address) =>\n Boolean(address.defaultShipping)\n );\n const hasDefaultBillingAddress = addressesList.some((address) =>\n Boolean(address.defaultBilling)\n );\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 && !isAddressSelectionLocked) {\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 fieldIdPrefix={fieldIdPrefix}\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 hasDefaultShippingAddress={hasDefaultShippingAddress}\n hasDefaultBillingAddress={hasDefaultBillingAddress}\n onCloseBtnClick={closeNewAddressForm}\n onChange={onAddressData}\n onError={onError}\n onSubmit={onSubmit}\n onSuccess={handleOnSuccess}\n isB2BFlow={isB2BFlow}\n enforceB2BPermissions={shouldEnforceB2BPermissions}\n permissions={permissions}\n />\n </div>\n );\n } else if (sortedAddressesList.length && !isAddressSelectionLocked) {\n addressesFooterSection = (\n <AddressActions\n selectable={selectable}\n minifiedView={minifiedView}\n addNewAddress={addNewAddress}\n routeAddressesPage={redirectToAddressesRoute}\n isB2BFlow={aclRestrictedB2BFlow}\n permissions={permissions}\n loading={loading}\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={translations.differentAddressButton}\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 fieldIdPrefix={fieldIdPrefix}\n isOpen={addressId === item.id && isFormRendered}\n addressFormId={addressId}\n inputsDefaultValueSet={item}\n addressesFormTitle={translations.editAddressFormTitle}\n showShippingCheckBox={showShippingCheckBox}\n showBillingCheckBox={showBillingCheckBox}\n hasDefaultShippingAddress={hasDefaultShippingAddress}\n hasDefaultBillingAddress={hasDefaultBillingAddress}\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 isB2BFlow={isB2BFlow}\n enforceB2BPermissions={shouldEnforceB2BPermissions}\n permissions={permissions}\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 isB2BFlow={aclRestrictedB2BFlow}\n permissions={permissions}\n />\n )}\n </Fragment>\n ))}\n\n <div className=\"account-addresses__footer\">\n {addNewAddress ? (\n <Card variant=\"secondary\">\n <AddressForm\n slots={slots}\n fieldIdPrefix={fieldIdPrefix}\n isOpen={addNewAddress}\n addressesFormTitle={translations.newAddressFormTitle}\n inputsDefaultValueSet={inputsDefaultValueSet}\n showShippingCheckBox={!!addressesList?.length}\n showBillingCheckBox={!!addressesList?.length}\n hasDefaultShippingAddress={hasDefaultShippingAddress}\n hasDefaultBillingAddress={hasDefaultBillingAddress}\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 isB2BFlow={isB2BFlow}\n enforceB2BPermissions={shouldEnforceB2BPermissions}\n permissions={permissions}\n />\n </Card>\n ) : (\n <AddressActions\n minifiedView={minifiedView}\n addNewAddress={addNewAddress}\n routeAddressesPage={redirectToAddressesRoute}\n isB2BFlow={aclRestrictedB2BFlow}\n permissions={permissions}\n loading={loading}\n />\n )}\n </div>\n </>\n );\n }\n\n return (\n <div>\n {withHeader ? (\n <Header\n title={headerTitle}\n divider={!minifiedView}\n className={classes([\n 'account-addresses-header-title',\n ['account-addresses-header', minifiedView],\n ])}\n level={headerLevel ?? (minifiedView ? 2 : 1)}\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 isB2BFlow={aclRestrictedB2BFlow}\n permissions={permissions}\n />\n <LiveRegion message={loading ? translations.loading : translations.loaded} />\n {loading ? (\n <CardLoader testId={'addressSkeletonLoader'} withCard={false} />\n ) : !selectable ? (\n <EmptyList\n isEmpty={!addressesList?.length}\n typeList=\"address\"\n minifiedView={minifiedView}\n />\n ) : isAddressSelectionLocked ? (\n <EmptyList\n isEmpty={!addressesList?.length}\n typeList=\"address\"\n minifiedView={minifiedView}\n />\n ) : (\n <AddressForm\n slots={slots}\n hideActionFormButtons={hideActionFormButtons}\n fieldIdPrefix={fieldIdPrefix}\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 hasDefaultShippingAddress={hasDefaultShippingAddress}\n hasDefaultBillingAddress={hasDefaultBillingAddress}\n onChange={onAddressData}\n onCloseBtnClick={closeNewAddressForm}\n onError={onError}\n onSubmit={onSubmit}\n onSuccess={handleOnSuccess}\n isB2BFlow={isB2BFlow}\n enforceB2BPermissions={shouldEnforceB2BPermissions}\n permissions={permissions}\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\nconst defaultTextField = {\n entityType: 'CUSTOMER_ADDRESS',\n isUnique: false,\n options: [],\n multilineCount: 0,\n validateRules: [],\n defaultValue: '',\n fieldType: FieldEnumList.TEXT,\n className: '',\n required: false,\n orderNumber: 50,\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\nexport const defaultAddressTypeShippingCheckBox = {\n ...defaultCheckBox,\n label: 'Shipping Address',\n name: 'address_type_shipping',\n id: 'address_type_shipping',\n code: 'address_type_shipping',\n customUpperCode: 'addressTypeShipping',\n orderNumber: 90,\n};\n\nexport const defaultAddressTypeBillingCheckBox = {\n ...defaultCheckBox,\n label: 'Billing Address',\n name: 'address_type_billing',\n id: 'address_type_billing',\n code: 'address_type_billing',\n customUpperCode: 'addressTypeBilling',\n orderNumber: 91,\n};\n\nexport const defaultIsDefaultCheckBox = {\n ...defaultCheckBox,\n label: 'Set as default address',\n name: 'is_default',\n id: 'is_default',\n code: 'is_default',\n customUpperCode: 'isDefault',\n orderNumber: 92,\n};\n\nexport const defaultNicknameField = {\n ...defaultTextField,\n label: 'Nickname',\n name: 'nickname',\n id: 'nickname',\n code: 'nickname',\n customUpperCode: 'nickname',\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 keepDefaultCheckBoxesOnEdit?: boolean;\n}\n\nexport default ({\n fields,\n addressId,\n countryOptions,\n disableField,\n regionOptions,\n isRequiredRegion,\n isRequiredPostCode,\n keepDefaultCheckBoxesOnEdit,\n}: ProcessFieldsProps): Field[] => {\n const result = fields\n .filter((item) => {\n const defaultShippingBilling =\n addressId &&\n !keepDefaultCheckBoxesOnEdit &&\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 'addressType',\n 'addressTypeShipping',\n 'addressTypeBilling',\n 'isDefault',\n 'defaultBilling',\n 'defaultShipping',\n 'fax',\n 'firstName',\n 'lastName',\n 'nickname',\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 2026 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 '@/account/data/models';\n\ntype AddressPermissionFlags = {\n canCreateAddress?: boolean;\n canSetDefaultAddress?: boolean;\n loading?: boolean;\n};\n\nexport type B2BDefaultCheckBoxRules = {\n showShipping: boolean;\n showBilling: boolean;\n shippingDefaultValue: boolean;\n billingDefaultValue: boolean;\n};\n\nexport type AddressValidationAlertKey =\n | 'noPermissionEditAddresses'\n | 'noPermissionCreateAddresses'\n | 'companyAddressSingleDefaultType';\n\nexport const resolveShouldEnforceB2BPermissions = (\n isB2BFlow?: boolean,\n enforceB2BPermissions?: boolean\n): boolean => {\n return Boolean(isB2BFlow) && enforceB2BPermissions !== false;\n};\n\nexport const resolveTemporaryCheckoutAddressMode = ({\n isB2BFlow,\n shouldEnforceB2BPermissions,\n permissions,\n}: {\n isB2BFlow?: boolean;\n shouldEnforceB2BPermissions: boolean;\n permissions?: AddressPermissionFlags;\n}): boolean => {\n return (\n Boolean(isB2BFlow) &&\n !shouldEnforceB2BPermissions &&\n permissions?.loading === false &&\n permissions?.canCreateAddress === false\n );\n};\n\nexport const hasSingleDefaultTypeViolation = (\n isB2BFlow: boolean | undefined,\n requestPayload: CustomerAddressesModel\n): boolean => {\n const hasConflictingTypeSelection =\n Boolean(requestPayload.addressTypeShipping) &&\n Boolean(requestPayload.addressTypeBilling);\n\n return (\n Boolean(isB2BFlow) &&\n (hasConflictingTypeSelection ||\n (Boolean(requestPayload.defaultShipping) &&\n Boolean(requestPayload.defaultBilling)))\n );\n};\n\nexport const shouldOmitDefaultFlagsFromPayload = (\n shouldEnforceB2BPermissions: boolean,\n canSetDefaultAddress?: boolean\n): boolean => {\n return shouldEnforceB2BPermissions && !canSetDefaultAddress;\n};\n\nexport const canSetAddressAsDefault = ({\n requestPayload,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress,\n}: {\n requestPayload: CustomerAddressesModel;\n shouldEnforceB2BPermissions: boolean;\n canSetDefaultAddress?: boolean;\n}): boolean => {\n const shouldSetAsDefault =\n typeof requestPayload.isDefault === 'boolean'\n ? requestPayload.isDefault\n : Boolean(requestPayload.defaultShipping) ||\n Boolean(requestPayload.defaultBilling);\n\n return (\n shouldSetAsDefault &&\n (!shouldEnforceB2BPermissions || Boolean(canSetDefaultAddress))\n );\n};\n\nexport const canSetDefaultAddressInForm = ({\n isTemporaryCheckoutAddressMode,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress,\n}: {\n isTemporaryCheckoutAddressMode: boolean;\n shouldEnforceB2BPermissions: boolean;\n canSetDefaultAddress?: boolean;\n}): boolean => {\n return (\n !isTemporaryCheckoutAddressMode &&\n (!shouldEnforceB2BPermissions || Boolean(canSetDefaultAddress))\n );\n};\n\nexport const getSanitizedAddressPayload = ({\n requestPayload,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress,\n}: {\n requestPayload: CustomerAddressesModel;\n shouldEnforceB2BPermissions: boolean;\n canSetDefaultAddress?: boolean;\n}): CustomerAddressesModel => {\n if (\n !shouldOmitDefaultFlagsFromPayload(\n shouldEnforceB2BPermissions,\n canSetDefaultAddress\n )\n ) {\n return requestPayload;\n }\n\n const sanitizedPayload = { ...requestPayload };\n delete sanitizedPayload.defaultShipping;\n delete sanitizedPayload.defaultBilling;\n delete sanitizedPayload.isDefault;\n\n return sanitizedPayload;\n};\n\nexport const resolveUpdateAddressAlertKey = ({\n shouldEnforceB2BPermissions,\n canEditAddress,\n isB2BFlow,\n requestPayload,\n}: {\n shouldEnforceB2BPermissions: boolean;\n canEditAddress?: boolean;\n isB2BFlow?: boolean;\n requestPayload: CustomerAddressesModel;\n}): AddressValidationAlertKey | undefined => {\n if (shouldEnforceB2BPermissions && !canEditAddress) {\n return 'noPermissionEditAddresses';\n }\n\n if (hasSingleDefaultTypeViolation(isB2BFlow, requestPayload)) {\n return 'companyAddressSingleDefaultType';\n }\n\n return undefined;\n};\n\nexport const resolveCreateAddressAlertKey = ({\n shouldEnforceB2BPermissions,\n canCreateAddress,\n isB2BFlow,\n requestPayload,\n}: {\n shouldEnforceB2BPermissions: boolean;\n canCreateAddress?: boolean;\n isB2BFlow?: boolean;\n requestPayload: CustomerAddressesModel;\n}): AddressValidationAlertKey | undefined => {\n if (shouldEnforceB2BPermissions && !canCreateAddress) {\n return 'noPermissionCreateAddresses';\n }\n\n if (hasSingleDefaultTypeViolation(isB2BFlow, requestPayload)) {\n return 'companyAddressSingleDefaultType';\n }\n\n return undefined;\n};\n\nexport const resolveAddressFormErrorMessage = (error: unknown): string => {\n if (error instanceof Error && error.message) {\n return error.message;\n }\n\n if (typeof error === 'string' && error.trim()) {\n return error;\n }\n\n return 'Unknown error';\n};\n\ntype ResolveB2BDefaultCheckBoxRulesArgs = {\n isB2BFlow?: boolean;\n showShippingCheckBox?: boolean;\n showBillingCheckBox?: boolean;\n shippingCheckBoxValue?: boolean;\n billingCheckBoxValue?: boolean;\n addressId?: string;\n hasDefaultShippingAddress?: boolean;\n hasDefaultBillingAddress?: boolean;\n};\n\nconst resolveBaseCheckBoxRules = ({\n showShippingCheckBox,\n showBillingCheckBox,\n shippingCheckBoxValue,\n billingCheckBoxValue,\n}: ResolveB2BDefaultCheckBoxRulesArgs): B2BDefaultCheckBoxRules => ({\n showShipping: Boolean(showShippingCheckBox),\n showBilling: Boolean(showBillingCheckBox),\n shippingDefaultValue: shippingCheckBoxValue ?? false,\n billingDefaultValue: billingCheckBoxValue ?? false,\n});\n\ntype B2BCreateDefaultCaseKey =\n | 'none'\n | 'shippingOnly'\n | 'billingOnly'\n | 'both';\n\nconst B2B_CREATE_DEFAULT_RULES: Record<\n B2BCreateDefaultCaseKey,\n B2BDefaultCheckBoxRules\n> = {\n none: {\n showShipping: true,\n showBilling: true,\n shippingDefaultValue: false,\n billingDefaultValue: false,\n },\n shippingOnly: {\n showShipping: false,\n showBilling: true,\n shippingDefaultValue: false,\n billingDefaultValue: true,\n },\n billingOnly: {\n showShipping: true,\n showBilling: false,\n shippingDefaultValue: true,\n billingDefaultValue: false,\n },\n both: {\n showShipping: false,\n showBilling: false,\n shippingDefaultValue: false,\n billingDefaultValue: false,\n },\n};\n\nconst resolveB2BCreateDefaults = ({\n hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n}: ResolveB2BDefaultCheckBoxRulesArgs): B2BDefaultCheckBoxRules => {\n const hasShipping = Boolean(hasDefaultShippingAddress);\n const hasBilling = Boolean(hasDefaultBillingAddress);\n\n let ruleKey: B2BCreateDefaultCaseKey = 'none';\n\n if (hasShipping && hasBilling) {\n ruleKey = 'both';\n } else if (hasShipping) {\n ruleKey = 'shippingOnly';\n } else if (hasBilling) {\n ruleKey = 'billingOnly';\n }\n\n return B2B_CREATE_DEFAULT_RULES[ruleKey];\n};\n\nexport const resolveB2BDefaultCheckBoxRules = ({\n isB2BFlow,\n showShippingCheckBox,\n showBillingCheckBox,\n shippingCheckBoxValue,\n billingCheckBoxValue,\n addressId,\n hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n}: ResolveB2BDefaultCheckBoxRulesArgs): B2BDefaultCheckBoxRules => {\n const baseRules = resolveBaseCheckBoxRules({\n showShippingCheckBox,\n showBillingCheckBox,\n shippingCheckBoxValue,\n billingCheckBoxValue,\n });\n const isCreateMode = !addressId;\n\n // Outside the company address book an address may be the default shipping\n // and the default billing address at once, so the caller's values are used\n // as they are. Only the company flow below narrows them to a single type.\n if (!isB2BFlow) {\n return baseRules;\n }\n\n if (!isCreateMode) {\n return baseRules;\n }\n\n return resolveB2BCreateDefaults({\n hasDefaultShippingAddress,\n hasDefaultBillingAddress,\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 {\n createCustomerAddress,\n getAttributesForm,\n updateCustomerAddress,\n getCountries,\n createCompanyAddress,\n updateCompanyAddress,\n setDefaultCompanyAddress,\n} from '@/account/api';\nimport {\n defaultNicknameField,\n defaultShippingCheckBox,\n defaultBillingCheckBox,\n defaultAddressTypeShippingCheckBox,\n defaultAddressTypeBillingCheckBox,\n defaultIsDefaultCheckBox,\n} from '@/account/configs/addressField.config';\nimport {\n AttributesFormModel,\n Country,\n CustomerAddressesModel,\n FieldEnumList,\n} from '@/account/data/models';\nimport type { CompanyAddressType } from '@/account/types/api/companyAddress.types';\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 {\n AddressValidationAlertKey,\n canSetAddressAsDefault,\n canSetDefaultAddressInForm,\n getSanitizedAddressPayload,\n resolveAddressFormErrorMessage,\n resolveB2BDefaultCheckBoxRules,\n resolveCreateAddressAlertKey,\n resolveShouldEnforceB2BPermissions,\n resolveTemporaryCheckoutAddressMode,\n resolveUpdateAddressAlertKey,\n} from '@/account/lib/addressFormRules';\nimport { useAddressFormProps } from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\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\nconst isNicknameField = (field?: Partial<AttributesFormModel>): boolean =>\n field?.name === 'nickname' ||\n field?.code === 'nickname' ||\n field?.customUpperCode === 'nickname';\n\nexport const useAddressForm = ({\n showFormLoader,\n showSaveCheckBox,\n saveCheckBoxValue,\n addressFormId,\n billingCheckBoxValue,\n shippingCheckBoxValue,\n showShippingCheckBox,\n showBillingCheckBox,\n hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n inputsDefaultValueSet,\n onCloseBtnClick,\n onSuccess,\n onError,\n formName,\n isB2BFlow,\n enforceB2BPermissions,\n permissions,\n}: useAddressFormProps) => {\n const translations = useText({\n noPermissionEditAddresses:\n 'Account.AddressForm.notifications.noPermissionEditAddresses',\n noPermissionCreateAddresses:\n 'Account.AddressForm.notifications.noPermissionCreateAddresses',\n companyAddressSingleDefaultType:\n 'Account.AddressForm.notifications.companyAddressSingleDefaultType',\n b2bShippingTypeLabel: 'Account.AddressForm.formText.b2bShippingTypeLabel',\n b2bBillingTypeLabel: 'Account.AddressForm.formText.b2bBillingTypeLabel',\n b2bIsDefaultLabel: 'Account.AddressForm.formText.b2bIsDefaultLabel',\n b2bIsDefaultShippingLabel:\n 'Account.AddressForm.formText.b2bIsDefaultShippingLabel',\n b2bIsDefaultBillingLabel:\n 'Account.AddressForm.formText.b2bIsDefaultBillingLabel',\n });\n\n const shouldEnforceB2BPermissions = resolveShouldEnforceB2BPermissions(\n isB2BFlow,\n enforceB2BPermissions\n );\n const isTemporaryCheckoutAddressMode = resolveTemporaryCheckoutAddressMode({\n isB2BFlow,\n shouldEnforceB2BPermissions,\n permissions,\n });\n\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 const canEditAddressInCurrentMode =\n !shouldEnforceB2BPermissions || Boolean(permissions?.canEditAddress);\n const canSetDefaultAddressInCurrentMode =\n !shouldEnforceB2BPermissions || Boolean(permissions?.canSetDefaultAddress);\n const isB2BEditMode = Boolean(isB2BFlow && addressId);\n const isSetDefaultOnlyEditMode =\n isB2BEditMode &&\n shouldEnforceB2BPermissions &&\n !canEditAddressInCurrentMode &&\n canSetDefaultAddressInCurrentMode;\n const isAddressTypeSelectionOnlyMode =\n isB2BEditMode &&\n shouldEnforceB2BPermissions &&\n canEditAddressInCurrentMode &&\n !canSetDefaultAddressInCurrentMode;\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 resolveSelectedAddressType = useCallback(\n (requestPayload: CustomerAddressesModel): CompanyAddressType => {\n if (requestPayload.addressType === 'BILLING') {\n return 'BILLING';\n }\n\n if (requestPayload.addressType === 'SHIPPING') {\n return 'SHIPPING';\n }\n\n if (\n requestPayload.addressTypeBilling &&\n !requestPayload.addressTypeShipping\n ) {\n return 'BILLING';\n }\n\n if (\n requestPayload.addressTypeShipping &&\n !requestPayload.addressTypeBilling\n ) {\n return 'SHIPPING';\n }\n\n if (requestPayload.defaultBilling && !requestPayload.defaultShipping) {\n return 'BILLING';\n }\n\n if (requestPayload.defaultShipping && !requestPayload.defaultBilling) {\n return 'SHIPPING';\n }\n\n return inputsDefaultValueSet?.addressType ?? 'SHIPPING';\n },\n [inputsDefaultValueSet?.addressType]\n );\n\n const resolveIsDefaultSelection = useCallback(\n (requestPayload: CustomerAddressesModel): boolean => {\n if (typeof requestPayload.isDefault === 'boolean') {\n return requestPayload.isDefault;\n }\n\n if (\n typeof requestPayload.defaultShipping === 'boolean' ||\n typeof requestPayload.defaultBilling === 'boolean'\n ) {\n return Boolean(\n requestPayload.defaultShipping || requestPayload.defaultBilling\n );\n }\n\n return Boolean(\n inputsDefaultValueSet?.defaultShipping ||\n inputsDefaultValueSet?.defaultBilling\n );\n },\n [inputsDefaultValueSet?.defaultBilling, inputsDefaultValueSet?.defaultShipping]\n );\n\n const handleUpdateAddress = useCallback(\n async (event: Event, valid: boolean): Promise<void | null | undefined> => {\n if (!valid) return null;\n\n const formValues = getFormValues(event.target as HTMLFormElement);\n const serializeValues = serializeAddressForm(formValues);\n const requestPayload: CustomerAddressesModel = {\n ...(serializeValues as CustomerAddressesModel),\n };\n const originalAddressType = inputsDefaultValueSet?.addressType;\n\n if (isB2BFlow) {\n const selectedAddressType = resolveSelectedAddressType(requestPayload);\n const selectedIsDefault = resolveIsDefaultSelection(requestPayload);\n const normalizedAddressType =\n isB2BEditMode && originalAddressType\n ? originalAddressType\n : selectedAddressType;\n\n requestPayload.addressType = normalizedAddressType;\n requestPayload.addressTypeShipping =\n normalizedAddressType === 'SHIPPING';\n requestPayload.addressTypeBilling = normalizedAddressType === 'BILLING';\n requestPayload.isDefault = selectedIsDefault;\n requestPayload.defaultShipping =\n normalizedAddressType === 'SHIPPING' ? selectedIsDefault : false;\n requestPayload.defaultBilling =\n normalizedAddressType === 'BILLING' ? selectedIsDefault : false;\n\n }\n\n if (isB2BFlow && isSetDefaultOnlyEditMode) {\n setSubmitLoading(true);\n\n try {\n if (requestPayload.isDefault) {\n await setDefaultCompanyAddress(addressId);\n }\n\n onSuccess?.();\n onCloseBtnClick?.();\n (event?.target as HTMLFormElement)?.reset();\n } catch (error) {\n const errorMessage = resolveAddressFormErrorMessage(error);\n\n setInLineAlert((prev) => ({\n ...prev,\n text: errorMessage,\n type: 'error',\n }));\n onError?.(errorMessage);\n } finally {\n setSubmitLoading(false);\n }\n\n return null;\n }\n\n const validationAlertKey = resolveUpdateAddressAlertKey({\n shouldEnforceB2BPermissions,\n canEditAddress: permissions?.canEditAddress,\n isB2BFlow,\n requestPayload,\n });\n\n if (validationAlertKey) {\n setInLineAlert((prev) => ({\n ...prev,\n text: translations[validationAlertKey as AddressValidationAlertKey],\n type: 'warning',\n }));\n\n return null;\n }\n\n setSubmitLoading(true);\n\n const sanitizedPayload = getSanitizedAddressPayload({\n requestPayload,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress: permissions?.canSetDefaultAddress,\n });\n\n const b2bUpdatePayload = isB2BFlow\n ? {\n ...sanitizedPayload,\n isDefault: resolveIsDefaultSelection(requestPayload),\n }\n : sanitizedPayload;\n\n try {\n if (isB2BFlow) {\n // B2B: Use company address API\n const shouldSetAsDefault = canSetAddressAsDefault({\n requestPayload,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress: permissions?.canSetDefaultAddress,\n });\n\n await updateCompanyAddress(addressId, b2bUpdatePayload);\n\n if (shouldSetAsDefault) {\n await setDefaultCompanyAddress(addressId);\n }\n } else {\n // B2C: Use customer address API\n const customerUpdatePayload: Parameters<\n typeof updateCustomerAddress\n >[0] = {\n ...sanitizedPayload,\n addressId: Number(addressId),\n };\n\n await updateCustomerAddress(customerUpdatePayload);\n }\n \n onSuccess?.();\n onCloseBtnClick?.();\n (event?.target as HTMLFormElement)?.reset();\n } catch (error) {\n const errorMessage = resolveAddressFormErrorMessage(error);\n\n setInLineAlert((prev) => ({\n ...prev,\n text: errorMessage,\n type: 'error',\n }));\n onError?.(errorMessage);\n } finally {\n setSubmitLoading(false);\n }\n },\n [\n onCloseBtnClick,\n onError,\n onSuccess,\n isB2BFlow,\n shouldEnforceB2BPermissions,\n translations,\n addressId,\n inputsDefaultValueSet,\n permissions?.canEditAddress,\n permissions?.canSetDefaultAddress,\n resolveSelectedAddressType,\n resolveIsDefaultSelection,\n isB2BEditMode,\n isSetDefaultOnlyEditMode,\n ]\n );\n\n const handleCreateAddress = useCallback(\n async (event: Event, valid: boolean): Promise<void | null | undefined> => {\n if (!valid) return;\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 const requestPayload: CustomerAddressesModel = {\n ...(serializeValues as CustomerAddressesModel),\n };\n\n if (isB2BFlow) {\n const selectedAddressType = resolveSelectedAddressType(requestPayload);\n const selectedIsDefault = resolveIsDefaultSelection(requestPayload);\n\n requestPayload.addressType = selectedAddressType;\n requestPayload.addressTypeShipping = selectedAddressType === 'SHIPPING';\n requestPayload.addressTypeBilling = selectedAddressType === 'BILLING';\n requestPayload.isDefault = selectedIsDefault;\n requestPayload.defaultShipping =\n selectedAddressType === 'SHIPPING' ? selectedIsDefault : false;\n requestPayload.defaultBilling =\n selectedAddressType === 'BILLING' ? selectedIsDefault : false;\n\n }\n\n setSubmitLoading(true);\n\n if (isTemporaryCheckoutAddressMode) {\n onSuccess?.();\n onCloseBtnClick?.();\n (event?.target as HTMLFormElement)?.reset();\n setAddressId('');\n setSubmitLoading(false);\n return null;\n }\n\n const validationAlertKey = resolveCreateAddressAlertKey({\n shouldEnforceB2BPermissions,\n canCreateAddress: permissions?.canCreateAddress,\n isB2BFlow,\n requestPayload,\n });\n\n if (validationAlertKey) {\n setInLineAlert((prev) => ({\n ...prev,\n text: translations[validationAlertKey as AddressValidationAlertKey],\n type: 'warning',\n }));\n\n setSubmitLoading(false);\n return null;\n }\n\n const sanitizedPayload = getSanitizedAddressPayload({\n requestPayload,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress: permissions?.canSetDefaultAddress,\n });\n\n try {\n if (isB2BFlow) {\n // B2B: Use company address API\n const createdAddress = await createCompanyAddress(sanitizedPayload);\n\n if (\n canSetAddressAsDefault({\n requestPayload: sanitizedPayload,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress: permissions?.canSetDefaultAddress,\n })\n ) {\n await setDefaultCompanyAddress(String(createdAddress?.id ?? ''));\n }\n } else {\n // B2C: Use customer address API\n await createCustomerAddress(sanitizedPayload);\n }\n \n onSuccess?.();\n onCloseBtnClick?.();\n (event?.target as HTMLFormElement)?.reset();\n } catch (error) {\n const errorMessage = resolveAddressFormErrorMessage(error);\n\n setInLineAlert((prev) => ({\n ...prev,\n text: errorMessage,\n type: 'error',\n }));\n onError?.(errorMessage);\n } finally {\n setAddressId('');\n setSubmitLoading(false);\n }\n },\n [\n onCloseBtnClick,\n onError,\n onSuccess,\n isB2BFlow,\n shouldEnforceB2BPermissions,\n isTemporaryCheckoutAddressMode,\n translations,\n permissions?.canCreateAddress,\n permissions?.canSetDefaultAddress,\n resolveSelectedAddressType,\n resolveIsDefaultSelection,\n ]\n );\n\n const b2bDefaultCheckBoxRules = useMemo(() => {\n return resolveB2BDefaultCheckBoxRules({\n isB2BFlow,\n showShippingCheckBox,\n showBillingCheckBox,\n shippingCheckBoxValue,\n billingCheckBoxValue,\n addressId,\n hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n });\n }, [\n isB2BFlow,\n showShippingCheckBox,\n showBillingCheckBox,\n shippingCheckBoxValue,\n billingCheckBoxValue,\n addressId,\n hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n ]);\n\n const normalizeFieldsConfig = useMemo(() => {\n if (!attributesFormList.length) return [];\n\n const hasRenderableNicknameField = attributesFormList.some(\n (field) =>\n isNicknameField(field) &&\n field.fieldType === FieldEnumList.TEXT &&\n !field.isHidden\n );\n\n const shouldForceNicknameField =\n isB2BFlow && !hasRenderableNicknameField;\n\n const normalizedAttributesFormList =\n shouldForceNicknameField\n ? [\n ...attributesFormList.filter((field) => !isNicknameField(field)),\n defaultNicknameField,\n ]\n : attributesFormList;\n\n const canSetDefaultAddress = canSetDefaultAddressInForm({\n isTemporaryCheckoutAddressMode,\n shouldEnforceB2BPermissions,\n canSetDefaultAddress: permissions?.canSetDefaultAddress,\n });\n const liveAddressTypeBilling = inputChange?.addressTypeBilling;\n const liveAddressTypeShipping = inputChange?.addressTypeShipping;\n const selectedAddressType =\n typeof liveAddressTypeBilling === 'boolean' ||\n typeof liveAddressTypeShipping === 'boolean'\n ? liveAddressTypeBilling\n ? 'BILLING'\n : 'SHIPPING'\n : inputsDefaultValueSet?.addressType ?? 'SHIPPING';\n const isDefaultAddressSelected = Boolean(\n inputsDefaultValueSet?.defaultShipping ||\n inputsDefaultValueSet?.defaultBilling\n );\n const isB2BTypeSelectionDisabled = Boolean(isB2BFlow && addressId);\n const isB2BIsDefaultDisabled =\n !canSetDefaultAddress ||\n isAddressTypeSelectionOnlyMode ||\n (isSetDefaultOnlyEditMode && isDefaultAddressSelected);\n const shouldHideB2BAddressOptions = Boolean(\n !shouldEnforceB2BPermissions ||\n isTemporaryCheckoutAddressMode ||\n (showSaveCheckBox && !saveCheckBoxAddress)\n );\n\n const shippingCheckBox = {\n ...defaultShippingCheckBox,\n defaultValue: b2bDefaultCheckBoxRules.shippingDefaultValue,\n isHidden: Boolean(\n showSaveCheckBox && !saveCheckBoxAddress\n ? true\n : !b2bDefaultCheckBoxRules.showShipping || !canSetDefaultAddress\n ),\n };\n\n const billingCheckBox = {\n ...defaultBillingCheckBox,\n defaultValue: b2bDefaultCheckBoxRules.billingDefaultValue,\n isHidden: Boolean(\n showSaveCheckBox && !saveCheckBoxAddress\n ? true\n : !b2bDefaultCheckBoxRules.showBilling || !canSetDefaultAddress\n ),\n };\n\n const b2bAddressTypeShippingCheckBox = {\n ...defaultAddressTypeShippingCheckBox,\n label: translations.b2bShippingTypeLabel,\n forceLabel: true,\n defaultValue: selectedAddressType === 'SHIPPING',\n isHidden: shouldHideB2BAddressOptions,\n disabled: isB2BTypeSelectionDisabled,\n };\n\n const b2bAddressTypeBillingCheckBox = {\n ...defaultAddressTypeBillingCheckBox,\n label: translations.b2bBillingTypeLabel,\n forceLabel: true,\n defaultValue: selectedAddressType === 'BILLING',\n isHidden: shouldHideB2BAddressOptions,\n disabled: isB2BTypeSelectionDisabled,\n };\n\n const b2bIsDefaultLabel =\n selectedAddressType === 'BILLING'\n ? translations.b2bIsDefaultBillingLabel\n : translations.b2bIsDefaultShippingLabel;\n\n const b2bIsDefaultCheckBox = {\n ...defaultIsDefaultCheckBox,\n label: b2bIsDefaultLabel,\n forceLabel: true,\n defaultValue: isDefaultAddressSelected,\n isHidden: shouldHideB2BAddressOptions,\n disabled: isB2BIsDefaultDisabled,\n };\n\n const updatedAttributesFormList = isB2BFlow\n ? [\n ...normalizedAttributesFormList,\n b2bAddressTypeShippingCheckBox,\n b2bAddressTypeBillingCheckBox,\n b2bIsDefaultCheckBox,\n ]\n : [...normalizedAttributesFormList, shippingCheckBox, billingCheckBox];\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 baseItemValues = findNonEmptyObject(\n sessionAddressFormData,\n inputsDefaultValueSet\n ) as Record<string, unknown>;\n const itemValuesForFields = isB2BFlow\n ? {\n ...baseItemValues,\n addressTypeShipping: selectedAddressType === 'SHIPPING',\n addressTypeBilling: selectedAddressType === 'BILLING',\n isDefault: isDefaultAddressSelected,\n }\n : baseItemValues;\n\n const fields = getFieldsConfig(itemValuesForFields, updatedAttributesFormList);\n\n const normalizedFields = prepareNormalizedData({\n fields,\n addressId,\n countryOptions,\n disableField,\n regionOptions,\n isRequiredRegion,\n isRequiredPostCode,\n keepDefaultCheckBoxesOnEdit: Boolean(isB2BFlow && addressId),\n });\n\n if (!isSetDefaultOnlyEditMode) {\n return normalizedFields;\n }\n\n return normalizedFields.map((field) => {\n const isB2BSelectionCheckBox =\n field.customUpperCode === 'addressTypeShipping' ||\n field.customUpperCode === 'addressTypeBilling' ||\n field.customUpperCode === 'isDefault';\n\n if (isB2BSelectionCheckBox) {\n return {\n ...field,\n disabled:\n field.customUpperCode === 'isDefault'\n ? isB2BIsDefaultDisabled\n : true,\n };\n }\n\n return {\n ...field,\n disabled: true,\n };\n });\n }, [\n attributesFormList,\n isB2BFlow,\n showSaveCheckBox,\n saveCheckBoxAddress,\n b2bDefaultCheckBoxRules,\n isTemporaryCheckoutAddressMode,\n shouldEnforceB2BPermissions,\n permissions?.canSetDefaultAddress,\n formName,\n regionOptions,\n inputsDefaultValueSet,\n addressId,\n countryOptions,\n disableField,\n isRequiredRegion,\n isRequiredPostCode,\n isSetDefaultOnlyEditMode,\n isAddressTypeSelectionOnlyMode,\n inputChange?.addressTypeShipping,\n inputChange?.addressTypeBilling,\n translations.b2bShippingTypeLabel,\n translations.b2bBillingTypeLabel,\n translations.b2bIsDefaultShippingLabel,\n translations.b2bIsDefaultBillingLabel,\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, useRef, 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 hasDefaultShippingAddress = false,\n hasDefaultBillingAddress = false,\n shippingCheckBoxValue = true,\n billingCheckBoxValue = true,\n isOpen,\n fieldIdPrefix,\n onSubmit,\n onCloseBtnClick,\n onSuccess,\n onError,\n onChange,\n isB2BFlow,\n enforceB2BPermissions,\n permissions,\n}) => {\n const translations = useText({\n secondaryButton: 'Account.AddressForm.formText.secondaryButton',\n primaryButton: 'Account.AddressForm.formText.primaryButton',\n saveAddressBook: 'Account.AddressForm.formText.saveAddressBook',\n noPermissionEditAddresses:\n 'Account.AddressForm.notifications.noPermissionEditAddresses',\n noPermissionCreateAddresses:\n 'Account.AddressForm.notifications.noPermissionCreateAddresses',\n });\n\n const shouldEnforceB2BPermissions =\n Boolean(isB2BFlow) && enforceB2BPermissions !== false;\n const shouldShowSaveCheckBox =\n Boolean(showSaveCheckBox) &&\n !(Boolean(isB2BFlow) && !shouldEnforceB2BPermissions);\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 hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n saveCheckBoxValue,\n showSaveCheckBox: shouldShowSaveCheckBox,\n onSuccess,\n onError,\n onCloseBtnClick,\n formName,\n isB2BFlow,\n enforceB2BPermissions,\n permissions,\n });\n\n const isEditMode = Boolean(addressFormId);\n const canEditInB2B =\n !shouldEnforceB2BPermissions || Boolean(permissions?.canEditAddress);\n const canSetDefaultInB2B =\n !shouldEnforceB2BPermissions || Boolean(permissions?.canSetDefaultAddress);\n const canCreateInB2B =\n !shouldEnforceB2BPermissions || Boolean(permissions?.canCreateAddress);\n\n // Check if form should be disabled based on operation-specific B2B permissions.\n const isFormDisabled = isEditMode\n ? !canEditInB2B && !canSetDefaultInB2B\n : !canCreateInB2B;\n const noPermissionMessage = isEditMode\n ? translations.noPermissionEditAddresses\n : translations.noPermissionCreateAddresses;\n\n const [formKey, setFormKey] = useState(0);\n const previousDefaultValuesRef = useRef<string | null>(null);\n\n // Re-mount form only when the default values really change. Comparing by\n // object identity remounts the form on every parent re-render (the address\n // list is re-created on each refetch), which drops focus and typed values.\n useEffect(() => {\n const serializedDefaultValues = JSON.stringify(\n inputsDefaultValueSet ?? null\n );\n\n if (previousDefaultValuesRef.current === serializedDefaultValues) return;\n\n const isInitialRun = previousDefaultValuesRef.current === null;\n\n previousDefaultValuesRef.current = serializedDefaultValues;\n\n if (isInitialRun) return;\n\n setFormKey((prevKey) => prevKey + 1);\n }, [inputsDefaultValueSet]);\n\n if (!isOpen) return null;\n\n // Show no permission message if B2B user doesn't have required rights\n if (isFormDisabled) {\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\n data-testid=\"noPermissionAlert\"\n className=\"account-address-form-wrapper__notification\"\n type=\"warning\"\n variant=\"secondary\"\n heading={noPermissionMessage}\n />\n </div>\n );\n }\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={shouldShowSaveCheckBox}\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 shouldShowSaveCheckBox,\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 {!shouldShowSaveCheckBox ? (\n <>\n <Button\n // @ts-ignore\n type={'button'}\n onClick={handleOnCloseForm}\n variant=\"secondary\"\n disabled={submitLoading || isFormDisabled}\n >\n {translations.secondaryButton}\n </Button>\n <Button disabled={submitLoading || isFormDisabled}>\n {translations.primaryButton}\n </Button>\n </>\n ) : null}\n </>\n )}\n </div>\n ) : null}\n </Form>\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 { getStoreConfig } from '@/account/api';\nimport { StoreConfigModel } from '@/account/data/models';\nimport { useEffect, useState } from 'preact/hooks';\n\nconst getCachedStoreConfig = (): StoreConfigModel | null => {\n const storeConfigString = sessionStorage.getItem('accountStoreConfig');\n\n if (!storeConfigString) return null;\n\n try {\n return JSON.parse(storeConfigString);\n } catch (error) {\n console.error('Failed to parse cached store config:', error);\n sessionStorage.removeItem('accountStoreConfig');\n return null;\n }\n};\n\nexport const useGetStoreConfigs = () => {\n const [loading, setLoading] = useState<boolean>(true);\n const [passwordConfigs, setPasswordConfigs] = useState<{\n minLength: number;\n requiredCharacterClasses: number;\n } | null>(null);\n const [remoteShoppingAssistanceConfigs, setRemoteShoppingAssistanceConfigs] =\n useState<{\n shoppingAssistanceEnabled: boolean;\n shoppingAssistanceCheckboxTitle: string;\n shoppingAssistanceCheckboxTooltip: string;\n } | null>(null);\n const applyStoreConfig = (config: StoreConfigModel) => {\n const {\n minLength,\n requiredCharacterClasses,\n shoppingAssistanceEnabled,\n shoppingAssistanceCheckboxTitle,\n shoppingAssistanceCheckboxTooltip,\n } = config;\n\n setPasswordConfigs({\n minLength,\n requiredCharacterClasses,\n });\n\n setRemoteShoppingAssistanceConfigs({\n shoppingAssistanceEnabled,\n shoppingAssistanceCheckboxTitle,\n shoppingAssistanceCheckboxTooltip,\n });\n };\n\n useEffect(() => {\n const cachedStoreConfig = getCachedStoreConfig();\n\n if (cachedStoreConfig) {\n applyStoreConfig(cachedStoreConfig);\n setLoading(false);\n return;\n }\n\n getStoreConfig()\n .then((response) => {\n if (!response) return;\n\n sessionStorage.setItem('accountStoreConfig', JSON.stringify(response));\n applyStoreConfig(response);\n })\n .catch((error) => {\n console.error('Failed to load store config:', error);\n })\n .finally(() => {\n setLoading(false);\n });\n }, []);\n\n return { loading, passwordConfigs, remoteShoppingAssistanceConfigs };\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 { DEFAULT_ERRORS_STATE } from '../hooks/components/useChangePassword';\n\ninterface PasswordValidationParams {\n currentPassword: string;\n newPassword: string;\n confirmPassword: string;\n translations: Record<string, string>;\n}\n\ninterface PasswordErrors {\n currentPassword: string;\n newPassword: string;\n confirmPassword: string;\n}\n\nexport const validationChangePassword = ({\n currentPassword,\n newPassword,\n confirmPassword,\n translations,\n}: PasswordValidationParams): { isValid: boolean; errors: PasswordErrors } => {\n let errors: PasswordErrors = { ...DEFAULT_ERRORS_STATE };\n\n const arePasswordsEmpty =\n !currentPassword.length && !newPassword.length && !confirmPassword.length;\n const isNewPasswordMismatch =\n currentPassword.length && newPassword !== confirmPassword;\n\n if (arePasswordsEmpty) {\n errors = {\n ...errors,\n currentPassword: translations.requiredFieldError,\n newPassword: translations.requiredFieldError,\n confirmPassword: translations.requiredFieldError,\n };\n return { isValid: false, errors };\n }\n\n if (!currentPassword.length) {\n errors = {\n ...errors,\n currentPassword: translations.requiredFieldError,\n };\n return { isValid: false, errors };\n }\n\n if (!newPassword.length) {\n errors = {\n ...errors,\n newPassword: translations.requiredFieldError,\n };\n return { isValid: false, errors };\n }\n\n if (!confirmPassword.length) {\n errors = {\n ...errors,\n confirmPassword: translations.requiredFieldError,\n };\n return { isValid: false, errors };\n }\n\n if (isNewPasswordMismatch) {\n errors = {\n ...errors,\n currentPassword: '',\n newPassword: '',\n confirmPassword: translations.passwordMismatch,\n };\n return { isValid: false, errors };\n }\n\n return { isValid: true, errors };\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 validationUniqueSymbolsPassword = (\n password: string,\n uniqueSymbolsCount: number\n) => {\n if (uniqueSymbolsCount <= 1) return true;\n\n const numbers = /[0-9]/.test(password) ? 1 : 0;\n const lowerCaseLetter = /[a-z]/.test(password) ? 1 : 0;\n const upperCaseLetter = /[A-Z]/.test(password) ? 1 : 0;\n const specialSymbols = /[^a-zA-Z0-9\\s]/.test(password) ? 1 : 0;\n\n return (\n numbers + lowerCaseLetter + upperCaseLetter + specialSymbols >=\n uniqueSymbolsCount\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 { updateCustomerPassword } from '@/account/api';\nimport { validationChangePassword } from '@/account/lib/validationChangePassword';\nimport { validationUniqueSymbolsPassword } from '@/account/lib/validationUniqueSymbolsPassword';\nimport { UseChangePasswordProps } from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { useCallback, useState } from 'preact/hooks';\n\nexport const DEFAULT_ERRORS_STATE = {\n currentPassword: '',\n newPassword: '',\n confirmPassword: '',\n};\n\nexport const useChangePassword = ({\n passwordConfigs,\n handleSetInLineAlert,\n handleHideChangePassword,\n}: UseChangePasswordProps) => {\n const translations = useText({\n requiredFieldError: 'Account.FormText.requiredFieldError',\n passwordMismatch:\n 'Account.minifiedView.CustomerInformation.changePassword.passwordValidationMessage.passwordMismatch',\n incorrectCurrentPassword:\n 'Account.minifiedView.CustomerInformation.changePassword.passwordValidationMessage.incorrectCurrentPassword',\n passwordUpdateMessage:\n 'Account.minifiedView.CustomerInformation.changePassword.passwordValidationMessage.passwordUpdateMessage',\n });\n const [isClickSubmit, setIsClickSubmit] = useState(false);\n const [submitLoading, setSubmitLoading] = useState(false);\n const [currentPassword, setCurrentPassword] = useState('');\n const [newPassword, setNewPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n const [passwordErrors, setPasswordErrors] = useState({\n currentPassword: '',\n newPassword: '',\n confirmPassword: '',\n });\n\n const hideChangePassword = useCallback(() => {\n handleHideChangePassword(() => {\n handleSetInLineAlert({});\n setPasswordErrors(DEFAULT_ERRORS_STATE);\n });\n }, [handleHideChangePassword, handleSetInLineAlert]);\n\n const handleCurrentPasswordChange = useCallback(\n (value: string) => {\n setCurrentPassword(value);\n setPasswordErrors((prev) => ({\n ...prev,\n currentPassword: value ? '' : translations.requiredFieldError,\n }));\n },\n [translations]\n );\n\n const handleNewPasswordChange = useCallback(\n (value: string) => {\n setNewPassword(value);\n setPasswordErrors((prev) => ({\n ...prev,\n newPassword: value ? '' : translations.requiredFieldError,\n }));\n },\n [translations]\n );\n\n const handleConfirmPasswordChange = useCallback(\n (value: string) => {\n setConfirmPassword(value);\n setPasswordErrors((prev) => ({\n ...prev,\n confirmPassword: value ? '' : translations.requiredFieldError,\n }));\n },\n [translations]\n );\n\n const handleOnBlurPassword = useCallback(\n (event: Event) => {\n const { name, value } = event?.target as HTMLInputElement;\n\n setPasswordErrors((prev) => ({\n ...prev,\n [name]: value ? '' : translations.requiredFieldError,\n }));\n },\n [translations]\n );\n\n const validatePasswords = useCallback(() => {\n const { isValid, errors } = validationChangePassword({\n currentPassword,\n newPassword,\n confirmPassword,\n translations,\n });\n\n setPasswordErrors(errors);\n return isValid;\n }, [currentPassword, newPassword, confirmPassword, translations]);\n\n const mutationChangePassword = useCallback(\n (event: Event) => {\n event.preventDefault();\n\n setSubmitLoading(true);\n\n const requiredCharacterClasses =\n passwordConfigs?.requiredCharacterClasses ?? 0;\n const requiredPasswordLength = passwordConfigs?.minLength ?? 1;\n\n if (!validatePasswords()) {\n setIsClickSubmit(true);\n setSubmitLoading(false);\n return;\n }\n\n if (\n !validationUniqueSymbolsPassword(\n newPassword,\n requiredCharacterClasses\n ) ||\n requiredPasswordLength > newPassword?.length\n ) {\n setIsClickSubmit(true);\n setSubmitLoading(false);\n\n return;\n }\n\n updateCustomerPassword({ currentPassword, newPassword })\n .then((result) => {\n if (!result?.length) {\n setSubmitLoading(false);\n return;\n }\n\n setCurrentPassword('');\n setNewPassword('');\n setConfirmPassword('');\n setPasswordErrors(DEFAULT_ERRORS_STATE);\n setIsClickSubmit(false);\n handleSetInLineAlert({\n type: 'success',\n text: translations.passwordUpdateMessage,\n });\n })\n .catch((error) => {\n if (error.message === 'Invalid login or password.') {\n handleSetInLineAlert({\n type: 'error',\n text: translations.incorrectCurrentPassword,\n });\n }\n\n if (error.message === 'The account is locked.') {\n handleSetInLineAlert({\n type: 'error',\n text: error.message,\n });\n }\n });\n\n setSubmitLoading(false);\n },\n [\n passwordConfigs,\n validatePasswords,\n newPassword,\n currentPassword,\n handleSetInLineAlert,\n translations,\n ]\n );\n\n return {\n hideChangePassword,\n handleOnBlurPassword,\n handleConfirmPasswordChange,\n handleNewPasswordChange,\n handleCurrentPasswordChange,\n mutationChangePassword,\n currentPassword,\n newPassword,\n confirmPassword,\n passwordErrors,\n submitLoading,\n isClickSubmit,\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 { validationUniqueSymbolsPassword } from '@/account/lib/validationUniqueSymbolsPassword';\nimport { useEffect, useMemo, useState } from 'preact/hooks';\nimport { ValidateLengthConfigProps, statusTypes } from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\ninterface UsePasswordValidationMessageProps {\n passwordConfigs: {\n minLength: number;\n requiredCharacterClasses: number;\n } | null;\n isClickSubmit: boolean;\n password: string;\n}\n\nexport const usePasswordValidationMessage = ({\n passwordConfigs,\n isClickSubmit,\n password,\n}: UsePasswordValidationMessageProps) => {\n const translations = useText({\n messageLengthPassword:\n 'Account.minifiedView.CustomerInformation.changePassword.passwordValidationMessage.messageLengthPassword',\n });\n\n const [isValidUniqueSymbols, setIsValidUniqueSymbols] =\n useState<statusTypes>('pending');\n\n useEffect(() => {\n if (!passwordConfigs) return;\n\n const result = validationUniqueSymbolsPassword(\n password,\n passwordConfigs.requiredCharacterClasses\n );\n\n if (isClickSubmit && password.length > 0) {\n result\n ? setIsValidUniqueSymbols('success')\n : setIsValidUniqueSymbols('error');\n } else if (isClickSubmit && password.length === 0) {\n setIsValidUniqueSymbols('pending');\n } else {\n result\n ? setIsValidUniqueSymbols('success')\n : setIsValidUniqueSymbols('pending');\n }\n }, [isClickSubmit, passwordConfigs, password]);\n\n const defaultLengthMessage: ValidateLengthConfigProps | undefined =\n useMemo(() => {\n if (!passwordConfigs) return;\n\n const defaultMessage: ValidateLengthConfigProps = {\n status: 'pending',\n icon: 'pending',\n message: translations.messageLengthPassword?.replace(\n '{minLength}',\n `${passwordConfigs.minLength}`\n ),\n };\n\n if (password.length && password.length >= passwordConfigs.minLength) {\n return { ...defaultMessage, icon: 'success', status: 'success' };\n }\n\n if (password.length && password.length < passwordConfigs.minLength) {\n return isClickSubmit\n ? { ...defaultMessage, icon: 'error', status: 'error' }\n : { ...defaultMessage, icon: 'pending', status: 'pending' };\n }\n\n return defaultMessage;\n }, [\n passwordConfigs,\n translations.messageLengthPassword,\n password?.length,\n isClickSubmit,\n ]);\n\n return { isValidUniqueSymbols, defaultLengthMessage };\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 {\n ChangePasswordProps,\n ValidateLengthConfigProps,\n} from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n Button,\n Card,\n Header,\n InLineAlert,\n InputPassword,\n} from '@adobe-commerce/elsie/components';\nimport '@/account/components/ChangePassword/ChangePassword.css';\nimport { useGetStoreConfigs } from '@/account/hooks/containers/useGetStoreConfigs';\nimport { useChangePassword } from '@/account/hooks/components/useChangePassword';\nimport { usePasswordValidationMessage } from '@/account/hooks/components/usePasswordValidationMessage';\n\nexport const getErrorMessage = (\n isValidUniqueSymbols: string,\n defaultLengthMessage: ValidateLengthConfigProps | undefined,\n isSubmit: boolean,\n newPassword: string,\n passwordErrors: { newPassword: string }\n) => {\n const hasError =\n isValidUniqueSymbols === 'error' ||\n defaultLengthMessage?.status === 'error' ||\n (isSubmit && newPassword.trim().length === 0);\n\n return hasError ? passwordErrors.newPassword : undefined;\n};\n\nexport const ChangePassword: FunctionComponent<ChangePasswordProps> = ({\n handleHideChangePassword,\n handleSetInLineAlert,\n inLineAlertProps,\n}) => {\n const { passwordConfigs } = useGetStoreConfigs();\n\n const {\n hideChangePassword,\n handleOnBlurPassword,\n handleConfirmPasswordChange,\n handleNewPasswordChange,\n handleCurrentPasswordChange,\n mutationChangePassword,\n currentPassword,\n newPassword,\n confirmPassword,\n passwordErrors,\n submitLoading,\n isClickSubmit,\n } = useChangePassword({\n passwordConfigs,\n handleSetInLineAlert,\n handleHideChangePassword,\n });\n\n const { isValidUniqueSymbols, defaultLengthMessage } =\n usePasswordValidationMessage({\n password: newPassword,\n isClickSubmit,\n passwordConfigs,\n });\n\n const translations = useText({\n containerTitle:\n 'Account.minifiedView.CustomerInformation.changePassword.containerTitle',\n currentPasswordPlaceholder:\n 'Account.minifiedView.CustomerInformation.changePassword.currentPassword.placeholder',\n currentPasswordFloatingLabel:\n 'Account.minifiedView.CustomerInformation.changePassword.currentPassword.floatingLabel',\n newPasswordPlaceholder:\n 'Account.minifiedView.CustomerInformation.changePassword.newPassword.placeholder',\n newPasswordFloatingLabel:\n 'Account.minifiedView.CustomerInformation.changePassword.newPassword.floatingLabel',\n confirmPasswordPlaceholder:\n 'Account.minifiedView.CustomerInformation.changePassword.confirmPassword.placeholder',\n confirmPasswordFloatingLabel:\n 'Account.minifiedView.CustomerInformation.changePassword.confirmPassword.floatingLabel',\n buttonSecondary:\n 'Account.minifiedView.CustomerInformation.changePassword.buttonSecondary',\n buttonPrimary:\n 'Account.minifiedView.CustomerInformation.changePassword.buttonPrimary',\n });\n\n return (\n <Card className=\"account-change-password\" variant=\"secondary\">\n <Header\n title={translations.containerTitle}\n divider={false}\n className={'account-change-password__title'}\n level={3}\n />\n {inLineAlertProps.text ? (\n <InLineAlert\n className=\"account-change-password__notification\"\n type={inLineAlertProps.type}\n variant=\"secondary\"\n heading={inLineAlertProps.text}\n icon={inLineAlertProps.icon}\n data-testid=\"changePasswordInLineAlert\"\n />\n ) : null}\n <div className=\"account-change-password__fields\">\n <InputPassword\n className=\"account-change-password__fields-item\"\n autoComplete=\"current-password\"\n name=\"currentPassword\"\n placeholder={translations.currentPasswordPlaceholder}\n floatingLabel={translations.currentPasswordFloatingLabel}\n errorMessage={passwordErrors.currentPassword}\n defaultValue={currentPassword}\n onValue={handleCurrentPasswordChange}\n onBlur={handleOnBlurPassword}\n />\n <InputPassword\n className=\"account-change-password__fields-item\"\n autoComplete=\"new-password\"\n name=\"newPassword\"\n placeholder={translations.newPasswordPlaceholder}\n floatingLabel={translations.newPasswordFloatingLabel}\n minLength={passwordConfigs?.minLength}\n validateLengthConfig={defaultLengthMessage}\n uniqueSymbolsStatus={isValidUniqueSymbols}\n requiredCharacterClasses={passwordConfigs?.requiredCharacterClasses}\n errorMessage={getErrorMessage(\n isValidUniqueSymbols,\n defaultLengthMessage,\n isClickSubmit,\n newPassword,\n passwordErrors\n )}\n defaultValue={newPassword}\n onValue={handleNewPasswordChange}\n onBlur={handleOnBlurPassword}\n />\n <InputPassword\n className=\"account-change-password__fields-item\"\n autoComplete=\"new-password\"\n name=\"confirmPassword\"\n placeholder={translations.confirmPasswordPlaceholder}\n floatingLabel={translations.confirmPasswordFloatingLabel}\n errorMessage={passwordErrors.confirmPassword}\n defaultValue={confirmPassword}\n onValue={handleConfirmPasswordChange}\n onBlur={handleOnBlurPassword}\n />\n </div>\n\n <div className=\"account-change-password__actions\">\n <Button\n // @ts-ignore\n type=\"button\"\n disabled={submitLoading}\n onClick={hideChangePassword}\n variant=\"secondary\"\n >\n {translations.buttonSecondary}\n </Button>\n <Button\n variant=\"primary\"\n // @ts-ignore\n type=\"button\"\n disabled={submitLoading}\n onClick={mutationChangePassword}\n >\n {translations.buttonPrimary}\n </Button>\n </div>\n </Card>\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 { EditCustomerInformationProps, FieldsProps } from '@/account/types';\nimport {\n Button,\n Card,\n Header,\n InLineAlert,\n InputPassword,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Form } from '@/account/components';\nimport '@/account/components/EditCustomerInformation/EditCustomerInformation.css';\n\nexport const EditCustomerInformation: FunctionComponent<\n EditCustomerInformationProps\n> = ({\n inLineAlertProps,\n errorPasswordEmpty,\n passwordValue,\n showPasswordOnEmailChange,\n submitLoading,\n formFieldsList,\n handleHideEditForm,\n handleUpdateCustomerInformation,\n handleInputChange,\n handleSetPassword,\n handleOnBlurPassword,\n}) => {\n const translations = useText({\n buttonSecondary:\n 'Account.minifiedView.CustomerInformation.editCustomerInformation.buttonSecondary',\n buttonPrimary:\n 'Account.minifiedView.CustomerInformation.editCustomerInformation.buttonPrimary',\n placeholder:\n 'Account.minifiedView.CustomerInformation.editCustomerInformation.passwordField.placeholder',\n floatingLabel:\n 'Account.minifiedView.CustomerInformation.editCustomerInformation.passwordField.floatingLabel',\n containerTitle:\n 'Account.minifiedView.CustomerInformation.editCustomerInformation.containerTitle',\n requiredFieldError: 'Account.FormText.requiredFieldError',\n });\n\n return (\n <Card variant=\"secondary\" className={'account-edit-customer-information'}>\n <Header\n title={translations.containerTitle}\n divider={false}\n className={'account-edit-customer-information__title'}\n level={3}\n />\n {inLineAlertProps.text ? (\n <InLineAlert\n className=\"account-edit-customer-information__notification\"\n type={inLineAlertProps.type}\n variant=\"secondary\"\n heading={inLineAlertProps.text}\n icon={inLineAlertProps.icon}\n data-testid=\"editCustomerInLineAlert\"\n />\n ) : null}\n <Form\n loading={submitLoading}\n fieldsConfig={(formFieldsList as FieldsProps[]) || []}\n name=\"editCustomerInformation\"\n className=\"account-edit-customer-information-form\"\n onSubmit={handleUpdateCustomerInformation}\n setInputChange={handleInputChange}\n >\n {showPasswordOnEmailChange ? (\n <div className=\"account-edit-customer-information__password\">\n <InputPassword\n autoComplete=\"current-password\"\n name=\"password\"\n placeholder={translations.placeholder}\n floatingLabel={translations.floatingLabel}\n errorMessage={\n errorPasswordEmpty ? translations.requiredFieldError : undefined\n }\n defaultValue={passwordValue}\n onValue={handleSetPassword}\n onBlur={handleOnBlurPassword}\n />\n </div>\n ) : null}\n <div className=\"account-edit-customer-information__actions\">\n <Button\n disabled={submitLoading}\n // @ts-ignore\n type=\"button\"\n variant=\"secondary\"\n onClick={() => handleHideEditForm()}\n >\n {translations.buttonSecondary}\n </Button>\n <Button disabled={submitLoading} type=\"submit\" variant=\"primary\">\n {translations.buttonPrimary}\n </Button>\n </div>\n </Form>\n </Card>\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 { CustomerInformationCardProps } from '@/account/types';\nimport { Card, Button } from '@adobe-commerce/elsie/components';\nimport { classes, Slot } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/account/components/CustomerInformationCard/CustomerInformationCard.css';\n\nexport const CustomerInformationCard: FunctionComponent<\n CustomerInformationCardProps\n> = ({\n createdAt,\n slots,\n orderedCustomerData,\n showEditForm,\n showChangePassword,\n handleShowChangePassword,\n handleShowEditForm,\n}) => {\n const translations = useText({\n buttonSecondary:\n 'Account.minifiedView.CustomerInformation.customerInformationCard.buttonSecondary',\n buttonSecondaryAriaLabel:\n 'Account.minifiedView.CustomerInformation.customerInformationCard.buttonSecondaryAriaLabel',\n buttonPrimary:\n 'Account.minifiedView.CustomerInformation.customerInformationCard.buttonPrimary',\n buttonPrimaryAriaLabel:\n 'Account.minifiedView.CustomerInformation.customerInformationCard.buttonPrimaryAriaLabel',\n accountCreation:\n 'Account.minifiedView.CustomerInformation.customerInformationCard.accountCreation',\n });\n\n return (\n <Card\n variant=\"secondary\"\n className={classes([\n 'account-customer-information-card',\n [\n 'account-customer-information-card-short',\n showChangePassword || showEditForm,\n ],\n ])}\n >\n <div className=\"account-customer-information-card__wrapper\">\n <div className=\"account-customer-information-card__actions\">\n <Button\n // @ts-ignore\n type=\"button\"\n variant=\"tertiary\"\n aria-label={translations.buttonSecondaryAriaLabel}\n onClick={handleShowChangePassword}\n >\n {translations.buttonSecondary}\n </Button>\n\n <Button\n // @ts-ignore\n type=\"button\"\n variant=\"tertiary\"\n aria-label={translations.buttonPrimaryAriaLabel}\n onClick={handleShowEditForm}\n >\n {translations.buttonPrimary}\n </Button>\n </div>\n <div className=\"account-customer-information-card__content\">\n {slots?.CustomerData ? (\n <Slot\n name=\"CustomerData\"\n slot={slots?.CustomerData}\n context={{ customerData: orderedCustomerData }}\n />\n ) : (\n <>\n {orderedCustomerData?.map((el, index) => {\n const value = !el?.label\n ? el?.value\n : `${el.label}: ${el?.value}`;\n\n return (\n <p\n key={`${el.name}_${index}`}\n data-testid={`${el.name}_${index}`}\n >\n {value}\n </p>\n );\n })}\n <p>\n {translations.accountCreation}: {createdAt}\n </p>\n </>\n )}\n </div>\n </div>\n </Card>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2025 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 '@/account/components/AddressValidation/AddressValidation.css';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { FunctionComponent } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { Header, ToggleButton } from '@adobe-commerce/elsie/components';\nimport { CustomerAddressesModel } from '@/account/data/models';\n\nexport interface AddressValidationProps extends HTMLAttributes<HTMLDivElement> {\n busy?: boolean;\n originalAddress: CustomerAddressesModel | null;\n selection: 'suggested' | 'original' | null;\n suggestedAddress: CustomerAddressesModel | null;\n onSelectionChange: (selection: 'suggested' | 'original') => void;\n}\n\nexport function formatAddressLine(\n address: CustomerAddressesModel | null | undefined\n): string[] {\n if (!address) return [];\n const name = `${address.firstName} ${address.lastName}`.trim();\n const street = address.street ?? '';\n const city = address.city ?? '';\n const region = address.region || undefined;\n const post = address.postcode ?? '';\n const country = address.countryCode ?? '';\n\n let cityRegion = '';\n if (city && region) {\n cityRegion = `${city}, ${region?.regionCode ?? ''}`.trim();\n } else if (city) {\n cityRegion = city;\n } else if (region) {\n cityRegion = region?.regionCode ?? '';\n }\n\n let cityRegionPost = cityRegion;\n if (post) {\n cityRegionPost = cityRegion ? `${cityRegion} ${post}` : post;\n }\n\n let line3 = cityRegionPost;\n if (country) {\n line3 = cityRegionPost ? `${cityRegionPost}, ${country}` : country;\n }\n\n return [name, street, line3];\n}\n\nconst AddressBlock: FunctionComponent<{\n title: string;\n address: CustomerAddressesModel | null | undefined;\n selected: boolean;\n busy?: boolean;\n onChange: () => void;\n}> = ({ title, address, selected, busy, onChange }) => {\n const [line1, line2, line3] = formatAddressLine(address);\n const label = (\n <div>\n <div className=\"account-address-validation__option-title\">\n <strong>{title}</strong>\n </div>\n {line1 && <div>{line1}</div>}\n {line2 && <div>{line2}</div>}\n {line3 && <div>{line3}</div>}\n </div>\n );\n return (\n <div className=\"account-address-validation__option\">\n <ToggleButton\n busy={busy}\n className=\"account-address-validation__radio\"\n label={label}\n name=\"address-validation-choice\"\n selected={selected}\n value={title}\n onChange={onChange}\n />\n </div>\n );\n};\n\nexport const AddressValidation: FunctionComponent<AddressValidationProps> = ({\n busy = false,\n className,\n originalAddress,\n onSelectionChange,\n selection,\n suggestedAddress,\n}) => {\n const hasSuggestion = !!suggestedAddress;\n const translations = useText({\n title: 'Account.AddressValidation.title',\n subtitle: 'Account.AddressValidation.subtitle',\n suggestedAddress: 'Account.AddressValidation.suggestedAddress',\n originalAddress: 'Account.AddressValidation.originalAddress',\n });\n\n return (\n <div className={classes(['account-address-validation', className])}>\n <Header\n className=\"account-address-validation__title\"\n divider={false}\n title={translations.title}\n level={1}\n />\n <div className=\"account-address-validation__subtitle\">\n {translations.subtitle}\n </div>\n\n <div\n className={classes([\n 'account-address-validation__options',\n busy && 'account-address-validation__options--busy',\n ])}\n >\n {hasSuggestion && (\n <AddressBlock\n address={suggestedAddress}\n busy={busy}\n selected={selection === 'suggested'}\n title={translations.suggestedAddress}\n onChange={() => onSelectionChange('suggested')}\n />\n )}\n\n <AddressBlock\n address={originalAddress}\n busy={busy}\n selected={selection === 'original'}\n title={translations.originalAddress}\n onChange={() => onSelectionChange('original')}\n />\n </div>\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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, JSX } from 'preact';\nimport { useState } from 'preact/hooks';\nimport {\n Checkbox,\n Field,\n IllustratedMessage,\n InLineAlert,\n Skeleton,\n SkeletonRow,\n} from '@adobe-commerce/elsie/components';\nimport { SellerAssistedBuyingSettingsControlProps } from '@/account/types';\nimport '@/account/components/SellerAssistedBuyingSettingsControl/SellerAssistedBuyingSettingsControl.css';\n\nexport const SellerAssistedBuyingSettingsControl: FunctionComponent<\n SellerAssistedBuyingSettingsControlProps\n> = ({\n loading,\n isRemoteShoppingAssistanceAvailable,\n isRemoteShoppingAssistanceEnabled,\n showAlert,\n checkboxLabel,\n checkboxTooltip,\n alertMessage,\n featureDisabledMessage,\n handleCheckboxChange,\n handleDismissAlert,\n}) => {\n const [showTooltip, setShowTooltip] = useState(false);\n\n if (loading) {\n return (\n <Skeleton>\n <SkeletonRow variant=\"row\" />\n </Skeleton>\n );\n }\n\n if (!loading && !isRemoteShoppingAssistanceAvailable) {\n return (\n <div className=\"account-seller-assisted-buying-settings-control__alert\">\n <IllustratedMessage heading={featureDisabledMessage} />\n </div>\n );\n }\n\n return (\n <div className=\"account-seller-assisted-buying-settings-control\">\n {!isRemoteShoppingAssistanceEnabled && showAlert && (\n <div className=\"account-seller-assisted-buying-settings-control__alert\">\n <InLineAlert\n variant=\"secondary\"\n type=\"warning\"\n heading={alertMessage}\n onDismiss={handleDismissAlert}\n />\n </div>\n )}\n <div className=\"account-seller-assisted-buying-settings-control__checkbox-row\">\n <Field>\n <Checkbox\n name=\"allowRemoteShoppingAssistance\"\n value=\"true\"\n placeholder={checkboxLabel}\n label={checkboxLabel}\n checked={isRemoteShoppingAssistanceEnabled}\n onChange={(event: JSX.TargetedEvent<HTMLInputElement>) =>\n handleCheckboxChange(event.currentTarget.checked)\n }\n />\n </Field>\n {checkboxTooltip ? (\n <div className=\"account-seller-assisted-buying-settings-control__info-container\">\n <button\n type=\"button\"\n className=\"account-seller-assisted-buying-settings-control__info-icon\"\n onMouseEnter={() => setShowTooltip(true)}\n onMouseLeave={() => setShowTooltip(false)}\n onFocusCapture={() => setShowTooltip(true)}\n onBlurCapture={() => setShowTooltip(false)}\n aria-label={checkboxTooltip}\n >\n ?\n </button>\n {showTooltip ? (\n <span\n className=\"account-seller-assisted-buying-settings-control__tooltip\"\n role=\"tooltip\"\n >\n {checkboxTooltip}\n <span className=\"account-seller-assisted-buying-settings-control__tooltip-arrow\" />\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 {\n Table,\n Skeleton,\n SkeletonRow,\n Pagination,\n IllustratedMessage,\n Card,\n} from '@adobe-commerce/elsie/components';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { SellerAssistedBuyingActivityTableProps } from '@/account/types';\nimport '@/account/components/SellerAssistedBuyingActivityTable/SellerAssistedBuyingActivityTable.css';\n\nexport const SellerAssistedBuyingActivityTable: FunctionComponent<\n SellerAssistedBuyingActivityTableProps\n> = ({\n loading,\n adminAssistanceActions,\n tableHeaders,\n actionTypesMap,\n emptyStateMessage,\n featureDisabledMessage,\n isRemoteShoppingAssistanceAvailable = true,\n errorMessage,\n currentPage,\n onPageChange,\n withWrapper = true,\n}) => {\n if (loading) {\n return (\n <Skeleton>\n <SkeletonRow variant=\"row\" fullWidth={true} />\n <SkeletonRow variant=\"row\" fullWidth={true} />\n <SkeletonRow variant=\"row\" fullWidth={true} />\n </Skeleton>\n );\n }\n\n if (!isRemoteShoppingAssistanceAvailable) {\n return (\n <div className=\"account-seller-assisted-buying-activity-table__alert\">\n <IllustratedMessage heading={featureDisabledMessage} />\n </div>\n );\n }\n\n if (errorMessage) {\n return (\n <div className=\"account-seller-assisted-buying-activity-table__error\">\n <IllustratedMessage heading={errorMessage} />\n </div>\n );\n }\n\n if (!adminAssistanceActions?.items?.length) {\n return (\n <div className=\"account-seller-assisted-buying-activity-table__empty\">\n <IllustratedMessage heading={emptyStateMessage} />\n </div>\n );\n }\n\n const columns = [\n {\n label: tableHeaders.action,\n key: 'action',\n ariaLabel: tableHeaders.action,\n },\n { label: tableHeaders.date, key: 'date', ariaLabel: tableHeaders.date },\n {\n label: tableHeaders.details,\n key: 'details',\n ariaLabel: tableHeaders.details,\n },\n ];\n\n const rowData = adminAssistanceActions.items.map((item) => ({\n action: actionTypesMap[item.action] || item.action,\n date: item.date,\n details: item.details,\n }));\n\n const totalPages = adminAssistanceActions.pageInfo.totalPages;\n const showPagination = totalPages > 1;\n const table = (\n <div className=\"account-seller-assisted-buying-activity-table\">\n <div className=\"account-seller-assisted-buying-activity-table__table-wrapper\">\n <Table\n columns={columns}\n rowData={rowData}\n mobileLayout=\"stacked\"\n className=\"account-seller-assisted-buying-activity-table__table\"\n />\n </div>\n </div>\n );\n\n return (\n <>\n {withWrapper ? (\n <Card\n variant=\"secondary\"\n className={classes([\n 'account-seller-assisted-buying-activity-table-card',\n ])}\n >\n {table}\n </Card>\n ) : (\n table\n )}\n {showPagination && (\n <div className=\"account-seller-assisted-buying-activity-table__pagination\">\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n onChange={onPageChange}\n />\n </div>\n )}\n </>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 } from 'preact/compat';\nimport { classes } from '@adobe-commerce/elsie/lib';\nimport { Card, Button, Tag } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { PaymentCardProps } from '@/account/types';\nimport '@/account/components/PaymentCard/PaymentCard.css';\n\nexport const PaymentCard: FunctionComponent<PaymentCardProps> = ({\n cardBrand,\n lastFourDigits,\n expired = false,\n onRemove,\n variant = 'secondary',\n minifiedView = false,\n}) => {\n const paymentCardAriaId = useId();\n\n const translations = useText({\n actionRemove: 'Account.Payments.paymentCard.actionRemove',\n cardEndingIn: 'Account.Payments.paymentCard.cardEndingIn',\n expiredLabel: 'Account.Payments.paymentCard.expiredLabel',\n });\n\n const handleRemove = useCallback(() => {\n onRemove?.();\n }, [onRemove]);\n\n const maskedNumber = `•••• ${lastFourDigits}`;\n const cardDescription = `${translations.cardEndingIn} ${maskedNumber}`;\n\n return (\n <Card\n variant={variant}\n className={classes([\n 'account-payment-card',\n minifiedView && 'account-payment-card--minified',\n ])}\n data-testid=\"paymentCard\"\n >\n <div className=\"account-payment-card__action\">\n {onRemove ? (\n <Button\n // @ts-ignore\n type=\"button\"\n variant=\"tertiary\"\n onClick={handleRemove}\n data-testid=\"removeButton\"\n aria-label={`${translations.actionRemove} ${cardBrand} ${cardDescription}`}\n aria-describedby={paymentCardAriaId}\n >\n {translations.actionRemove}\n </Button>\n ) : null}\n </div>\n <div className=\"account-payment-card__description\" id={paymentCardAriaId}>\n <p className=\"account-payment-card__card-brand\" data-testid=\"cardBrand\">\n {cardBrand}\n </p>\n <p\n className=\"account-payment-card__card-number\"\n data-testid=\"cardNumber\"\n >\n {cardDescription}\n </p>\n </div>\n {expired ? (\n <div className=\"account-payment-card__labels\" data-testid=\"expiredTag\">\n <Tag\n label={(translations.expiredLabel ?? 'Expired').toLocaleUpperCase()}\n />\n </div>\n ) : null}\n </Card>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 deletePaymentToken,\n getCustomerPaymentTokens,\n} from '@/account/api';\nimport { StoredPaymentMethodDisplay } from '@/account/data/models/stored-payment-method';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\n\n/** @see `Events` augmentation in `src/types/events.d.ts` */\nconst customerPaymentTokensEvent = 'account/customerPaymentTokens';\n\n/** Sentinel for `actionError` when delete succeeds at the transport layer but returns false. */\nexport const PAYMENT_METHOD_REMOVE_FAILED = '__REMOVE_FAILED__';\n\nexport const usePaymentMethods = (filterPaymentMethodCodes?: string[]) => {\n const itemsSourceRef = useRef<'event' | 'api'>('api');\n const prevFilterKeyRef = useRef<string | undefined>(undefined);\n\n const [items, setItems] = useState<StoredPaymentMethodDisplay[]>([]);\n const [loading, setLoading] = useState(true);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [actionError, setActionError] = useState<string | null>(null);\n const [removingHash, setRemovingHash] = useState<string | null>(null);\n\n const load = useCallback(async () => {\n setLoading(true);\n setLoadError(null);\n setActionError(null);\n\n try {\n const next = await getCustomerPaymentTokens(filterPaymentMethodCodes);\n\n itemsSourceRef.current = 'api';\n setItems(next);\n } catch (e) {\n setItems([]);\n setLoadError(e instanceof Error ? e.message : String(e));\n } finally {\n setLoading(false);\n }\n }, [filterPaymentMethodCodes]);\n\n useEffect(() => {\n let cancelled = false;\n let consumedFromBus = false;\n\n const sub = events.on(\n customerPaymentTokensEvent,\n (payload) => {\n if (cancelled) return;\n consumedFromBus = true;\n itemsSourceRef.current = 'event';\n setItems(Array.isArray(payload) ? payload : []);\n setLoadError(null);\n setLoading(false);\n },\n { eager: true }\n );\n\n if (!sub || !consumedFromBus) {\n void load();\n }\n\n return () => {\n cancelled = true;\n sub?.off();\n };\n }, [load]);\n\n const filterKey = filterPaymentMethodCodes?.join(',') ?? '';\n\n useEffect(() => {\n if (itemsSourceRef.current !== 'api') return;\n\n if (prevFilterKeyRef.current === undefined) {\n prevFilterKeyRef.current = filterKey;\n return;\n }\n\n if (prevFilterKeyRef.current === filterKey) return;\n\n prevFilterKeyRef.current = filterKey;\n void load();\n }, [filterKey, load]);\n\n const removeToken = useCallback(async (publicHash: string) => {\n setActionError(null);\n setRemovingHash(publicHash);\n\n try {\n const ok = await deletePaymentToken(publicHash);\n\n if (ok) {\n setItems((prev) => prev.filter((t) => t.publicHash !== publicHash));\n } else {\n setActionError(PAYMENT_METHOD_REMOVE_FAILED);\n }\n } catch (e) {\n setActionError(e instanceof Error ? e.message : String(e));\n } finally {\n setRemovingHash(null);\n }\n }, []);\n\n const refetch = useCallback(async () => {\n if (itemsSourceRef.current === 'event') {\n const last = events.lastPayload(customerPaymentTokensEvent);\n\n if (last === undefined) return;\n\n setItems(Array.isArray(last) ? last : []);\n setLoadError(null);\n setActionError(null);\n return;\n }\n\n await load();\n }, [load]);\n\n return {\n items,\n loading,\n loadError,\n actionError,\n removingHash,\n removeToken,\n refetch,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 { Header, InLineAlert } from '@adobe-commerce/elsie/components';\nimport { WarningWithCircle as ErrorIcon } from '@adobe-commerce/elsie/icons';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { useCallback, useState } from 'preact/hooks';\nimport { CardLoader, EmptyList, PaymentCard, PaymentModal } from '@/account/components';\nimport {\n PAYMENT_METHOD_REMOVE_FAILED,\n usePaymentMethods,\n} from '@/account/hooks/containers/usePaymentMethods';\nimport type { StoredPaymentMethodDisplay } from '@/account/data/models';\nimport { PaymentMethodsWrapperProps } from '@/account/types';\nimport '@/account/components/PaymentMethodsWrapper/PaymentMethodsWrapper.css';\n\nexport const PaymentMethodsWrapper: Container<PaymentMethodsWrapperProps> = ({\n className,\n withHeader = true,\n minifiedView = false,\n filterPaymentMethodCodes,\n}) => {\n const translations = useText({\n containerTitle: 'Account.Payments.containerTitle',\n loadError: 'Account.Payments.loadError',\n removeError: 'Account.Payments.removeError',\n });\n\n const {\n items,\n loading,\n loadError,\n actionError,\n removingHash,\n removeToken,\n } = usePaymentMethods(filterPaymentMethodCodes);\n\n const [pendingRemoval, setPendingRemoval] =\n useState<StoredPaymentMethodDisplay | null>(null);\n\n const closeRemovalModal = useCallback(() => {\n setPendingRemoval(null);\n }, []);\n\n const confirmRemoveToken = useCallback(async () => {\n if (!pendingRemoval) return;\n\n await removeToken(pendingRemoval.publicHash);\n setPendingRemoval(null);\n }, [pendingRemoval, removeToken]);\n\n const removeErrorMessage: string =\n actionError === PAYMENT_METHOD_REMOVE_FAILED ?\n translations.removeError\n : (actionError ?? '');\n\n const paymentMethodRows =\n items.length > 0 ?\n items.map((token) => {\n const { publicHash, ...paymentCardProps } = token;\n\n return (\n <PaymentCard\n key={publicHash}\n {...paymentCardProps}\n minifiedView={minifiedView}\n onRemove={\n removingHash !== null ?\n undefined\n : () => setPendingRemoval(token)\n }\n />\n );\n })\n : null;\n\n const emptyPaymentsView =\n items.length === 0 && !loadError ?\n <div\n className=\"account-payment-methods__empty\"\n data-testid=\"paymentMethodsEmpty\"\n >\n <EmptyList\n isEmpty\n typeList=\"payments\"\n minifiedView={minifiedView}\n />\n </div>\n : null;\n\n return (\n <div\n className={classes(['account-payment-methods', className])}\n data-testid=\"paymentMethods\"\n >\n {withHeader ? (\n <Header\n aria-label={translations.containerTitle}\n role=\"region\"\n title={translations.containerTitle}\n divider={!minifiedView}\n className={classes([\n 'account-payment-methods-header-title',\n ['account-payment-methods-header', minifiedView],\n ])}\n level={minifiedView ? 2 : 1}\n />\n ) : null}\n\n {loadError ? (\n <InLineAlert\n className=\"account-payment-methods__alert\"\n type=\"error\"\n variant=\"secondary\"\n heading={translations.loadError}\n description={loadError}\n icon={<ErrorIcon />}\n data-testid=\"paymentMethodsLoadError\"\n />\n ) : null}\n\n {actionError && !loadError ? (\n <InLineAlert\n className=\"account-payment-methods__alert\"\n type=\"error\"\n variant=\"secondary\"\n heading={removeErrorMessage}\n icon={<ErrorIcon />}\n data-testid=\"paymentMethodsActionError\"\n />\n ) : null}\n\n <PaymentModal\n open={pendingRemoval !== null}\n submitLoading={\n pendingRemoval !== null &&\n removingHash === pendingRemoval.publicHash\n }\n onRemoveToken={() => {\n void confirmRemoveToken();\n }}\n closeModal={closeRemovalModal}\n cardBrand={pendingRemoval?.cardBrand}\n lastFourDigits={pendingRemoval?.lastFourDigits}\n expired={pendingRemoval?.expired}\n variant={pendingRemoval?.variant}\n minifiedView={minifiedView}\n />\n\n {loading ? (\n <CardLoader testId=\"paymentMethodsLoader\" />\n ) : (\n <div className=\"account-payment-methods__list\">\n {paymentMethodRows ?? emptyPaymentsView}\n </div>\n )}\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2026 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 { PaymentCard } from '@/account/components/PaymentCard';\nimport { PaymentModalProps } from '@/account/types';\nimport '@/account/components/PaymentModal/PaymentModal.css';\n\nexport const PaymentModal: FunctionComponent<PaymentModalProps> = ({\n open,\n submitLoading,\n onRemoveToken,\n closeModal,\n cardBrand,\n lastFourDigits,\n expired,\n variant,\n minifiedView,\n}) => {\n const translations = useText({\n title: 'Account.Payments.removePaymentModal.title',\n description: 'Account.Payments.removePaymentModal.description',\n actionCancel: 'Account.Payments.removePaymentModal.actionCancel',\n actionConfirm: 'Account.Payments.removePaymentModal.actionConfirm',\n });\n\n if (!open) return null;\n\n return (\n <Modal\n className=\"account-payment-modal--overlay\"\n title={<h3>{translations.title}</h3>}\n size=\"full\"\n data-testid=\"paymentModal\"\n showCloseButton\n onClose={closeModal}\n >\n <div className=\"account-payment-modal\">\n {submitLoading ? (\n <div\n className=\"account-payment-modal__spinner\"\n data-testid=\"progressSpinner\"\n >\n <ProgressSpinner stroke={'4'} size={'large'} />\n </div>\n ) : null}\n <p>{translations.description}</p>\n {cardBrand && lastFourDigits ? (\n <PaymentCard\n cardBrand={cardBrand}\n lastFourDigits={lastFourDigits}\n expired={expired}\n variant={variant}\n minifiedView={minifiedView}\n />\n ) : null}\n <div className=\"account-payment-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={onRemoveToken}>\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 { 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 hasDefaultShippingAddress,\n hasDefaultBillingAddress,\n isOpen,\n fieldIdPrefix,\n onSubmit,\n onCloseBtnClick,\n onSuccess,\n onError,\n onChange,\n isB2BFlow,\n enforceB2BPermissions,\n permissions,\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 hasDefaultShippingAddress={hasDefaultShippingAddress}\n hasDefaultBillingAddress={hasDefaultBillingAddress}\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 isB2BFlow={isB2BFlow}\n enforceB2BPermissions={enforceB2BPermissions}\n permissions={permissions}\n />\n </div>\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 { useState, useCallback } from 'preact/hooks';\nimport { InLineAlertProps } from '../types';\nimport {\n CheckWithCircle as Success,\n Warning,\n WarningWithCircle as Error,\n} from '@adobe-commerce/elsie/icons';\n\nconst iconsList = {\n success: <Success />,\n warning: <Warning />,\n error: <Error />,\n};\n\nexport const useInLineAlert = () => {\n const [inLineAlertProps, setInLineAlertProps] = useState<InLineAlertProps>(\n {}\n );\n\n const handleSetInLineAlert = useCallback(\n (notification: InLineAlertProps | undefined) => {\n if (!notification?.type) {\n setInLineAlertProps({});\n return;\n }\n\n const icon = iconsList[notification.type];\n\n setInLineAlertProps({\n ...notification,\n icon,\n });\n },\n []\n );\n\n return { inLineAlertProps, handleSetInLineAlert };\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 { getOrderHistoryList, getStoreConfig } from '@/account/api';\nimport { OrderDetails } from '@/account/data/models';\nimport { UseOrdersListProps } from '@/account/types';\nimport { useCallback, useEffect, useState } from 'preact/hooks';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport const useOrdersList = ({\n ordersInMinifiedView,\n minifiedView,\n pageSize,\n selectedDate,\n selectedPage,\n searchText,\n handleSetFirstOrderDate,\n handleSetInLineAlert,\n}: UseOrdersListProps) => {\n const translations = useText({\n searchError: 'Account.fullSizeView.OrdersList.OrdersListSearch.error',\n });\n\n const [orderHistoryListItems, setOrderHistoryListItems] = useState<\n OrderDetails[]\n >([]);\n const [pageInfo, setPageInfo] = useState<{\n totalPages: number;\n currentPage: number;\n pageSize: number;\n }>({ totalPages: 1, currentPage: 1, pageSize: 1 });\n const [loading, setLoading] = useState(false);\n const [placeholderImage, setPlaceholderImage] = useState('');\n const [refetchTrigger, setRefetchTrigger] = useState(0);\n const refetchOrders = useCallback(() => {\n setRefetchTrigger((prev) => prev + 1);\n }, []);\n\n useEffect(() => {\n getStoreConfig().then((response) => {\n setPlaceholderImage(response.baseMediaUrl);\n });\n }, []);\n\n // Listen for company context changes to refetch orders\n useEffect(() => {\n const companyContextEvent = events.on(\n 'companyContext/changed',\n refetchOrders\n );\n\n return () => {\n companyContextEvent?.off();\n };\n }, [refetchOrders]);\n\n useEffect(() => {\n const abortController = new AbortController();\n\n setLoading(true);\n handleSetInLineAlert?.();\n\n getOrderHistoryList(\n minifiedView ? ordersInMinifiedView : pageSize,\n selectedDate,\n selectedPage,\n searchText,\n abortController.signal\n )\n .then((response) => {\n if (abortController.signal.aborted) return;\n if (!response?.items) {\n setOrderHistoryListItems([]);\n handleSetInLineAlert?.({\n type: 'error',\n text: translations.searchError,\n });\n return;\n }\n\n setPageInfo(response.pageInfo);\n setOrderHistoryListItems(response.items);\n handleSetFirstOrderDate?.(response.dateOfFirstOrder);\n })\n .catch(() => {\n if (abortController.signal.aborted) return;\n\n setOrderHistoryListItems([]);\n handleSetInLineAlert?.({\n type: 'error',\n text: translations.searchError,\n });\n })\n .finally(() => {\n if (abortController.signal.aborted) return;\n setLoading(false);\n });\n\n return () => {\n abortController.abort();\n };\n }, [\n handleSetFirstOrderDate,\n handleSetInLineAlert,\n minifiedView,\n ordersInMinifiedView,\n pageSize,\n selectedDate,\n selectedPage,\n searchText,\n refetchTrigger,\n translations.searchError,\n ]);\n\n return {\n loading,\n orderHistoryListItems,\n pageInfo,\n placeholderImage,\n refetchOrders,\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 interface FilterDateProps {\n from: string;\n to: string;\n}\n\nexport const getDateRange = (\n key: 'sixMonthsAgo' | 'oneYearAgo' | '',\n numberRange = 1\n): FilterDateProps | '' => {\n const currentDate = new Date();\n const pastDate = new Date(currentDate);\n\n switch (key) {\n case 'sixMonthsAgo': {\n pastDate.setMonth(pastDate.getMonth() - numberRange);\n break;\n }\n case 'oneYearAgo': {\n pastDate.setFullYear(pastDate.getFullYear() - numberRange);\n break;\n }\n default:\n return '';\n }\n\n const result = {\n from: pastDate?.toISOString().split('T')[0],\n to: `${currentDate?.toISOString().split('T')[0]} 23:59:59`,\n };\n\n return result;\n};\n\nexport const addYearsToList = (\n startYear: number\n): { value: string; text: string }[] => {\n const result = [];\n const currentYear = new Date().getFullYear();\n\n for (let year = startYear; year <= currentYear - 1; year++) {\n result.push({\n value: `{\"from\":\"${year}-01-01\",\"to\":\"${year + 1}-01-01 23:59:59\"}`,\n text: year.toString(),\n });\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 { addYearsToList, getDateRange } from '@/account/lib/getDateRange';\nimport type { OrdersListSearchScope } from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { useCallback, useMemo, useState, useEffect } from 'preact/hooks';\n\nexport const useOrderSelectList = (\n searchScope: OrdersListSearchScope = 'selectedDate'\n) => {\n const translations = useText({\n pastSixMonths:\n 'Account.fullSizeView.OrdersList.OrdersListSelectDate.pastSixMonths',\n currentYear:\n 'Account.fullSizeView.OrdersList.OrdersListSelectDate.currentYear',\n viewAll: 'Account.fullSizeView.OrdersList.OrdersListSelectDate.viewAll',\n });\n\n const [firstOrderDate, setFirstOrderDate] = useState<string>();\n const [selectedDate, setSelectedDate] = useState<string>(\n JSON.stringify(getDateRange('sixMonthsAgo', 6))\n );\n const [selectedPage, setSelectedPage] = useState<number>(1);\n const [searchText, setSearchText] = useState<string>('');\n\n useEffect(() => {\n window?.scrollTo({\n top: 100,\n behavior: 'smooth',\n });\n }, [selectedPage]);\n\n const selectableDateList = useMemo(() => {\n const result = [\n {\n value: JSON.stringify(getDateRange('sixMonthsAgo', 6)),\n text: translations.pastSixMonths,\n },\n {\n value: JSON.stringify(getDateRange('oneYearAgo', 1)),\n text: translations.currentYear,\n },\n {\n value: 'viewAll',\n text: translations.viewAll,\n },\n ];\n\n if (firstOrderDate) {\n const date = new Date(firstOrderDate);\n const year = date.getFullYear();\n\n result?.splice(2, 0, ...addYearsToList(year));\n }\n\n return result;\n }, [translations, firstOrderDate]);\n\n const handleSetFirstOrderDate = useCallback((date: string) => {\n setFirstOrderDate(date);\n }, []);\n\n const handleSelectDate = useCallback((event: Event) => {\n const selectElement = event.target as HTMLSelectElement;\n\n const selectedValue = selectElement.value;\n\n setSelectedDate(selectedValue);\n setSelectedPage(1);\n }, []);\n\n const handleSearch = useCallback(\n (value: string) => {\n setSearchText(value);\n if (value && searchScope === 'allOrders') {\n setSelectedDate('viewAll');\n }\n setSelectedPage(1);\n },\n [searchScope]\n );\n\n return {\n selectableDateList,\n selectedDate,\n selectedPage,\n searchText,\n handleSelectDate,\n handleSearch,\n setSelectedPage,\n handleSetFirstOrderDate,\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 { useId } from 'preact/compat';\nimport { useRef, useState } from 'preact/hooks';\nimport { classes, Container, Slot } from '@adobe-commerce/elsie/lib';\nimport {\n CardLoader,\n EmptyList,\n OrdersListAction,\n OrdersListCard,\n} from '@/account/components';\nimport {\n Button,\n Field,\n Header,\n InLineAlert,\n Input,\n type InputProps,\n LiveRegion,\n Pagination,\n Picker,\n} from '@adobe-commerce/elsie/components';\nimport { Close, Search } from '@adobe-commerce/elsie/icons';\nimport { useOrdersList } from '@/account/hooks/containers/useOrdersList';\nimport { useInLineAlert } from '@/account/hooks/useInLineAlert';\nimport { OrdersListWrapperProps } from '@/account/types';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport {\n ORDER_SEARCH_MAX_LENGTH,\n ORDER_SEARCH_MIN_LENGTH,\n} from '@/account/configs/orderSearch.config';\nimport '@/account/components/OrdersListWrapper/OrdersListWrapper.css';\nimport { useOrderSelectList } from '@/account/hooks/containers/useOrderSelectList';\n\ninterface OrderSearchInputProps extends InputProps {\n actionLabel: string;\n actionDisabled: boolean;\n clearLabel: string;\n onClear: () => void;\n}\n\ninterface OrderSearchProps {\n handleSearch: (value: string) => void;\n refetchOrders: () => void;\n searchText: string;\n}\n\nconst OrderSearchInput: FunctionComponent<OrderSearchInputProps> = ({\n actionLabel,\n actionDisabled,\n clearLabel,\n onClear,\n error,\n ...inputProps\n}) => (\n <div\n className={classes([\n 'account-orders-list__search-input',\n ['account-orders-list__search-input--has-clear', !actionDisabled],\n ['account-orders-list__search-input--error', !!error],\n ])}\n >\n <Input {...inputProps} error={error} aria-invalid={!!error} />\n <div className=\"account-orders-list__search-actions\">\n {!actionDisabled ? (\n <Button\n className=\"account-orders-list__search-clear\"\n type=\"button\"\n variant=\"tertiary\"\n icon={<Close />}\n aria-label={clearLabel}\n onClick={onClear}\n />\n ) : null}\n <Button\n className=\"account-orders-list__search-submit\"\n type=\"submit\"\n variant=\"tertiary\"\n icon={<Search />}\n aria-label={actionLabel}\n disabled={actionDisabled}\n />\n </div>\n </div>\n);\n\nconst OrderSearch: FunctionComponent<OrderSearchProps> = ({\n handleSearch,\n refetchOrders,\n searchText,\n}) => {\n const translations = useText({\n action: 'Account.fullSizeView.OrdersList.OrdersListSearch.action',\n clear: 'Account.fullSizeView.OrdersList.OrdersListSearch.clear',\n label: 'Account.fullSizeView.OrdersList.OrdersListSearch.label',\n minimumLength:\n 'Account.fullSizeView.OrdersList.OrdersListSearch.minimumLength',\n placeholder: 'Account.fullSizeView.OrdersList.OrdersListSearch.placeholder',\n });\n const [searchInput, setSearchInput] = useState(searchText);\n const [searchError, setSearchError] = useState('');\n const searchFormRef = useRef<HTMLFormElement>(null);\n const searchInputId = `${useId()}-order-search`;\n const hasSearchTerm = Boolean(searchInput.trim() || searchText);\n\n const applySearch = (term: string) => {\n setSearchError('');\n setSearchInput(term);\n\n if (term !== searchText) {\n handleSearch(term);\n } else if (term) {\n // re-submitting the same term refreshes the current results\n refetchOrders();\n }\n };\n\n const runSearch = () => {\n const term = searchInput.trim();\n\n if (term.length > 0 && term.length < ORDER_SEARCH_MIN_LENGTH) {\n setSearchError(translations.minimumLength);\n return;\n }\n\n applySearch(term);\n };\n\n const clearSearch = () => {\n applySearch('');\n\n const input = searchFormRef.current?.elements.namedItem('orderSearch');\n\n if (input instanceof HTMLInputElement) {\n input.focus();\n }\n };\n\n return (\n <form\n ref={searchFormRef}\n className=\"account-orders-list__search\"\n role=\"search\"\n aria-label={translations.action}\n onSubmit={(event) => {\n event.preventDefault();\n runSearch();\n }}\n >\n <Field label={translations.label} error={searchError || undefined}>\n <OrderSearchInput\n id={searchInputId}\n name=\"orderSearch\"\n value={searchInput}\n maxLength={ORDER_SEARCH_MAX_LENGTH}\n placeholder={translations.placeholder}\n actionLabel={translations.action}\n actionDisabled={!hasSearchTerm}\n clearLabel={translations.clear}\n onClear={clearSearch}\n onInput={(event) => {\n setSearchInput(event.currentTarget.value);\n setSearchError('');\n }}\n />\n </Field>\n </form>\n );\n};\n\nexport const OrdersListWrapper: Container<OrdersListWrapperProps> = ({\n className,\n withHeader = true,\n minifiedView = false,\n withThumbnails = true,\n withFilter = true,\n withSearch = false,\n searchScope = 'selectedDate',\n ordersInMinifiedView = 1,\n pageSize = 10,\n routeOrdersList,\n routeOrderDetails,\n routeReturnDetails,\n routeTracking,\n routeOrderProduct,\n slots,\n}) => {\n const minifiedViewKey = minifiedView ? 'minifiedView' : 'fullSizeView';\n\n const translations = useText({\n containerTitle: `Account.${minifiedViewKey}.OrdersList.containerTitle`,\n dateOrderPlaced: `Account.${minifiedViewKey}.OrdersList.dateOrderPlaced`,\n loading: 'Account.OrdersList.loading',\n loaded: 'Account.OrdersList.loaded',\n });\n\n const {\n selectableDateList,\n selectedDate,\n handleSelectDate,\n selectedPage,\n searchText,\n handleSearch,\n setSelectedPage,\n handleSetFirstOrderDate,\n } = useOrderSelectList(searchScope);\n\n const { inLineAlertProps, handleSetInLineAlert } = useInLineAlert();\n\n const {\n pageInfo,\n loading,\n orderHistoryListItems,\n placeholderImage,\n refetchOrders,\n } = useOrdersList({\n minifiedView,\n pageSize,\n ordersInMinifiedView,\n selectedDate,\n selectedPage,\n searchText,\n handleSetFirstOrderDate,\n handleSetInLineAlert,\n });\n\n return (\n <div>\n {withHeader ? (\n <Header\n aria-label={translations.containerTitle}\n role=\"region\"\n title={translations.containerTitle}\n divider={!minifiedView}\n className={classes([\n 'account-orders-list-header-title',\n ['account-orders-list-header', minifiedView],\n ])}\n level={minifiedView ? 2 : 1}\n />\n ) : null}\n\n <div className={classes(['account-orders-list', className])}>\n <LiveRegion\n message={loading ? translations.loading : translations.loaded}\n />\n {!minifiedView && (withSearch || withFilter) ? (\n <div className={'account-orders-list__controls'}>\n {withFilter ? (\n <Field\n className=\"account-orders-list__date-select\"\n label={translations.dateOrderPlaced}\n >\n <Picker\n id=\"orderDatePicker\"\n value={selectedDate}\n name=\"orderDatePicker\"\n aria-label={translations.dateOrderPlaced}\n options={selectableDateList}\n handleSelect={handleSelectDate}\n />\n </Field>\n ) : null}\n\n {withSearch ? (\n <OrderSearch\n handleSearch={handleSearch}\n refetchOrders={refetchOrders}\n searchText={searchText}\n />\n ) : null}\n </div>\n ) : null}\n\n {inLineAlertProps.text ? (\n <InLineAlert\n data-testid=\"ordersListInLineAlert\"\n className=\"account-orders-list__notification\"\n type={inLineAlertProps.type}\n variant=\"secondary\"\n heading={inLineAlertProps.text}\n icon={inLineAlertProps.icon}\n />\n ) : null}\n\n {!loading ? (\n <>\n {orderHistoryListItems.length ? (\n <>\n {orderHistoryListItems.map((el, index) => {\n return (\n <OrdersListCard\n placeholderImage={placeholderImage}\n routeTracking={routeTracking}\n routeOrderProduct={routeOrderProduct}\n routeReturnDetails={routeReturnDetails}\n minifiedView={minifiedView}\n item={el}\n withThumbnails={withThumbnails}\n key={index}\n slots={slots}\n >\n {slots?.OrdersListAction ? (\n <Slot\n data-testid={`ordersListActionSlot_${index}`}\n name=\"OrdersListAction\"\n slot={slots?.OrdersListAction}\n context={{ orderHistoryListItem: el }}\n />\n ) : (\n <OrdersListAction\n minifiedView={minifiedView}\n orderNumber={el.number}\n orderToken={el.token}\n routeOrderDetails={routeOrderDetails}\n />\n )}\n </OrdersListCard>\n );\n })}\n </>\n ) : (\n <EmptyList\n isEmpty={!orderHistoryListItems.length}\n typeList=\"orders\"\n minifiedView={minifiedView}\n />\n )}\n </>\n ) : (\n <>\n {Array.from(Array(pageInfo?.pageSize).keys()).map((i) => (\n <CardLoader\n testId={'orderSkeletonLoader'}\n withCard={false}\n key={i}\n />\n ))}\n </>\n )}\n {!minifiedView && pageInfo?.totalPages > 1 ? (\n <Pagination\n totalPages={pageInfo?.totalPages}\n currentPage={selectedPage}\n onChange={setSelectedPage}\n />\n ) : null}\n\n {minifiedView ? (\n <OrdersListAction\n minifiedView={minifiedView}\n routeOrdersList={routeOrdersList}\n />\n ) : null}\n </div>\n </div>\n );\n};\n"],"names":["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","onSubmit","onChange","setInputChange","formName","useText","useRef","formData","setFormData","useState","errors","setErrors","requiredFields","setRequiredFields","regionEnabled","setRegionEnabled","effectHasRun","setEffectHasRun","shouldBlockEffect","setShouldBlockEffect","shouldTriggerEffect","setShouldTriggerEffect","isDataValid","setIsDataValid","handleValidationSubmit","useCallback","disableShowError","formValid","firstErrorField","name","fieldConfig","config","validationResult","input","collectFormData","fieldValue","requiredList","event","overrideValues","fieldsForm","data","useEffect","initialData","errorList","prev","sessionAddressForm","hasCountryCode","hasRegion","handleInputChange","errorsProp","type","checked","exclusiveToggleValues","updatedFormData","onFocus","handleBlur","handleSubmit","FieldEnumList","AUTOCOMPLETE_BY_CODE","getAutoComplete","code","FormInputs","memo","loading","values","className","onBlur","slots","fieldIdPrefix","itemClassName","translationKeys","useMemo","field","getAriaLabel","item","getFloatingLabel","getPlaceholder","renderSlot","errorMessage","contextValue","jsx","Slot","selectElement","valueMessage","defaultSelectValue","option","Fragment","Field","classes","Picker","inputElement","Input","inputDateElement","InputDate","inputCheckBoxElement","Checkbox","textAreaElement","TextArea","CardLoader","testId","withCard","defaultSkeleton","jsxs","Skeleton","SkeletonRow","Card","AddressFormLoader","AddressActionsLoader","Form","forwardRef","showFormLoader","children","forwardFormRef","regionOptions","showSaveCheckBox","handleSaveCheckBoxAddress","saveCheckBoxAddress","useImperativeHandle","modifyFormRef","getAddressButtonAriaLabel","defaultShipping","defaultBilling","isRemove","labelMap","AddressCard","selectable","selectShipping","selectBilling","variant","minifiedView","keysSortOrder","addressData","setAddressId","handleRenderModal","handleRenderForm","isB2BFlow","permissions","addressCardAriaId","useId","minifiedViewKey","defaultBillingLabel","defaultShippingLabel","defaultLabelText","bookShippingLabel","bookBillingLabel","getLabelStatus","handleRemove","handleEdit","normalizeAddress","region","address","modifyAddressData","normalizedAddress","shippingLabel","billingLabel","hideShipping","hideBilling","Button","Tag","SvgAdd","props","React","SvgAddressBook","SvgCard","SvgCheckWithCircle","SvgChevronRight","SvgClose","SvgEmptyBox","SvgSearch","SvgWarning","SvgWarningWithCircle","AddressActions","addNewAddress","routeAddressesPage","TagType","buttonProps","nonSelectableViewButton","buttonText","Icon","ChevronRight","Add","AddressModal","open","submitLoading","onRemoveAddress","closeModal","isDeleteDisabled","Modal","ProgressSpinner","EmptyList","typeList","isEmpty","AddressBook","EmptyBox","IllustratedMessage","iconConfig","OrdersListAction","orderNumber","orderToken","routeOrdersList","routeOrderDetails","useIsMobile","isMobile","setIsMobile","handleResize","OrdersListCard","placeholderImage","withThumbnails","routeTracking","routeOrderProduct","routeReturnDetails","hasProductRoute","orderItemsImages","orderItem","defaultImageProps","Image","trackingRoute","_c","_d","returnData","Price","_f","_e","_h","_g","_i","_j","sum","quantityOrdered","_k","_l","ContentGrid","resolveAddressesContextMode","contextMode","resolveEnforceB2BPermissions","resolvedContextMode","resolveIsCheckoutContext","resolveIsB2BCandidate","b2bEnabled","isB2BCustomer","resolveHasB2BContainerAccess","resolveIsB2BWithoutViewAccess","isB2BCandidate","isCompanyAddressBookEnabled","enforceB2BPermissions","hasB2BContainerAccess","resolveIsB2BFlow","isB2BWithoutViewAccess","resolveIsAddressSelectionLocked","isCheckoutContext","isCustomShippingAddressAllowed","shouldSkipAddressFetchForCustomerType","customerTypeLoading","shouldSkipAddressFetchForPermissions","permissionsLoading","shouldApplyB2BAddressBookFlow","shouldReturnEmptyWithinAddressBook","manageAddressDeletion","removeId","addressesList","updateCustomerAddress","newDefaultAddress","fallbackDefaultAddress","updatedDefaultAddress","defaultAttributePreset","defaultAccountAttributePreset","sortingAddressesList","copyAddressList","CompanyAddressTypeEnum","resolveAddressType","hasDefaultShipping","hasDefaultBilling","filterB2BCheckoutAddressesByType","addresses","isShippingOnly","expectedType","useCustomerType","enabled","setLoading","setIsB2BCustomer","isSubscribed","getCustomerCompanyContext","isB2BContext","error","useCompanyAddressPermissions","setPermissions","getDefaultCompanyAddressPermissions","getCustomerRolePermissions","resolvedPermissions","sanitizeB2BCheckoutAddressPayload","payloadData","sanitizedRegion","rawRegionId","trimmedRegionId","resolveAddressSelectionPayloadData","normalizedData","payload","sanitizedPayload","useAddresses","defaultSelectAddressId","onAddressData","onSuccess","selectedAddressOption","setSelectedAddressOption","isModalRendered","setIsModalRendered","isFormRendered","setIsFormRendered","setSubmitLoading","setAddNewAddress","addressId","setEditAddressId","setAddressesList","setKeysSortOrder","setIsCompanyAddressBookEnabled","setIsCustomShippingAddressAllowed","isAddressSelectionLocked","applyAttributesSortOrder","attributesFormResponse","label","convertToCamelCase","getAddressesList","shouldWaitForCustomerType","shouldWaitForPermissions","getCompanyAddressBook","isAddressBookEnabled","allowCustomShippingAddress","getAttributesForm","addressItems","normalizedAddressItems","defaultAddresses","addressesToSet","addressResponse","getCustomerAddress","clearSelection","selectedItem","normalizeAddressData","selectedValue","setEditingAddressId","id","handleSelectAddressOption","nextSibling","onCloseBtnClick","removeAddress","deleteCompanyAddress","removeCustomerAddress","closeNewAddressForm","redirectToAddressesRoute","handleOnSuccess","AddressesWrapper","hideActionFormButtons","inputName","title","headerLevel","addressFormTitle","saveCheckBoxValue","withHeader","withActionsInMinifiedView","withActionsInFullSizeView","inputsDefaultValueSet","showShippingCheckBox","showBillingCheckBox","shippingCheckBoxValue","billingCheckBoxValue","onError","shouldEnforceB2BPermissions","aclRestrictedB2BFlow","headerTitle","hasDefaultShippingAddress","hasDefaultBillingAddress","addressesComponent","sortedAddressesList","addressesFooterSection","AddressForm","generalLabelId","valueForSelection","inputId","labelId","Header","LiveRegion","defaultCheckBox","defaultTextField","defaultShippingCheckBox","defaultBillingCheckBox","defaultAddressTypeShippingCheckBox","defaultAddressTypeBillingCheckBox","defaultIsDefaultCheckBox","defaultNicknameField","getFieldsConfig","itemValues","attributesFormList","newItemValues","newField","getFormValues","form","checkbox","prepareNormalizedData","countryOptions","disableField","isRequiredRegion","isRequiredPostCode","keepDefaultCheckBoxesOnEdit","normalizeAttributes","baseKeys","serializeAddressForm","formValues","streetListKeys","elementValues","streetList","modifyFormCheckBoxValues","street","streetMultiline_2","streetMultiline_1","regionConfigs","transformSessionData","regions","transformedData","foundRegion","val","resolveShouldEnforceB2BPermissions","resolveTemporaryCheckoutAddressMode","hasSingleDefaultTypeViolation","requestPayload","hasConflictingTypeSelection","shouldOmitDefaultFlagsFromPayload","canSetDefaultAddress","canSetAddressAsDefault","canSetDefaultAddressInForm","isTemporaryCheckoutAddressMode","getSanitizedAddressPayload","resolveUpdateAddressAlertKey","canEditAddress","resolveCreateAddressAlertKey","canCreateAddress","resolveAddressFormErrorMessage","resolveBaseCheckBoxRules","B2B_CREATE_DEFAULT_RULES","resolveB2BCreateDefaults","hasShipping","hasBilling","ruleKey","resolveB2BDefaultCheckBoxRules","baseRules","isCreateMode","findNonEmptyObject","obj1","obj2","isNicknameField","useAddressForm","addressFormId","inLineAlert","setInLineAlert","setAttributesFormList","countriesData","setCountriesData","inputChange","savedData","setDisableField","setSaveCheckBoxAddress","canEditAddressInCurrentMode","canSetDefaultAddressInCurrentMode","isB2BEditMode","isSetDefaultOnlyEditMode","isAddressTypeSelectionOnlyMode","attributeFormResponse","getCountries","availableCountries","countriesWithRequiredRegion","optionalZipCountries","country","c","handleOnCloseForm","resolveSelectedAddressType","resolveIsDefaultSelection","handleUpdateAddress","valid","originalAddressType","selectedAddressType","selectedIsDefault","normalizedAddressType","setDefaultCompanyAddress","validationAlertKey","b2bUpdatePayload","shouldSetAsDefault","updateCompanyAddress","customerUpdatePayload","handleCreateAddress","saveAddressBook","createdAddress","createCompanyAddress","createCustomerAddress","b2bDefaultCheckBoxRules","normalizeFieldsConfig","hasRenderableNicknameField","normalizedAttributesFormList","liveAddressTypeBilling","liveAddressTypeShipping","isDefaultAddressSelected","isB2BTypeSelectionDisabled","isB2BIsDefaultDisabled","shouldHideB2BAddressOptions","shippingCheckBox","billingCheckBox","b2bAddressTypeShippingCheckBox","b2bAddressTypeBillingCheckBox","b2bIsDefaultLabel","b2bIsDefaultCheckBox","updatedAttributesFormList","sessionAddressFormData","baseItemValues","itemValuesForFields","normalizedFields","transformDefaultValuesAddresses","customAttributesObject","attr","restOfObject","AddressFormWrapper","addressesFormTitle","isOpen","shouldShowSaveCheckBox","isEditMode","canEditInB2B","canSetDefaultInB2B","canCreateInB2B","isFormDisabled","noPermissionMessage","formKey","setFormKey","previousDefaultValuesRef","serializedDefaultValues","isInitialRun","prevKey","InLineAlert","getCachedStoreConfig","storeConfigString","useGetStoreConfigs","passwordConfigs","setPasswordConfigs","remoteShoppingAssistanceConfigs","setRemoteShoppingAssistanceConfigs","applyStoreConfig","requiredCharacterClasses","shoppingAssistanceEnabled","shoppingAssistanceCheckboxTitle","shoppingAssistanceCheckboxTooltip","cachedStoreConfig","getStoreConfig","response","validationChangePassword","currentPassword","newPassword","confirmPassword","DEFAULT_ERRORS_STATE","arePasswordsEmpty","isNewPasswordMismatch","validationUniqueSymbolsPassword","password","uniqueSymbolsCount","numbers","lowerCaseLetter","upperCaseLetter","specialSymbols","useChangePassword","handleSetInLineAlert","handleHideChangePassword","isClickSubmit","setIsClickSubmit","setCurrentPassword","setNewPassword","setConfirmPassword","passwordErrors","setPasswordErrors","hideChangePassword","handleCurrentPasswordChange","handleNewPasswordChange","handleConfirmPasswordChange","handleOnBlurPassword","validatePasswords","isValid","mutationChangePassword","requiredPasswordLength","updateCustomerPassword","usePasswordValidationMessage","isValidUniqueSymbols","setIsValidUniqueSymbols","defaultLengthMessage","defaultMessage","getErrorMessage","isSubmit","ChangePassword","inLineAlertProps","InputPassword","EditCustomerInformation","errorPasswordEmpty","passwordValue","showPasswordOnEmailChange","formFieldsList","handleHideEditForm","handleUpdateCustomerInformation","handleSetPassword","CustomerInformationCard","createdAt","orderedCustomerData","showEditForm","showChangePassword","handleShowChangePassword","handleShowEditForm","formatAddressLine","city","post","cityRegion","cityRegionPost","line3","AddressBlock","selected","busy","line1","line2","ToggleButton","AddressValidation","originalAddress","onSelectionChange","selection","suggestedAddress","hasSuggestion","SellerAssistedBuyingSettingsControl","isRemoteShoppingAssistanceAvailable","isRemoteShoppingAssistanceEnabled","showAlert","checkboxLabel","checkboxTooltip","alertMessage","featureDisabledMessage","handleCheckboxChange","handleDismissAlert","showTooltip","setShowTooltip","SellerAssistedBuyingActivityTable","adminAssistanceActions","tableHeaders","actionTypesMap","emptyStateMessage","currentPage","onPageChange","withWrapper","columns","rowData","totalPages","showPagination","table","Table","Pagination","PaymentCard","cardBrand","lastFourDigits","expired","onRemove","paymentCardAriaId","maskedNumber","cardDescription","customerPaymentTokensEvent","PAYMENT_METHOD_REMOVE_FAILED","usePaymentMethods","filterPaymentMethodCodes","itemsSourceRef","prevFilterKeyRef","items","setItems","loadError","setLoadError","actionError","setActionError","removingHash","setRemovingHash","load","next","getCustomerPaymentTokens","e","cancelled","consumedFromBus","sub","events","filterKey","removeToken","publicHash","deletePaymentToken","t","refetch","last","PaymentMethodsWrapper","pendingRemoval","setPendingRemoval","closeRemovalModal","confirmRemoveToken","removeErrorMessage","paymentMethodRows","token","paymentCardProps","emptyPaymentsView","ErrorIcon","PaymentModal","onRemoveToken","iconsList","Success","Warning","Error","useInLineAlert","setInLineAlertProps","notification","icon","useOrdersList","ordersInMinifiedView","pageSize","selectedDate","selectedPage","searchText","handleSetFirstOrderDate","orderHistoryListItems","setOrderHistoryListItems","pageInfo","setPageInfo","setPlaceholderImage","refetchTrigger","setRefetchTrigger","refetchOrders","companyContextEvent","abortController","getOrderHistoryList","getDateRange","numberRange","currentDate","pastDate","addYearsToList","startYear","currentYear","year","useOrderSelectList","searchScope","firstOrderDate","setFirstOrderDate","setSelectedDate","setSelectedPage","setSearchText","selectableDateList","handleSelectDate","handleSearch","OrderSearchInput","actionLabel","actionDisabled","clearLabel","onClear","inputProps","Close","Search","OrderSearch","searchInput","setSearchInput","searchError","setSearchError","searchFormRef","searchInputId","hasSearchTerm","applySearch","term","runSearch","ORDER_SEARCH_MIN_LENGTH","clearSearch","ORDER_SEARCH_MAX_LENGTH","OrdersListWrapper","withFilter","withSearch","i"],"mappings":"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","x_google_ignoreList":[14,15,16,17,18,19,20,21,22,23]}