{"version":3,"file":"static/js/17.88fab9c2ffeec23cb107.chunk.js","mappings":"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JC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJC,GAAI,MACJ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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/checkout-express-shipping-address/components/checkout-shipping-cartlines-images.tsx?64bf","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-express-shipping-address/checkout-express-shipping-address.tsx?0c58","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-express-shipping-address/checkout-express-shipping-address.view.tsx?0afb","webpack://Msdyn365.Commerce.Online/./src/themes/venchi/utils/convert_a2_a3.ts?c0bb","webpack://Msdyn365.Commerce.Online/./src/checkout-errors/checkout-errors.ts?a9e0","webpack://Msdyn365.Commerce.Online/./src/common/address-autosuggest.ts?f5a2","webpack://Msdyn365.Commerce.Online/./src/common/address-common.ts?cf4b","webpack://Msdyn365.Commerce.Online/./src/common/address-format.data.ts?6cbf","webpack://Msdyn365.Commerce.Online/./src/common/address-format.ts?4f04","webpack://Msdyn365.Commerce.Online/./src/common/address-meta-data.ts?c6e6","webpack://Msdyn365.Commerce.Online/./src/common/address-module.data.ts?697a","webpack://Msdyn365.Commerce.Online/./src/common/components/address-checkbox.tsx?eb1a","webpack://Msdyn365.Commerce.Online/./src/common/components/address-add.tsx?e6a6","webpack://Msdyn365.Commerce.Online/./src/common/components/address-alert.tsx?10d1","webpack://Msdyn365.Commerce.Online/./src/common/components/address-billing-checkbox.tsx?4008","webpack://Msdyn365.Commerce.Online/./src/common/components/address-billing-heading.tsx?7bbd","webpack://Msdyn365.Commerce.Online/./src/common/components/address-button.tsx?7f7b","webpack://Msdyn365.Commerce.Online/./src/common/components/address-detail-item.tsx?5209","webpack://Msdyn365.Commerce.Online/./src/common/components/address-dropdown.tsx?f24b","webpack://Msdyn365.Commerce.Online/./src/common/components/address-error-alert.tsx?bcde","webpack://Msdyn365.Commerce.Online/./src/common/components/address-error-message.tsx?89ad","webpack://Msdyn365.Commerce.Online/./src/common/components/address-error-title.tsx?3926","webpack://Msdyn365.Commerce.Online/./src/common/components/address-input.tsx?8073","webpack://Msdyn365.Commerce.Online/./src/common/components/address-label.tsx?6864","webpack://Msdyn365.Commerce.Online/./src/common/components/address-list.tsx?a628","webpack://Msdyn365.Commerce.Online/./src/common/components/address-select.tsx?c1df","webpack://Msdyn365.Commerce.Online/./src/common/components/address-show.tsx?3f60","webpack://Msdyn365.Commerce.Online/./src/modules/account-management-address/account-management-address.tsx?27e7","webpack://Msdyn365.Commerce.Online/./src/modules/account-management-address/account-management-address.view.tsx?8c9f","webpack://Msdyn365.Commerce.Online/./src/modules/business-account-address/business-account-address.tsx?299e","webpack://Msdyn365.Commerce.Online/./src/modules/business-account-address/business-account-address.view.tsx?5078","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-billing-address/checkout-billing-address.tsx?2aa0","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-billing-address/checkout-billing-address.view.tsx?b194","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-shipping-address/components/checkout-shipping-cartlines-images.tsx?c635","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-shipping-address/checkout-shipping-address.tsx?de3a","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-shipping-address/checkout-shipping-address.view.tsx?3386","webpack://Msdyn365.Commerce.Online/../../src/checkout-state-data-action.ts?8344","webpack://Msdyn365.Commerce.Online/../../src/checkout-state.ts?acd8","webpack://Msdyn365.Commerce.Online/../../../src/module-state-manager/module-state.ts?7579","webpack://Msdyn365.Commerce.Online/../../../src/module-state-manager/with-module-state.tsx?61ca","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IImageProps, IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\r\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { format, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { ICheckoutExpressShippingAddressResources } from '../checkout-express-shipping-address.props.autogenerated';\r\n\r\n/**\r\n * The cartline product interface.\r\n */\r\nexport interface ICartLineWithProduct {\r\n cartLine: CartLine;\r\n product?: SimpleProduct;\r\n}\r\n\r\n/**\r\n * The checkout shipping cartline interface.\r\n */\r\nexport interface ICheckoutShippingCartLineInfo {\r\n lineId: string;\r\n imageProps: IImageProps;\r\n quantity: number;\r\n}\r\n\r\n/**\r\n * The checkout shipping cartline props.\r\n */\r\nexport interface ICheckoutShippingCartLinesProps {\r\n moduleClassName: string;\r\n cartLines: ICheckoutShippingCartLineInfo[];\r\n title: string;\r\n itemTitle: string;\r\n resources: ICheckoutExpressShippingAddressResources;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Following as per module\r\nexport const CheckoutPickupCartLines: React.FC = ({\r\n moduleClassName,\r\n cartLines,\r\n title,\r\n itemTitle,\r\n resources\r\n}) => {\r\n const context = ({\r\n gridSettings: {\r\n xs: { w: 767 },\r\n sm: { w: 991 },\r\n md: { w: 1199 },\r\n lg: { w: 1599 },\r\n xl: { w: 1600 }\r\n }\r\n } as unknown) as IRequestContext;\r\n const isMobileCheck = isMobile({ variant: VariantType.Browser, context });\r\n const isMobileView = isMobileCheck === 'xs' || isMobileCheck === 'sm';\r\n\r\n if (!ArrayExtensions.hasElements(cartLines)) {\r\n return null;\r\n }\r\n const quantity = 1;\r\n return (\r\n
\r\n
\r\n
{title}
\r\n
{itemTitle}
\r\n
\r\n
\r\n {cartLines.map((cartLine: ICheckoutShippingCartLineInfo) => {\r\n const isShowQty = cartLine.quantity > quantity;\r\n let className = `${moduleClassName}__group-images-lines-product`;\r\n const role = 'text';\r\n if (isShowQty) {\r\n className = classnames(className, ' product-image-wide');\r\n }\r\n return (\r\n
\r\n \r\n {isMobileView\r\n ? isShowQty && (\r\n \r\n {cartLine.quantity}\r\n
\r\n )\r\n : isShowQty && (\r\n
\r\n )}\r\n {!isMobileView && isShowQty && (\r\n \r\n {format(resources.productQuantityInfo, cartLine.quantity, cartLine.imageProps.altText)}\r\n \r\n )}\r\n
\r\n );\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * The checkout shipping cartline image settings.\r\n */\r\nexport const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\r\n lg: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\r\n xl: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 }\r\n },\r\n lazyload: true,\r\n quality: 80\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n Address,\r\n AddressPurpose,\r\n CartLine,\r\n CountryRegionInfo,\r\n SimpleProduct,\r\n StateProvinceInfo,\r\n TenderLine,\r\n TokenizedPaymentCard\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { getFallbackImageUrl, getSimpleProducts, ObjectExtensions, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { format, getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { action, computed, observable, reaction, set } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { AutoSuggest } from '@msdyn365-commerce-modules/address';\r\nimport { IAutoSuggestOptions } from '@msdyn365-commerce-modules/address';\r\nimport { AddressCommon } from '@msdyn365-commerce-modules/address';\r\nimport { AddressFormat } from '@msdyn365-commerce-modules/address';\r\nimport { AddressItemType } from '@msdyn365-commerce-modules/address';\r\nimport { AddressMetaData } from '@msdyn365-commerce-modules/address';\r\nimport { AddressOperation, AddressType, IAddressResource, IAddressResponse } from '@msdyn365-commerce-modules/address';\r\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '@msdyn365-commerce-modules/address';\r\nimport { AddressSelect, IAddressSelectProps } from '@msdyn365-commerce-modules/address';\r\nimport { AddressShow, IAddressShowProps } from '@msdyn365-commerce-modules/address';\r\nimport { ICheckoutExpressShippingAddressData } from './checkout-express-shipping-address.data';\r\nimport { ICheckoutExpressShippingAddressProps } from './checkout-express-shipping-address.props.autogenerated';\r\nimport {\r\n CheckoutPickupCartLines,\r\n defaultImageSettings,\r\n ICartLineWithProduct,\r\n ICheckoutShippingCartLineInfo,\r\n ICheckoutShippingCartLinesProps\r\n} from './components/checkout-shipping-cartlines-images';\r\n\r\n/**\r\n * The checkout address props interface.\r\n */\r\nexport interface ICheckoutAddressProps\r\n extends ICheckoutExpressShippingAddressProps,\r\n IModuleStateProps {}\r\n\r\n/**\r\n * The checkout shipping address view state.\r\n */\r\nexport interface ICheckoutShippingAddressViewState {\r\n isShowAddress: boolean;\r\n isShowAddresList: boolean;\r\n isShowAddOrUpdateAddress: boolean;\r\n}\r\n\r\n/**\r\n * The checkout shipping address state.\r\n */\r\nexport interface ICheckoutAddresState {\r\n shippingGroups: ICartLineWithProduct[];\r\n}\r\n\r\n/**\r\n * The checkout shipping address view props.\r\n */\r\nexport interface ICheckoutShippingAddressViewProps extends ICheckoutAddressProps {\r\n className: string;\r\n currentOperation: AddressOperation;\r\n selectedAddress?: Address;\r\n addUpdateAddress: Address;\r\n addressListSelectedAddress: Address;\r\n countryRegionId: string;\r\n stateProvinceInfo?: StateProvinceInfo[];\r\n customerAddresses: Address[];\r\n validationError: object;\r\n addressActionResponse?: IAddressResponse;\r\n viewState: ICheckoutShippingAddressViewState;\r\n CheckoutShippingAddress: IModuleProps;\r\n isUpdating: boolean;\r\n hasError: boolean;\r\n showAddress: IAddressShowProps;\r\n showAddOrUpdateAddress: IAddressAddUpdateProps;\r\n cartLineImages?: React.ReactNode;\r\n showAddressSelect: IAddressSelectProps;\r\n showAddOrUpdateAddressHandler?(onSaveHandler?: () => void, onCancelHandler?: () => void): IAddressAddUpdateProps;\r\n showAddressSelectHandler?(\r\n onAddAddressHandler?: () => void,\r\n onSaveHandler?: () => void,\r\n onCancelHandler?: () => void\r\n ): IAddressSelectProps;\r\n}\r\n\r\n/**\r\n * IExpressPaymentDetail interface.\r\n */\r\ninterface IExpressPaymentDetails {\r\n email?: string;\r\n tenderLine?: TenderLine;\r\n tokenizedPaymentCard?: TokenizedPaymentCard;\r\n paymentTenderType?: string;\r\n address?: Address;\r\n isExpressCheckoutAppliedInCartPage: boolean;\r\n isExpressAddressAppliedInCartPage?: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * Address component.\r\n * @extends {React.Component>}\r\n */\r\n// @ts-expect-error\r\n@withModuleState\r\n@observer\r\nclass CheckoutShippingAddress extends React.Component {\r\n @observable private currentOperation: AddressOperation;\r\n\r\n @observable private selectedAddress?: Address;\r\n\r\n @observable private addUpdateAddress: Address;\r\n\r\n @observable private countryRegionId: string = 'USA';\r\n\r\n @observable private stateProvinceInfo?: StateProvinceInfo[];\r\n\r\n @observable private customerAddresses: Address[] = [];\r\n\r\n @observable private validationError: object;\r\n\r\n @observable private addressActionResponse?: IAddressResponse;\r\n\r\n @observable private isUpdating?: boolean;\r\n\r\n @observable private hasError?: boolean;\r\n\r\n @observable private addressListSelectedAddress: Address = {};\r\n\r\n private readonly addressCommon: AddressCommon;\r\n\r\n private addressFormat!: AddressFormat;\r\n\r\n private countryRegions: CountryRegionInfo[] = [];\r\n\r\n private addressPurposes: AddressPurpose[] = [];\r\n\r\n private readonly resources: IAddressResource;\r\n\r\n private readonly defaultAddressType: number = 6; // Default to Home\r\n\r\n private readonly telemetryContent?: ITelemetryContent;\r\n\r\n private autoSuggest?: AutoSuggest;\r\n\r\n private readonly multiplePickupStoreSwitchName: string = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n\r\n private retailMultiplePickUpOptionEnabled?: boolean = false;\r\n\r\n private readonly countriesAvail = {\r\n enGB: ['GBR'],\r\n it: ['ITA'],\r\n enUS: ['USA', 'CAN'],\r\n eu: [\r\n 'AUT',\r\n 'BEL',\r\n 'BGR',\r\n 'CHE',\r\n 'CZE',\r\n 'DEU',\r\n 'DNK',\r\n 'ESP',\r\n 'EST',\r\n 'FIN',\r\n 'FRA',\r\n 'GRC',\r\n 'HRV',\r\n 'HUN',\r\n 'IRL',\r\n 'LIE',\r\n 'LTU',\r\n 'LUX',\r\n 'LVA',\r\n 'MCO',\r\n 'NLD',\r\n 'NOR',\r\n 'POL',\r\n 'PRT',\r\n 'ROU',\r\n 'SVK',\r\n 'SVN',\r\n 'SWE'\r\n ]\r\n };\r\n\r\n public constructor(props: ICheckoutAddressProps) {\r\n super(props);\r\n this.state = { shippingGroups: [] };\r\n const { context, data, resources, telemetry } = this.props;\r\n\r\n this.addUpdateAddress = {};\r\n this.resources = resources;\r\n this.currentOperation = AddressOperation.List;\r\n this.countryRegions = data.countryRegions.result || [];\r\n this.addressPurposes = data.addressPurposes.result || [];\r\n this.customerAddresses = data.address.result || [];\r\n this.stateProvinceInfo = data.countryStates.result || [];\r\n this.addressCommon = new AddressCommon(context, resources, telemetry);\r\n this.addressFormat = new AddressFormat(\r\n this.countryRegions,\r\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\r\n this.addressPurposes\r\n );\r\n this.validationError = {};\r\n this.retailMultiplePickUpOptionEnabled = data.featureState.result?.find(\r\n feature => feature.Name === this.multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n const {\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled, autoSuggestOptions },\r\n resources\r\n } = this.props;\r\n\r\n // Initializing data props\r\n this._dataInitialize(this.props);\r\n\r\n this.addressFormat = new AddressFormat(\r\n this.countryRegions,\r\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\r\n this.addressPurposes\r\n );\r\n void this.props.data.checkout.then(() => {\r\n this._setDefaultCountryRegionId();\r\n this._initModuleState();\r\n });\r\n reaction(\r\n () => this.countryRegionId,\r\n () => {\r\n this._getStateProvinces();\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.currentOperation,\r\n () => {\r\n this._getStateProvinces();\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.checkout.result?.shippingAddressFromExpressCheckout,\r\n () => {\r\n const locale = this._getLocale();\r\n if (!this.expressPaymentDetailsFromCartPage && this._canShip()) {\r\n let address = this.props.data.checkout.result?.shippingAddressFromExpressCheckout;\r\n\r\n if (address?.TwoLetterISORegionName) {\r\n const threeLetterIsoRegionName = this.getThreeLetterIsoRegionName(address.TwoLetterISORegionName);\r\n\r\n // eslint-disable-next-line security/detect-object-injection\r\n if (this.countriesAvail[locale].includes(threeLetterIsoRegionName)) {\r\n address = {\r\n ...address,\r\n ThreeLetterISORegionName: threeLetterIsoRegionName\r\n };\r\n\r\n if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\r\n this._onCountryChange(threeLetterIsoRegionName);\r\n }\r\n // eslint-disable-next-line security/detect-object-injection\r\n if (!this.countriesAvail[locale].includes(threeLetterIsoRegionName)) {\r\n address = {};\r\n } else if (locale === 'it' && threeLetterIsoRegionName === 'ITA') {\r\n address = {\r\n ...address,\r\n State: 'DEF',\r\n County: address?.State\r\n };\r\n } else if (['eu', 'enGB'].includes(locale)) {\r\n address = {\r\n ...address,\r\n State: ''\r\n };\r\n }\r\n\r\n this._updateCurrentOperation(AddressOperation.Add, address);\r\n this._onAddressAddUpdateSubmit();\r\n } else {\r\n this.hasError = true;\r\n this.addressActionResponse = {\r\n errorMessage: resources.notValidCountryError\r\n };\r\n this._updateCurrentOperation(AddressOperation.Update, {});\r\n this._updateModuleState();\r\n }\r\n }\r\n }\r\n }\r\n );\r\n\r\n if (autoSuggestionEnabled) {\r\n if (channel && !channel.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n return;\r\n }\r\n\r\n if (channel && !channel.BingMapsEnabled) {\r\n telemetry.error('Map is disabled from HQ.');\r\n return;\r\n }\r\n\r\n const options: IAutoSuggestOptions = { ...autoSuggestOptions };\r\n this.autoSuggest = new AutoSuggest(\r\n telemetry,\r\n options,\r\n channel?.BingMapsApiKey,\r\n channel?.ChannelCountryRegionISOCode,\r\n channel?.DefaultLanguageId\r\n );\r\n\r\n // Customer doesn't have any address. Then add view will be loaded directly. Code for the same to handle that\r\n if (\r\n this.props.data.storeSelectorStateManager.result &&\r\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\r\n ) {\r\n await this.autoSuggest._loadMapAPI(await this.props.data.storeSelectorStateManager);\r\n }\r\n\r\n reaction(\r\n () =>\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi &&\r\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update),\r\n async () => {\r\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.isMapApiLoaded,\r\n async () => {\r\n await this._attachMapAutoSuggest();\r\n }\r\n );\r\n }\r\n await this._initPickupGroup();\r\n }\r\n\r\n public async componentDidUpdate(): Promise {\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\r\n await this._attachMapAutoSuggest();\r\n }\r\n } else {\r\n this.autoSuggest?.disposeAutoSuggest();\r\n }\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: ICheckoutAddressProps, nextState: ICheckoutAddresState): boolean {\r\n if (this.state === nextState && this.props.data === nextProps.data) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (!this._canShip()) {\r\n return null;\r\n }\r\n\r\n const { config, context, renderView, resources } = this.props;\r\n const { headingImages, itemsText, singleItemText } = resources;\r\n const { imageSettings } = config;\r\n\r\n // Line images\r\n const cartlines: ICheckoutShippingCartLineInfo[] = this.state.shippingGroups\r\n .filter(x => !ObjectExtensions.isNullOrUndefined(x.product))\r\n .map(line => ({\r\n lineId: line.cartLine.LineId ?? '',\r\n imageProps: {\r\n requestContext: context.actionContext.requestContext,\r\n className: 'ms-checkout-shipping-address__group-images-lines-line-image',\r\n altText: line.product?.Name,\r\n src: line.product?.PrimaryImageUrl ?? '',\r\n fallBackSrc: getFallbackImageUrl(line.product?.ItemId, context.actionContext.requestContext.apiSettings),\r\n gridSettings: context.request.gridSettings!,\r\n imageSettings: imageSettings ?? defaultImageSettings,\r\n loadFailureBehavior: 'empty'\r\n },\r\n quantity: line.cartLine.Quantity ?? 0\r\n }));\r\n\r\n const quantity = 1;\r\n const itemText = cartlines.length > quantity ? itemsText : singleItemText;\r\n\r\n const lineImageProps: ICheckoutShippingCartLinesProps = {\r\n moduleClassName: 'ms-checkout-shipping-address',\r\n cartLines: cartlines.filter(x => !ObjectExtensions.isNullOrUndefined(x)),\r\n itemTitle: `(${format(itemText, cartlines.length)})`,\r\n title: headingImages,\r\n resources: this.props.resources\r\n };\r\n\r\n const cartLineImages: React.ReactNode = ;\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const { featureState } = this.props.data;\r\n const isRetailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\r\n ?.IsEnabled;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n currentOperation: this.currentOperation,\r\n selectedAddress: this.selectedAddress,\r\n addUpdateAddress: this.addUpdateAddress,\r\n addressListSelectedAddress: this.addressListSelectedAddress,\r\n countryRegionId: this.countryRegionId,\r\n stateProvinceInfo: this.stateProvinceInfo,\r\n customerAddresses: this.customerAddresses,\r\n validationError: this.validationError,\r\n addressActionResponse: this.addressActionResponse,\r\n isUpdating: this.isUpdating,\r\n hasError: this.hasError,\r\n className: config.className,\r\n viewState: {\r\n isShowAddress: this.currentOperation === AddressOperation.Show && this.selectedAddress,\r\n isShowAddresList: this.currentOperation === AddressOperation.List && this.customerAddresses.length > 0,\r\n isShowAddOrUpdateAddress:\r\n this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update\r\n },\r\n CheckoutShippingAddress: {\r\n moduleProps: this.props,\r\n className: classnames('ms-checkout-shipping-address', config.className)\r\n },\r\n showAddress: this._renderShowAddress(),\r\n\r\n /**\r\n * Show address select.\r\n * @param onAddAddressHandler - On add address click function.\r\n * @param onSaveHandler - On save click function.\r\n * @param onCancelHandler - On cancel click function.\r\n * @returns - Renders select address.\r\n */\r\n showAddressSelectHandler: (onAddAddressHandler?: () => void, onSaveHandler?: () => void, onCancelHandler?: () => void) =>\r\n this._renderSelectAddress(onAddAddressHandler, onSaveHandler, onCancelHandler),\r\n\r\n /**\r\n * Show add/update address.\r\n * @param onSaveHandler - On save click function.\r\n * @param onCancelHandler - On cancel click function.\r\n * @returns - Renders select address.\r\n */\r\n showAddOrUpdateAddressHandler: (onSaveHandler?: () => void, onCancelHandler?: () => void) =>\r\n this._renderAddOrUpdateAddress(onSaveHandler, onCancelHandler),\r\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress(),\r\n cartLineImages: isRetailMultiplePickUpOptionEnabled ? cartLineImages : undefined,\r\n showAddressSelect: this._renderSelectAddress()\r\n };\r\n\r\n return renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Initialize pickup group.\r\n */\r\n @action\r\n private readonly _initPickupGroup = async (): Promise => {\r\n const pickupCartLines: CartLine[] = this._getCartLinesforDelivery();\r\n const cartLines: ICartLineWithProduct[] = [];\r\n\r\n try {\r\n const products = await this._getProductsByCartLines(\r\n this.props.data.checkout.result?.checkoutCart.cart.ChannelId || 0,\r\n pickupCartLines\r\n );\r\n for (const line of pickupCartLines) {\r\n const product: SimpleProduct | undefined = products.find(x => x.RecordId === line.ProductId);\r\n cartLines.push({ cartLine: line, product });\r\n }\r\n this.setState({ shippingGroups: cartLines });\r\n } catch (error) {\r\n // @ts-ignore\r\n this.props.telemetry.error(error);\r\n this.setState({ shippingGroups: [] });\r\n }\r\n };\r\n\r\n /**\r\n * On suggestion selected.\r\n * @param result - Suggestion result interface.\r\n */\r\n @action\r\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\r\n this._clearAddressFields();\r\n const address = this.addressFormat.getTranformedAddress(result, this.stateProvinceInfo);\r\n const timeout = 0;\r\n set(this.addUpdateAddress, { Street: '' });\r\n set(this.addUpdateAddress, { ZipCode: address.ZipCode });\r\n set(this.addUpdateAddress, { CountyName: address.CountyName });\r\n set(this.addUpdateAddress, { City: address.City });\r\n set(this.addUpdateAddress, { State: 'DEF' });\r\n set(this.addUpdateAddress, { DistrictName: address.DistrictName });\r\n set(this.addUpdateAddress, { FullAddress: address.FullAddress });\r\n set(this.addUpdateAddress, { County: address.County });\r\n\r\n // Bing autosuggest put the complete address in the Street input box. Updating the street input box to show only street address.\r\n setTimeout(() => {\r\n set(this.addUpdateAddress, { Street: address.Street });\r\n }, timeout);\r\n };\r\n\r\n /**\r\n * Method to clear address fields.\r\n */\r\n @action\r\n private readonly _clearAddressFields = (): void => {\r\n const addressFormatItem = this.addressFormat.getAddressFormat(\r\n this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\r\n );\r\n for (const formatAddress of addressFormatItem) {\r\n if (\r\n this.addUpdateAddress[formatAddress.name] !== undefined &&\r\n !this.autoSuggest?.excludedAddressFields.includes(formatAddress.name)\r\n ) {\r\n this.addressFormat[formatAddress.name] = '';\r\n }\r\n }\r\n this._clearValidation();\r\n };\r\n\r\n /**\r\n * Method to clear validation.\r\n */\r\n @action\r\n private readonly _clearValidation = (): void => {\r\n this.validationError = {};\r\n };\r\n\r\n public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const properties =\r\n this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\r\n ?.StringValue ?? '';\r\n\r\n return properties ? (JSON.parse(properties) as IExpressPaymentDetails) : null;\r\n }\r\n\r\n /**\r\n * Method data initialization.\r\n * @param props -The checkout address properties.\r\n */\r\n private readonly _dataInitialize = (props: ICheckoutAddressProps): void => {\r\n const { data } = props;\r\n\r\n reaction(\r\n () => data.countryRegions.result,\r\n () => {\r\n this.countryRegions = data.countryRegions.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.addressPurposes.result,\r\n () => {\r\n this.addressPurposes = data.addressPurposes.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.address.result,\r\n () => {\r\n this.customerAddresses = data.address.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.countryStates.result,\r\n () => {\r\n this.stateProvinceInfo = data.countryStates.result ?? [];\r\n }\r\n );\r\n\r\n reaction(\r\n () => data.featureState.result,\r\n () => {\r\n this.retailMultiplePickUpOptionEnabled = data.featureState.result?.find(\r\n feature => feature.Name === this.multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n }\r\n );\r\n };\r\n\r\n /**\r\n * Method to get cart lines for delivery.\r\n * @returns The cart line collection.\r\n */\r\n private readonly _getCartLinesforDelivery = (): CartLine[] => {\r\n return this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(line => this._isDelivery(line)) ?? [];\r\n };\r\n\r\n /**\r\n * Method to check cart line for delivery.\r\n * @param line -The cart line.\r\n * @returns True/false as per cart line delivery mode.\r\n */\r\n private readonly _isDelivery = (line: CartLine): boolean => {\r\n return this._isNotPickupMode(line.DeliveryMode) && (line.FulfillmentStoreId === undefined || line.FulfillmentStoreId === '');\r\n };\r\n\r\n /**\r\n * Method to check cart line for delivery.\r\n * @param deliveryMode -The delivery mode.\r\n * @returns True/false as per cart line delivery mode.\r\n */\r\n private readonly _isNotPickupMode = (deliveryMode: string | undefined): boolean => {\r\n const pickupDeliveryModeCode = this.props.context.request.channel?.PickupDeliveryModeCode;\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const { channelDeliveryOptionConfig, featureState } = this.props.data;\r\n const retailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\r\n ?.IsEnabled;\r\n if (retailMultiplePickUpOptionEnabled && deliveryMode !== undefined) {\r\n const pickupDeliveryMode = channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.some(\r\n pickupMode => pickupMode !== deliveryMode\r\n );\r\n return pickupDeliveryMode !== undefined ? pickupDeliveryMode : false;\r\n }\r\n return deliveryMode !== undefined && pickupDeliveryModeCode !== undefined && deliveryMode !== pickupDeliveryModeCode;\r\n };\r\n\r\n /**\r\n * Method to check cart line for delivery.\r\n * @param channelId - The channelId.\r\n * @param cartLines - Cart line collections.\r\n * @returns Collection of SimpleProduct.\r\n */\r\n private readonly _getProductsByCartLines = async (channelId: number, cartLines: CartLine[]): Promise => {\r\n const actionContext = this.props.context.actionContext;\r\n const productInputs = cartLines\r\n .filter(line => !ObjectExtensions.isNullOrUndefined(line.ProductId))\r\n .map(\r\n line =>\r\n new ProductInput(\r\n line.ProductId || 0,\r\n actionContext.requestContext.apiSettings,\r\n channelId,\r\n undefined,\r\n actionContext.requestContext\r\n )\r\n );\r\n return getSimpleProducts(productInputs, actionContext);\r\n };\r\n\r\n /**\r\n * Method to render add/update address.\r\n * @param onSaveHandler -- Handles onsave functionality.\r\n * @param onCancelHandler -- Handles oncancel functionality.\r\n * @returns Address app/update props.\r\n */\r\n private readonly _renderAddOrUpdateAddress = (onSaveHandler?: () => void, onCancelHandler?: () => void): IAddressAddUpdateProps => {\r\n const addressFormat =\r\n this.currentOperation === AddressOperation.Add && this.addressCommon.isAuthenticatedFlow()\r\n ? this.addressFormat\r\n : this.addressFormat;\r\n\r\n /**\r\n * On Cancel Button Function.\r\n */\r\n const onCancelButtonHandler = () => {\r\n this._resetView();\r\n onCancelHandler?.();\r\n };\r\n return AddressAddUpdate({\r\n isUpdating: this.isUpdating,\r\n resources: this.resources,\r\n addressType: AddressType.Shipping,\r\n addressFormat: addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId),\r\n defaultCountryRegionId: this.countryRegionId,\r\n defaultAddressType: this.defaultAddressType,\r\n selectedAddress: this.addUpdateAddress,\r\n validationError: this.validationError,\r\n hasError: this.hasError,\r\n addressActionResponse: this.addressActionResponse,\r\n telemetryContent: this.telemetryContent,\r\n dropdownDisplayData: addressFormat.getPrefilledAddressDropdownData(\r\n this.resources.addressStateDefaultSelectionText,\r\n this.stateProvinceInfo\r\n ),\r\n onInputChange: this._onAddressAddUpdateInputChange,\r\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\r\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\r\n\r\n /**\r\n * On Save Function.\r\n */\r\n onSave: () => {\r\n this.onSubmit();\r\n onSaveHandler?.();\r\n },\r\n\r\n onCancel: !this.selectedAddress && !this.addressCommon.isAuthenticatedFlow() ? () => {} : onCancelButtonHandler\r\n });\r\n };\r\n\r\n /**\r\n * Method to render select address.\r\n * @param onAddAddressHandler - To handle add address button click.\r\n * @param onSaveHandler - To handle save button click.\r\n * @param onCancelHandler - To handle cancel button click.\r\n * @returns Select address props.\r\n */\r\n private readonly _renderSelectAddress = (\r\n onAddAddressHandler?: () => void,\r\n onSaveHandler?: () => void,\r\n onCancelHandler?: () => void\r\n ): IAddressSelectProps => {\r\n /**\r\n * On Cancel Button Function.\r\n */\r\n const onCancelButtonHandler = () => {\r\n this._resetView();\r\n onCancelHandler?.();\r\n };\r\n return AddressSelect({\r\n addressFormat: this.addressFormat,\r\n addresses: this.customerAddresses,\r\n resources: this.resources,\r\n addressPurposes: this.addressPurposes,\r\n selectedAddress: this.addressListSelectedAddress,\r\n onAddressOptionChange: this._onAddressOptionChange,\r\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\r\n telemetryContent: this.telemetryContent,\r\n\r\n /**\r\n * On Add Address Function.\r\n */\r\n onAddAddress: () => {\r\n this._goToAddAddress();\r\n onAddAddressHandler?.();\r\n },\r\n\r\n /**\r\n * On Save Function.\r\n */\r\n onSave: () => {\r\n this._onSelectAddress();\r\n onSaveHandler?.();\r\n },\r\n\r\n onCancel: !this.selectedAddress ? () => {} : onCancelButtonHandler\r\n });\r\n };\r\n\r\n /**\r\n * Method to render show address.\r\n * @returns Show address props.\r\n */\r\n private _renderShowAddress(): IAddressShowProps | null {\r\n if (this.selectedAddress) {\r\n return AddressShow({\r\n address: this.selectedAddress,\r\n addressFormat: this.addressFormat.getAddressFormat(this.selectedAddress.ThreeLetterISORegionName || ''),\r\n addressPurposes: this.addressPurposes\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Method to render map auto suggest.\r\n */\r\n private readonly _attachMapAutoSuggest = async (): Promise => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager?.isMapApiLoaded) {\r\n this.autoSuggest?.attachAutoSuggest('#shipping_addressstreet', '#shipping_addressstreet_container', this._onSuggestionSelected);\r\n }\r\n };\r\n\r\n /**\r\n * Method gets called on address option change.\r\n * @param event - To get current option.\r\n */\r\n private readonly _onAddressOptionChange = (event: React.ChangeEvent) => {\r\n const addressRecordId = event.currentTarget.value;\r\n const selectedAddress = this.customerAddresses.find(address => (address.RecordId || '').toString() === addressRecordId);\r\n if (selectedAddress) {\r\n this.addressListSelectedAddress = selectedAddress;\r\n }\r\n };\r\n\r\n /**\r\n * Method to render map auto suggest.\r\n * @param name - Address name field.\r\n * @param value - Address name value field.\r\n */\r\n private readonly onAddressAddUpdate = (name: string, value: string | boolean) => {\r\n const locale = this.props?.context?.request?.locale;\r\n if (locale === 'it') {\r\n set(this.addUpdateAddress, { State: 'DEF' });\r\n }\r\n set(this.addUpdateAddress, { [name]: value });\r\n this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId, name);\r\n };\r\n\r\n /**\r\n * Method to get called on address update change.\r\n * @param event - Input element.\r\n */\r\n private readonly _onAddressAddUpdateInputChange = (event: React.ChangeEvent): void => {\r\n if (event.target.type === 'checkbox') {\r\n this.onAddressAddUpdate(event.target.name, event.target.checked);\r\n } else {\r\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\r\n this.onAddressAddUpdate(event.target.name, value);\r\n }\r\n };\r\n\r\n /**\r\n * Method to get called on address update dropdown change.\r\n * @param event - Select element.\r\n */\r\n private readonly _onAddressAddUpdateDropdownChange = (event: React.ChangeEvent): void => {\r\n this.onAddressAddUpdate(event.target.name, event.target.value);\r\n\r\n if (event.target.name === AddressItemType[AddressItemType.ThreeLetterISORegionName]) {\r\n this._onCountryChange(event.target.value);\r\n }\r\n };\r\n\r\n /**\r\n * Method to get called on address update submit.\r\n */\r\n private readonly _onAddressAddUpdateSubmit = (): void => {\r\n if (!this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId)) {\r\n return;\r\n }\r\n\r\n const provinceSelect = document.getElementById('shipping_addresscounty') as HTMLInputElement;\r\n\r\n if (!provinceSelect) {\r\n this.addUpdateAddress.County = undefined;\r\n }\r\n\r\n let response: Promise;\r\n if (this.addressCommon.isAuthenticatedFlow() && this._isNewAddress(this.addUpdateAddress)) {\r\n response =\r\n this.currentOperation === AddressOperation.Update\r\n ? this.addressCommon.updateCustomerAddress(this.addUpdateAddress)\r\n : this.addressCommon.addCustomerAddress(this.addUpdateAddress);\r\n } else {\r\n response = Promise.resolve({ address: this.addUpdateAddress });\r\n }\r\n\r\n this.isUpdating = true;\r\n this._updateModuleState();\r\n\r\n response.then(\r\n (result: IAddressResponse) => {\r\n this.isUpdating = false;\r\n\r\n let newAddress = result.address;\r\n\r\n // @TODO: Remove comment for fix existing address issue\r\n // if (result.customerAddresses) {\r\n // for (const existingAddress of result.customerAddresses) {\r\n // if (\r\n // (this.addUpdateAddress.Name ?? '') === existingAddress.Name &&\r\n // (this.addUpdateAddress.Street ?? '') === existingAddress.Street &&\r\n // (this.addUpdateAddress.StreetNumber ?? '') === existingAddress.StreetNumber &&\r\n // (this.addUpdateAddress.City ?? '') === existingAddress.City &&\r\n // (this.addUpdateAddress.State ?? '') === existingAddress.State &&\r\n // (this.addUpdateAddress.ZipCode ?? '') === existingAddress.ZipCode &&\r\n // (this.addUpdateAddress.Phone ?? '') === existingAddress.Phone &&\r\n // (this.addUpdateAddress.ThreeLetterISORegionName ?? '') === existingAddress.ThreeLetterISORegionName &&\r\n // (this.addUpdateAddress.AddressTypeValue ?? '') === existingAddress.AddressTypeValue\r\n // ) {\r\n // newAddress = existingAddress;\r\n // break;\r\n // }\r\n // }\r\n // }\r\n\r\n newAddress = { ...newAddress, ...this.addUpdateAddress };\r\n\r\n if (result.address) {\r\n this.hasError = false;\r\n if (result.customerAddresses) {\r\n this._onAddOrUpdateSuccess({\r\n customerAddresses: result.customerAddresses,\r\n address: newAddress\r\n });\r\n } else {\r\n this._onAddOrUpdateSuccess({ address: newAddress });\r\n }\r\n } else {\r\n this.hasError = true;\r\n this.addressActionResponse = result;\r\n this._updateModuleState();\r\n }\r\n },\r\n () => {\r\n this.hasError = true;\r\n this.isUpdating = false;\r\n this._updateModuleState();\r\n }\r\n );\r\n };\r\n\r\n /**\r\n * Method to get called on country change.\r\n * @param countryRegionId - Country region id.\r\n */\r\n private readonly _onCountryChange = (countryRegionId: string) => {\r\n this.countryRegionId = countryRegionId;\r\n const twoLetterIsoRegionName = this.addressFormat.getTwoLetterISORegionName(countryRegionId);\r\n set(this.addUpdateAddress, { ThreeLetterISORegionName: countryRegionId });\r\n set(this.addUpdateAddress, {\r\n TwoLetterISORegionName: twoLetterIsoRegionName\r\n });\r\n this.autoSuggest?.changeAutoSuggestionCountryCode(twoLetterIsoRegionName);\r\n this._clearAddressFields();\r\n };\r\n\r\n /**\r\n * Method to get all address format exclude list.\r\n * @returns Collection of address items.\r\n */\r\n private readonly _getAddressFormatExcludeList = (): AddressItemType[] => {\r\n const { config } = this.props;\r\n const addressFormatExcludeList: AddressItemType[] = [];\r\n\r\n if (!config.showAddressType) {\r\n addressFormatExcludeList.push(AddressItemType.AddressTypeValue);\r\n }\r\n\r\n addressFormatExcludeList.push(AddressItemType.IsPrimary);\r\n\r\n return addressFormatExcludeList;\r\n };\r\n\r\n /**\r\n * Method to get all state/provinces.\r\n */\r\n private readonly _getStateProvinces = (): void => {\r\n if (\r\n !this.countryRegionId ||\r\n !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\r\n ) {\r\n return;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.addressCommon.getStateProvinces(this.countryRegionId).then((result: StateProvinceInfo[]) => {\r\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\r\n\r\n // Reset state if selected state not found in the list.\r\n if (!stateInfo) {\r\n set(this.addUpdateAddress, { State: '' });\r\n }\r\n\r\n this.stateProvinceInfo = result;\r\n });\r\n };\r\n\r\n /**\r\n * Method to set default country region id.\r\n */\r\n private _setDefaultCountryRegionId(): void {\r\n const { request } = this.props.context;\r\n const market = request.channel?.ChannelCountryRegionISOCode;\r\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\r\n }\r\n\r\n /**\r\n * Method to get default address region id.\r\n * @returns - Address object from existing addresses.\r\n */\r\n private readonly _getDefaultAddress = (): Address | undefined => {\r\n if (this.customerAddresses) {\r\n const primaryAddress = this.customerAddresses.find((address: Address) => address.IsPrimary);\r\n return primaryAddress || (this.customerAddresses.length > 0 ? this.customerAddresses[0] : undefined);\r\n }\r\n return undefined;\r\n };\r\n\r\n /**\r\n * Method to get address from express payment details from cart page.\r\n * @returns - Address.\r\n */\r\n private readonly _getAddressFromCartExpressPaymentDetails = (): Address | undefined => {\r\n if (this.expressPaymentDetailsFromCartPage) {\r\n const { tokenizedPaymentCard, address, isExpressAddressAppliedInCartPage } = this.expressPaymentDetailsFromCartPage;\r\n\r\n let addressFromCartExpress: Address | undefined;\r\n\r\n if (isExpressAddressAppliedInCartPage) {\r\n addressFromCartExpress = address ? this.getExpressAddress(address) : undefined;\r\n } else {\r\n addressFromCartExpress = tokenizedPaymentCard ? this.getAddressFromTokenizedPaymentCard(tokenizedPaymentCard) : undefined;\r\n }\r\n\r\n /* const locale = this._getLocale();\r\n if (\r\n !this.countriesAvail[locale].includes(\r\n addressFromCartExpress?.ThreeLetterISORegionName\r\n )\r\n ) {\r\n addressFromCartExpress = {};\r\n } else if (\r\n locale === \"it\" &&\r\n addressFromCartExpress?.ThreeLetterISORegionName === \"ITA\"\r\n ) {\r\n addressFromCartExpress = {\r\n ...addressFromCartExpress,\r\n State: \"DEF\",\r\n County: addressFromCartExpress?.State\r\n };\r\n } else if (locale === \"eu\") {\r\n addressFromCartExpress = {\r\n ...addressFromCartExpress,\r\n State: \"\"\r\n };\r\n } */\r\n\r\n const locale = this._getLocale();\r\n if (addressFromCartExpress?.TwoLetterISORegionName) {\r\n const threeLetterIsoRegionName = this.getThreeLetterIsoRegionName(addressFromCartExpress.TwoLetterISORegionName);\r\n\r\n // eslint-disable-next-line security/detect-object-injection\r\n if (this.countriesAvail[locale].includes(threeLetterIsoRegionName)) {\r\n addressFromCartExpress = {\r\n ...addressFromCartExpress,\r\n ThreeLetterISORegionName: threeLetterIsoRegionName\r\n };\r\n\r\n if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\r\n this._onCountryChange(threeLetterIsoRegionName);\r\n }\r\n // eslint-disable-next-line security/detect-object-injection\r\n if (!this.countriesAvail[locale].includes(threeLetterIsoRegionName)) {\r\n addressFromCartExpress = {};\r\n } else if (locale === 'it' && threeLetterIsoRegionName === 'ITA') {\r\n addressFromCartExpress = {\r\n ...addressFromCartExpress,\r\n State: 'DEF',\r\n County: addressFromCartExpress?.State\r\n };\r\n } else if (['eu', 'enGB'].includes(locale)) {\r\n addressFromCartExpress = {\r\n ...addressFromCartExpress,\r\n State: ''\r\n };\r\n }\r\n\r\n this._updateCurrentOperation(AddressOperation.Add, addressFromCartExpress);\r\n this._onAddressAddUpdateSubmit();\r\n } else {\r\n this.hasError = true;\r\n this.addressActionResponse = {\r\n errorMessage: this.props.resources.notValidCountryError\r\n };\r\n this._updateCurrentOperation(AddressOperation.Update, {});\r\n this._updateModuleState();\r\n }\r\n }\r\n\r\n return addressFromCartExpress;\r\n }\r\n return undefined;\r\n };\r\n\r\n /**\r\n * Get address from tokenizedPaymentCard.\r\n * @param tokenizedPaymentCard -- The tokenizedPaymentCard from the payment.\r\n * @returns The address.\r\n */\r\n private readonly getAddressFromTokenizedPaymentCard = (tokenizedPaymentCard: TokenizedPaymentCard): Address => {\r\n const twoLetterIsoRegionName = tokenizedPaymentCard.Country;\r\n\r\n const threeLetterIsoRegionName = twoLetterIsoRegionName ? this.getThreeLetterIsoRegionName(twoLetterIsoRegionName) : undefined;\r\n\r\n if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\r\n this._onCountryChange(threeLetterIsoRegionName);\r\n }\r\n\r\n const address: Address = {\r\n TwoLetterISORegionName: twoLetterIsoRegionName,\r\n Name: tokenizedPaymentCard.NameOnCard,\r\n Street: tokenizedPaymentCard.Address1,\r\n StreetNumber: tokenizedPaymentCard.Address2,\r\n City: tokenizedPaymentCard.City,\r\n State: tokenizedPaymentCard.State,\r\n ZipCode: tokenizedPaymentCard.Zip,\r\n Phone: tokenizedPaymentCard.Phone,\r\n ThreeLetterISORegionName: threeLetterIsoRegionName,\r\n AddressTypeValue: this.defaultAddressType\r\n };\r\n\r\n return address;\r\n };\r\n\r\n /**\r\n * Get address from expressAddress.\r\n * @param expressAddress -- The expressAddress.\r\n * @returns The address.\r\n */\r\n private readonly getExpressAddress = (expressAddress: Address): Address => {\r\n const twoLetterIsoRegionName = expressAddress.TwoLetterISORegionName;\r\n const threeLetterIsoRegionName = twoLetterIsoRegionName ? this.getThreeLetterIsoRegionName(twoLetterIsoRegionName) : undefined;\r\n\r\n if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\r\n this._onCountryChange(threeLetterIsoRegionName);\r\n }\r\n\r\n const address: Address = {\r\n ...expressAddress,\r\n ThreeLetterISORegionName: threeLetterIsoRegionName,\r\n AddressTypeValue: this.defaultAddressType\r\n };\r\n\r\n return address;\r\n };\r\n\r\n /**\r\n * Get three letter ISO region name from two letter ISO region name.\r\n * @param twoLetterIsoRegionName -- The three letter ISO region name.\r\n * @returns The three letter ISO region name.\r\n */\r\n private readonly getThreeLetterIsoRegionName = (twoLetterIsoRegionName: string): string | undefined => {\r\n const countryRegion = this.countryRegions.find(country => {\r\n return country.ISOCode?.toLowerCase() === twoLetterIsoRegionName.toLowerCase();\r\n });\r\n\r\n return countryRegion?.CountryRegionId;\r\n };\r\n\r\n /**\r\n * Method to initialize all module state.\r\n */\r\n private readonly _initModuleState = (): void => {\r\n this.props.moduleState.init({\r\n status: this._canShip() ? 'updating' : 'disabled',\r\n onEdit: this.onEdit,\r\n onCancel: this.onCancel,\r\n onSubmit: this.onSubmit\r\n });\r\n\r\n const checkoutState = this.props.data.checkout.result;\r\n\r\n if (this._canShip()) {\r\n let defaultAddress;\r\n\r\n if (checkoutState?.checkoutCart.cart.ShippingAddress) {\r\n defaultAddress = checkoutState.checkoutCart.cart.ShippingAddress;\r\n } else if (this._getAddressFromCartExpressPaymentDetails()) {\r\n defaultAddress = this._getAddressFromCartExpressPaymentDetails();\r\n } else if (this._getDefaultAddress()) {\r\n defaultAddress = this._getDefaultAddress();\r\n } else {\r\n defaultAddress = checkoutState?.isExpressCheckoutApplied ? checkoutState.shippingAddressFromExpressCheckout : undefined;\r\n }\r\n\r\n if (defaultAddress && !this.addressCommon.isEmpty(defaultAddress)) {\r\n this._updateCurrentOperation(AddressOperation.Show, defaultAddress);\r\n this._setShippingAddress(defaultAddress);\r\n this._updateModuleState();\r\n checkoutState?.updateHasShippingAddress({\r\n newHasShippingAddress: true\r\n });\r\n } else {\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n checkoutState?.updateHasShippingAddress({\r\n newHasShippingAddress: false\r\n });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Method get called on submit address.\r\n */\r\n private readonly onSubmit = (): void => {\r\n switch (this.currentOperation) {\r\n case AddressOperation.Add:\r\n case AddressOperation.Update:\r\n this.props.telemetry.information('Shipping address submit for Add or Update operation.');\r\n this._onAddressAddUpdateSubmit();\r\n break;\r\n case AddressOperation.List:\r\n this.props.telemetry.information('Shipping address submit for List operation.');\r\n this._onSelectAddress();\r\n break;\r\n default:\r\n this.props.telemetry.error('Invalid operation');\r\n }\r\n };\r\n\r\n /**\r\n * Method get called on cancel.\r\n */\r\n private readonly onCancel = (): void => {\r\n switch (this.currentOperation) {\r\n case AddressOperation.Add:\r\n case AddressOperation.Update:\r\n this.props.telemetry.information('Shipping address cancel for Add or Update operation.');\r\n this._clearAddressFields();\r\n if (!(!this.selectedAddress && !this.addressCommon.isAuthenticatedFlow())) {\r\n this._resetView();\r\n } else {\r\n this.hasError = false;\r\n this.addressActionResponse = {};\r\n this._updateModuleState();\r\n }\r\n\r\n break;\r\n case AddressOperation.List:\r\n this.props.telemetry.information('Shipping address cancel for List operation.');\r\n if (this.selectedAddress) {\r\n this._resetView();\r\n } else {\r\n this.hasError = false;\r\n this.addressActionResponse = {};\r\n this._updateModuleState();\r\n }\r\n break;\r\n default:\r\n this.props.telemetry.error('Invalid operation');\r\n }\r\n };\r\n\r\n /**\r\n * Method get called on edit address.\r\n */\r\n private readonly onEdit = (): void => {\r\n this.props.telemetry.information('Shipping address onEdit is called.');\r\n\r\n if (this.addressCommon.isAuthenticatedFlow() && this.shippingAddress) {\r\n this._updateCurrentOperation(AddressOperation.List, this.shippingAddress);\r\n } else if (this.shippingAddress) {\r\n this._updateCurrentOperation(AddressOperation.Update, this.shippingAddress);\r\n }\r\n\r\n this._updateModuleState();\r\n };\r\n\r\n /**\r\n * Method to check if checkout cartlines are available fro shipping.\r\n * @returns - True/false as per the delivery mode.\r\n */\r\n private readonly _canShip = (): boolean => {\r\n const { checkout, channelDeliveryOptionConfig } = this.props.data;\r\n const { request } = this.props.context;\r\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\r\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\r\n if (!checkout.result || !request.channel || checkout.result.checkoutCart.isEmpty || checkout.result.checkoutCart.hasInvoiceLine) {\r\n return false;\r\n }\r\n\r\n // @ts-expect-error: Type-checker not realizing above request.channel check\r\n return this.retailMultiplePickUpOptionEnabled\r\n ? checkout.result.checkoutCart.cart.CartLines?.some(cartLine =>\r\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\r\n ? cartLine.DeliveryMode !==\r\n channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.find(\r\n deliveryMode => deliveryMode === cartLine.DeliveryMode\r\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\r\n : cartLine\r\n )\r\n : checkout.result.checkoutCart.cart.CartLines?.some(cartLine =>\r\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\r\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\r\n : cartLine\r\n );\r\n };\r\n\r\n /**\r\n * Method get called on select address.\r\n */\r\n private readonly _onSelectAddress = () => {\r\n this._updateCurrentOperation(AddressOperation.Show, this.addressListSelectedAddress);\r\n this._setShippingAddress(this.addressListSelectedAddress);\r\n this._updateModuleState();\r\n };\r\n\r\n /**\r\n * Method get called on goto add address.\r\n */\r\n private readonly _goToAddAddress = () => {\r\n this._setDefaultCountryRegionId();\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n };\r\n\r\n /**\r\n * Method get called on add/update success.\r\n * @param response - Retail api response.\r\n */\r\n private readonly _onAddOrUpdateSuccess = (response: IAddressResponse) => {\r\n if (response.customerAddresses) {\r\n this.customerAddresses = response.customerAddresses;\r\n }\r\n\r\n if (response.address) {\r\n this._updateCurrentOperation(AddressOperation.Show, response.address);\r\n this._setShippingAddress(response.address);\r\n this._updateModuleState();\r\n }\r\n };\r\n\r\n /**\r\n * Method get called on set Shipping Address.\r\n * @param address - Retail Api address result.\r\n */\r\n private readonly _setShippingAddress = (address: Address): void => {\r\n if (this.props.data.checkout.result) {\r\n const newShippingAddress = { ...address };\r\n\r\n if (address.ThreeLetterISORegionName && !newShippingAddress.TwoLetterISORegionName) {\r\n newShippingAddress.TwoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(address.ThreeLetterISORegionName);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.props.data.checkout.result.updateShippingAddress({\r\n newShippingAddress\r\n });\r\n this.props.data.checkout.result.checkoutCart.updateShippingAddress({ newShippingAddress }).catch(error => {\r\n this.props.telemetry.error(error);\r\n });\r\n }\r\n };\r\n\r\n @computed private get shippingAddress(): Address | undefined {\r\n return this.props.data.checkout.result?.shippingAddress;\r\n }\r\n\r\n /**\r\n * Method get called on reset view.\r\n */\r\n private readonly _resetView = (): void => {\r\n switch (this.currentOperation) {\r\n case AddressOperation.Add:\r\n case AddressOperation.Update:\r\n this._updateCurrentOperation(\r\n this.addressCommon.isAuthenticatedFlow() ? AddressOperation.List : AddressOperation.Show,\r\n this.shippingAddress\r\n );\r\n break;\r\n default:\r\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\r\n }\r\n this.hasError = false;\r\n this.addressActionResponse = {};\r\n this._updateModuleState();\r\n };\r\n\r\n /**\r\n * Update current operation.\r\n * @param operation - The address operation.\r\n * @param selectedAddress - The selected address.\r\n */\r\n private readonly _updateCurrentOperation = (operation: AddressOperation, selectedAddress?: Address) => {\r\n this.currentOperation = operation;\r\n this.selectedAddress = selectedAddress;\r\n\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n this.addUpdateAddress = { ...this.selectedAddress } || {};\r\n set(this.addUpdateAddress, {\r\n ThreeLetterISORegionName: this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\r\n });\r\n set(this.addUpdateAddress, {\r\n AddressTypeValue: this.addUpdateAddress.AddressTypeValue || this.defaultAddressType\r\n });\r\n } else if (this.currentOperation === AddressOperation.List) {\r\n this.addressListSelectedAddress = { ...this.selectedAddress } || {};\r\n }\r\n };\r\n\r\n /**\r\n * Update module state.\r\n */\r\n private readonly _updateModuleState = () => {\r\n if (this.currentOperation === AddressOperation.Show) {\r\n this.props.moduleState.onReady();\r\n } else if (this.isUpdating) {\r\n this.props.moduleState.onPending();\r\n } else {\r\n this.props.moduleState.onUpdating();\r\n }\r\n };\r\n\r\n /**\r\n * Method to check if the customer already has the address.\r\n * @param address - The address.\r\n */\r\n private readonly _isNewAddress = (address: Address): boolean => {\r\n for (const existingAddress of this.customerAddresses) {\r\n if (\r\n (address.Name ?? '') === existingAddress.Name &&\r\n (address.Street ?? '') === existingAddress.Street &&\r\n (address.StreetNumber ?? '') === existingAddress.StreetNumber &&\r\n (address.City ?? '') === existingAddress.City &&\r\n (address.State ?? '') === existingAddress.State &&\r\n (address.ZipCode ?? '') === existingAddress.ZipCode &&\r\n (address.Phone ?? '') === existingAddress.Phone &&\r\n (address.ThreeLetterISORegionName ?? '') === existingAddress.ThreeLetterISORegionName &&\r\n (address.AddressTypeValue ?? '') === existingAddress.AddressTypeValue\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n /**\r\n * Method ti get locale.\r\n */\r\n private readonly _getLocale = (): string => {\r\n // @ts-ignore\r\n const localeString = this.props?.context?.request?.locale;\r\n // @ts-ignore\r\n const sitePath = this.props?.context?.request?.sitePath;\r\n const europe = ['/fr', '/de'];\r\n // @ts-ignore\r\n const currency =\r\n // @ts-ignore\r\n this.props?.context?.request?.channel?.Currency;\r\n const locale =\r\n sitePath && europe.includes(sitePath)\r\n ? 'eu'\r\n : currency === 'EUR' && localeString === 'en-GB'\r\n ? 'eu'\r\n : localeString.replace('-', '');\r\n return locale;\r\n };\r\n}\r\n\r\nexport default CheckoutShippingAddress;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IAddressAddItem, IAddressAddUpdateProps } from '@msdyn365-commerce-modules/address';\r\nimport { IAddressSelectItem, IAddressSelectProps } from '@msdyn365-commerce-modules/address';\r\nimport { IAddressShowItem, IAddressShowProps } from '@msdyn365-commerce-modules/address';\r\nimport { ICheckoutShippingAddressViewProps } from './checkout-express-shipping-address';\r\nimport { convert_a2_to_a3 } from '../../themes/venchi/utils/convert_a2_a3';\r\n\r\n/**\r\n * Address show component.\r\n * @param param0 - Root param.\r\n * @param param0.AddressDetail - Address detail.\r\n * @param param0.items - IAddressShowItem[].\r\n * @returns - Address Node.\r\n */\r\nconst AddressShow: React.FC = ({ AddressDetail, items }) => {\r\n return (\r\n \r\n {items.map((item: IAddressShowItem) => {\r\n return <>{item.description};\r\n })}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Address Select Component.\r\n * @param param0 - Root param.\r\n * @param param0.SelectAddress - Select address.\r\n * @param param0.addButton - Add button.\r\n * @param param0.items - IAddressSelectItem[].\r\n * @param param0.isShowSaveButton - Boolean.\r\n * @param param0.saveButton - Save button.\r\n * @param param0.isShowCancelButton - Boolean.\r\n * @param param0.cancelButton - Cancel button.\r\n * @returns - SelectAddress Node.\r\n */\r\nconst AddressSelect: React.FC = ({\r\n SelectAddress,\r\n addButton,\r\n items,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton\r\n}) => {\r\n return (\r\n \r\n {addButton}\r\n {items.map((item: IAddressSelectItem) => {\r\n const SelectItem = item.SelectItem;\r\n return (\r\n \r\n {item.input}\r\n \r\n \r\n );\r\n })}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Address Add Update Component.\r\n * @param param0 - Root param.\r\n * @param param0.AddressForm - Address form.\r\n * @param param0.heading - Address heading.\r\n * @param param0.items - IAddressAddItem[].\r\n * @param param0.hasError - Boolean.\r\n * @param param0.error - Error message.\r\n * @param param0.isShowSaveButton - Boolean.\r\n * @param param0.saveButton - Save button.\r\n * @param param0.isShowCancelButton - Boolean.\r\n * @param param0.cancelButton - Cancel button.\r\n * @returns Address add update component node.\r\n */\r\n// tslint:disable-next-line:max-func-body-length\r\nconst AddressAddUpdate: React.FC = ({\r\n AddressForm,\r\n heading,\r\n items,\r\n hasError,\r\n error,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton,\r\n ...other\r\n}) => {\r\n // @ts-ignore\r\n const resources = other?.moduleProps?.resources;\r\n // @ts-ignore\r\n const localeString = other?.moduleProps?.context?.request?.locale;\r\n // @ts-ignore\r\n const sitePath = other?.moduleProps?.context?.request?.sitePath;\r\n const europe = ['/fr', '/de'];\r\n // @ts-ignore\r\n const currency = other?.moduleProps?.context?.request?.channel?.Currency;\r\n const locale =\r\n sitePath && europe.includes(sitePath)\r\n ? 'eu'\r\n : currency === 'EUR' && localeString === 'en-GB'\r\n ? 'eu'\r\n : localeString.replace('-', '');\r\n\r\n const countriesAvail = {\r\n enGB: {\r\n autocomplete: ['gb'],\r\n select: ['GBR']\r\n },\r\n it: {\r\n autocomplete: ['it'],\r\n select: ['ITA']\r\n },\r\n enUS: {\r\n autocomplete: ['us', 'ca'],\r\n select: ['USA', 'CAN']\r\n },\r\n eu: {\r\n // removed componentRestrictions for country as there is limit of 5 in google maps\r\n // autocomplete:['at','be','bg','ch','cz','de','dk','es','ee','fi','fr','gr','hr','hu','ie','li','lt','lu','lv','mc','nl','no','pl','pt','ro','sk','si','se'],\r\n autocomplete: [],\r\n select: [\r\n 'AUT',\r\n 'BEL',\r\n 'BGR',\r\n 'CHE',\r\n 'CZE',\r\n 'DEU',\r\n 'DNK',\r\n 'ESP',\r\n 'EST',\r\n 'FIN',\r\n 'FRA',\r\n 'GRC',\r\n 'HRV',\r\n 'HUN',\r\n 'IRL',\r\n 'LIE',\r\n 'LTU',\r\n 'LUX',\r\n 'LVA',\r\n 'MCO',\r\n 'NLD',\r\n 'NOR',\r\n 'POL',\r\n 'PRT',\r\n 'ROU',\r\n 'SVK',\r\n 'SVN',\r\n 'SWE'\r\n ]\r\n }\r\n };\r\n // @ts-ignore\r\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set;\r\n // tslint:disable-next-line:typedef\r\n function gMapsAutocomplete() {\r\n const googleComponents = [\r\n { googleComponent: 'sublocality_level_1', id: 'shipping_addresscity' },\r\n { googleComponent: 'locality', id: 'shipping_addresscity' },\r\n { googleComponent: 'postal_town', id: 'shipping_addresscity' },\r\n {\r\n googleComponent: 'administrative_area_level_3',\r\n id: 'shipping_addresscity'\r\n },\r\n {\r\n googleComponent: 'administrative_area_level_1',\r\n id: 'shipping_addressstate'\r\n },\r\n { googleComponent: 'postal_code_prefix', id: 'shipping_addresszipcode' },\r\n { googleComponent: 'postal_code', id: 'shipping_addresszipcode' },\r\n {\r\n googleComponent: 'country',\r\n id: 'shipping_addressthreeletterisoregionname'\r\n },\r\n {\r\n googleComponent: 'administrative_area_level_2',\r\n id: 'shipping_addresscounty'\r\n }\r\n ];\r\n\r\n const autocompleteFormField = document.getElementById('shipping_addressstreet');\r\n // @ts-ignore\r\n const autocomplete = new window.google.maps.places.Autocomplete(autocompleteFormField, {\r\n types: ['address'],\r\n componentRestrictions: {\r\n country: countriesAvail[locale] && countriesAvail[locale].autocomplete\r\n }\r\n });\r\n if (autocompleteFormField === null || autocompleteFormField === undefined) {\r\n return;\r\n }\r\n autocompleteFormField.setAttribute('placeholder', resources.startTypingYourAddress);\r\n // @ts-ignore\r\n window.google.maps.event.clearInstanceListeners(autocompleteFormField);\r\n // @ts-ignore\r\n window.google.maps.event.addListener(autocomplete, `place_changed`, () => {\r\n const place = autocomplete.getPlace();\r\n if (nativeInputValueSetter === undefined) {\r\n return;\r\n }\r\n nativeInputValueSetter.call(autocompleteFormField, place.name);\r\n const eCustom = new Event('change', { bubbles: true });\r\n autocompleteFormField.dispatchEvent(eCustom);\r\n\r\n const addressComponents = place.address_components;\r\n // @ts-ignore\r\n if (addressComponents.filter(addr => addr.types.includes('postal_code')).length === 0) {\r\n addressComponents.push({\r\n long_name: '',\r\n short_name: '',\r\n types: ['postal_code']\r\n });\r\n }\r\n for (const googleComponent of googleComponents) {\r\n if (addressComponents && addressComponents.length > 0) {\r\n // @ts-ignore\r\n addressComponents.forEach(addressComponent => populateFormElements(addressComponent, googleComponent));\r\n }\r\n }\r\n });\r\n }\r\n\r\n // tslint:disable-next-line:typedef no-any\r\n function populateFormElements(\r\n addressComponent: { types: any[]; short_name: string; long_name: string },\r\n formMap: { googleComponent: any; id: string }\r\n ) {\r\n const addressType = addressComponent.types[0];\r\n\r\n if (document.getElementById(formMap.id) === undefined || document.getElementById(formMap.id) === null) {\r\n return;\r\n }\r\n\r\n if (formMap.googleComponent === addressType) {\r\n if (formMap.id === 'shipping_addressthreeletterisoregionname' || formMap.id === 'shipping_addressstate') {\r\n const autocompleteFormField = document.getElementById('shipping_addressstreet');\r\n const input = document.getElementById(formMap.id) as HTMLSelectElement;\r\n if (input !== null) {\r\n const formValue = locale === 'it' && formMap.id === 'shipping_addressstate' ? 'DEF' : addressComponent.short_name;\r\n const selectedValue = selectItemByValue(input, formValue, addressType === 'country' ? true : false);\r\n selectedValue &&\r\n //@ts-ignore\r\n autocompleteFormField?.setAttribute('value', selectedValue?.state);\r\n if (selectedValue !== undefined) {\r\n input.value = selectedValue;\r\n const event = new Event('change', { bubbles: true });\r\n input.dispatchEvent(event);\r\n }\r\n }\r\n } else {\r\n const formValue = formMap.id === 'shipping_addresscounty' ? addressComponent.short_name : addressComponent.long_name;\r\n const input = document.getElementById(formMap.id);\r\n if (input !== undefined) {\r\n if (nativeInputValueSetter === undefined) {\r\n return;\r\n }\r\n nativeInputValueSetter.call(input, formValue);\r\n const eCustom = new Event('input', { bubbles: true });\r\n if (input !== null) {\r\n input.dispatchEvent(eCustom);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // @ts-ignore\r\n // tslint:disable-next-line:typedef\r\n function selectItemByValue(element: HTMLSelectElement, value: string, is_convert_a2_to_a3: boolean) {\r\n for (let i = 0; i < element.options.length; i++) {\r\n // @ts-ignore\r\n const eValue = element.options[i].value;\r\n // @ts-ignore\r\n if ((is_convert_a2_to_a3 && eValue === convert_a2_to_a3[value]) || (!is_convert_a2_to_a3 && eValue === value)) {\r\n // @ts-ignore\r\n return element.options[i].value;\r\n }\r\n }\r\n }\r\n const checkPhone = () => {\r\n const saveAddressButton = document.querySelector('.ms-checkout__guided-card-btn-save.msc-btn') as HTMLButtonElement;\r\n const phone = document.getElementById('shipping_addressphone') as HTMLInputElement;\r\n if (phone) {\r\n const phoneCtn = phone.closest('.msc-address-form__item') as HTMLElement;\r\n const phoneAlert = phoneCtn.getElementsByClassName('msc-address-form__alert')[0];\r\n const pattern = /^[0-9]*$/;\r\n const pattern2 = /^\\+?\\d+$/;\r\n phone.setAttribute('aria-required', 'true');\r\n phone.setAttribute('type', 'tel');\r\n phone.setAttribute('maxlength', '15');\r\n if (phone.value.length === 0) {\r\n saveAddressButton.setAttribute('disabled', 'true');\r\n }\r\n phone.onkeyup = () => {\r\n if (!phone.value.match(pattern) && !phone.value.match(pattern2)) {\r\n phoneCtn.classList.add('address-form__item-invalid');\r\n phoneAlert.textContent = resources.addressPhoneRequiredErrorMessage;\r\n saveAddressButton.setAttribute('disabled', 'true');\r\n } else if (phone.value.length < 6) {\r\n phoneCtn.classList.add('address-form__item-invalid');\r\n phoneAlert.textContent = resources.addressPhoneRequiredErrorMessage;\r\n saveAddressButton.setAttribute('disabled', 'true');\r\n } else {\r\n phoneCtn.classList.remove('address-form__item-invalid');\r\n phoneAlert.textContent = '';\r\n saveAddressButton.removeAttribute('disabled');\r\n }\r\n };\r\n }\r\n };\r\n function phoneValidation(): void {\r\n const addressForm = document.getElementsByClassName('msc-address-form')[0];\r\n const saveAddressButton = addressForm\r\n .closest('.ms-checkout__guided-card')\r\n ?.getElementsByClassName('ms-checkout__guided-card-btn-save')[0] as HTMLElement;\r\n const county = document.getElementById('shipping_addresscounty') as HTMLInputElement;\r\n const countyCtn = county && county !== null ? (county.closest('.msc-address-form__item') as HTMLInputElement) : undefined;\r\n const countyAlert = countyCtn?.getElementsByClassName('msc-address-form__alert')[0];\r\n\r\n if (countyCtn !== undefined) {\r\n countyCtn.onkeyup = () => {\r\n countyCtn?.classList.remove('address-form__item-invalid');\r\n if (countyAlert) {\r\n countyAlert.textContent = '';\r\n }\r\n };\r\n }\r\n if (saveAddressButton !== undefined) {\r\n saveAddressButton.onclick = e => {\r\n const countyValid = locale === 'it' && (county.value === '' || county.value.length > 2) ? false : true;\r\n if (!countyValid) {\r\n countyCtn?.classList.add('address-form__item-invalid');\r\n if (countyAlert) {\r\n countyAlert.textContent = 'Inserire Codice ISO a 2 lettere';\r\n }\r\n const elements = addressForm.querySelectorAll('input');\r\n let fieldInALL = true;\r\n elements.forEach(fieldInControl);\r\n function fieldInControl(element: HTMLInputElement): void {\r\n if (element.value === '' && element.name !== 'County') {\r\n fieldInALL = false;\r\n }\r\n }\r\n if (fieldInALL) {\r\n e.stopPropagation();\r\n }\r\n }\r\n };\r\n }\r\n }\r\n React.useEffect(() => {\r\n gMapsAutocomplete();\r\n const options = document.querySelectorAll('#shipping_addressthreeletterisoregionname option');\r\n options.forEach(o => {\r\n const optionV = (o as HTMLOptionElement).value;\r\n if (\r\n // @ts-ignore\r\n countriesAvail[locale] &&\r\n // @ts-ignore\r\n !countriesAvail[locale].select.includes(optionV)\r\n ) {\r\n o.remove();\r\n }\r\n });\r\n const countrySelect = document.getElementById('shipping_addressthreeletterisoregionname') as HTMLSelectElement;\r\n if (locale === 'enUS') {\r\n countrySelect.value = 'USA';\r\n }\r\n const event = new Event('change', { bubbles: true });\r\n countrySelect.dispatchEvent(event);\r\n const stateSelect = document.getElementById('shipping_addressstate') as HTMLSelectElement;\r\n if (stateSelect && locale === 'it') {\r\n stateSelect.value = 'DEF';\r\n stateSelect.dispatchEvent(event);\r\n stateSelect.disabled = Boolean('true');\r\n }\r\n phoneValidation();\r\n }, []);\r\n // Set province after express checkout\r\n React.useEffect(() => {\r\n //@ts-ignore\r\n if (other?.moduleProps?.data?.checkout?.result?.isExpressCheckoutApplied) {\r\n //@ts-ignore\r\n //const selectedAddressCounty = other?.moduleProps?.data?.checkout?.result?.shippingAddress?.County;\r\n const provinceSelect = document.getElementById('shipping_addresscounty') as HTMLInputElement;\r\n //@ts-ignore\r\n if (other?.moduleProps?.data?.checkout?.result?.shippingAddressFromExpressCheckout?.TwoLetterISORegionName === 'IT') {\r\n if (locale === 'it') {\r\n const province =\r\n //selectedAddressCounty ??\r\n //@ts-ignore\r\n other?.moduleProps?.data?.checkout?.result?.shippingAddressFromExpressCheckout?.State;\r\n if (province !== undefined) {\r\n if (nativeInputValueSetter === undefined) {\r\n return;\r\n }\r\n nativeInputValueSetter.call(provinceSelect, province);\r\n const event = new Event('change', { bubbles: true });\r\n provinceSelect.dispatchEvent(event);\r\n }\r\n }\r\n }\r\n }\r\n }, [\r\n //@ts-ignore\r\n other?.moduleProps?.data?.checkout?.result?.isExpressCheckoutApplied\r\n ]);\r\n // Phone Verifications\r\n React.useEffect(() => {\r\n checkPhone();\r\n }, [(document?.getElementById('shipping_addressphone') as HTMLInputElement)?.value]);\r\n React.useEffect(() => {\r\n phoneValidation();\r\n }, [document.getElementById('shipping_addressphone')]);\r\n return (\r\n \r\n {heading}\r\n {items &&\r\n items.map((item: IAddressAddItem) => {\r\n const { AddressItem, key, label, alert, input } = item;\r\n if (key === 'Name' && input) {\r\n // @ts-ignore\r\n input.props.maxLength = 34;\r\n }\r\n return (\r\n \r\n {label}\r\n {alert}\r\n {input}\r\n \r\n );\r\n })}\r\n {hasError && (\r\n \r\n {error.title}\r\n {error.message}\r\n \r\n )}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Checkout Shipping Address View Component.\r\n * @param props - Props.\r\n * @returns - CheckoutShippingAddress Module.\r\n */\r\nconst CheckoutShippingAddressView: React.FC = props => {\r\n const { CheckoutShippingAddress, viewState, showAddress, showAddressSelect, showAddOrUpdateAddress } = props;\r\n\r\n return (\r\n \r\n {viewState.isShowAddress && }\r\n {viewState.isShowAddresList && }\r\n {viewState.isShowAddOrUpdateAddress && }\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutShippingAddressView;\r\n","// tslint:disable-next-line:variable-name\r\nexport const convert_a2_to_a3 = {\r\n AF: 'AFG',\r\n AX: 'ALA',\r\n AL: 'ALB',\r\n DZ: 'DZA',\r\n AS: 'ASM',\r\n AD: 'AND',\r\n AO: 'AGO',\r\n AI: 'AIA',\r\n AQ: 'ATA',\r\n AG: 'ATG',\r\n AR: 'ARG',\r\n AM: 'ARM',\r\n AW: 'ABW',\r\n AU: 'AUS',\r\n AT: 'AUT',\r\n AZ: 'AZE',\r\n BS: 'BHS',\r\n BH: 'BHR',\r\n BD: 'BGD',\r\n BB: 'BRB',\r\n BY: 'BLR',\r\n BE: 'BEL',\r\n BZ: 'BLZ',\r\n BJ: 'BEN',\r\n BM: 'BMU',\r\n BT: 'BTN',\r\n BO: 'BOL',\r\n BA: 'BIH',\r\n BW: 'BWA',\r\n BV: 'BVT',\r\n BR: 'BRA',\r\n IO: 'IOT',\r\n BN: 'BRN',\r\n BG: 'BGR',\r\n BF: 'BFA',\r\n BI: 'BDI',\r\n KH: 'KHM',\r\n CM: 'CMR',\r\n CA: 'CAN',\r\n CV: 'CPV',\r\n KY: 'CYM',\r\n CF: 'CAF',\r\n TD: 'TCD',\r\n CL: 'CHL',\r\n CN: 'CHN',\r\n CX: 'CXR',\r\n CC: 'CCK',\r\n CO: 'COL',\r\n KM: 'COM',\r\n CG: 'COG',\r\n CD: 'COD',\r\n CK: 'COK',\r\n CR: 'CRI',\r\n CI: 'CIV',\r\n HR: 'HRV',\r\n CU: 'CUB',\r\n CY: 'CYP',\r\n CZ: 'CZE',\r\n DK: 'DNK',\r\n DJ: 'DJI',\r\n DM: 'DMA',\r\n DO: 'DOM',\r\n EC: 'ECU',\r\n EG: 'EGY',\r\n SV: 'SLV',\r\n GQ: 'GNQ',\r\n ER: 'ERI',\r\n EE: 'EST',\r\n ET: 'ETH',\r\n FK: 'FLK',\r\n FO: 'FRO',\r\n FJ: 'FJI',\r\n FI: 'FIN',\r\n FR: 'FRA',\r\n GF: 'GUF',\r\n PF: 'PYF',\r\n TF: 'ATF',\r\n GA: 'GAB',\r\n GM: 'GMB',\r\n GE: 'GEO',\r\n DE: 'DEU',\r\n GH: 'GHA',\r\n GI: 'GIB',\r\n GR: 'GRC',\r\n GL: 'GRL',\r\n GD: 'GRD',\r\n GP: 'GLP',\r\n GU: 'GUM',\r\n GT: 'GTM',\r\n GG: 'GGY',\r\n GN: 'GIN',\r\n GW: 'GNB',\r\n GY: 'GUY',\r\n HT: 'HTI',\r\n HM: 'HMD',\r\n VA: 'VAT',\r\n HN: 'HND',\r\n HK: 'HKG',\r\n HU: 'HUN',\r\n IS: 'ISL',\r\n IN: 'IND',\r\n ID: 'IDN',\r\n IR: 'IRN',\r\n IQ: 'IRQ',\r\n IE: 'IRL',\r\n IM: 'IMN',\r\n IL: 'ISR',\r\n IT: 'ITA',\r\n JM: 'JAM',\r\n JP: 'JPN',\r\n JE: 'JEY',\r\n JO: 'JOR',\r\n KZ: 'KAZ',\r\n KE: 'KEN',\r\n KI: 'KIR',\r\n KP: 'PRK',\r\n KR: 'KOR',\r\n KW: 'KWT',\r\n KG: 'KGZ',\r\n LA: 'LAO',\r\n LV: 'LVA',\r\n LB: 'LBN',\r\n LS: 'LSO',\r\n LR: 'LBR',\r\n LY: 'LBY',\r\n LI: 'LIE',\r\n LT: 'LTU',\r\n LU: 'LUX',\r\n MO: 'MAC',\r\n MK: 'MKD',\r\n MG: 'MDG',\r\n MW: 'MWI',\r\n MY: 'MYS',\r\n MV: 'MDV',\r\n ML: 'MLI',\r\n MT: 'MLT',\r\n MH: 'MHL',\r\n MQ: 'MTQ',\r\n MR: 'MRT',\r\n MU: 'MUS',\r\n YT: 'MYT',\r\n MX: 'MEX',\r\n FM: 'FSM',\r\n MD: 'MDA',\r\n MC: 'MCO',\r\n MN: 'MNG',\r\n ME: 'MNE',\r\n MS: 'MSR',\r\n MA: 'MAR',\r\n MZ: 'MOZ',\r\n MM: 'MMR',\r\n NA: 'NAM',\r\n NR: 'NRU',\r\n NP: 'NPL',\r\n NL: 'NLD',\r\n AN: 'ANT',\r\n NC: 'NCL',\r\n NZ: 'NZL',\r\n NI: 'NIC',\r\n NE: 'NER',\r\n NG: 'NGA',\r\n NU: 'NIU',\r\n NF: 'NFK',\r\n MP: 'MNP',\r\n NO: 'NOR',\r\n OM: 'OMN',\r\n PK: 'PAK',\r\n PW: 'PLW',\r\n PS: 'PSE',\r\n PA: 'PAN',\r\n PG: 'PNG',\r\n PY: 'PRY',\r\n PE: 'PER',\r\n PH: 'PHL',\r\n PN: 'PCN',\r\n PL: 'POL',\r\n PT: 'PRT',\r\n PR: 'PRI',\r\n QA: 'QAT',\r\n RE: 'REU',\r\n RO: 'ROU',\r\n RU: 'RUS',\r\n RW: 'RWA',\r\n BL: 'BLM',\r\n SH: 'SHN',\r\n KN: 'KNA',\r\n LC: 'LCA',\r\n MF: 'MAF',\r\n PM: 'SPM',\r\n VC: 'VCT',\r\n WS: 'WSM',\r\n SM: 'SMR',\r\n ST: 'STP',\r\n SA: 'SAU',\r\n SN: 'SEN',\r\n RS: 'SRB',\r\n SC: 'SYC',\r\n SL: 'SLE',\r\n SG: 'SGP',\r\n SK: 'SVK',\r\n SI: 'SVN',\r\n SB: 'SLB',\r\n SO: 'SOM',\r\n ZA: 'ZAF',\r\n GS: 'SGS',\r\n ES: 'ESP',\r\n LK: 'LKA',\r\n SD: 'SDN',\r\n SR: 'SUR',\r\n SJ: 'SJM',\r\n SZ: 'SWZ',\r\n SE: 'SWE',\r\n CH: 'CHE',\r\n SY: 'SYR',\r\n TW: 'TWN',\r\n TJ: 'TJK',\r\n TZ: 'TZA',\r\n TH: 'THA',\r\n TL: 'TLS',\r\n TG: 'TGO',\r\n TK: 'TKL',\r\n TO: 'TON',\r\n TT: 'TTO',\r\n TN: 'TUN',\r\n TR: 'TUR',\r\n TM: 'TKM',\r\n TC: 'TCA',\r\n TV: 'TUV',\r\n UG: 'UGA',\r\n UA: 'UKR',\r\n AE: 'ARE',\r\n GB: 'GBR',\r\n US: 'USA',\r\n UM: 'UMI',\r\n UY: 'URY',\r\n UZ: 'UZB',\r\n VU: 'VUT',\r\n VE: 'VEN',\r\n VN: 'VNM',\r\n VG: 'VGB',\r\n VI: 'VIR',\r\n WF: 'WLF',\r\n EH: 'ESH',\r\n YE: 'YEM',\r\n ZM: 'ZMB',\r\n ZW: 'ZWE'\r\n};\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { CheckoutModule, getCheckoutState, ICheckoutState } from '@msdyn365-commerce/global-state/';\n\nexport async function focusOnCheckoutError(checkoutErrorRef: React.RefObject, ctx: IActionContext): Promise {\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\n ctx.telemetry.exception(error);\n throw error;\n });\n\n checkoutErrorRef.current && checkoutErrorRef.current.scrollIntoView();\n await checkoutState.updateCheckoutErrorFocus({ newCheckoutErrorFocus: CheckoutModule.None });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ITelemetry } from '@msdyn365-commerce/core';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\n\nimport { IAutoSuggestOptions } from './address-autosuggest.data';\n\n/**\n *\n * Auto Suggest.\n */\nexport class AutoSuggest {\n public readonly excludedAddressFields: string[] = ['ThreeLetterISORegionName', 'Name', 'AddressTypeValue', 'Phone'];\n\n private readonly telemetry: ITelemetry;\n\n private readonly countryCode?: string;\n\n private readonly bingMapsApiKey?: string;\n\n private readonly defaultLanguageId?: string;\n\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\n\n private autoSuggestOptions: IAutoSuggestOptions;\n\n constructor(\n telemetry: ITelemetry,\n autoSuggestOptions: IAutoSuggestOptions,\n BingMapsApiKey?: string,\n countryCode?: string,\n defaultLanguageId?: string\n ) {\n this.telemetry = telemetry;\n this.autoSuggestOptions = autoSuggestOptions;\n this.bingMapsApiKey = BingMapsApiKey;\n this.countryCode = countryCode;\n this.defaultLanguageId = defaultLanguageId;\n }\n\n public attachAutoSuggest = (\n inputId: string,\n containerId: string,\n selectedSuggestionCallback: (result: Microsoft.Maps.ISuggestionResult) => void\n ): void => {\n if (!this.autoSuggestManager) {\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\n callback: () => {\n const options = { ...this.autoSuggestOptions, countryCode: this.countryCode };\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\n this.autoSuggestManager.attachAutosuggest(inputId, containerId, selectedSuggestionCallback);\n document.querySelector(inputId)?.setAttribute('role', 'combobox');\n setTimeout(() => {\n document.querySelector(inputId)?.setAttribute('type', 'text');\n }, 0);\n },\n errorCallback: () => {\n if (this.telemetry) {\n this.telemetry.debug('Unable to attach map auto suggest.');\n }\n },\n credentials: this.bingMapsApiKey\n });\n }\n };\n\n public changeAutoSuggestionCountryCode = (countryCode?: string): void => {\n if (this.autoSuggestManager) {\n this.autoSuggestOptions.countryCode = countryCode;\n this.autoSuggestManager.setOptions(this.autoSuggestOptions);\n }\n };\n\n public disposeAutoSuggest = (): void => {\n this.autoSuggestManager?.detachAutosuggest();\n this.autoSuggestManager?.dispose();\n this.autoSuggestManager = undefined;\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public _loadMapAPI = async (storeSelectorStateManager: IStoreSelectorStateManager): Promise => {\n await storeSelectorStateManager.loadMapApi({\n key: this.bingMapsApiKey,\n lang: this.defaultLanguageId,\n market: this.countryCode\n });\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionInput, ICoreContext, IObservableAction, ITelemetry } from '@msdyn365-commerce/core';\nimport {\n Address,\n AddressPurpose,\n CountryRegionInfo,\n StateProvinceInfo\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n addAddress,\n AddressManagementInput,\n ArrayExtensions,\n updateAddress,\n updatePrimaryAddress\n} from '@msdyn365-commerce-modules/retail-actions';\n\nimport { getAddressPurposesAction, GetAddressPurposesInput } from '../actions/get-address-purposes';\nimport { getStateProvinceAction, GetStateProvincesInput } from '../actions/get-state-provinces';\nimport { IAddressResource, IAddressResponse } from './address-module.data';\n\n/**\n *\n * Address common.\n */\nexport class AddressCommon {\n private readonly context: ICoreContext;\n\n private readonly resources: IAddressResource;\n\n private readonly telemetry: ITelemetry;\n\n constructor(context: ICoreContext, resources: IAddressResource, telemetry: ITelemetry) {\n this.context = context;\n this.resources = resources;\n this.telemetry = telemetry;\n }\n\n public getDefaultCountryRegionId = (countryRegionId: string, countryRegions: CountryRegionInfo[], market?: string): string => {\n const marketISOCode = market || 'US';\n const currentCountryRegion = countryRegions.find(countryRegion => (countryRegion.ISOCode || '') === marketISOCode);\n return (currentCountryRegion && currentCountryRegion.CountryRegionId) || countryRegionId;\n };\n\n public parseRetailException = (resources: IAddressResource): IAddressResponse => {\n return {\n errorTitle: resources.addressErrorMessageTitle,\n errorMessage: resources.addressGenericErrorMessage\n };\n };\n\n public isAuthenticatedFlow = (): boolean => {\n return this.context.request.user.isAuthenticated;\n };\n\n public getStateProvinces = async (countryRegionId: string): Promise => {\n let response: StateProvinceInfo[] = [];\n if (this.context && this.context.actionContext) {\n try {\n const input = new GetStateProvincesInput(countryRegionId, this.context.request.apiSettings);\n response = await getStateProvinceAction(input, this.context.actionContext);\n } catch (error) {\n if (this.telemetry) {\n this.telemetry.error(`Error encountered ${error}`);\n this.telemetry.debug('Unable to get state provinces');\n }\n }\n }\n return Promise.resolve(response);\n };\n\n // For any address, check for common requried field else treat it as invalid\\empty address.\n public isEmpty = (address: Address): boolean => {\n if (address && address.ThreeLetterISORegionName && (address.State || address.City)) {\n return false;\n }\n\n return true;\n };\n\n public addCustomerAddress = async (address: Address): Promise => {\n await this.updateLogisticsLocationRoleRecordId(address);\n return this.submitCustomerAddress(addAddress, address);\n };\n\n public updateCustomerAddress = async (address: Address): Promise => {\n await this.updateLogisticsLocationRoleRecordId(address);\n return this.submitCustomerAddress(updateAddress, address);\n };\n\n public updateCustomerPrimaryAddress = async (address: Address): Promise => {\n return this.submitCustomerAddress(updatePrimaryAddress, address);\n };\n\n private readonly submitCustomerAddress = async (\n addressAction: IObservableAction,\n address: Address\n ): Promise => {\n address.AddressTypeValue = address.AddressTypeValue || 7; // 7 sets it to HOME by default\n\n const input = new AddressManagementInput(address);\n return this.execAddressAction(addressAction, input, address);\n };\n\n private readonly execAddressAction = async (\n addressAction: IObservableAction,\n input: IActionInput | IActionInput[],\n address: Address\n ): Promise => {\n let response: IAddressResponse = {};\n\n if (this.context && this.context.actionContext) {\n try {\n const addresses = await addressAction(input, this.context.actionContext);\n if (addresses.length > 0) {\n response.address = address.RecordId ? address : addresses[addresses.length - 1];\n } else {\n response.address = address;\n }\n response.customerAddresses = addresses;\n } catch (error) {\n if (this.telemetry) {\n this.telemetry.error(`Error encountered ${error}`);\n this.telemetry.debug('Unable to exec address action');\n }\n response = this.parseRetailException(this.resources);\n }\n }\n return Promise.resolve(response);\n };\n\n /**\n * Function to get the address purposes and update the LogisticsLocationRoleRecordId to update the address type.\n * @param address - Address object.\n * @returns Returns void.\n */\n private readonly updateLogisticsLocationRoleRecordId = async (address: Address): Promise => {\n let addressPurposes: AddressPurpose[] = [];\n try {\n const input: GetAddressPurposesInput = new GetAddressPurposesInput(this.context.request.apiSettings);\n addressPurposes = await getAddressPurposesAction(input, this.context.actionContext);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions -- Supparsing the any type for error.\n this.telemetry.error(`Error encountered ${error}`);\n this.telemetry.debug('Unable to get address purposes');\n }\n if (ArrayExtensions.hasElements(addressPurposes)) {\n const addressPurpose: AddressPurpose | undefined = addressPurposes.find(\n purpose => purpose.AddressType === address.AddressTypeValue\n );\n if (addressPurpose) {\n address.LogisticsLocationRoleRecordId = addressPurpose.RecordId;\n }\n }\n };\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nexport enum AddressItemDisplayType {\n Input = 'Input',\n Dropdown = 'Dropdown',\n Checkbox = 'Checkbox'\n}\n\nexport enum AddressValidationRuleType {\n Required = 'Required',\n Format = 'Format'\n}\n\nexport enum AddressItemType {\n Name = 1001,\n Phone = 1002,\n IsPrimary = 1003,\n AddressTypeValue = 1004,\n ZipCode = 1,\n City = 2,\n County = 3,\n State = 4,\n ThreeLetterISORegionName = 5,\n Street = 6,\n DistrictName = 7,\n StreetNumber = 8,\n BuildingCompliment = 9,\n Postbox = 10,\n House_RU = 21,\n Flat_RU = 22,\n CountryOKSMCode_RU = 23\n}\n\nexport interface IAddressItem {\n name: string;\n type: AddressItemType;\n label: string;\n maxLength: number;\n displayType: AddressItemDisplayType;\n validationRules?: IAddressValidationRule[];\n isNewLine: boolean;\n}\n\nexport interface IAddressValidationRule {\n type: AddressValidationRuleType;\n regEx: string;\n message: string;\n}\n\nexport interface IAddressDropdownsData {\n [index: string]: { key?: string | number; value?: string }[];\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n Address,\n AddressPurpose,\n CountryRegionInfo,\n StateProvinceInfo\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { get, set } from 'mobx';\n\nimport { AddressItemType, IAddressDropdownsData, IAddressItem, IAddressValidationRule } from './address-format.data';\nimport { AddressMetaData } from './address-meta-data';\n\n/**\n *\n * Retail Service Address format parser.\n */\nexport class AddressFormat {\n private readonly countryRegionsInfo?: CountryRegionInfo[];\n\n private readonly addressPurposes?: AddressPurpose[];\n\n private readonly addressMetaData: AddressMetaData;\n\n constructor(countryRegionsInfo: CountryRegionInfo[], addressMetaData: AddressMetaData, addressPurposes: AddressPurpose[]) {\n this.countryRegionsInfo = countryRegionsInfo;\n this.addressMetaData = addressMetaData;\n this.addressPurposes = addressPurposes;\n }\n\n public getAddressFormat(countryRegionId: string): IAddressItem[] {\n const countryRegionInfo = this._getCountryRegionInfo(countryRegionId);\n if (countryRegionInfo) {\n return this._getAddressDisplayFormat(countryRegionInfo);\n }\n return [];\n }\n\n public getCountryFormat(): { key?: string; value?: string }[] {\n return (this.countryRegionsInfo || []).map(countryRegion => {\n return {\n key: countryRegion.CountryRegionId,\n value: countryRegion.ShortName\n };\n });\n }\n\n public getStateFormat(stateProvinceInfo?: StateProvinceInfo[]): { key?: string; value?: string }[] {\n return (stateProvinceInfo || []).map(state => {\n return {\n key: state.StateId,\n value: state.StateName\n };\n });\n }\n\n public getAddressTypeFormat(): { key?: number; value?: string }[] {\n return (this.addressPurposes || []).map(addressPurpose => {\n return {\n key: addressPurpose.AddressType,\n value: addressPurpose.Description\n };\n });\n }\n\n public getPrefilledAddressDropdownData = (\n stateDefaultSelectionText: string,\n stateProvinceInfo?: StateProvinceInfo[]\n ): IAddressDropdownsData => {\n const defaultStateText = {\n key: '',\n value: stateDefaultSelectionText\n };\n const dropdownData: IAddressDropdownsData = {};\n\n dropdownData[AddressItemType[AddressItemType.ThreeLetterISORegionName]] = this.getCountryFormat();\n dropdownData[AddressItemType[AddressItemType.State]] = this.getStateFormat(stateProvinceInfo);\n dropdownData[AddressItemType[AddressItemType.State]].unshift(defaultStateText);\n dropdownData[AddressItemType[AddressItemType.AddressTypeValue]] = this.getAddressTypeFormat();\n\n return dropdownData;\n };\n\n public getTwoLetterISORegionName = (countryRegionId: string): string | undefined => {\n const countryRegionInfo = this._getCountryRegionInfo(countryRegionId);\n\n return countryRegionInfo!.ISOCode;\n };\n\n public validateAddressFormat = (\n address: Address,\n validationError: Address,\n countryRegionId: string,\n propertyName?: string\n ): boolean => {\n let isValid: boolean = true;\n let validationtor;\n const addressFormat = this.getAddressFormat(address.ThreeLetterISORegionName || countryRegionId);\n\n addressFormat.forEach(addressFormatItem => {\n if (!propertyName || (propertyName && addressFormatItem.name === propertyName)) {\n validationtor = this._inputValidation(addressFormatItem, validationError, address);\n if (validationtor !== undefined) {\n isValid = validationtor;\n }\n }\n });\n\n return isValid;\n };\n\n public getTranformedAddress = (result: Microsoft.Maps.ISuggestionResult, stateProvinceInfo?: StateProvinceInfo[]): Address => {\n const address: Address = {};\n\n // Zip Code\n if (result.address.postalCode !== undefined) {\n address.ZipCode = result.address.postalCode;\n } else {\n address.ZipCode = '';\n }\n\n // State\n if (stateProvinceInfo) {\n const selectedState = stateProvinceInfo.find(state => state.StateName === result.address.adminDistrict);\n if (!selectedState) {\n address.State = '';\n address.StateName = result.address.adminDistrict;\n } else {\n address.State = selectedState.StateId;\n address.StateName = selectedState.StateName;\n }\n }\n\n // Street\n if (result.address.addressLine !== undefined) {\n address.Street = result.address.addressLine;\n } else {\n address.Street = ' ';\n }\n\n // City\n if (result.address.locality !== undefined) {\n address.City = result.address.locality;\n } else {\n address.City = '';\n }\n\n // District\n if (result.address.district !== undefined) {\n address.DistrictName = result.address.district;\n address.CountyName = result.address.district;\n } else {\n address.DistrictName = '';\n }\n\n // Formatted Address\n address.FullAddress = result.address.formattedAddress;\n\n return address;\n };\n\n private _inputValidation(addressFormatItem: IAddressItem, validationError: Address, address: Address): boolean | undefined {\n set(validationError, { [addressFormatItem.name]: null });\n for (const validationRule of addressFormatItem.validationRules || []) {\n if (!this._validateRegEx(address, addressFormatItem.name, validationRule)) {\n set(validationError, { [addressFormatItem.name]: validationRule.message });\n return false;\n }\n }\n return undefined;\n }\n\n private readonly _validateRegEx = (address: Address, propertyName: string, validationRule: IAddressValidationRule): boolean => {\n if (validationRule.regEx && validationRule.regEx.length > 0) {\n const regex = new RegExp(validationRule.regEx);\n return regex.test((get(address, propertyName) as string) || '');\n }\n return true;\n };\n\n private _getCountryRegionInfo(countryRegionId: string): CountryRegionInfo | undefined {\n return (this.countryRegionsInfo || []).find(countryRegion => {\n return (countryRegion.CountryRegionId || '').toLowerCase() === countryRegionId.toLowerCase();\n });\n }\n\n private _getAddressDisplayFormat(countryRegionInfo: CountryRegionInfo): IAddressItem[] {\n const addressDisplayItem: IAddressItem[] = [];\n\n if (countryRegionInfo && countryRegionInfo.AddressFormatLines) {\n const AddressTypeItem = this._extendAddressDisplayFormat(AddressItemType.AddressTypeValue, true);\n if (AddressTypeItem) {\n addressDisplayItem.push(AddressTypeItem);\n }\n\n const nameDisplayItem = this._extendAddressDisplayFormat(AddressItemType.Name, true);\n if (nameDisplayItem) {\n addressDisplayItem.push(nameDisplayItem);\n }\n\n countryRegionInfo.AddressFormatLines.forEach(formatLine => {\n if (formatLine.AddressComponentNameValue) {\n const addressItem = this.addressMetaData.getItemFormat(formatLine.AddressComponentNameValue);\n if (addressItem) {\n addressItem.isNewLine = formatLine.NewLine || false;\n addressDisplayItem.push(addressItem);\n }\n }\n });\n\n const phoneDisplayItem = this._extendAddressDisplayFormat(AddressItemType.Phone, false);\n if (phoneDisplayItem) {\n addressDisplayItem.push(phoneDisplayItem);\n }\n\n const isPrimaryDisplayItem = this._extendAddressDisplayFormat(AddressItemType.IsPrimary, false);\n if (isPrimaryDisplayItem) {\n addressDisplayItem.push(isPrimaryDisplayItem);\n }\n }\n\n return addressDisplayItem;\n }\n\n private _extendAddressDisplayFormat(type: AddressItemType, isNewLine: boolean): IAddressItem | undefined {\n const addressItem = this.addressMetaData.getItemFormat(type);\n if (addressItem) {\n addressItem.isNewLine = isNewLine;\n }\n return addressItem;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PhoneRegex } from '@msdyn365-commerce-modules/retail-actions';\n\nimport {\n AddressItemDisplayType,\n AddressItemType,\n AddressValidationRuleType,\n IAddressItem,\n IAddressValidationRule\n} from './address-format.data';\nimport { IAddressResource } from './address-module.data';\n\n/**\n * Address meta data.\n */\nexport class AddressMetaData {\n private readonly metaData: IAddressItem[] = [];\n\n private readonly resources: IAddressResource;\n\n private readonly requiredFieldRegEx: string = '\\\\S';\n\n private readonly resourcesPrefix: string = 'address';\n\n private readonly maxLength: number = 64;\n\n private readonly requiredFields: AddressItemType[];\n\n private readonly excludedTypes: AddressItemType[];\n\n constructor(resources: IAddressResource, excluded?: AddressItemType[], required?: AddressItemType[]) {\n this.resources = resources || {};\n this.excludedTypes = excluded || [];\n this.requiredFields =\n required !== undefined\n ? required\n : [\n AddressItemType.AddressTypeValue,\n AddressItemType.Name,\n AddressItemType.ZipCode,\n AddressItemType.City,\n AddressItemType.State,\n AddressItemType.ThreeLetterISORegionName,\n AddressItemType.Street\n ];\n this._init();\n }\n\n public getItemFormat(id: number): IAddressItem | undefined {\n return this.metaData.find(item => {\n return item.type === id;\n });\n }\n\n private _init(): void {\n this._addItem(AddressItemType.Name, AddressItemDisplayType.Input);\n this._addItem(AddressItemType.Phone, AddressItemDisplayType.Input, PhoneRegex.defaultRegex);\n this._addItem(AddressItemType.ZipCode, AddressItemDisplayType.Input);\n this._addItem(AddressItemType.City, AddressItemDisplayType.Input);\n this._addItem(AddressItemType.County, AddressItemDisplayType.Input);\n this._addItem(AddressItemType.State, AddressItemDisplayType.Dropdown);\n this._addItem(AddressItemType.ThreeLetterISORegionName, AddressItemDisplayType.Dropdown);\n this._addItem(AddressItemType.Street, AddressItemDisplayType.Input);\n this._addItem(AddressItemType.DistrictName, AddressItemDisplayType.Input);\n this._addItem(AddressItemType.StreetNumber, AddressItemDisplayType.Input);\n this._addItem(AddressItemType.BuildingCompliment, AddressItemDisplayType.Input);\n this._addItem(AddressItemType.Postbox, AddressItemDisplayType.Input);\n this._addItem(AddressItemType.House_RU, AddressItemDisplayType.Input);\n this._addItem(AddressItemType.Flat_RU, AddressItemDisplayType.Input);\n this._addItem(AddressItemType.CountryOKSMCode_RU, AddressItemDisplayType.Input);\n this._addItem(AddressItemType.AddressTypeValue, AddressItemDisplayType.Dropdown);\n this._addItem(AddressItemType.IsPrimary, AddressItemDisplayType.Checkbox);\n }\n\n private _addItem(type: AddressItemType, displayType: AddressItemDisplayType, format?: string): void {\n if (this.excludedTypes.includes(type)) {\n return;\n }\n\n const nameKey = AddressItemType[type].replace('_', '');\n\n // Find out if currentItem is required field\n const validationRules = this._validationRules(type, nameKey, format);\n const isRequired = validationRules.some(rule => rule.type === AddressValidationRuleType.Required);\n\n // If no optional string is provided in resource file, use the original label text\n const optionalString =\n this.resources[`${this.resourcesPrefix}${nameKey}LabelOptional`] || this.resources[`${this.resourcesPrefix}${nameKey}Label`];\n const item: IAddressItem = {\n type,\n displayType,\n name: AddressItemType[type],\n label: isRequired ? this.resources[`${this.resourcesPrefix}${nameKey}Label`] : optionalString,\n maxLength: this.maxLength,\n validationRules,\n isNewLine: true\n };\n\n this.metaData.push(item);\n }\n\n private _validationRules(type: AddressItemType, name: string, format?: string): IAddressValidationRule[] {\n const validationRules: IAddressValidationRule[] = [];\n\n for (const ruleType of Object.keys(AddressValidationRuleType)) {\n const key = `${this.resourcesPrefix}${name}${ruleType}`;\n const message: string = this.resources[`${key}ErrorMessage`];\n switch (ruleType) {\n case AddressValidationRuleType.Required: {\n if (this.requiredFields.find((itemType: AddressItemType) => itemType === type)) {\n validationRules.push(this._validationRule(ruleType, this.requiredFieldRegEx, message));\n }\n break;\n }\n case AddressValidationRuleType.Format: {\n validationRules.push(this._validationRule(ruleType, format!, message));\n break;\n }\n default:\n }\n }\n return validationRules;\n }\n\n private _validationRule(type: AddressValidationRuleType, regEx: string, message: string): IAddressValidationRule {\n return {\n type,\n regEx,\n message\n };\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Address } from '@msdyn365-commerce/retail-proxy';\nimport { Heading } from '@msdyn365-commerce-modules/data-types';\n\nexport enum AddressOperation {\n Add = 'Add',\n Show = 'Show',\n Update = 'Update',\n List = 'List'\n}\n\nexport enum AddressType {\n Shipping = 'Shipping',\n Billing = 'Billing',\n Invoice = 'Invoice',\n Company = 'Company'\n}\n\nexport interface IDropdownDisplayData {\n [index: string]: { key?: string; value?: string }[];\n}\n\nexport interface IAddressResponse {\n errorTitle?: string;\n errorMessage?: string;\n customerAddresses?: Address[];\n address?: Address;\n}\n\nexport interface IAddressConfig {\n heading?: Heading;\n primaryAddressSectionHeading?: Heading;\n otherAddressSectionHeading?: Heading;\n addAddressHeading?: Heading;\n editAddressHeading?: Heading;\n}\n\nexport interface IAddressResource {\n addressChangeCheckboxAriaLabel: string;\n addressAddButtonText: string;\n addressAddButtonAriaLabel: string;\n addressPrimaryButtonText: string;\n addressPrimaryButtonAriaLabel: string;\n addressEditButtonText: string;\n addressEditButtonAriaLabel: string;\n addressRemoveButtonText: string;\n addressRemoveButtonAriaLabel: string;\n addressSaveButtonText: string;\n addressSaveButtonAriaLabel: string;\n addressCancelButtonText: string;\n addressCancelButtonAriaLabel: string;\n addressStateDefaultSelectionText: string;\n addressNameLabel: string;\n addressNameLabelOptional?: string;\n addressNameRequiredErrorMessage: string;\n addressPhoneLabel: string;\n addressPhoneLabelOptional?: string;\n addressPhoneRequiredErrorMessage: string;\n addressZipCodeLabel: string;\n addressZipCodeLabelOptional?: string;\n addressZipCodeRequiredErrorMessage: string;\n addressCityLabel: string;\n addressCityLabelOptional?: string;\n addressCityRequiredErrorMessage: string;\n addressCountyLabel: string;\n addressCountyLabelOptional?: string;\n addressCountyRequiredErrorMessage: string;\n addressStateLabel: string;\n addressStateLabelOptional?: string;\n addressStateRequiredErrorMessage: string;\n addressThreeLetterISORegionNameLabel: string;\n addressThreeLetterISORegionNameLabelOptional?: string;\n addressThreeLetterISORegionNameRequiredErrorMessage: string;\n addressStreetRequiredErrorMessage: string;\n addressDistrictLabel: string;\n addressDistrictLabelOptional?: string;\n addressDistrictNameLabel: string;\n addressDistrictNameLabelOptional?: string;\n addressDistrictRequiredErrorMessage: string;\n addressStreetNumberLabel: string;\n addressStreetNumberLabelOptional?: string;\n addressStreetNumberRequiredErrorMessage: string;\n addressBuildingComplimentLabel: string;\n addressBuildingComplimentLabelOptional?: string;\n addressBuildingComplimentRequiredErrorMessage: string;\n addressPostboxLabel: string;\n addressPostboxLabelOptional?: string;\n addressPostboxRequiredErrorMessage: string;\n addressHouseRULabel: string;\n addressHouseRULabelOptional?: string;\n addressHouseRURequiredErrorMessage: string;\n addressFlatRULabel: string;\n addressFlatRULabelOptional?: string;\n addressFlatRURequiredErrorMessage: string;\n addressCountryOKSMCodeRULabel: string;\n addressCountryOKSMCodeRURequiredErrorMessage: string;\n addressErrorMessageTitle: string;\n addressGenericErrorMessage: string;\n addressEmptyListAddressMessage: string;\n removeAddressNotification?: string;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IAdressCheckbox {\n id?: string;\n name?: string;\n className: string;\n type: string;\n isChecked: boolean;\n autoFocus?: boolean;\n additionalAddributes?: object;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n * Address checkbox.\n * @param props - Configuration of the functional component.\n * @returns React functional component.\n */\nexport const AddressCheckboxFunctionComponent: React.FC = (props: IAdressCheckbox) => {\n const {\n id: itemId,\n name,\n className,\n type,\n isChecked,\n additionalAddributes,\n telemetryContent,\n autoFocus: shouldBeAutoFocused,\n onChange\n } = props;\n\n const payLoad = getPayloadObject('click', telemetryContent!, name!);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n );\n};\n\nexport default AddressCheckboxFunctionComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Address } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { Heading as HeadingData } from '@msdyn365-commerce-modules/data-types';\nimport { Heading, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { get } from 'mobx';\nimport * as React from 'react';\n\nimport {\n AddressItemDisplayType,\n AddressItemType,\n AddressValidationRuleType,\n IAddressDropdownsData,\n IAddressItem,\n IAddressValidationRule\n} from '../address-format.data';\nimport { AddressType, IAddressResource, IAddressResponse } from '../address-module.data';\nimport AddressAlertComponent from './address-alert';\nimport AddressButtonComponent from './address-button';\nimport AdressCheckboxComponent from './address-checkbox';\nimport AdressDropdownComponent from './address-dropdown';\nimport AddressErrorMessageComponent from './address-error-message';\nimport AddressErrorTitleComponent from './address-error-title';\nimport AddressInputComponent from './address-input';\nimport AddressLabelComponent from './address-label';\n\nexport interface IAddressAddInputProps {\n isUpdating?: boolean;\n hasError?: boolean;\n hasExternalSubmitGroup?: boolean;\n addressType: AddressType;\n addressFormat: IAddressItem[];\n defaultCountryRegionId: string;\n defaultAddressType: number;\n selectedAddress?: Address;\n dropdownDisplayData: IAddressDropdownsData;\n resources: IAddressResource;\n addressActionResponse?: IAddressResponse;\n addAddressHeading?: HeadingData;\n editAddressHeading?: HeadingData;\n validationError?: object;\n telemetryContent?: ITelemetryContent;\n shouldAutoFocus?: boolean;\n onInputChange(event: React.ChangeEvent): void;\n onDropdownChange(event: React.ChangeEvent): void;\n onSave?(): void;\n onCancel?(): void;\n}\n\nexport interface IAddressError {\n AddressError: INodeProps;\n title: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface IAddressAddItem {\n key: string;\n AddressItem: INodeProps;\n label: React.ReactNode;\n alert: React.ReactNode;\n input: React.ReactNode;\n}\n\nexport interface IAddressAddUpdateProps {\n AddressForm: INodeProps;\n heading: React.ReactNode;\n items: IAddressAddItem[];\n hasError: boolean;\n error: IAddressError;\n isShowSaveButton: boolean;\n saveButton: React.ReactNode;\n isShowCancelButton: boolean;\n cancelButton: React.ReactNode;\n}\n\nconst getRequriedAttribute = (validationRules?: IAddressValidationRule[]): object => {\n const requriedRule = (validationRules || []).find(validationRule => {\n return validationRule.type === AddressValidationRuleType.Required;\n });\n\n return requriedRule ? { 'aria-required': true } : {};\n};\n\nconst getAddessItems = (selectedAddress: Address, props: IAddressAddInputProps): IAddressAddItem[] => {\n const {\n addressFormat,\n addressType,\n dropdownDisplayData,\n defaultCountryRegionId,\n defaultAddressType,\n validationError = {},\n onInputChange,\n onDropdownChange,\n shouldAutoFocus\n } = props;\n\n return addressFormat.map((addressFormatItem, index) => {\n const elementId = `${addressType.toLowerCase()}_address${addressFormatItem.name.toLowerCase()}`;\n const errorMessage = get(validationError, addressFormatItem.name);\n const className = classname('msc-address-form__item', `msc-address-form__item-${addressFormatItem.name.toLowerCase()}`, {\n 'msc-address-form__item-newline': addressFormatItem.isNewLine,\n 'address-form__item-invalid': errorMessage\n });\n let input;\n\n if (addressFormatItem.displayType === AddressItemDisplayType.Input) {\n input = (\n \n );\n } else if (addressFormatItem.displayType === AddressItemDisplayType.Checkbox) {\n input = (\n \n );\n } else {\n const displayData = dropdownDisplayData[addressFormatItem.name];\n let selectedValue = selectedAddress[addressFormatItem.name];\n\n if (addressFormatItem.type === AddressItemType.ThreeLetterISORegionName) {\n selectedValue = selectedValue || defaultCountryRegionId;\n }\n\n if (addressFormatItem.type === AddressItemType.AddressTypeValue) {\n selectedValue = selectedValue || defaultAddressType;\n }\n\n input = (\n \n );\n }\n\n return {\n key: addressFormatItem.name,\n AddressItem: { className, id: `${elementId}_container` },\n label: ,\n alert: ,\n input\n };\n });\n};\n\nexport const AddressAddUpdate = (props: IAddressAddInputProps): IAddressAddUpdateProps => {\n const {\n editAddressHeading,\n addAddressHeading,\n selectedAddress = {},\n resources,\n hasError,\n onCancel,\n onSave,\n hasExternalSubmitGroup,\n isUpdating,\n addressActionResponse,\n telemetryContent\n } = props;\n const heading = selectedAddress.RecordId ? editAddressHeading : addAddressHeading;\n\n return {\n AddressForm: { className: 'msc-address-form' },\n heading: heading && ,\n items: getAddessItems(selectedAddress, props),\n isShowSaveButton: !hasExternalSubmitGroup,\n saveButton: onSave && (\n \n ),\n isShowCancelButton: !hasExternalSubmitGroup,\n cancelButton: onCancel && (\n \n ),\n hasError: hasError || false,\n error: {\n AddressError: { className: 'msc-address-form__error' },\n title: addressActionResponse && addressActionResponse.errorTitle && (\n \n ),\n message: addressActionResponse && addressActionResponse.errorMessage && (\n \n )\n }\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAdressAlert {\n message?: string;\n}\n\n/**\n * Address alert.\n * @param props - Configuration of the functional component.\n * @returns React functional component.\n */\nexport const AddressAlertFunctionComponent: React.FC = (props: IAdressAlert) => {\n const message = props.message;\n return (\n \n {message && <>{message}}\n \n );\n};\n\nexport default AddressAlertFunctionComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport AddressInputComponent from './address-input';\n\nexport interface IAddressBillingCheckbox {\n isChecked: boolean;\n value: string;\n ariaLabel: string;\n text: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\nexport const AddressBillingCheckbox: React.FC = ({\n isChecked,\n value,\n ariaLabel,\n text,\n telemetryContent,\n onChange\n}) => {\n const additionalAttributes = {\n checked: isChecked,\n 'aria-checked': isChecked\n };\n\n return (\n \n );\n};\nexport default AddressBillingCheckbox;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAddressBillingHeading {\n text: string;\n}\n\nexport const AddressBillingHeading: React.FC = ({ text }) => (\n

{text}

\n);\n\nexport default IAddressBillingHeading;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IAddressButton {\n className: string;\n text: string;\n ariaLabel: string;\n disabled?: boolean;\n telemetryContent?: ITelemetryContent;\n role?: string;\n onClick(event: React.MouseEvent): void;\n}\n\n/**\n * Address button.\n * @param props - Configuration of the functional component.\n * @returns React functional component.\n */\nexport const AddressButtonFunctionComponent: React.FC = (props: IAddressButton) => {\n const { className, text, ariaLabel, disabled: isDisabled, telemetryContent, onClick, role } = props;\n const payLoad = getPayloadObject('click', telemetryContent!, text);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n );\n};\n\nexport default AddressButtonFunctionComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classname from 'classnames';\nimport * as React from 'react';\n\nexport interface IAddressDetailItem {\n isNewLine: boolean;\n isShowLabel: boolean;\n labelText: string;\n name: string;\n value: string;\n}\n\n/**\n * Address details item.\n * @param props - Configuration of the functional component.\n * @returns React functional component.\n */\nexport const AddressDetailItemFunctionComponent: React.FC = (props: IAddressDetailItem) => {\n const { isNewLine, isShowLabel, labelText, name, value } = props;\n\n const className = `msc-address-detail__item msc-address-detail__item-${name.toLowerCase()}`;\n const isEmpty = !(value && value.length > 0);\n const mainClass = isShowLabel\n ? `msc-address-detail__item msc-address-detail__item-address-detail_${labelText}`\n : classname(className, { 'msc-address-detail__item-empty': isEmpty, 'msc-address-detail__item-newline': isNewLine });\n return (\n \n {isShowLabel && (\n <>\n {labelText}\n \n \n )}\n {value}\n \n );\n};\n\nexport default AddressDetailItemFunctionComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAdressDropdown {\n id: string;\n name: string;\n className: string;\n value: string | number;\n additionalAddributes?: object;\n displayData: { key?: string | number; value?: string }[];\n onChange(event: React.ChangeEvent): void;\n}\n\nconst getDropdownItem = (key?: string | number, value?: string, selectedValue?: string | number): React.ReactNode => {\n let isSelected: boolean;\n if (typeof key === 'number') {\n isSelected = key === selectedValue;\n } else {\n isSelected = typeof selectedValue === 'string' && (key || '').toLowerCase() === (selectedValue || '').toLowerCase();\n }\n\n return (\n \n );\n};\n\n/**\n * Address dropdown.\n * @param props - Configuration of the functional component.\n * @returns React functional component.\n */\nexport const AddressDropdownFunctionComponent: React.FC = (props: IAdressDropdown) => {\n const { id: itemId, name, className, value, additionalAddributes, displayData, onChange } = props;\n\n return (\n \n {displayData && displayData.map(item => getDropdownItem(item.key, item.value, value))}\n \n );\n};\n\nexport default AddressDropdownFunctionComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\n/**\n * The payment error.\n */\nexport interface IPaymentError {\n title: string;\n message: string;\n className?: string;\n}\n\n/**\n * The payment error.\n * @param param0 - First param.\n * @param param0.title - Title.\n * @param param0.message - Message.\n * @param param0.className - ClassName.\n * @returns React node.\n */\nexport const ErrorComponent: React.FC = ({ title, message, className = 'ms-checkout-payment-instrument' }) => (\n
\n

{title}

\n

{message}

\n
\n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAdressErrorMessage {\n message: string;\n}\n\n/**\n * Address error message.\n * @param props - Configuration of the functional component.\n * @returns React functional component.\n */\nexport const AddressErrorMessageFunctionComponent: React.FC = (props: IAdressErrorMessage) => {\n const { message } = props;\n\n return

{message}

;\n};\n\nexport default AddressErrorMessageFunctionComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAdressErrorTitle {\n title: string;\n}\n\n/**\n * Address error title.\n * @param props - Configuration of the functional component.\n * @returns React functional component.\n */\nexport const AddressErrorTitleFunctionComponent: React.FC = (props: IAdressErrorTitle) => {\n const { title } = props;\n\n return

{title}

;\n};\n\nexport default AddressErrorTitleFunctionComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IAdressInput {\n id?: string;\n name?: string;\n className: string;\n type: string;\n value: string;\n maxLength?: number;\n autoFocus?: boolean;\n additionalAddributes?: object;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n * Address input.\n * @param props - Configuration of the functional component.\n * @returns React functional component.\n */\nexport const AddressInputFunctionComponent: React.FC = (props: IAdressInput) => {\n const {\n id: itemId,\n name,\n className,\n type,\n value,\n maxLength,\n additionalAddributes,\n autoFocus: shouldUseAutoFocus,\n telemetryContent,\n onChange\n } = props;\n\n const payLoad = getPayloadObject('click', telemetryContent!, name!);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n );\n};\n\nexport default AddressInputFunctionComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAdressLabel {\n id: string;\n text: string;\n}\n\n/**\n * Address label.\n * @param props - Configuration of the functional component.\n * @returns React functional component.\n */\nexport const AddressLabelFunctionComponent: React.FC = (props: IAdressLabel) => {\n const { id: itemId, text } = props;\n\n return (\n \n );\n};\n\nexport default AddressLabelFunctionComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { Address, AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { Heading as HeadingData } from '@msdyn365-commerce-modules/data-types';\nimport { Heading, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { AddressFormat } from '../address-format';\nimport { IAddressResource, IAddressResponse } from '../address-module.data';\nimport AddressButtonComponent from './address-button';\nimport AddressErrorMessageComponent from './address-error-message';\nimport AddressErrorTitleComponent from './address-error-title';\nimport { AddressShow, IAddressShowProps } from './address-show';\n\nexport interface IAddressListError {\n Error: INodeProps;\n isShowError: boolean;\n title: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface IAddressListItem {\n Item: INodeProps;\n key: number;\n error: IAddressListError;\n showItems: IAddressShowProps;\n isShowPrimaryButton: boolean;\n primaryButton: React.ReactNode;\n editButton: React.ReactNode;\n removeButton: React.ReactNode;\n}\n\nexport interface IAddressList {\n List: INodeProps;\n isShowList: boolean;\n heading: React.ReactNode;\n items: IAddressListItem[];\n}\n\nexport interface IAddressListProps {\n ListAddress: INodeProps;\n heading: React.ReactNode;\n isShowEmptyListMessage: boolean;\n emptyListMessage: React.ReactNode;\n addButton: React.ReactNode;\n primaryAddressList: IAddressList;\n otherAddressList: IAddressList;\n}\n\nexport interface IAddressListInputProps {\n isUpdating?: boolean;\n selectedAddress?: Address;\n addressFormat: AddressFormat;\n addresses: Address[];\n addressPurposes: AddressPurpose[];\n heading?: HeadingData;\n primaryAddressSectionHeading?: HeadingData;\n otherAddressSectionHeading?: HeadingData;\n addressActionResponse?: IAddressResponse;\n resources: IAddressResource;\n contextRequest: Msdyn365.IRequestContext;\n telemetryContent?: ITelemetryContent;\n handleLineItemHeadingChange?(event: Msdyn365.ContentEditableEvent): void;\n onAddAddress(): void;\n onEditAddress(address?: Address): void;\n onRemoveAddress(address?: Address): void;\n onUpdatePrimaryAddress(address: Address): void;\n canRenderAsyncCustomerDataAsUnmodifiable?: boolean;\n isAsyncCustomer?: boolean;\n isAsyncCustomerAddressCreationFeatureEnabled?: boolean;\n}\n\nconst getButtonAriaLabel = (ariaLabel: string, addressName?: string): string => {\n return ariaLabel.replace('{addressName}', addressName || '');\n};\n\nconst getAddressList = (\n className: string,\n addresses: Address[],\n showPrimaryButton: boolean,\n props: IAddressListInputProps,\n heading?: HeadingData\n): IAddressList => {\n const {\n resources,\n isUpdating,\n addressActionResponse,\n selectedAddress,\n addressFormat,\n onEditAddress,\n onRemoveAddress,\n onUpdatePrimaryAddress,\n addressPurposes,\n telemetryContent\n } = props;\n const { errorTitle = null, errorMessage = null } = addressActionResponse || {};\n\n return {\n List: { className },\n isShowList: addresses.length > 0,\n heading: heading && ,\n items: addresses.map(\n (address: Address): IAddressListItem => {\n const isSelectedAddress = selectedAddress && selectedAddress.RecordId === address.RecordId;\n const isShowError = isSelectedAddress && errorTitle && errorMessage;\n\n // Disable 'primary', 'edit', and 'remove' buttons if the customer IS EITHER async OR async address creation feature is enabled.\n // Conversely, these buttons can only be enabled when the customer is NOT async AND the address creation feature is disabled.\n const isInvalidAsyncState: boolean =\n (props.canRenderAsyncCustomerDataAsUnmodifiable || false) &&\n (props.isAsyncCustomer || false || props.isAsyncCustomerAddressCreationFeatureEnabled || false);\n\n return {\n Item: { className: `${className}-list` },\n key: address.RecordId || 0,\n showItems: AddressShow({\n addressFormat: addressFormat.getAddressFormat(address.ThreeLetterISORegionName || ''),\n address,\n addressPurposes\n }),\n error: {\n Error: { className: `${className}-error` },\n isShowError: !!isShowError,\n title: ,\n message: \n },\n isShowPrimaryButton: showPrimaryButton,\n\n primaryButton: (\n {\n onUpdatePrimaryAddress(address);\n }\n }}\n />\n ),\n editButton: (\n {\n onEditAddress(address);\n },\n role: 'link'\n }}\n />\n ),\n removeButton: (\n {\n onRemoveAddress(address);\n },\n role: 'link'\n }}\n />\n )\n };\n }\n )\n };\n};\n\nconst getPrimaryAddressList = (props: IAddressListInputProps): IAddressList => {\n const { addresses, primaryAddressSectionHeading } = props;\n const primaryAddresses = addresses.filter((address: Address) => address.IsPrimary);\n return getAddressList('msc-address-list__primary', primaryAddresses, false, props, primaryAddressSectionHeading);\n};\n\nconst getOtherAddressList = (props: IAddressListInputProps): IAddressList => {\n const { addresses, otherAddressSectionHeading } = props;\n const otherAddresses = addresses.filter((address: Address) => !address.IsPrimary);\n return getAddressList('msc-address-list__primary', otherAddresses, true, props, otherAddressSectionHeading);\n};\n\nexport const AddressList = (props: IAddressListInputProps): IAddressListProps => {\n const { addresses, heading, resources, onAddAddress, telemetryContent, handleLineItemHeadingChange } = props;\n const headingComponent = heading?.text && (\n {\n // Required\n },\n requestContext: props.contextRequest\n }}\n />\n );\n\n return {\n ListAddress: { className: 'ms-address-list' },\n heading: headingComponent,\n isShowEmptyListMessage: addresses.length === 0,\n emptyListMessage:

{resources.addressEmptyListAddressMessage}

,\n addButton: (\n \n ),\n primaryAddressList: getPrimaryAddressList(props),\n otherAddressList: getOtherAddressList(props)\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Address, AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { format, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { AddressFormat } from '../address-format';\nimport { IAddressResource } from '../address-module.data';\nimport AddressButtonComponent from './address-button';\nimport AddressInputComponent from './address-input';\nimport { AddressShow, IAddressShowProps } from './address-show';\n\nexport interface IAddressSelectInputProps {\n hasExternalSubmitGroup?: boolean;\n addressFormat: AddressFormat;\n addresses: Address[];\n addressPurposes: AddressPurpose[];\n resources: IAddressResource;\n selectedAddress: Address;\n telemetryContent?: ITelemetryContent;\n onAddressOptionChange(event: React.ChangeEvent): void;\n onAddAddress(): void;\n onSave(): void;\n onCancel(): void;\n}\n\nexport interface IAddressSelectItem {\n key: number;\n SelectItem: INodeProps;\n input: React.ReactNode;\n showItems: IAddressShowProps;\n}\n\nexport interface IAddressSelectProps {\n SelectAddress: INodeProps;\n addButton: React.ReactNode;\n items: IAddressSelectItem[];\n isShowSaveButton: boolean;\n saveButton: React.ReactNode;\n isShowCancelButton: boolean;\n cancelButton: React.ReactNode;\n}\n\nconst getInput = (index: number, address: Address, props: IAddressSelectInputProps): React.ReactNode => {\n const { addresses, onAddressOptionChange, selectedAddress, resources, addressPurposes } = props;\n const addType = address.AddressTypeValue ? addressPurposes[address.AddressTypeValue - 1].Name : '';\n const ichecked = address.RecordId === selectedAddress.RecordId;\n const additionalAttributes = {\n checked: ichecked,\n 'aria-checked': ichecked,\n 'aria-setsize': addresses.length,\n 'aria-posinset': index + 1,\n 'aria-label': format(resources.addressChangeCheckboxAriaLabel, addType)\n };\n\n return (\n \n );\n};\n\nconst getAddressSelectItems = (props: IAddressSelectInputProps): IAddressSelectItem[] => {\n const { addresses, addressFormat, addressPurposes } = props;\n\n return addresses.map((address, index) => {\n return {\n key: address.RecordId || 0,\n SelectItem: { className: 'msc-address-select__item' },\n input: getInput(index, address, props),\n showItems: AddressShow({\n addressFormat: addressFormat.getAddressFormat(address.ThreeLetterISORegionName || ''),\n address,\n addressPurposes\n })\n };\n });\n};\n\nexport const AddressSelect = (props: IAddressSelectInputProps): IAddressSelectProps => {\n const { resources, onCancel, onSave, onAddAddress, hasExternalSubmitGroup } = props;\n\n return {\n SelectAddress: { className: 'msc-address-select' },\n addButton: (\n \n ),\n isShowSaveButton: !hasExternalSubmitGroup,\n saveButton: (\n \n ),\n isShowCancelButton: !hasExternalSubmitGroup,\n cancelButton: (\n \n ),\n items: getAddressSelectItems(props)\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Address, AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { AddressItemType, IAddressItem } from '../address-format.data';\nimport AddressDetailItemComponent from './address-detail-item';\n\nexport interface IAddressShowItem {\n key: string;\n description: React.ReactNode;\n}\n\nexport interface IAddressShowProps {\n AddressDetail: INodeProps;\n items: IAddressShowItem[];\n}\n\nexport interface IAddressShowInputProps {\n addressFormat: IAddressItem[];\n address: Address;\n addressPurposes: AddressPurpose[];\n}\n\nexport const AddressShow = (props: IAddressShowInputProps): IAddressShowProps => {\n const { addressFormat, addressPurposes, address } = props;\n\n return {\n AddressDetail: { className: 'msc-address-detail' },\n items: addressFormat.map(item => {\n if (item.name === AddressItemType[AddressItemType.AddressTypeValue]) {\n const addressType = addressPurposes.find(\n addressTypeValue => addressTypeValue.AddressType.toString() === (address[item.name] || '').toString()\n );\n if (addressType) {\n const value = addressType.Name || '';\n return {\n key: item.name,\n description: (\n \n )\n };\n }\n }\n return {\n key: item.name,\n description: (\n \n )\n };\n })\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy';\nimport { format as formatNotification, getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { action, observable, reaction, set } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { AutoSuggest } from '../../common/address-autosuggest';\nimport { IAutoSuggestOptions } from '../../common/address-autosuggest.data';\nimport { AddressCommon } from '../../common/address-common';\nimport { AddressFormat } from '../../common/address-format';\nimport { AddressItemType } from '../../common/address-format.data';\nimport { AddressMetaData } from '../../common/address-meta-data';\nimport { AddressOperation, AddressType, IAddressResource, IAddressResponse } from '../../common/address-module.data';\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { AddressList, IAddressListProps } from '../../common/components/address-list';\nimport { IAccountManagementAddressData } from './account-management-address.data';\nimport { IAccountManagementAddressProps } from './account-management-address.props.autogenerated';\n\n/**\n * Account management address view state interface.\n */\nexport interface IAccountManagementAddressViewState {\n isShowAddresList: boolean;\n isShowAddOrUpdateAddress: boolean;\n}\n\n/**\n * Account management address view state interface.\n */\nexport interface IAccountManagementAddressViewProps extends React.Component> {\n className: string;\n currentOperation: AddressOperation;\n selectedAddress?: Address;\n addUpdateAddress: Address;\n countryRegionId: string;\n stateProvinceInfo?: StateProvinceInfo[];\n customerAddresses: Address[];\n validationError: object;\n addressActionResponse?: IAddressResponse;\n viewState: IAccountManagementAddressViewState;\n AccountAddressManagement: IModuleProps;\n isUpdating: boolean;\n showAddressList: IAddressListProps;\n showAddOrUpdateAddress: IAddressAddUpdateProps;\n screenReaderNotification: React.ReactNode;\n infoMessageBar?: React.ReactNode;\n}\n\n/**\n *\n * Address component.\n * @extends {React.Component>}\n */\n@observer\nclass AccountManagementAddress extends React.Component> {\n @observable private currentOperation: AddressOperation;\n @observable private selectedAddress?: Address;\n @observable private countryRegionId: string = 'USA';\n @observable private stateProvinceInfo?: StateProvinceInfo[];\n @observable private customerAddresses: Address[];\n @observable private addUpdateAddress: Address;\n @observable private validationError: object;\n @observable private addressActionResponse?: IAddressResponse;\n @observable private isUpdating?: boolean;\n @observable private hasError?: boolean;\n @observable private removeAddressData?: Address;\n\n private readonly addressCommon: AddressCommon;\n private addressFormat: AddressFormat;\n private countryRegions: CountryRegionInfo[] = [];\n private addressPurposes: AddressPurpose[] = [];\n private readonly resources: IAddressResource;\n private readonly defaultAddressType: number = 6; // Default to Home\n private readonly telemetryContent: ITelemetryContent;\n private autoSuggest?: AutoSuggest;\n\n private readonly asyncCustAddressCreationFeatureName: string = 'Dynamics.AX.Application.RetailAsyncAddressCreationFeature';\n private asyncCustomerAddressCreationFeatureIsEnabled?: boolean = false;\n\n public constructor(props: IAccountManagementAddressProps) {\n super(props);\n const { context, data, resources, telemetry } = this.props;\n\n this.resources = resources;\n this.currentOperation = AddressOperation.List;\n this.countryRegions = data.countryRegions.result || [];\n this.addressPurposes = data.addressPurposes.result || [];\n this.customerAddresses = data.address.result || [];\n this.addUpdateAddress = {};\n this.validationError = {};\n this.addressCommon = new AddressCommon(context, resources, telemetry);\n this.addressFormat = new AddressFormat(\n this.countryRegions,\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\n this.addressPurposes\n );\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public async componentDidMount(): Promise {\n const {\n context: {\n telemetry,\n actionContext: {\n requestContext: { channel }\n }\n },\n config: { autoSuggestionEnabled, autoSuggestOptions }\n } = this.props;\n\n // Initializing data props\n this._dataInitialize(this.props);\n\n if (this.props.data.countryRegions.result !== undefined) {\n this._setDefaultCountryRegionId();\n }\n\n reaction(\n () => this.countryRegionId,\n () => {\n this._getStateProvinces();\n }\n );\n\n reaction(\n () => this.currentOperation,\n () => {\n this._getStateProvinces();\n }\n );\n\n if (autoSuggestionEnabled) {\n if (channel && !channel.BingMapsApiKey) {\n telemetry.error('BingMapsApiKey is missing.');\n return;\n }\n\n if (channel && !channel.BingMapsEnabled) {\n telemetry.error('Map is disabled from HQ.');\n return;\n }\n\n const options: IAutoSuggestOptions = { ...autoSuggestOptions };\n this.autoSuggest = new AutoSuggest(\n telemetry,\n options,\n channel?.BingMapsApiKey,\n channel?.ChannelCountryRegionISOCode,\n channel?.DefaultLanguageId\n );\n\n reaction(\n () =>\n this.props.data.storeSelectorStateManager.result?.loadMapApi !== undefined &&\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update),\n async () => {\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\n }\n );\n\n reaction(\n () => {\n this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\n },\n async () => {\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\n await this._attachMapAutoSuggest();\n }\n }\n );\n }\n }\n\n /**\n * Component did mount function.\n */\n public async componentDidUpdate(): Promise {\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\n await this._attachMapAutoSuggest();\n }\n } else {\n this.autoSuggest?.disposeAutoSuggest();\n }\n }\n\n /**\n * Should component update function.\n * @param nextProps - Account management address props.\n * @param nextState - Next state.\n * @returns - True if component should update, false otherwise.\n */\n public shouldComponentUpdate(\n nextProps: IAccountManagementAddressProps,\n nextState: IAccountManagementAddressViewState\n ): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { renderView, config, resources, data } = this.props;\n const customerInformation = data.customerInformation.result;\n\n // Set the feature state value for 'Async Customer Address Creation'.\n this.asyncCustomerAddressCreationFeatureIsEnabled =\n data.featureState?.result?.find(feature => feature.Name === this.asyncCustAddressCreationFeatureName)?.IsEnabled || false;\n\n const viewProps = {\n ...this.props,\n infoMessageBar: (this.props.context.app?.config?.canRenderAsyncCustomerDataAsUnmodifiable || false) &&\n (customerInformation?.IsAsyncCustomer || false) && (\n \n ),\n currentOperation: this.currentOperation,\n selectedAddress: this.selectedAddress,\n addUpdateAddress: this.addUpdateAddress,\n countryRegionId: this.countryRegionId,\n stateProvinceInfo: this.stateProvinceInfo,\n customerAddresses: this.customerAddresses,\n validationError: this.validationError,\n addressActionResponse: this.addressActionResponse,\n isUpdating: this.isUpdating,\n hasError: this.hasError,\n className: config.className,\n viewState: {\n isShowAddresList: this.currentOperation === AddressOperation.List,\n isShowAddOrUpdateAddress: this.currentOperation !== AddressOperation.List\n },\n AccountAddressManagement: {\n moduleProps: this.props,\n className: classnames('ms-account-management-address', config.className)\n },\n showAddressList: this._renderListAddress(),\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress(),\n screenReaderNotification: this.removeAddressData ? this._renderScreenReaderRemoveText(this.removeAddressData) : null\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * On Suggestion Selected Function.\n * @param result - Microsoft.Maps.ISuggestionResult.\n */\n @action\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\n this._clearAddressFields();\n const address = this.addressFormat.getTranformedAddress(result, this.stateProvinceInfo);\n set(this.addUpdateAddress, { Street: '' });\n set(this.addUpdateAddress, { ZipCode: address.ZipCode });\n set(this.addUpdateAddress, { CountyName: address.CountyName });\n set(this.addUpdateAddress, { City: address.City });\n set(this.addUpdateAddress, { State: address.State });\n set(this.addUpdateAddress, { DistrictName: address.DistrictName });\n set(this.addUpdateAddress, { FullAddress: address.FullAddress });\n\n // Bing autosuggest put the complete address in the Street input box. Updating the street input box to show only street address.\n setTimeout(() => {\n set(this.addUpdateAddress, { Street: address.Street });\n }, 0);\n };\n\n /**\n * Clear Address Fields.\n */\n @action\n private readonly _clearAddressFields = (): void => {\n const addressFormatItem = this.addressFormat.getAddressFormat(\n this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\n );\n addressFormatItem.forEach(format => {\n if (this.addUpdateAddress[format.name] !== undefined && !this.autoSuggest?.excludedAddressFields.includes(format.name)) {\n this.addressFormat[format.name] = '';\n }\n });\n this._clearValidation();\n };\n\n /**\n * Clear Validation Function.\n */\n @action\n private readonly _clearValidation = (): void => {\n this.validationError = {};\n };\n\n /**\n * Method data initialization.\n * @param props -The account management props.\n */\n private readonly _dataInitialize = (props: IAccountManagementAddressProps): void => {\n const { data } = props;\n\n reaction(\n () => data.countryRegions.result,\n () => {\n this.countryRegions = data.countryRegions.result ?? [];\n }\n );\n\n reaction(\n () => data.addressPurposes.result,\n () => {\n this.addressPurposes = data.addressPurposes.result ?? [];\n }\n );\n\n reaction(\n () => data.address.result,\n () => {\n this.customerAddresses = data.address.result ?? [];\n }\n );\n };\n\n /**\n * Render Add Or Update Address Function.\n * @returns - AddressAddUpdate.\n */\n private readonly _renderAddOrUpdateAddress = (): IAddressAddUpdateProps => {\n return AddressAddUpdate({\n isUpdating: this.isUpdating,\n resources: this.resources,\n addressType: AddressType.Shipping,\n addressFormat: this.addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId),\n defaultCountryRegionId: this.countryRegionId,\n defaultAddressType: this.defaultAddressType,\n selectedAddress: this.addUpdateAddress,\n validationError: this.validationError,\n addressActionResponse: this.addressActionResponse,\n dropdownDisplayData: this.addressFormat.getPrefilledAddressDropdownData(\n this.resources.addressStateDefaultSelectionText,\n this.stateProvinceInfo\n ),\n telemetryContent: this.telemetryContent,\n onInputChange: this._onAddressAddUpdateInputChange,\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\n onSave: this._onAddressAddUpdateSubmit,\n onCancel: this._resetView\n });\n };\n\n /**\n * Render List Address Function.\n * @returns - AddressList.\n */\n private readonly _renderListAddress = (): IAddressListProps => {\n const { config } = this.props;\n\n /**\n * Render Address title.\n * @param event - Msdyn365.ContentEditableEvent.\n */\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n config.heading!.text = event.target.value;\n };\n const heading = config.heading && {\n text: config.heading.text,\n headingTag: config.heading.tag\n };\n\n return AddressList({\n isUpdating: this.isUpdating,\n selectedAddress: this.selectedAddress,\n addressFormat: this.addressFormat,\n addresses: this.customerAddresses,\n addressPurposes: this.addressPurposes,\n resources: this.resources,\n heading,\n primaryAddressSectionHeading: config.primaryAddressSectionHeading,\n otherAddressSectionHeading: config.otherAddressSectionHeading,\n contextRequest: this.props.context.request,\n telemetryContent: this.telemetryContent,\n handleLineItemHeadingChange,\n onEditAddress: this._goToEditAddress,\n onRemoveAddress: this._onRemoveAddress,\n onAddAddress: this._goToAddAddress,\n onUpdatePrimaryAddress: this._onSubmitUpdatePrimaryAddress,\n isAsyncCustomerAddressCreationFeatureEnabled: this.asyncCustomerAddressCreationFeatureIsEnabled || false,\n isAsyncCustomer: this.props.data.customerInformation.result?.IsAsyncCustomer || false,\n canRenderAsyncCustomerDataAsUnmodifiable: this.props.context.app?.config?.canRenderAsyncCustomerDataAsUnmodifiable || false\n });\n };\n\n /**\n * Attach Map Auto Suggest Function.\n */\n private readonly _attachMapAutoSuggest = async (): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager?.isMapApiLoaded) {\n this.autoSuggest?.attachAutoSuggest('#shipping_addressstreet', '#shipping_addressstreet_container', this._onSuggestionSelected);\n }\n };\n\n /**\n * On Address Add Update Function.\n * @param name - String.\n * @param value - String | Boolean | Number.\n */\n private readonly onAddressAddUpdate = (name: string, value: string | boolean | number) => {\n set(this.addUpdateAddress, { [name]: value });\n this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId, name);\n };\n\n /**\n * On Address Add Update Input Change.\n * @param event - Input Change Event.\n */\n private readonly _onAddressAddUpdateInputChange = (event: React.ChangeEvent): void => {\n if (event.target.type === 'checkbox') {\n this.onAddressAddUpdate(event.target.name, event.target.checked);\n } else {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n this.onAddressAddUpdate(event.target.name, value);\n }\n };\n\n /**\n * On Address Add Update Dropdown Change.\n * @param event - Dropdown Change Event.\n */\n private readonly _onAddressAddUpdateDropdownChange = (event: React.ChangeEvent): void => {\n if (event.target.name === AddressItemType[AddressItemType.AddressTypeValue]) {\n this.onAddressAddUpdate(event.target.name, +event.target.value);\n } else {\n this.onAddressAddUpdate(event.target.name, event.target.value);\n }\n if (event.target.name === AddressItemType[AddressItemType.ThreeLetterISORegionName]) {\n this._onCountryChange(event.target.value);\n }\n };\n\n /**\n * On Address Update Function.\n * @param response - Promise.\n * @param onSuccess - IAddressResponse.\n */\n private readonly _onAddressUpdate = (response: Promise, onSuccess: (response: IAddressResponse) => void): void => {\n this.isUpdating = true;\n response.then(\n (result: IAddressResponse) => {\n if (result.address) {\n this.hasError = false;\n onSuccess(result);\n } else {\n this.hasError = true;\n this.addressActionResponse = result;\n }\n this.isUpdating = false;\n },\n () => {\n this.hasError = true;\n this.isUpdating = false;\n }\n );\n };\n\n /**\n * On Address Add Update Submit Function.\n */\n private readonly _onAddressAddUpdateSubmit = (): void => {\n if (!this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId)) {\n return;\n }\n let response: Promise;\n if (this.addressCommon.isAuthenticatedFlow()) {\n response =\n this.currentOperation === AddressOperation.Update\n ? this.addressCommon.updateCustomerAddress(this.addUpdateAddress)\n : this.addressCommon.addCustomerAddress(this.addUpdateAddress);\n } else {\n response = Promise.resolve({ address: this.addUpdateAddress });\n }\n\n this._onAddressUpdate(response, this._onAddOrUpdateSuccess);\n };\n\n /**\n * On Country Change Function.\n * @param countryRegionId - String.\n */\n private readonly _onCountryChange = (countryRegionId: string) => {\n this.countryRegionId = countryRegionId;\n const twoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(countryRegionId);\n set(this.addUpdateAddress, { ThreeLetterISORegionName: countryRegionId });\n set(this.addUpdateAddress, { TwoLetterISORegionName: twoLetterISORegionName });\n this.autoSuggest?.changeAutoSuggestionCountryCode(twoLetterISORegionName);\n this._clearAddressFields();\n };\n\n /**\n * Get Address Format Exclude List Function.\n * @returns - Address Format Exclude List.\n */\n private readonly _getAddressFormatExcludeList = (): AddressItemType[] => {\n const { config } = this.props;\n const addressFormatExcludeList: AddressItemType[] = [];\n\n if (!config.showAddressType) {\n addressFormatExcludeList.push(AddressItemType.AddressTypeValue);\n }\n\n addressFormatExcludeList.push(AddressItemType.IsPrimary);\n\n return addressFormatExcludeList;\n };\n\n /**\n * Get State Provinces Function.\n */\n private readonly _getStateProvinces = (): void => {\n if (\n !this.countryRegionId ||\n !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\n ) {\n return;\n }\n\n this.addressCommon.getStateProvinces(this.countryRegionId).then((result: StateProvinceInfo[]) => {\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\n\n // Reset state if selected state not found in the list.\n if (!stateInfo) {\n set(this.addUpdateAddress, { State: '' });\n }\n this.stateProvinceInfo = result;\n });\n };\n\n private _setDefaultCountryRegionId(): void {\n const { request } = this.props.context;\n const market = request && request.channel && request.channel.ChannelCountryRegionISOCode;\n\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\n }\n\n /**\n * Update CurrentOperation Function.\n * @param operation - AddressOperation.\n */\n private readonly _updateCurrentOperation = (operation: AddressOperation) => {\n this.currentOperation = operation;\n this._clearAddressFields();\n };\n\n /**\n * On Submit Update Primary Address Function.\n * @param address - Address.\n */\n private readonly _onSubmitUpdatePrimaryAddress = (address: Address): void => {\n this.selectedAddress = address;\n const response = this.addressCommon.updateCustomerPrimaryAddress(address);\n this._onAddressUpdate(response, this._onUpdatePrimaryAddressSuccess);\n };\n\n /**\n * Go To Edit Address Function.\n * @param address - Address.\n */\n private readonly _goToEditAddress = (address: Address): void => {\n this.addUpdateAddress = { ...address };\n this.countryRegionId = this.addUpdateAddress.ThreeLetterISORegionName || 'USA';\n this._updateCurrentOperation(AddressOperation.Update);\n };\n\n /**\n * On Remove Address Function.\n * @param address - Address.\n */\n private readonly _onRemoveAddress = (address: Address): void => {\n address.Deactivate = true;\n this.removeAddressData = address;\n const response = this.addressCommon.updateCustomerAddress(address);\n this._onAddressUpdate(response, this._onAddOrUpdateSuccess);\n };\n\n /**\n * Renders Notification screen reader text for removed address.\n * @param address - Address input.\n * @returns Notification for removed address.\n */\n private readonly _renderScreenReaderRemoveText = (address: Address): React.ReactNode => {\n const notification = formatNotification(this.resources.removeAddressNotification!, `${address.Name!}`);\n return (\n
\n {notification}\n
\n );\n };\n\n /**\n * Go To Add Address Function.\n */\n private readonly _goToAddAddress = (): void => {\n this.addUpdateAddress = {};\n this._setDefaultCountryRegionId();\n set(this.addUpdateAddress, { ThreeLetterISORegionName: this.countryRegionId });\n set(this.addUpdateAddress, { AddressTypeValue: this.defaultAddressType });\n this._setDefaultCountryRegionId();\n this._updateCurrentOperation(AddressOperation.Add);\n };\n\n /**\n * On Add Or Update Success Function.\n * @param response - IAddressResponse.\n */\n private readonly _onAddOrUpdateSuccess = (response: IAddressResponse): void => {\n if (response.customerAddresses) {\n this.customerAddresses = response.customerAddresses;\n }\n this._resetView();\n };\n\n /**\n * On Update Primary Address Success Function.\n * @param response - IAddressResponse.\n */\n private readonly _onUpdatePrimaryAddressSuccess = (response: IAddressResponse): void => {\n if (response.customerAddresses) {\n this.customerAddresses = response.customerAddresses;\n }\n };\n\n /**\n * Reset view function.\n */\n private readonly _resetView = (): void => {\n this.selectedAddress = undefined;\n this._updateCurrentOperation(AddressOperation.List);\n };\n}\n\nexport default AccountManagementAddress;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAddressAddItem, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { IAddressList, IAddressListItem, IAddressListProps } from '../../common/components/address-list';\nimport { IAddressShowItem, IAddressShowProps } from '../../common/components/address-show';\nimport { IAccountManagementAddressViewProps } from './account-management-address';\n\n/**\n * Address show component.\n * @param param0 - Root param.\n * @param param0.AddressDetail - Address detail.\n * @param param0.items - IAddressShowItem[].\n * @returns - Address Node.\n */\nconst AddressShow: React.FC = ({ AddressDetail, items }) => {\n return (\n \n {items.map((item: IAddressShowItem) => {\n return <>{item.description};\n })}\n \n );\n};\n\n/**\n * Address List Component.\n * @param param0 - Root param.\n * @param param0.List - Address list.\n * @param param0.isShowList - Boolean.\n * @param param0.heading - Address heading.\n * @param param0.items - IAddressListItem[].\n * @returns - AddressListComponent Node.\n */\nconst AddressList: React.FC = ({ List, isShowList, heading, items }) => {\n if (!isShowList) {\n return null;\n }\n\n return (\n \n {heading}\n {items.map((item: IAddressListItem) => {\n const { Item, key, error, showItems, isShowPrimaryButton, primaryButton, editButton, removeButton } = item;\n const { Error, isShowError, title, message } = error;\n return (\n \n \n {isShowError && (\n \n {title}\n {message}\n \n )}\n {isShowPrimaryButton && primaryButton}\n {editButton}\n {removeButton}\n \n );\n })}\n \n );\n};\n\n/**\n * Address Lists Component.\n * @param param0 - Root param.\n * @param param0.ListAddress - List address.\n * @param param0.heading - List heading.\n * @param param0.isShowEmptyListMessage - Boolean.\n * @param param0.emptyListMessage - Empty list message.\n * @param param0.addButton - Add button.\n * @param param0.primaryAddressList - Primary address.\n * @param param0.otherAddressList - Other address.\n * @returns Address Lists Component Node.\n */\nconst AddressLists: React.FC = ({\n ListAddress,\n heading,\n isShowEmptyListMessage,\n emptyListMessage,\n addButton,\n primaryAddressList,\n otherAddressList\n}) => {\n return (\n \n {heading}\n {isShowEmptyListMessage && emptyListMessage}\n {addButton}\n \n \n \n );\n};\n\n/**\n * AddressAddUpdateComponent.\n * @param param0 - Root param.\n * @param param0.AddressForm - Address form.\n * @param param0.heading - Address heading.\n * @param param0.items - IAddressAddItem[].\n * @param param0.hasError - Boolean.\n * @param param0.error - Error message.\n * @param param0.isShowSaveButton - Boolean.\n * @param param0.saveButton - Save button.\n * @param param0.isShowCancelButton - Boolean.\n * @param param0.cancelButton - Cancel button.\n * @returns Address add update component node.\n */\nconst AddressAddUpdate: React.FC = ({\n AddressForm,\n heading,\n items,\n hasError,\n error,\n isShowSaveButton,\n saveButton,\n isShowCancelButton,\n cancelButton\n}) => {\n return (\n \n {heading}\n {items.map((item: IAddressAddItem) => {\n const { AddressItem, key, label, alert, input } = item;\n return (\n \n {label}\n {alert}\n {input}\n \n );\n })}\n {hasError && (\n \n {error.title}\n {error.message}\n \n )}\n {isShowSaveButton && saveButton}\n {isShowCancelButton && cancelButton}\n \n );\n};\n\n/**\n * Account Management Address View Component.\n * @param props - Props.\n * @returns - AccountAddressManagement Module.\n */\nconst AccountManagementAddressView: React.FC = props => {\n const {\n AccountAddressManagement,\n infoMessageBar,\n viewState,\n showAddressList,\n showAddOrUpdateAddress,\n screenReaderNotification\n } = props;\n\n return (\n \n {infoMessageBar}\n {viewState.isShowAddresList && }\n {viewState.isShowAddOrUpdateAddress && }\n {screenReaderNotification}\n \n );\n};\n\nexport default AccountManagementAddressView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy';\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observable, reaction, set } from 'mobx';\nimport * as React from 'react';\n\nimport { AddressCommon } from '../../common/address-common';\nimport { AddressFormat } from '../../common/address-format';\nimport { AddressItemDisplayType, AddressItemType, AddressValidationRuleType, IAddressItem } from '../../common/address-format.data';\nimport { AddressMetaData } from '../../common/address-meta-data';\nimport { AddressOperation, AddressType, IAddressResource, IAddressResponse } from '../../common/address-module.data';\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { IBusinessAccountAddressData } from './business-account-address.data';\nimport { IBusinessAccountAddressProps } from './business-account-address.props.autogenerated';\n\n/**\n * Interface for IBusinessAccountAddressExtendedProps.\n */\nexport interface IBusinessAccountAddressExtendedProps extends IBusinessAccountAddressProps {\n hasError: boolean;\n isRequired: boolean;\n resetAddress: boolean;\n updateForm(errors: boolean, currentAddress?: Address): void;\n}\n\n/**\n * Interface for IBusinessAccountAddressState.\n */\nexport interface IBusinessAccountAddressState {\n countryId?: string;\n states?: StateProvinceInfo[];\n}\n\n/**\n * Interface for IBusinessAccountAddressViewProps.\n */\nexport interface IBusinessAccountAddressViewProps {\n className: string;\n currentOperation: AddressOperation;\n selectedAddress?: Address;\n addUpdateAddress: Address;\n addressListSelectedAddress: Address;\n countryRegionId: string;\n stateProvinceInfo?: StateProvinceInfo[];\n customerAddresses: Address[];\n validationError: object;\n addressActionResponse?: IAddressResponse;\n BusinessAccountAddress: IModuleProps;\n isUpdating: boolean;\n hasError: boolean;\n showAddOrUpdateAddress: IAddressAddUpdateProps;\n}\n\n/**\n *\n * Address component.\n * @extends {React.Component, IBusinessAccountAddressState>}\n */\nclass BusinessAccountAddress extends React.Component {\n @observable private addUpdateAddress: Address;\n\n @observable private countryRegionId: string = 'USA';\n\n @observable private stateProvinceInfo?: StateProvinceInfo[];\n\n @observable private readonly validationError: object;\n\n private readonly addressActionResponse?: IAddressResponse;\n\n private readonly isUpdating?: boolean;\n\n private readonly addressCommon: AddressCommon;\n\n private addressFormat: AddressFormat;\n\n private countryRegions: CountryRegionInfo[] = [];\n\n private addressPurposes: AddressPurpose[] = [];\n\n private readonly resources: IAddressResource;\n\n private readonly defaultAddressType: number = 0; // Default to None (This value set in HQ as Business)\n\n private readonly shouldAutoFocus?: boolean = false;\n\n private readonly excludedList: AddressItemType[] = [AddressItemType.Name, AddressItemType.AddressTypeValue, AddressItemType.IsPrimary]; // Default to hiding Name and AddressType inputs\n\n private readonly telemetryContent: ITelemetryContent;\n\n public constructor(props: IBusinessAccountAddressExtendedProps) {\n super(props);\n\n const { context, data, resources, telemetry } = this.props;\n this.addUpdateAddress = {};\n this.resources = resources;\n this.countryRegions = data.countryRegions.result || [];\n this.addressPurposes = data.addressPurposes.result || [];\n this.stateProvinceInfo = data.countryStates.result || [];\n this.addressFormat = new AddressFormat(\n this.countryRegions,\n new AddressMetaData({ ...resources }, this.excludedList, props.isRequired ? undefined : []),\n this.addressPurposes\n );\n this.addressCommon = new AddressCommon(context, resources, telemetry);\n this.validationError = {};\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n // Initializing data props\n this._dataInitialize(this.props);\n\n this._setDefaultCountryRegionId();\n }\n\n public shouldComponentUpdate(nextProps: IBusinessAccountAddressExtendedProps, nextState: IBusinessAccountAddressState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { renderView, config, hasError, resetAddress } = this.props;\n\n // Business-sign-up will pass this flag when cancel button is clicked\n if (resetAddress) {\n this._resetAddressFields();\n }\n\n const viewProps = {\n ...this.props,\n countryRegionId: this.countryRegionId,\n stateProvinceInfo: this.stateProvinceInfo,\n validationError: this.validationError,\n addressActionResponse: this.addressActionResponse,\n hasError,\n className: config.className,\n BusinessAccountAddress: {\n moduleProps: this.props,\n className: classnames('ms-business-account-address', config.className)\n },\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress()\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Reset Address.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public _resetAddressFields = () => {\n const addressFormat = this.addressFormat.getAddressFormat(this.countryRegionId);\n\n addressFormat.map(addressFormatItem => {\n switch (addressFormatItem.displayType) {\n case AddressItemDisplayType.Input:\n this.addUpdateAddress[addressFormatItem.name] = '';\n break;\n case AddressItemDisplayType.Checkbox:\n this.addUpdateAddress[addressFormatItem.name] = false;\n break;\n default:\n switch (addressFormatItem.type) {\n case AddressItemType.ThreeLetterISORegionName:\n this.addUpdateAddress[addressFormatItem.name] = this.countryRegionId;\n break;\n case AddressItemType.AddressTypeValue:\n this.addUpdateAddress[addressFormatItem.name] = this.defaultAddressType;\n break;\n case AddressItemType.State:\n this.addUpdateAddress[addressFormatItem.name] = '';\n break;\n default:\n this.addUpdateAddress[addressFormatItem.name] = undefined;\n }\n }\n });\n };\n\n /**\n * Method data initialization.\n * @param props -The account management props.\n */\n private readonly _dataInitialize = (props: IBusinessAccountAddressExtendedProps): void => {\n const { data } = props;\n\n reaction(\n () => data.countryRegions.result,\n () => {\n this.countryRegions = data.countryRegions.result ?? [];\n }\n );\n\n reaction(\n () => data.addressPurposes.result,\n () => {\n this.addressPurposes = data.addressPurposes.result ?? [];\n }\n );\n\n reaction(\n () => data.countryStates.result,\n () => {\n this.stateProvinceInfo = data.countryStates.result ?? [];\n }\n );\n };\n\n // Set validationError and hasError to hide error messages since in the B2B\n // request form, no errors would visually show since user wont be able to submit\n // until form is filled and correct\n /**\n * Render Add Or Update Address Function.\n * @returns - AddressAddUpdate.\n */\n private readonly _renderAddOrUpdateAddress = (): IAddressAddUpdateProps => {\n return AddressAddUpdate({\n isUpdating: this.isUpdating,\n resources: this.resources,\n addressType: AddressType.Company,\n addressFormat: this.addressFormat.getAddressFormat(this.countryRegionId),\n defaultCountryRegionId: this.countryRegionId,\n defaultAddressType: this.defaultAddressType,\n selectedAddress: this.addUpdateAddress,\n shouldAutoFocus: this.shouldAutoFocus,\n validationError: this.validationError,\n hasError: this.props.hasError,\n addressActionResponse: this.addressActionResponse,\n telemetryContent: this.telemetryContent,\n dropdownDisplayData: this.addressFormat.getPrefilledAddressDropdownData(\n this.resources.addressStateDefaultSelectionText,\n this.stateProvinceInfo\n ),\n onInputChange: this._onAddressAddUpdateInputChange,\n onDropdownChange: this._onAddressAddUpdateDropdownChange\n });\n };\n\n /**\n * On Address Add Update Input Change Function.\n * @param event - Input event change function.\n */\n private readonly _onAddressAddUpdateInputChange = (event: React.ChangeEvent): void => {\n this._updateAddress(event.target.name, event.target.value);\n };\n\n /**\n * On Address Add Update Dropdown Change Function.\n * @param event - Change dropdown event.\n */\n private readonly _onAddressAddUpdateDropdownChange = async (event: React.ChangeEvent): Promise => {\n if (event.target.name === AddressItemType[AddressItemType.ThreeLetterISORegionName]) {\n await this._updateCountryRegionId(event.target.value);\n } else {\n this._updateAddress(event.target.name, event.target.value);\n }\n };\n\n /**\n * Update Address Function.\n * @param name - String.\n * @param value - String.\n */\n private readonly _updateAddress = (name: string, value: string | number) => {\n const { updateForm, isRequired, resources } = this.props;\n let cleanValue = value;\n if (typeof value === 'string') {\n cleanValue = (value || '').replace(new RegExp('[<>]', 'gi'), '');\n }\n set(this.addUpdateAddress, { [name]: cleanValue });\n\n if (this._isEmpty()) {\n if (isRequired) {\n updateForm(true, undefined);\n } else {\n // Reset addressFormat as if address was NOT a required field\n this.addressFormat = new AddressFormat(\n this.countryRegions,\n new AddressMetaData({ ...resources }, this.excludedList, []),\n this.addressPurposes\n );\n updateForm(false, this.addUpdateAddress);\n }\n } else {\n // Get new addressFormat if address was a required field\n this.addressFormat = new AddressFormat(\n this.countryRegions,\n new AddressMetaData({ ...resources }, this.excludedList, this.props.isRequired ? undefined : []),\n this.addressPurposes\n );\n\n // Verify with new rules\n if (this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId)) {\n updateForm(false, this.addUpdateAddress);\n } else {\n updateForm(true, undefined);\n }\n }\n };\n\n /**\n * Is empty Function.\n * @returns - Boolean.\n */\n // Walk through array and check if valued is defined or value is not an empty string\n private readonly _isEmpty = () => {\n const addressFormat = this.addressFormat.getAddressFormat(this.countryRegionId);\n for (const addressFormatItem of addressFormat) {\n if (addressFormatItem.type !== AddressItemType.ThreeLetterISORegionName || this._isInputRequired(addressFormatItem)) {\n const addressItemValue = this.addUpdateAddress[addressFormatItem.name];\n\n // Check each input field, if value is defined and not an empty string --> address is not empty\n if (addressItemValue || (addressItemValue && addressItemValue !== '')) {\n return false;\n }\n }\n }\n\n return true;\n };\n\n /**\n * Is Input Required Function.\n * @param addressFormatItem - IAddressItem.\n * @returns - Boolean.\n */\n private readonly _isInputRequired = (addressFormatItem: IAddressItem): boolean => {\n if (\n ObjectExtensions.isNullOrUndefined(addressFormatItem) ||\n !addressFormatItem.validationRules ||\n addressFormatItem.validationRules.length === 0\n ) {\n return false;\n }\n\n for (const validationRule of addressFormatItem.validationRules) {\n if (validationRule.type === AddressValidationRuleType.Required) {\n return false;\n }\n }\n\n return true;\n };\n\n private _setDefaultCountryRegionId(): void {\n const { request } = this.props.context;\n const market = request.channel?.ChannelCountryRegionISOCode;\n\n this._updateCountryRegionId(this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market));\n\n // Set default AddressType\n set(this.addUpdateAddress, { AddressTypeValue: this.defaultAddressType });\n }\n\n /**\n * Update Country Region Id Function.\n * @param value - String.\n */\n private readonly _updateCountryRegionId = async (value: string) => {\n this.countryRegionId = value;\n\n await this.addressCommon.getStateProvinces(this.countryRegionId).then((result: StateProvinceInfo[]) => {\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\n\n // Reset state if selected state not found in the list.\n if (!stateInfo) {\n this._updateAddress('State', '');\n }\n\n this.stateProvinceInfo = result;\n });\n\n this._updateAddress('ThreeLetterISORegionName', this.countryRegionId);\n };\n}\n\nexport default BusinessAccountAddress;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAddressAddItem, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { IBusinessAccountAddressViewProps } from './business-account-address';\n\n/**\n * Address Add Update Component.\n * @param param0 - Root param.\n * @param param0.AddressForm - Address form.\n * @param param0.heading - Address Heading.\n * @param param0.items - IAddressAddItem[].\n * @param param0.hasError - Boolean.\n * @param param0.error - IAddressError.\n * @param param0.isShowSaveButton - Boolean.\n * @param param0.saveButton - Save button.\n * @param param0.isShowCancelButton - Boolean.\n * @param param0.cancelButton - Cancel button.\n * @returns - AddressForm Node.\n */\nconst AddressAddUpdate: React.FC = ({\n AddressForm,\n heading,\n items,\n hasError,\n error,\n isShowSaveButton,\n saveButton,\n isShowCancelButton,\n cancelButton\n}) => {\n return (\n \n {heading}\n {items.map((item: IAddressAddItem) => {\n const { AddressItem, key, label, alert, input } = item;\n return (\n \n {label}\n {hasError && alert}\n {input}\n \n );\n })}\n {hasError && (\n \n {error.title}\n {error.message}\n \n )}\n {isShowSaveButton && saveButton}\n {isShowCancelButton && cancelButton}\n \n );\n};\n\n/**\n * Business Account Address View Component.\n * @param props - Props.\n * @returns - BusinessAccountAddress Module.\n */\nconst BusinessAccountAddressView: React.FC = props => {\n const { BusinessAccountAddress, showAddOrUpdateAddress } = props;\n\n return (\n \n \n \n );\n};\n\nexport default BusinessAccountAddressView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CheckoutModule, ErrorLocation, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { action, computed, observable, reaction, set } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { AutoSuggest } from '../../common/address-autosuggest';\nimport { IAutoSuggestOptions } from '../../common/address-autosuggest.data';\nimport { AddressCommon } from '../../common/address-common';\nimport { AddressFormat } from '../../common/address-format';\nimport { AddressItemType } from '../../common/address-format.data';\nimport { AddressMetaData } from '../../common/address-meta-data';\nimport { AddressOperation, AddressType, IAddressResource, IAddressResponse } from '../../common/address-module.data';\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { AddressBillingCheckbox } from '../../common/components/address-billing-checkbox';\nimport { AddressBillingHeading } from '../../common/components/address-billing-heading';\nimport { AddressShow, IAddressShowProps } from '../../common/components/address-show';\nimport { ICheckoutBillingAddressData } from './checkout-billing-address.data';\nimport { ICheckoutBillingAddressProps } from './checkout-billing-address.props.autogenerated';\nimport { ErrorComponent } from '../../common';\nimport { focusOnCheckoutError } from '../../checkout-errors/checkout-errors';\n\n/**\n * Props interface.\n */\nexport interface IProps extends ICheckoutBillingAddressProps, IModuleStateProps {}\n\n/**\n * Checkout billing address view state interface.\n */\nexport interface ICheckoutBillingAddressViewState {\n isShowAddress: boolean;\n isShowAddOrUpdateAddress: boolean;\n isShowSameAsShippingCheckbox: boolean;\n errorMessage?: string;\n}\n\n/**\n * Checkout billing address view props interface.\n */\nexport interface ICheckoutBillingAddressViewProps extends IProps {\n className: string;\n currentOperation: AddressOperation;\n selectedAddress?: Address;\n addUpdateAddress: Address;\n countryRegionId: string;\n stateProvinceInfo?: StateProvinceInfo[];\n validationError: object;\n addressActionResponse?: IAddressResponse;\n viewState: ICheckoutBillingAddressViewState;\n CheckoutBillingAddress: IModuleProps;\n sameAsShippingCheckbox: React.ReactNode;\n heading: React.ReactNode;\n showAddress: IAddressShowProps;\n showAddOrUpdateAddress: IAddressAddUpdateProps;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n *\n * CheckoutBillingAddress component.\n * @extends {React.PureComponent>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutBillingAddress extends React.Component {\n @observable private currentOperation: AddressOperation;\n\n @observable private isBillingAddressSameAsShipping: boolean;\n\n @observable private selectedAddress?: Address;\n\n @observable private addUpdateAddress: Address;\n\n @observable private countryRegionId: string = 'USA';\n\n @observable private stateProvinceInfo?: StateProvinceInfo[];\n\n @observable private validationError: object;\n\n @observable private readonly addressActionResponse?: IAddressResponse;\n\n private readonly addressCommon: AddressCommon;\n\n private addressFormat: AddressFormat;\n\n private countryRegions: CountryRegionInfo[] = [];\n\n private addressPurposes: AddressPurpose[] = [];\n\n private readonly resources: IAddressResource;\n\n private readonly defaultAddressType: number = 6; // Default to Home\n\n // private addRenderRef: React.RefObject;\n private readonly telemetryContent?: ITelemetryContent;\n\n private autoSuggest?: AutoSuggest;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n public constructor(props: IProps) {\n super(props);\n const { context, data, resources, telemetry } = this.props;\n\n this.addUpdateAddress = {};\n this.validationError = {};\n this.isBillingAddressSameAsShipping = false;\n this.resources = resources;\n this.currentOperation = AddressOperation.List;\n this.addressPurposes = data.addressPurposes.result || [];\n this.countryRegions = data.countryRegions.result || [];\n this.stateProvinceInfo = data.countryStates.result || [];\n this.addressCommon = new AddressCommon(context, resources, telemetry);\n this.addressFormat = new AddressFormat(\n this.countryRegions,\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\n this.addressPurposes\n );\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n this.state = {\n isShowAddress: false,\n isShowAddOrUpdateAddress: false,\n isShowSameAsShippingCheckbox: false,\n errorMessage: ''\n };\n\n // This.addRenderRef = React.createRef();\n }\n\n public async componentDidMount(): Promise {\n const {\n context: {\n telemetry,\n actionContext: {\n requestContext: { channel }\n }\n },\n config: { autoSuggestionEnabled, autoSuggestOptions }\n } = this.props;\n\n // Initializing data props\n this._dataInitialize(this.props);\n\n this.props.data.checkout.then(() => {\n this._setDefaultCountryRegionId();\n this._initModuleState();\n });\n\n reaction(\n () => this.countryRegionId,\n () => {\n this._getStateProvinces();\n }\n );\n\n reaction(\n () => this.currentOperation,\n () => {\n this._getStateProvinces();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result && this.props.data.checkout.result.shippingAddress,\n shippingAddress => {\n if (this.props.moduleState.isUpdating) {\n if (shippingAddress && this.isBillingAddressSameAsShipping) {\n this.isBillingAddressSameAsShipping = true;\n this._updateCurrentOperation(AddressOperation.Show, shippingAddress);\n } else if (shippingAddress && this.isBillingAddressSameAsShipping) {\n this._updateCurrentOperation(AddressOperation.Show, shippingAddress);\n }\n }\n }\n );\n\n reaction(\n () => this.isBillingAddressRequried,\n isBillingAddressRequried => {\n if (isBillingAddressRequried) {\n if (this.props.moduleState.isDisabled) {\n this.onEdit();\n }\n } else {\n this.props.data.checkout.result?.removeBillingAddress({});\n this.props.moduleState.onDisable();\n }\n }\n );\n\n if (autoSuggestionEnabled) {\n if (channel && !channel.BingMapsApiKey) {\n telemetry.error('BingMapsApiKey is missing.');\n return;\n }\n\n if (channel && !channel.BingMapsEnabled) {\n telemetry.error('Map is disabled from HQ.');\n return;\n }\n\n const options: IAutoSuggestOptions = { ...autoSuggestOptions };\n this.autoSuggest = new AutoSuggest(\n telemetry,\n options,\n channel?.BingMapsApiKey,\n channel?.ChannelCountryRegionISOCode,\n channel?.DefaultLanguageId\n );\n\n // Customer doesn't have any address. Then add view will be loaded directly. Code for the same to handle that\n if (\n this.props.data.storeSelectorStateManager.result &&\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\n ) {\n await this.autoSuggest._loadMapAPI(await this.props.data.storeSelectorStateManager);\n }\n\n reaction(\n () =>\n this.props.data.storeSelectorStateManager.result?.loadMapApi &&\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update),\n async () => {\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\n }\n );\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.isMapApiLoaded,\n async () => {\n await this._attachMapAutoSuggest();\n }\n );\n }\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (\n checkoutError &&\n checkoutError.errorLocation === ErrorLocation.CheckoutBillingAddress &&\n checkoutError.errorMessage\n ) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutBillingAddress) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public async componentDidUpdate(): Promise {\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\n await this._attachMapAutoSuggest();\n }\n } else {\n this.autoSuggest?.disposeAutoSuggest();\n }\n }\n\n public shouldComponentUpdate(\n nextProps: ICheckoutBillingAddressProps,\n nextState: ICheckoutBillingAddressViewState\n ): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n if (!this.isBillingAddressRequried) {\n return null;\n }\n\n const {\n resources,\n moduleState: { hasError }\n } = this.props;\n\n const { renderView, config } = this.props;\n\n const errorMessage = this.state.errorMessage;\n\n const viewProps = {\n ...this.props,\n currentOperation: this.currentOperation,\n selectedAddress: this.selectedAddress,\n addUpdateAddress: this.addUpdateAddress,\n countryRegionId: this.countryRegionId,\n stateProvinceInfo: this.stateProvinceInfo,\n validationError: this.validationError,\n addressActionResponse: this.addressActionResponse,\n className: config.className,\n viewState: {\n isShowAddress: this.selectedAddress && this.currentOperation === AddressOperation.Show,\n isShowAddOrUpdateAddress: this.currentOperation !== AddressOperation.Show,\n isShowSameAsShippingCheckbox: this.isCartContainsItemsForShipping && this.props.moduleState.isUpdating\n },\n CheckoutBillingAddress: {\n moduleProps: this.props,\n className: classnames('ms-checkout-billing-address', config.className)\n },\n heading: ,\n alert: hasError && errorMessage && ,\n checkoutErrorRef: this.checkoutErrorRef,\n\n sameAsShippingCheckbox: (\n \n ),\n showAddress: this._renderShowAddress(),\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress()\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * On suggestion selected.\n * @param result - The suggestion result.\n */\n @action\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\n this._clearAddressFields();\n const address = this.addressFormat.getTranformedAddress(result, this.stateProvinceInfo);\n set(this.addUpdateAddress, { Street: '' });\n set(this.addUpdateAddress, { ZipCode: address.ZipCode });\n set(this.addUpdateAddress, { CountyName: address.CountyName });\n set(this.addUpdateAddress, { City: address.City });\n set(this.addUpdateAddress, { State: address.State });\n set(this.addUpdateAddress, { DistrictName: address.DistrictName });\n set(this.addUpdateAddress, { FullAddress: address.FullAddress });\n\n // Bing autosuggest put the complete address in the Street input box. Updating the street input box to show only street address.\n setTimeout(() => {\n set(this.addUpdateAddress, { Street: address.Street });\n }, 0);\n };\n\n /**\n * Clear address fields.\n */\n @action\n private readonly _clearAddressFields = (): void => {\n const addressFormatItem = this.addressFormat.getAddressFormat(\n this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\n );\n addressFormatItem.forEach(format => {\n if (this.addUpdateAddress[format.name] !== undefined && !this.autoSuggest?.excludedAddressFields.includes(format.name)) {\n this.addressFormat[format.name] = '';\n }\n });\n this._clearValidation();\n };\n\n /**\n * Clear validation.\n */\n @action\n private readonly _clearValidation = (): void => {\n this.validationError = {};\n };\n\n /**\n * On address update.\n * @param name - Name.\n * @param value - Value.\n */\n private readonly onAddressAddUpdate = (name: string, value: string) => {\n set(this.addUpdateAddress, { [name]: value });\n this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId, name);\n };\n\n /**\n * Method data initialization.\n * @param props -The checkout address properties.\n */\n private readonly _dataInitialize = (props: IProps): void => {\n const { data } = props;\n\n reaction(\n () => data.countryRegions.result,\n () => {\n this.countryRegions = data.countryRegions.result ?? [];\n }\n );\n\n reaction(\n () => data.addressPurposes.result,\n () => {\n this.addressPurposes = data.addressPurposes.result ?? [];\n }\n );\n\n reaction(\n () => data.countryStates.result,\n () => {\n this.stateProvinceInfo = data.countryStates.result ?? [];\n }\n );\n };\n\n /**\n * Render add or update address function.\n * @returns - Address add update props.\n */\n private readonly _renderAddOrUpdateAddress = (): IAddressAddUpdateProps => {\n return AddressAddUpdate({\n resources: this.resources,\n addressType: AddressType.Billing,\n addressFormat: this.addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName ?? this.countryRegionId),\n defaultCountryRegionId: this.countryRegionId,\n defaultAddressType: this.defaultAddressType,\n selectedAddress: this.addUpdateAddress,\n validationError: this.validationError,\n addressActionResponse: this.addressActionResponse,\n dropdownDisplayData: this.addressFormat.getPrefilledAddressDropdownData(\n this.resources.addressStateDefaultSelectionText,\n this.stateProvinceInfo\n ),\n telemetryContent: this.telemetryContent,\n onInputChange: this._onAddressAddUpdateInputChange,\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\n onSave: this._onSubmitAddress,\n onCancel: this._resetView\n });\n };\n\n private _renderShowAddress(): IAddressShowProps | null {\n if (this.selectedAddress) {\n return AddressShow({\n address: this.selectedAddress,\n addressFormat: this.addressFormat.getAddressFormat(this.selectedAddress.ThreeLetterISORegionName ?? ''),\n addressPurposes: this.addressPurposes\n });\n }\n\n return null;\n }\n\n /**\n * On country region change function.\n * @param countryRegionId - Country region Id.\n */\n private readonly _onCountryChange = (countryRegionId: string) => {\n this.countryRegionId = countryRegionId;\n const twoLetterIsoRegionName = this.addressFormat.getTwoLetterISORegionName(countryRegionId);\n set(this.addUpdateAddress, { ThreeLetterISORegionName: countryRegionId });\n set(this.addUpdateAddress, { TwoLetterISORegionName: twoLetterIsoRegionName });\n this.autoSuggest?.changeAutoSuggestionCountryCode(twoLetterIsoRegionName);\n this._clearAddressFields();\n };\n\n /**\n * Gets address format for exclude list.\n * @returns - Address item type.\n */\n private readonly _getAddressFormatExcludeList = (): AddressItemType[] => {\n const { config } = this.props;\n const addressFormatExcludeList: AddressItemType[] = [];\n\n if (!config.showAddressType) {\n addressFormatExcludeList.push(AddressItemType.AddressTypeValue);\n }\n\n addressFormatExcludeList.push(AddressItemType.IsPrimary);\n\n return addressFormatExcludeList;\n };\n\n /**\n * Attach map auto suggest.\n */\n private readonly _attachMapAutoSuggest = async (): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager?.isMapApiLoaded) {\n this.autoSuggest?.attachAutoSuggest('#billing_addressstreet', '#billing_addressstreet_container', this._onSuggestionSelected);\n }\n };\n\n /**\n * On address add update input change.\n * @param event - The event.\n */\n private readonly _onAddressAddUpdateInputChange = (event: React.ChangeEvent): void => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n this.onAddressAddUpdate(event.target.name, value);\n };\n\n /**\n * On address add update dropdown change.\n * @param event - The event.\n */\n private readonly _onAddressAddUpdateDropdownChange = (event: React.ChangeEvent): void => {\n this.onAddressAddUpdate(event.target.name, event.target.value);\n\n if (event.target.name === AddressItemType[AddressItemType.ThreeLetterISORegionName]) {\n this._onCountryChange(event.target.value);\n }\n };\n\n /**\n * Gets state provinces.\n */\n private readonly _getStateProvinces = (): void => {\n if (\n !this.countryRegionId ||\n !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\n ) {\n return;\n }\n\n this.addressCommon.getStateProvinces(this.countryRegionId).then((result: StateProvinceInfo[]) => {\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\n\n // Reset state if selected state not found in the list.\n if (!stateInfo) {\n set(this.addUpdateAddress, { State: '' });\n }\n this.stateProvinceInfo = result;\n });\n };\n\n /**\n * Initialize module state.\n */\n private readonly _initModuleState = (): void => {\n this.props.moduleState.init({\n status: this.isBillingAddressRequried ? 'updating' : 'disabled',\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit\n });\n\n const { billingAddress, isBillingAddressSameAsShippingAddress } = this.props.data.checkout.result ?? {};\n\n if (this.isBillingAddressRequried) {\n if (billingAddress) {\n this.isBillingAddressSameAsShipping = isBillingAddressSameAsShippingAddress ?? false;\n this._updateCurrentOperation(AddressOperation.Show, billingAddress);\n this._updateModuleState();\n } else if (this.isCartContainsItemsForShipping) {\n this.isBillingAddressSameAsShipping = true;\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\n } else {\n this.isBillingAddressSameAsShipping = false;\n this._updateCurrentOperation(AddressOperation.Add);\n }\n }\n };\n\n /**\n * Sets default country region Id.\n */\n private _setDefaultCountryRegionId(): void {\n const { request } = this.props.context;\n const market = request.channel?.ChannelCountryRegionISOCode;\n\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\n }\n\n /**\n * On change - Billing address same as shipping.\n * @param event - The event.\n */\n private readonly _onBillingAddressSameAsShippingChange = (event: React.ChangeEvent) => {\n this.isBillingAddressSameAsShipping = event.currentTarget.checked;\n\n if (this.isBillingAddressSameAsShipping && this.shippingAddress) {\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\n } else {\n this._updateCurrentOperation(AddressOperation.Add, this.billingAddress);\n }\n };\n\n @computed private get isCartContainsItemsForShipping(): boolean {\n const { request } = this.props.context;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = this.props.data;\n const retailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n const pickupDeliveryModeCode = request.channel?.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request.channel?.EmailDeliveryModeCode;\n\n // If hasInvoiceLine is true, there are only invoices no items in cart and return false here\n return this.props.data.checkout.result?.checkoutCart.hasInvoiceLine\n ? false\n : retailMultiplePickUpOptionEnabled\n ? ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).some(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !==\n channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLine.DeliveryMode\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n )\n : ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).some(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n }\n\n @computed private get billingAddress(): Address | undefined {\n return this.props.data.checkout.result?.billingAddress;\n }\n\n @computed private get shippingAddress(): Address | undefined {\n return this.props.data.checkout.result?.shippingAddress;\n }\n\n @computed private get getLoyaltyAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n return checkoutState?.loyaltyAmount ? checkoutState.loyaltyAmount : 0;\n }\n\n @computed private get getGiftCardTotalAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.giftCardExtends) {\n return 0;\n }\n return checkoutState.giftCardExtends.reduce((count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n }, 0);\n }\n\n @computed private get getCustomerAccountAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n const defaultAmount = 0;\n\n return checkoutState?.customerAccountAmount ?? defaultAmount;\n }\n\n @computed private get shouldPaidByCard(): boolean {\n const {\n data: { checkout },\n config\n } = this.props;\n if (!checkout.result) {\n return false;\n }\n\n const checkoutResult = checkout.result;\n const cart = checkoutResult.checkoutCart.cart;\n if (!cart || !cart.CartLines || cart.CartLines.length === 0) {\n return false;\n }\n\n const { paymentTenderType, tokenizedPaymentCard } = checkoutResult;\n const isPaidByOtherPaymentSource = config.paymenTenderType !== paymentTenderType && tokenizedPaymentCard;\n\n // Use payment card when it is not free or gift card balance + Loyalty amount can not cover the total amount\n const amountDue = (cart.TotalAmount || 0) - this.getGiftCardTotalAmount - this.getLoyaltyAmount - this.getCustomerAccountAmount;\n\n return amountDue > 0 && !isPaidByOtherPaymentSource;\n }\n\n @computed private get isBillingAddressRequried(): boolean {\n return (\n this.shouldPaidByCard &&\n (!this.props.data.checkout?.result?.isPaymentVerificationRedirection ||\n !!this.props.data.checkout?.result?.isCheckoutCallFailed)\n );\n }\n\n /**\n * On submit address.\n */\n private readonly _onSubmitAddress = (): void => {\n if (!this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId)) {\n this.props.moduleState.setHasError(true);\n\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n this.props.data.checkout.result?.isPaymentSectionContainerHasError\n ) {\n this.props.data.checkout.result.updateIsBillingAddressHasError({ newIsBillingAddressHasError: true });\n }\n\n return;\n }\n\n this._setBillingAddress(this.addUpdateAddress);\n this._updateCurrentOperation(AddressOperation.Show, this.addUpdateAddress);\n this._updateModuleState();\n };\n\n /**\n * On submit.\n */\n private readonly onSubmit = (): void => {\n switch (this.currentOperation) {\n case AddressOperation.Add:\n case AddressOperation.Update:\n this.props.telemetry.information('Billing address submit for Add or Update operation.');\n this._onSubmitAddress();\n break;\n case AddressOperation.Show:\n this.props.telemetry.information('Billing address submit for Show operation.');\n if (this.selectedAddress) {\n this._setBillingAddress(this.selectedAddress);\n this._updateCurrentOperation(AddressOperation.Show, this.selectedAddress);\n this._updateModuleState();\n }\n break;\n default:\n this.props.telemetry.error('Invalid operation');\n }\n };\n\n /**\n * On cancel.\n */\n private readonly onCancel = (): void => {\n switch (this.currentOperation) {\n case AddressOperation.Add:\n case AddressOperation.Update:\n this.props.telemetry.information('Billing address cancel for Add or Update operation.');\n this._resetView();\n this._clearAddressFields();\n break;\n case AddressOperation.Show:\n this.props.telemetry.information('Billing address cancel for Show operation.');\n this._resetView();\n break;\n default:\n this.props.telemetry.error('Invalid operation');\n }\n };\n\n /**\n * On edit.\n */\n private readonly onEdit = (): void => {\n this.props.telemetry.information('Billing address onEdit is called.');\n\n if (this.isBillingAddressSameAsShipping && this.shippingAddress && this.isCartContainsItemsForShipping) {\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\n } else {\n this._updateCurrentOperation(AddressOperation.Add, this.billingAddress);\n }\n this.props.moduleState.onUpdating();\n };\n\n /**\n * Sets billing address.\n * @param address - The address.\n */\n private readonly _setBillingAddress = (address: Address): void => {\n if (this.props.data.checkout.result) {\n const newBillingAddress = { ...address };\n\n if (address.ThreeLetterISORegionName && !newBillingAddress.TwoLetterISORegionName) {\n newBillingAddress.TwoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(address.ThreeLetterISORegionName);\n }\n\n this.props.data.checkout.result.updateBillingAddress({\n newBillingAddress,\n additionalProperties: {\n isBillingAddressSameAsShippingAddress: this.isBillingAddressSameAsShipping\n }\n });\n }\n };\n\n /**\n * Reset view.\n */\n private readonly _resetView = () => {\n this._updateCurrentOperation(AddressOperation.Show, this.billingAddress);\n this._updateModuleState();\n };\n\n /**\n * Update current operation.\n * @param operation - Address operation\n * @param selectedAddress - The selected address.\n */\n private readonly _updateCurrentOperation = (operation: AddressOperation, selectedAddress?: Address) => {\n this.currentOperation = operation;\n this.selectedAddress = selectedAddress;\n\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\n this.addUpdateAddress = { ...this.selectedAddress } || {};\n set(this.addUpdateAddress, {\n ThreeLetterISORegionName: this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\n });\n set(this.addUpdateAddress, { AddressTypeValue: this.addUpdateAddress.AddressTypeValue || this.defaultAddressType });\n }\n };\n\n /**\n * Updates the module state.\n */\n private readonly _updateModuleState = () => {\n if (this.currentOperation === AddressOperation.Show) {\n this.props.moduleState.onReady();\n } else {\n this.props.moduleState.onUpdating();\n }\n };\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n}\n\nexport default CheckoutBillingAddress;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAddressAddItem, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { IAddressShowItem, IAddressShowProps } from '../../common/components/address-show';\nimport { ICheckoutBillingAddressViewProps } from './checkout-billing-address';\n\n/**\n * Address show component.\n * @param param0 - Root param.\n * @param param0.AddressDetail - Address detail.\n * @param param0.items - IAddressShowItem[].\n * @returns - Address Node.\n */\nconst AddressShow: React.FC = ({ AddressDetail, items }) => {\n return (\n \n {items.map((item: IAddressShowItem) => {\n return <>{item.description};\n })}\n \n );\n};\n\n/**\n * Address Add Update Component.\n * @param param0 - Root param.\n * @param param0.AddressForm - Address form.\n * @param param0.heading - Address Heading.\n * @param param0.items - IAddressAddItem[].\n * @param param0.hasError - Boolean.\n * @param param0.error - IAddressError.\n * @param param0.isShowSaveButton - Boolean.\n * @param param0.saveButton - Save button.\n * @param param0.isShowCancelButton - Boolean.\n * @param param0.cancelButton - Cancel button.\n * @returns - AddressForm Node.\n */\nconst AddressAddUpdate: React.FC = ({\n AddressForm,\n heading,\n items,\n hasError,\n error,\n isShowSaveButton,\n saveButton,\n isShowCancelButton,\n cancelButton\n}) => {\n return (\n \n {heading}\n {items.map((item: IAddressAddItem) => {\n const { AddressItem, key, label, alert, input } = item;\n return (\n \n {label}\n {alert}\n {input}\n \n );\n })}\n {hasError && (\n \n {error.title}\n {error.message}\n \n )}\n {isShowSaveButton && saveButton}\n {isShowCancelButton && cancelButton}\n \n );\n};\n\n/**\n * Checkout Billing Address View Component.\n * @param props - Props.\n * @returns - CheckoutBillingAddress Module.\n */\nconst CheckoutBillingAddressView: React.FC = props => {\n const {\n CheckoutBillingAddress,\n checkoutErrorRef,\n alert,\n viewState,\n heading,\n sameAsShippingCheckbox,\n showAddress,\n showAddOrUpdateAddress\n } = props;\n\n return (\n \n {heading}\n {alert}\n {viewState.isShowSameAsShippingCheckbox && sameAsShippingCheckbox}\n {viewState.isShowAddress && }\n {viewState.isShowAddOrUpdateAddress && }\n \n );\n};\n\nexport default CheckoutBillingAddressView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageProps, IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { format, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICheckoutShippingAddressResources } from '../checkout-shipping-address.props.autogenerated';\n\n/**\n * The cartline product interface.\n */\nexport interface ICartLineWithProduct {\n cartLine: CartLine;\n product?: SimpleProduct;\n}\n\n/**\n * The checkout shipping cartline interface.\n */\nexport interface ICheckoutShippingCartLineInfo {\n lineId: string;\n imageProps: IImageProps;\n quantity: number;\n}\n\n/**\n * The checkout shipping cartline props.\n */\nexport interface ICheckoutShippingCartLinesProps {\n moduleClassName: string;\n cartLines: ICheckoutShippingCartLineInfo[];\n title: string;\n itemTitle: string;\n resources: ICheckoutShippingAddressResources;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Following as per module\nexport const CheckoutPickupCartLines: React.FC = ({\n moduleClassName,\n cartLines,\n title,\n itemTitle,\n resources\n}) => {\n const context = ({\n gridSettings: {\n xs: { w: 767 },\n sm: { w: 991 },\n md: { w: 1199 },\n lg: { w: 1599 },\n xl: { w: 1600 }\n }\n } as unknown) as IRequestContext;\n const isMobileCheck = isMobile({ variant: VariantType.Browser, context });\n const isMobileView = isMobileCheck === 'xs' || isMobileCheck === 'sm';\n\n if (!ArrayExtensions.hasElements(cartLines)) {\n return null;\n }\n const quantity = 1;\n return (\n
\n
\n
{title}
\n
{itemTitle}
\n
\n
\n {cartLines.map((cartLine: ICheckoutShippingCartLineInfo) => {\n const isShowQty = cartLine.quantity > quantity;\n let className = `${moduleClassName}__group-images-lines-product`;\n const role = 'text';\n if (isShowQty) {\n className = classnames(className, ' product-image-wide');\n }\n return (\n
\n \n {isMobileView\n ? isShowQty && (\n \n {cartLine.quantity}\n
\n )\n : isShowQty && (\n
\n )}\n {!isMobileView && isShowQty && (\n \n {format(resources.productQuantityInfo, cartLine.quantity, cartLine.imageProps.altText)}\n \n )}\n
\n );\n })}\n \n \n );\n};\n\n/**\n * The checkout shipping cartline image settings.\n */\nexport const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\n lg: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\n xl: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 }\n },\n lazyload: true,\n quality: 80\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n Address,\n AddressPurpose,\n CartLine,\n CountryRegionInfo,\n SimpleProduct,\n StateProvinceInfo,\n TenderLine,\n TokenizedPaymentCard\n} from '@msdyn365-commerce/retail-proxy';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { getFallbackImageUrl, getSimpleProducts, ObjectExtensions, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { format, getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { action, computed, observable, reaction, set } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { AutoSuggest } from '../../common/address-autosuggest';\nimport { IAutoSuggestOptions } from '../../common/address-autosuggest.data';\nimport { AddressCommon } from '../../common/address-common';\nimport { AddressFormat } from '../../common/address-format';\nimport { AddressItemType } from '../../common/address-format.data';\nimport { AddressMetaData } from '../../common/address-meta-data';\nimport { AddressOperation, AddressType, IAddressResource, IAddressResponse } from '../../common/address-module.data';\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { AddressSelect, IAddressSelectProps } from '../../common/components/address-select';\nimport { AddressShow, IAddressShowProps } from '../../common/components/address-show';\nimport { ICheckoutShippingAddressData } from './checkout-shipping-address.data';\nimport { ICheckoutShippingAddressProps } from './checkout-shipping-address.props.autogenerated';\nimport {\n CheckoutPickupCartLines,\n defaultImageSettings,\n ICartLineWithProduct,\n ICheckoutShippingCartLineInfo,\n ICheckoutShippingCartLinesProps\n} from './components/checkout-shipping-cartlines-images';\nimport { CheckoutModule, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport { ErrorComponent } from '../../common/components/address-error-alert';\nimport { focusOnCheckoutError } from '../../checkout-errors/checkout-errors';\n\n/**\n * The checkout address props interface.\n */\nexport interface ICheckoutAddressProps extends ICheckoutShippingAddressProps, IModuleStateProps {}\n\n/**\n * The checkout shipping address view state.\n */\nexport interface ICheckoutShippingAddressViewState {\n isShowAddress: boolean;\n isShowAddresList: boolean;\n isShowAddOrUpdateAddress: boolean;\n}\n\n/**\n * The checkout shipping address state.\n */\nexport interface ICheckoutAddresState {\n shippingGroups: ICartLineWithProduct[];\n errorMessage?: string;\n}\n\n/**\n * The checkout shipping address view props.\n */\nexport interface ICheckoutShippingAddressViewProps extends ICheckoutAddressProps {\n className: string;\n currentOperation: AddressOperation;\n selectedAddress?: Address;\n addUpdateAddress: Address;\n addressListSelectedAddress: Address;\n countryRegionId: string;\n stateProvinceInfo?: StateProvinceInfo[];\n customerAddresses: Address[];\n validationError: object;\n addressActionResponse?: IAddressResponse;\n viewState: ICheckoutShippingAddressViewState;\n CheckoutShippingAddress: IModuleProps;\n isUpdating: boolean;\n hasError: boolean;\n showAddress: IAddressShowProps;\n showAddOrUpdateAddress: IAddressAddUpdateProps;\n cartLineImages?: React.ReactNode;\n showAddressSelect: IAddressSelectProps;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n showAddOrUpdateAddressHandler?(onSaveHandler?: () => void, onCancelHandler?: () => void): IAddressAddUpdateProps;\n showAddressSelectHandler?(\n onAddAddressHandler?: () => void,\n onSaveHandler?: () => void,\n onCancelHandler?: () => void\n ): IAddressSelectProps;\n}\n\n/**\n * IExpressPaymentDetail interface.\n */\ninterface IExpressPaymentDetails {\n email?: string;\n tenderLine?: TenderLine;\n tokenizedPaymentCard?: TokenizedPaymentCard;\n paymentTenderType?: string;\n address?: Address;\n isExpressCheckoutAppliedInCartPage: boolean;\n isExpressAddressAppliedInCartPage?: boolean;\n}\n\n/**\n *\n * Address component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutShippingAddress extends React.Component {\n @observable private currentOperation: AddressOperation;\n\n @observable private selectedAddress?: Address;\n\n @observable private addUpdateAddress: Address;\n\n @observable private countryRegionId: string = 'USA';\n\n @observable private stateProvinceInfo?: StateProvinceInfo[];\n\n @observable private customerAddresses: Address[] = [];\n\n @observable private validationError: object;\n\n @observable private addressActionResponse?: IAddressResponse;\n\n @observable private isUpdating?: boolean;\n\n @observable private hasError?: boolean;\n\n @observable private addressListSelectedAddress: Address = {};\n\n private readonly addressCommon: AddressCommon;\n\n private addressFormat!: AddressFormat;\n\n private countryRegions: CountryRegionInfo[] = [];\n\n private addressPurposes: AddressPurpose[] = [];\n\n private readonly resources: IAddressResource;\n\n private readonly defaultAddressType: number = 6; // Default to Home\n\n private readonly telemetryContent?: ITelemetryContent;\n\n private autoSuggest?: AutoSuggest;\n\n private readonly multiplePickupStoreSwitchName: string = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n public constructor(props: ICheckoutAddressProps) {\n super(props);\n this.state = { shippingGroups: [] };\n const { context, data, resources, telemetry } = this.props;\n\n this.addUpdateAddress = {};\n this.resources = resources;\n this.currentOperation = AddressOperation.List;\n this.countryRegions = data.countryRegions.result || [];\n this.addressPurposes = data.addressPurposes.result || [];\n this.customerAddresses = data.address.result || [];\n this.stateProvinceInfo = data.countryStates.result || [];\n this.addressCommon = new AddressCommon(context, resources, telemetry);\n this.addressFormat = new AddressFormat(\n this.countryRegions,\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\n this.addressPurposes\n );\n this.validationError = {};\n this.retailMultiplePickUpOptionEnabled = data.featureState.result?.find(\n feature => feature.Name === this.multiplePickupStoreSwitchName\n )?.IsEnabled;\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public async componentDidMount(): Promise {\n const {\n context: {\n telemetry,\n actionContext: {\n requestContext: { channel }\n }\n },\n config: { autoSuggestionEnabled, autoSuggestOptions },\n resources\n } = this.props;\n\n // Initializing data props\n this._dataInitialize(this.props);\n\n this.addressFormat = new AddressFormat(\n this.countryRegions,\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\n this.addressPurposes\n );\n\n this.props.data.checkout.then(() => {\n this._setDefaultCountryRegionId();\n this._initModuleState();\n });\n\n reaction(\n () => this.countryRegionId,\n () => {\n this._getStateProvinces();\n }\n );\n\n reaction(\n () => this.currentOperation,\n () => {\n this._getStateProvinces();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.shippingAddressFromExpressCheckout,\n () => {\n if (!this.expressPaymentDetailsFromCartPage && this._canShip()) {\n let address = this.props.data.checkout.result?.shippingAddressFromExpressCheckout;\n\n if (address?.TwoLetterISORegionName) {\n const threeLetterIsoRegionName = this.getThreeLetterIsoRegionName(address.TwoLetterISORegionName);\n\n address = { ...address, ThreeLetterISORegionName: threeLetterIsoRegionName };\n\n if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\n this._onCountryChange(threeLetterIsoRegionName);\n }\n }\n\n this._updateCurrentOperation(AddressOperation.Add, address);\n this._onAddressAddUpdateSubmit();\n }\n }\n );\n\n if (autoSuggestionEnabled) {\n if (channel && !channel.BingMapsApiKey) {\n telemetry.error('BingMapsApiKey is missing.');\n return;\n }\n\n if (channel && !channel.BingMapsEnabled) {\n telemetry.error('Map is disabled from HQ.');\n return;\n }\n\n const options: IAutoSuggestOptions = { ...autoSuggestOptions };\n this.autoSuggest = new AutoSuggest(\n telemetry,\n options,\n channel?.BingMapsApiKey,\n channel?.ChannelCountryRegionISOCode,\n channel?.DefaultLanguageId\n );\n\n // Customer doesn't have any address. Then add view will be loaded directly. Code for the same to handle that\n if (\n this.props.data.storeSelectorStateManager.result &&\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\n ) {\n await this.autoSuggest._loadMapAPI(await this.props.data.storeSelectorStateManager);\n }\n\n reaction(\n () =>\n this.props.data.storeSelectorStateManager.result?.loadMapApi &&\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update),\n async () => {\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\n }\n );\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.isMapApiLoaded,\n async () => {\n await this._attachMapAutoSuggest();\n }\n );\n }\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (\n checkoutError &&\n checkoutError.errorLocation === ErrorLocation.CheckoutShippingAddress &&\n checkoutError.errorMessage\n ) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutShippingAddress) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n\n await this._initPickupGroup();\n }\n\n public async componentDidUpdate(): Promise {\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\n await this._attachMapAutoSuggest();\n }\n } else {\n this.autoSuggest?.disposeAutoSuggest();\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutAddressProps, nextState: ICheckoutAddresState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n if (!this._canShip()) {\n return null;\n }\n\n const {\n config,\n context,\n renderView,\n resources,\n moduleState: { hasError }\n } = this.props;\n const { headingImages, itemsText, singleItemText, errorMessageTitle } = resources;\n const { imageSettings } = config;\n\n // Line images\n const cartlines: ICheckoutShippingCartLineInfo[] = this.state.shippingGroups\n .filter(x => !ObjectExtensions.isNullOrUndefined(x.product))\n .map(line => ({\n lineId: line.cartLine.LineId ?? '',\n imageProps: {\n requestContext: context.actionContext.requestContext,\n className: 'ms-checkout-shipping-address__group-images-lines-line-image',\n altText: line.product?.Name,\n src: line.product?.PrimaryImageUrl ?? '',\n fallBackSrc: getFallbackImageUrl(line.product?.ItemId, context.actionContext.requestContext.apiSettings),\n gridSettings: context.request.gridSettings!,\n imageSettings: imageSettings ?? defaultImageSettings,\n loadFailureBehavior: 'empty'\n },\n quantity: line.cartLine.Quantity ?? 0\n }));\n\n const quantity = 1;\n const itemText = cartlines.length > quantity ? itemsText : singleItemText;\n\n const lineImageProps: ICheckoutShippingCartLinesProps = {\n moduleClassName: 'ms-checkout-shipping-address',\n cartLines: cartlines.filter(x => !ObjectExtensions.isNullOrUndefined(x)),\n itemTitle: `(${format(itemText, cartlines.length)})`,\n title: headingImages,\n resources: this.props.resources\n };\n\n const cartLineImages: React.ReactNode = ;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { featureState } = this.props.data;\n const isRetailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n const errorMessage = this.state.errorMessage;\n\n const viewProps = {\n ...this.props,\n currentOperation: this.currentOperation,\n selectedAddress: this.selectedAddress,\n addUpdateAddress: this.addUpdateAddress,\n addressListSelectedAddress: this.addressListSelectedAddress,\n countryRegionId: this.countryRegionId,\n stateProvinceInfo: this.stateProvinceInfo,\n customerAddresses: this.customerAddresses,\n validationError: this.validationError,\n addressActionResponse: this.addressActionResponse,\n isUpdating: this.isUpdating,\n hasError: this.hasError,\n className: config.className,\n viewState: {\n isShowAddress: this.currentOperation === AddressOperation.Show && this.selectedAddress,\n isShowAddresList: this.currentOperation === AddressOperation.List && this.customerAddresses.length > 0,\n isShowAddOrUpdateAddress:\n this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update\n },\n CheckoutShippingAddress: {\n moduleProps: this.props,\n className: classnames('ms-checkout-shipping-address', config.className)\n },\n showAddress: this._renderShowAddress(),\n alert: hasError && errorMessage && ,\n checkoutErrorRef: this.checkoutErrorRef,\n\n /**\n * Show address select.\n * @param onAddAddressHandler - On add address click function.\n * @param onSaveHandler - On save click function.\n * @param onCancelHandler - On cancel click function.\n * @returns - Renders select address.\n */\n showAddressSelectHandler: (onAddAddressHandler?: () => void, onSaveHandler?: () => void, onCancelHandler?: () => void) =>\n this._renderSelectAddress(onAddAddressHandler, onSaveHandler, onCancelHandler),\n\n /**\n * Show add/update address.\n * @param onSaveHandler - On save click function.\n * @param onCancelHandler - On cancel click function.\n * @returns - Renders select address.\n */\n showAddOrUpdateAddressHandler: (onSaveHandler?: () => void, onCancelHandler?: () => void) =>\n this._renderAddOrUpdateAddress(onSaveHandler, onCancelHandler),\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress(),\n cartLineImages: isRetailMultiplePickUpOptionEnabled ? cartLineImages : undefined,\n showAddressSelect: this._renderSelectAddress()\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Initialize pickup group.\n */\n @action\n private readonly _initPickupGroup = async (): Promise => {\n const pickupCartLines: CartLine[] = this._getCartLinesforDelivery();\n const cartLines: ICartLineWithProduct[] = [];\n\n try {\n const products = await this._getProductsByCartLines(\n this.props.data.checkout.result?.checkoutCart.cart.ChannelId || 0,\n pickupCartLines\n );\n for (const line of pickupCartLines) {\n const product: SimpleProduct | undefined = products.find(x => x.RecordId === line.ProductId);\n cartLines.push({ cartLine: line, product });\n }\n this.setState({ shippingGroups: cartLines });\n } catch (error) {\n this.props.telemetry.error(error);\n this.setState({ shippingGroups: [] });\n }\n };\n\n /**\n * On suggestion selected.\n * @param result - Suggestion result interface.\n */\n @action\n private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\n this._clearAddressFields();\n const address = this.addressFormat.getTranformedAddress(result, this.stateProvinceInfo);\n const timeout = 0;\n set(this.addUpdateAddress, { Street: '' });\n set(this.addUpdateAddress, { ZipCode: address.ZipCode });\n set(this.addUpdateAddress, { CountyName: address.CountyName });\n set(this.addUpdateAddress, { City: address.City });\n set(this.addUpdateAddress, { State: address.State });\n set(this.addUpdateAddress, { DistrictName: address.DistrictName });\n set(this.addUpdateAddress, { FullAddress: address.FullAddress });\n\n // Bing autosuggest put the complete address in the Street input box. Updating the street input box to show only street address.\n setTimeout(() => {\n set(this.addUpdateAddress, { Street: address.Street });\n }, timeout);\n };\n\n /**\n * Method to clear address fields.\n */\n @action\n private readonly _clearAddressFields = (): void => {\n const addressFormatItem = this.addressFormat.getAddressFormat(\n this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\n );\n for (const formatAddress of addressFormatItem) {\n if (\n this.addUpdateAddress[formatAddress.name] !== undefined &&\n !this.autoSuggest?.excludedAddressFields.includes(formatAddress.name)\n ) {\n this.addressFormat[formatAddress.name] = '';\n }\n }\n this._clearValidation();\n };\n\n /**\n * Method to clear validation.\n */\n @action\n private readonly _clearValidation = (): void => {\n this.validationError = {};\n };\n\n public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const properties =\n this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\n ?.StringValue ?? '';\n\n return properties ? (JSON.parse(properties) as IExpressPaymentDetails) : null;\n }\n\n /**\n * Method data initialization.\n * @param props -The checkout address properties.\n */\n private readonly _dataInitialize = (props: ICheckoutAddressProps): void => {\n const { data } = props;\n\n reaction(\n () => data.countryRegions.result,\n () => {\n this.countryRegions = data.countryRegions.result ?? [];\n }\n );\n\n reaction(\n () => data.addressPurposes.result,\n () => {\n this.addressPurposes = data.addressPurposes.result ?? [];\n }\n );\n\n reaction(\n () => data.address.result,\n () => {\n this.customerAddresses = data.address.result ?? [];\n }\n );\n\n reaction(\n () => data.countryStates.result,\n () => {\n this.stateProvinceInfo = data.countryStates.result ?? [];\n }\n );\n\n reaction(\n () => data.featureState.result,\n () => {\n this.retailMultiplePickUpOptionEnabled = data.featureState.result?.find(\n feature => feature.Name === this.multiplePickupStoreSwitchName\n )?.IsEnabled;\n }\n );\n };\n\n /**\n * Method to get cart lines for delivery.\n * @returns The cart line collection.\n */\n private readonly _getCartLinesforDelivery = (): CartLine[] => {\n return this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(line => this._isDelivery(line)) ?? [];\n };\n\n /**\n * Method to check cart line for delivery.\n * @param line -The cart line.\n * @returns True/false as per cart line delivery mode.\n */\n private readonly _isDelivery = (line: CartLine): boolean => {\n return this._isNotPickupMode(line.DeliveryMode) && (line.FulfillmentStoreId === undefined || line.FulfillmentStoreId === '');\n };\n\n /**\n * Method to check cart line for delivery.\n * @param deliveryMode -The delivery mode.\n * @returns True/false as per cart line delivery mode.\n */\n private readonly _isNotPickupMode = (deliveryMode: string | undefined): boolean => {\n const pickupDeliveryModeCode = this.props.context.request.channel?.PickupDeliveryModeCode;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = this.props.data;\n const retailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n if (retailMultiplePickUpOptionEnabled && deliveryMode !== undefined) {\n const pickupDeliveryMode = channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.some(\n pickupMode => pickupMode !== deliveryMode\n );\n return pickupDeliveryMode !== undefined ? pickupDeliveryMode : false;\n }\n return deliveryMode !== undefined && pickupDeliveryModeCode !== undefined && deliveryMode !== pickupDeliveryModeCode;\n };\n\n /**\n * Method to check cart line for delivery.\n * @param channelId - The channelId.\n * @param cartLines - Cart line collections.\n * @returns Collection of SimpleProduct.\n */\n private readonly _getProductsByCartLines = async (channelId: number, cartLines: CartLine[]): Promise => {\n const actionContext = this.props.context.actionContext;\n const productInputs = cartLines\n .filter(line => !ObjectExtensions.isNullOrUndefined(line.ProductId))\n .map(\n line =>\n new ProductInput(\n line.ProductId || 0,\n actionContext.requestContext.apiSettings,\n channelId,\n undefined,\n actionContext.requestContext\n )\n );\n return getSimpleProducts(productInputs, actionContext);\n };\n\n /**\n * Method to render add/update address.\n * @param onSaveHandler -- Handles onsave functionality.\n * @param onCancelHandler -- Handles oncancel functionality.\n * @returns Address app/update props.\n */\n private readonly _renderAddOrUpdateAddress = (onSaveHandler?: () => void, onCancelHandler?: () => void): IAddressAddUpdateProps => {\n const addressFormat =\n this.currentOperation === AddressOperation.Add && this.addressCommon.isAuthenticatedFlow()\n ? this.addressFormat\n : this.addressFormat;\n\n /**\n * On Cancel Button Function.\n */\n const onCancelButtonHandler = () => {\n this._resetView();\n onCancelHandler?.();\n };\n return AddressAddUpdate({\n isUpdating: this.isUpdating,\n resources: this.resources,\n addressType: AddressType.Shipping,\n addressFormat: addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId),\n defaultCountryRegionId: this.countryRegionId,\n defaultAddressType: this.defaultAddressType,\n selectedAddress: this.addUpdateAddress,\n validationError: this.validationError,\n hasError: this.hasError,\n addressActionResponse: this.addressActionResponse,\n telemetryContent: this.telemetryContent,\n dropdownDisplayData: addressFormat.getPrefilledAddressDropdownData(\n this.resources.addressStateDefaultSelectionText,\n this.stateProvinceInfo\n ),\n onInputChange: this._onAddressAddUpdateInputChange,\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\n\n /**\n * On Save Function.\n */\n onSave: () => {\n this.onSubmit();\n onSaveHandler?.();\n },\n\n onCancel: !this.selectedAddress && !this.addressCommon.isAuthenticatedFlow() ? () => {} : onCancelButtonHandler\n });\n };\n\n /**\n * Method to render select address.\n * @param onAddAddressHandler - To handle add address button click.\n * @param onSaveHandler - To handle save button click.\n * @param onCancelHandler - To handle cancel button click.\n * @returns Select address props.\n */\n private readonly _renderSelectAddress = (\n onAddAddressHandler?: () => void,\n onSaveHandler?: () => void,\n onCancelHandler?: () => void\n ): IAddressSelectProps => {\n /**\n * On Cancel Button Function.\n */\n const onCancelButtonHandler = () => {\n this._resetView();\n onCancelHandler?.();\n };\n return AddressSelect({\n addressFormat: this.addressFormat,\n addresses: this.customerAddresses,\n resources: this.resources,\n addressPurposes: this.addressPurposes,\n selectedAddress: this.addressListSelectedAddress,\n onAddressOptionChange: this._onAddressOptionChange,\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\n telemetryContent: this.telemetryContent,\n\n /**\n * On Add Address Function.\n */\n onAddAddress: () => {\n this._goToAddAddress();\n onAddAddressHandler?.();\n },\n\n /**\n * On Save Function.\n */\n onSave: () => {\n this._onSelectAddress();\n onSaveHandler?.();\n },\n\n onCancel: !this.selectedAddress ? () => {} : onCancelButtonHandler\n });\n };\n\n /**\n * Method to render show address.\n * @returns Show address props.\n */\n private _renderShowAddress(): IAddressShowProps | null {\n if (this.selectedAddress) {\n return AddressShow({\n address: this.selectedAddress,\n addressFormat: this.addressFormat.getAddressFormat(this.selectedAddress.ThreeLetterISORegionName || ''),\n addressPurposes: this.addressPurposes\n });\n }\n\n return null;\n }\n\n /**\n * Method to render map auto suggest.\n */\n private readonly _attachMapAutoSuggest = async (): Promise => {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n if (storeSelectorStateManager?.isMapApiLoaded) {\n this.autoSuggest?.attachAutoSuggest('#shipping_addressstreet', '#shipping_addressstreet_container', this._onSuggestionSelected);\n }\n };\n\n /**\n * Method gets called on address option change.\n * @param event - To get current option.\n */\n private readonly _onAddressOptionChange = (event: React.ChangeEvent) => {\n const addressRecordId = event.currentTarget.value;\n const selectedAddress = this.customerAddresses.find(address => (address.RecordId || '').toString() === addressRecordId);\n if (selectedAddress) {\n this.addressListSelectedAddress = selectedAddress;\n }\n };\n\n /**\n * Method to render map auto suggest.\n * @param name - Address name field.\n * @param value - Address name value field.\n */\n private readonly onAddressAddUpdate = (name: string, value: string | boolean) => {\n set(this.addUpdateAddress, { [name]: value });\n this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId, name);\n };\n\n /**\n * Method to get called on address update change.\n * @param event - Input element.\n */\n private readonly _onAddressAddUpdateInputChange = (event: React.ChangeEvent): void => {\n if (event.target.type === 'checkbox') {\n this.onAddressAddUpdate(event.target.name, event.target.checked);\n } else {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n this.onAddressAddUpdate(event.target.name, value);\n }\n };\n\n /**\n * Method to get called on address update dropdown change.\n * @param event - Select element.\n */\n private readonly _onAddressAddUpdateDropdownChange = (event: React.ChangeEvent): void => {\n this.onAddressAddUpdate(event.target.name, event.target.value);\n\n if (event.target.name === AddressItemType[AddressItemType.ThreeLetterISORegionName]) {\n this._onCountryChange(event.target.value);\n }\n };\n\n /**\n * Method to get called on address update submit.\n */\n private readonly _onAddressAddUpdateSubmit = (): void => {\n if (!this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId)) {\n return;\n }\n\n let response: Promise;\n if (this.addressCommon.isAuthenticatedFlow() && this._isNewAddress(this.addUpdateAddress)) {\n response =\n this.currentOperation === AddressOperation.Update\n ? this.addressCommon.updateCustomerAddress(this.addUpdateAddress)\n : this.addressCommon.addCustomerAddress(this.addUpdateAddress);\n } else {\n response = Promise.resolve({ address: this.addUpdateAddress });\n }\n\n this.isUpdating = true;\n this._updateModuleState();\n\n response.then(\n (result: IAddressResponse) => {\n this.isUpdating = false;\n\n let newAddress = result.address;\n newAddress = { ...newAddress, ...this.addUpdateAddress };\n\n if (result.address) {\n this.hasError = false;\n this._clearError();\n if (result.customerAddresses) {\n this._onAddOrUpdateSuccess({ customerAddresses: result.customerAddresses, address: newAddress });\n } else {\n this._onAddOrUpdateSuccess({ address: newAddress });\n }\n } else {\n this.hasError = true;\n this.addressActionResponse = result;\n this._updateModuleState();\n }\n },\n () => {\n this.hasError = true;\n this.isUpdating = false;\n this._updateModuleState();\n }\n );\n };\n\n /**\n * Method to get called on country change.\n * @param countryRegionId - Country region id.\n */\n private readonly _onCountryChange = (countryRegionId: string) => {\n this.countryRegionId = countryRegionId;\n const twoLetterIsoRegionName = this.addressFormat.getTwoLetterISORegionName(countryRegionId);\n set(this.addUpdateAddress, { ThreeLetterISORegionName: countryRegionId });\n set(this.addUpdateAddress, { TwoLetterISORegionName: twoLetterIsoRegionName });\n this.autoSuggest?.changeAutoSuggestionCountryCode(twoLetterIsoRegionName);\n this._clearAddressFields();\n };\n\n /**\n * Method to get all address format exclude list.\n * @returns Collection of address items.\n */\n private readonly _getAddressFormatExcludeList = (): AddressItemType[] => {\n const { config } = this.props;\n const addressFormatExcludeList: AddressItemType[] = [];\n\n if (!config.showAddressType) {\n addressFormatExcludeList.push(AddressItemType.AddressTypeValue);\n }\n\n addressFormatExcludeList.push(AddressItemType.IsPrimary);\n\n return addressFormatExcludeList;\n };\n\n /**\n * Method to get all state/provinces.\n */\n private readonly _getStateProvinces = (): void => {\n if (\n !this.countryRegionId ||\n !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\n ) {\n return;\n }\n\n this.addressCommon.getStateProvinces(this.countryRegionId).then((result: StateProvinceInfo[]) => {\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\n\n // Reset state if selected state not found in the list.\n if (!stateInfo) {\n set(this.addUpdateAddress, { State: '' });\n }\n\n this.stateProvinceInfo = result;\n });\n };\n\n /**\n * Method to set default country region id.\n */\n private _setDefaultCountryRegionId(): void {\n const { request } = this.props.context;\n const market = request.channel?.ChannelCountryRegionISOCode;\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\n }\n\n /**\n * Method to get default address region id.\n * @returns - Address object from existing addresses.\n */\n private readonly _getDefaultAddress = (): Address | undefined => {\n if (this.customerAddresses) {\n const primaryAddress = this.customerAddresses.find((address: Address) => address.IsPrimary);\n return primaryAddress || (this.customerAddresses.length > 0 ? this.customerAddresses[0] : undefined);\n }\n return undefined;\n };\n\n /**\n * Method to get address from express payment details from cart page.\n * @returns - Address.\n */\n private readonly _getAddressFromCartExpressPaymentDetails = (): Address | undefined => {\n if (this.expressPaymentDetailsFromCartPage) {\n const { tokenizedPaymentCard, address, isExpressAddressAppliedInCartPage } = this.expressPaymentDetailsFromCartPage;\n\n let addressFromCartExpress: Address | undefined;\n\n if (isExpressAddressAppliedInCartPage) {\n addressFromCartExpress = address ? this.getExpressAddress(address) : undefined;\n } else {\n addressFromCartExpress = tokenizedPaymentCard ? this.getAddressFromTokenizedPaymentCard(tokenizedPaymentCard) : undefined;\n }\n\n return addressFromCartExpress;\n }\n return undefined;\n };\n\n /**\n * Get address from tokenizedPaymentCard.\n * @param tokenizedPaymentCard -- The tokenizedPaymentCard from the payment.\n * @returns The address.\n */\n private readonly getAddressFromTokenizedPaymentCard = (tokenizedPaymentCard: TokenizedPaymentCard): Address => {\n const twoLetterIsoRegionName = tokenizedPaymentCard.Country;\n\n const threeLetterIsoRegionName = twoLetterIsoRegionName ? this.getThreeLetterIsoRegionName(twoLetterIsoRegionName) : undefined;\n\n if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\n this._onCountryChange(threeLetterIsoRegionName);\n }\n\n const address: Address = {\n TwoLetterISORegionName: twoLetterIsoRegionName,\n Name: tokenizedPaymentCard.NameOnCard,\n Street: tokenizedPaymentCard.Address1,\n StreetNumber: tokenizedPaymentCard.Address2,\n City: tokenizedPaymentCard.City,\n State: tokenizedPaymentCard.State,\n ZipCode: tokenizedPaymentCard.Zip,\n Phone: tokenizedPaymentCard.Phone,\n ThreeLetterISORegionName: threeLetterIsoRegionName,\n AddressTypeValue: this.defaultAddressType\n };\n\n return address;\n };\n\n /**\n * Get address from expressAddress.\n * @param expressAddress -- The expressAddress.\n * @returns The address.\n */\n private readonly getExpressAddress = (expressAddress: Address): Address => {\n const twoLetterIsoRegionName = expressAddress.TwoLetterISORegionName;\n\n const threeLetterIsoRegionName = twoLetterIsoRegionName ? this.getThreeLetterIsoRegionName(twoLetterIsoRegionName) : undefined;\n\n if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\n this._onCountryChange(threeLetterIsoRegionName);\n }\n\n const address: Address = {\n ...expressAddress,\n ThreeLetterISORegionName: threeLetterIsoRegionName,\n AddressTypeValue: this.defaultAddressType\n };\n\n return address;\n };\n\n /**\n * Get three letter ISO region name from two letter ISO region name.\n * @param twoLetterIsoRegionName -- The three letter ISO region name.\n * @returns The three letter ISO region name.\n */\n private readonly getThreeLetterIsoRegionName = (twoLetterIsoRegionName: string): string | undefined => {\n const countryRegion = this.countryRegions.find(country => {\n return country.ISOCode?.toLowerCase() === twoLetterIsoRegionName.toLowerCase();\n });\n\n return countryRegion?.CountryRegionId;\n };\n\n /**\n * Method to initialize all module state.\n */\n private readonly _initModuleState = (): void => {\n this.props.moduleState.init({\n status: this._canShip() ? 'updating' : 'disabled',\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit\n });\n\n const checkoutState = this.props.data.checkout.result;\n\n if (this._canShip()) {\n let defaultAddress;\n\n if (checkoutState?.checkoutCart.cart.ShippingAddress) {\n defaultAddress = checkoutState.checkoutCart.cart.ShippingAddress;\n } else if (this._getAddressFromCartExpressPaymentDetails()) {\n defaultAddress = this._getAddressFromCartExpressPaymentDetails();\n } else if (this._getDefaultAddress()) {\n defaultAddress = this._getDefaultAddress();\n } else {\n defaultAddress = checkoutState?.isExpressCheckoutApplied ? checkoutState.shippingAddressFromExpressCheckout : undefined;\n }\n\n if (defaultAddress && !this.addressCommon.isEmpty(defaultAddress)) {\n this._updateCurrentOperation(AddressOperation.Show, defaultAddress);\n this._setShippingAddress(defaultAddress);\n this._updateModuleState();\n checkoutState?.updateHasShippingAddress({ newHasShippingAddress: true });\n } else {\n this._updateCurrentOperation(AddressOperation.Add);\n checkoutState?.updateHasShippingAddress({ newHasShippingAddress: false });\n }\n }\n };\n\n /**\n * Method get called on submit address.\n */\n private readonly onSubmit = (): void => {\n switch (this.currentOperation) {\n case AddressOperation.Add:\n case AddressOperation.Update:\n this.props.telemetry.information('Shipping address submit for Add or Update operation.');\n this._onAddressAddUpdateSubmit();\n break;\n case AddressOperation.List:\n this.props.telemetry.information('Shipping address submit for List operation.');\n this._onSelectAddress();\n break;\n default:\n this.props.telemetry.error('Invalid operation');\n }\n };\n\n /**\n * Method get called on cancel.\n */\n private readonly onCancel = (): void => {\n switch (this.currentOperation) {\n case AddressOperation.Add:\n case AddressOperation.Update:\n this.props.telemetry.information('Shipping address cancel for Add or Update operation.');\n this._clearAddressFields();\n if (!(!this.selectedAddress && !this.addressCommon.isAuthenticatedFlow())) {\n this._resetView();\n }\n\n break;\n case AddressOperation.List:\n this.props.telemetry.information('Shipping address cancel for List operation.');\n if (this.selectedAddress) {\n this._resetView();\n }\n break;\n default:\n this.props.telemetry.error('Invalid operation');\n }\n };\n\n /**\n * Method get called on edit address.\n */\n private readonly onEdit = (): void => {\n this.props.telemetry.information('Shipping address onEdit is called.');\n\n if (this.addressCommon.isAuthenticatedFlow() && this.shippingAddress) {\n this._updateCurrentOperation(AddressOperation.List, this.shippingAddress);\n } else if (this.shippingAddress) {\n this._updateCurrentOperation(AddressOperation.Update, this.shippingAddress);\n }\n\n this._updateModuleState();\n };\n\n /**\n * Method to check if checkout cartlines are available fro shipping.\n * @returns - True/false as per the delivery mode.\n */\n private readonly _canShip = (): boolean => {\n const { checkout, channelDeliveryOptionConfig } = this.props.data;\n const { request } = this.props.context;\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\n if (!checkout.result || !request.channel || checkout.result.checkoutCart.isEmpty || checkout.result.checkoutCart.hasInvoiceLine) {\n return false;\n }\n\n // @ts-expect-error: Type-checker not realizing above request.channel check\n return this.retailMultiplePickUpOptionEnabled\n ? checkout.result.checkoutCart.cart.CartLines?.some(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !==\n channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLine.DeliveryMode\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n )\n : checkout.result.checkoutCart.cart.CartLines?.some(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n };\n\n /**\n * Method get called on select address.\n */\n private readonly _onSelectAddress = () => {\n this._updateCurrentOperation(AddressOperation.Show, this.addressListSelectedAddress);\n this._setShippingAddress(this.addressListSelectedAddress);\n this._updateModuleState();\n };\n\n /**\n * Method get called on goto add address.\n */\n private readonly _goToAddAddress = () => {\n this._setDefaultCountryRegionId();\n this._updateCurrentOperation(AddressOperation.Add);\n };\n\n /**\n * Method get called on add/update success.\n * @param response - Retail api response.\n */\n private readonly _onAddOrUpdateSuccess = (response: IAddressResponse) => {\n if (response.customerAddresses) {\n this.customerAddresses = response.customerAddresses;\n }\n\n if (response.address) {\n this._updateCurrentOperation(AddressOperation.Show, response.address);\n this._setShippingAddress(response.address);\n this._updateModuleState();\n }\n };\n\n /**\n * Method get called on set Shipping Address.\n * @param address - Retail Api address result.\n */\n private readonly _setShippingAddress = (address: Address): void => {\n if (this.props.data.checkout.result) {\n const newShippingAddress = { ...address };\n\n if (address.ThreeLetterISORegionName && !newShippingAddress.TwoLetterISORegionName) {\n newShippingAddress.TwoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(address.ThreeLetterISORegionName);\n }\n\n this.props.data.checkout.result.updateShippingAddress({ newShippingAddress });\n this.props.data.checkout.result.checkoutCart.updateShippingAddress({ newShippingAddress }).catch(error => {\n this.props.telemetry.error(error);\n });\n }\n };\n\n @computed private get shippingAddress(): Address | undefined {\n return this.props.data.checkout.result?.shippingAddress;\n }\n\n /**\n * Method get called on reset view.\n */\n private readonly _resetView = (): void => {\n switch (this.currentOperation) {\n case AddressOperation.Add:\n case AddressOperation.Update:\n this._updateCurrentOperation(\n this.addressCommon.isAuthenticatedFlow() ? AddressOperation.List : AddressOperation.Show,\n this.shippingAddress\n );\n break;\n default:\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\n }\n this._updateModuleState();\n };\n\n /**\n * Update current operation.\n * @param operation - The address operation.\n * @param selectedAddress - The selected address.\n */\n private readonly _updateCurrentOperation = (operation: AddressOperation, selectedAddress?: Address) => {\n this.currentOperation = operation;\n this.selectedAddress = selectedAddress;\n\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\n this.addUpdateAddress = { ...this.selectedAddress } || {};\n set(this.addUpdateAddress, {\n ThreeLetterISORegionName: this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\n });\n set(this.addUpdateAddress, {\n AddressTypeValue: this.addUpdateAddress.AddressTypeValue || this.defaultAddressType\n });\n } else if (this.currentOperation === AddressOperation.List) {\n this.addressListSelectedAddress = { ...this.selectedAddress } || {};\n }\n };\n\n /**\n * Update module state.\n */\n private readonly _updateModuleState = () => {\n if (this.currentOperation === AddressOperation.Show) {\n this.props.moduleState.onReady();\n } else if (this.isUpdating) {\n this.props.moduleState.onPending();\n } else {\n this.props.moduleState.onUpdating();\n }\n };\n\n /**\n * Method to check if the customer already has the address.\n * @param address - The address.\n */\n private readonly _isNewAddress = (address: Address): boolean => {\n for (const existingAddress of this.customerAddresses) {\n if (\n (address.Name ?? '') === existingAddress.Name &&\n (address.Street ?? '') === existingAddress.Street &&\n (address.StreetNumber ?? '') === existingAddress.StreetNumber &&\n (address.City ?? '') === existingAddress.City &&\n (address.State ?? '') === existingAddress.State &&\n (address.ZipCode ?? '') === existingAddress.ZipCode &&\n (address.Phone ?? '') === existingAddress.Phone &&\n (address.ThreeLetterISORegionName ?? '') === existingAddress.ThreeLetterISORegionName &&\n (address.AddressTypeValue ?? '') === existingAddress.AddressTypeValue\n ) {\n return false;\n }\n }\n\n return true;\n };\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n\n private readonly _clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.setState({\n errorMessage: ''\n });\n };\n}\n\nexport default CheckoutShippingAddress;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAddressAddItem, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { IAddressSelectItem, IAddressSelectProps } from '../../common/components/address-select';\nimport { IAddressShowItem, IAddressShowProps } from '../../common/components/address-show';\nimport { ICheckoutShippingAddressViewProps } from './checkout-shipping-address';\n\n/**\n * Address show component.\n * @param param0 - Root param.\n * @param param0.AddressDetail - Address detail.\n * @param param0.items - IAddressShowItem[].\n * @returns - Address Node.\n */\nconst AddressShow: React.FC = ({ AddressDetail, items }) => {\n return (\n \n {items.map((item: IAddressShowItem) => {\n return <>{item.description};\n })}\n \n );\n};\n\n/**\n * Address Select Component.\n * @param param0 - Root param.\n * @param param0.SelectAddress - Select address.\n * @param param0.addButton - Add button.\n * @param param0.items - IAddressSelectItem[].\n * @param param0.isShowSaveButton - Boolean.\n * @param param0.saveButton - Save button.\n * @param param0.isShowCancelButton - Boolean.\n * @param param0.cancelButton - Cancel button.\n * @returns - SelectAddress Node.\n */\nconst AddressSelect: React.FC = ({\n SelectAddress,\n addButton,\n items,\n isShowSaveButton,\n saveButton,\n isShowCancelButton,\n cancelButton\n}) => {\n return (\n \n {addButton}\n {items.map((item: IAddressSelectItem) => {\n const SelectItem = item.SelectItem;\n return (\n \n {item.input}\n \n \n );\n })}\n {isShowSaveButton && saveButton}\n {isShowCancelButton && cancelButton}\n \n );\n};\n\n/**\n * Address Add Update Component.\n * @param param0 - Root param.\n * @param param0.AddressForm - Address form.\n * @param param0.heading - Address heading.\n * @param param0.items - IAddressAddItem[].\n * @param param0.hasError - Boolean.\n * @param param0.error - Error message.\n * @param param0.isShowSaveButton - Boolean.\n * @param param0.saveButton - Save button.\n * @param param0.isShowCancelButton - Boolean.\n * @param param0.cancelButton - Cancel button.\n * @returns Address add update component node.\n */\nconst AddressAddUpdate: React.FC = ({\n AddressForm,\n heading,\n items,\n hasError,\n error,\n isShowSaveButton,\n saveButton,\n isShowCancelButton,\n cancelButton\n}) => {\n return (\n \n {heading}\n {items.map((item: IAddressAddItem) => {\n const { AddressItem, key, label, alert, input } = item;\n return (\n \n {label}\n {alert}\n {input}\n \n );\n })}\n {hasError && (\n \n {error.title}\n {error.message}\n \n )}\n {isShowSaveButton && saveButton}\n {isShowCancelButton && cancelButton}\n \n );\n};\n\n/**\n * Checkout Shipping Address View Component.\n * @param props - Props.\n * @returns - CheckoutShippingAddress Module.\n */\nconst CheckoutShippingAddressView: React.FC = props => {\n const {\n CheckoutShippingAddress,\n checkoutErrorRef,\n alert,\n viewState,\n showAddress,\n showAddressSelect,\n showAddOrUpdateAddress,\n cartLineImages\n } = props;\n\n return (\n \n {alert}\n {cartLineImages}\n {viewState.isShowAddress && }\n {viewState.isShowAddresList && }\n {viewState.isShowAddOrUpdateAddress && }\n \n );\n};\n\nexport default CheckoutShippingAddressView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { CheckoutState } from './checkout-state';\n\n/**\n * CheckoutState - action input.\n */\nexport class CheckoutStateInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('CheckoutState', this.apiSettings);\n\n public getCacheObjectType = () => 'CheckoutState';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CheckoutState - action.\n * @param input\n * @param ctx\n */\nexport async function checkoutStateAction(input: CheckoutStateInput, ctx: IActionContext): Promise {\n return new CheckoutState();\n}\n\n/**\n * CheckoutState - create new input for create action.\n * @param inputData\n */\nconst createInput = (inputData: ICreateActionContext>): IActionInput => {\n return new CheckoutStateInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * CheckoutState - create action.\n */\nexport const checkoutStateActionDataAction = createObservableDataAction({\n action: >checkoutStateAction,\n input: createInput\n});\n\nexport default checkoutStateActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Address, GiftCard, TenderLine, TokenizedPaymentCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { action, computed, observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a checkout.\n */\nexport class CheckoutState {\n @observable private _tokenizedPaymentCard: TokenizedPaymentCard | undefined;\n\n @computed public get tokenizedPaymentCard(): Readonly | undefined {\n return this._tokenizedPaymentCard;\n }\n\n @observable private _tenderLine: TenderLine | undefined;\n\n @computed public get tenderLine(): Readonly | undefined {\n return this._tenderLine;\n }\n\n @observable private _billingAddress: Address | undefined;\n\n @computed public get billingAddress(): Readonly
| undefined {\n return this._billingAddress;\n }\n\n @observable private _shippingAddress: Address | undefined;\n\n @computed public get shippingAddress(): Readonly
| undefined {\n return this._shippingAddress;\n }\n\n @observable private _cardPrefix: string | undefined;\n\n @computed public get cardPrefix(): Readonly | undefined {\n return this._cardPrefix;\n }\n\n @observable private _giftCards: GiftCard[] = [];\n\n @computed public get giftCards(): readonly GiftCard[] {\n return this._giftCards;\n }\n\n @observable private _giftCardExtends: IGiftCardExtend[] = [];\n\n @computed public get giftCardExtends(): readonly IGiftCardExtend[] {\n return this._giftCardExtends;\n }\n\n @observable private _loyaltyCardNumber?: string;\n\n @computed public get loyaltyCardNumber(): Readonly | undefined {\n return this._loyaltyCardNumber;\n }\n\n @observable private _loyaltyAmount: number = 0;\n\n @computed public get loyaltyAmount(): Readonly | number {\n return this._loyaltyAmount;\n }\n\n @observable private _guestCheckoutEmail: string = '';\n\n @computed public get guestCheckoutEmail(): Readonly | string {\n return this._guestCheckoutEmail;\n }\n\n @observable private _isTermsAndConditionAccepted: boolean = false;\n\n @computed public get isTermsAndConditionAccepted(): Readonly | boolean {\n return this._isTermsAndConditionAccepted;\n }\n\n @observable private _customerAccountAmount: number = 0;\n\n @computed public get customerAccountAmount(): Readonly | number {\n return this._customerAccountAmount;\n }\n\n @action\n public updateTokenizedPaymentCard(newTokenizedPaymentCard: TokenizedPaymentCard): void {\n this._tokenizedPaymentCard = newTokenizedPaymentCard;\n }\n\n @action\n public updateTenderLine(newTenderLine: TenderLine | undefined): void {\n this._tenderLine = newTenderLine;\n }\n\n @action\n public updateShippingAddress(newShippingAddress: Address): void {\n this._shippingAddress = newShippingAddress;\n }\n\n @action\n public updateBillingAddress(newBillingAddress: Address): void {\n this._billingAddress = newBillingAddress;\n }\n\n @action\n public updateCardPrefix(newCardPrefix: string): void {\n this._cardPrefix = newCardPrefix;\n }\n\n @action\n public removeGiftCard(giftCardNumber: string): void {\n this._giftCards = this._giftCards.filter(giftCard => giftCard.Id !== giftCardNumber);\n }\n\n @action\n public removeGiftCardExtend(giftCardNumber: string): void {\n this._giftCardExtends = this._giftCardExtends.filter(giftCard => giftCard.Id !== giftCardNumber);\n }\n\n @action\n public addGiftCard(giftCard: GiftCard): void {\n this._giftCards = [giftCard, ...this._giftCards];\n }\n\n @action\n public addGiftCardExtend(giftCard: IGiftCardExtend): void {\n this._giftCardExtends = [giftCard, ...this._giftCards];\n }\n\n @action\n public updateLoyaltyCardNumber(newLoyaltyCardNumber: string): void {\n this._loyaltyCardNumber = newLoyaltyCardNumber;\n }\n\n @action\n public updateLoyaltyAmount(newAmount: number): void {\n this._loyaltyAmount = newAmount;\n }\n\n @action\n public updateGuestCheckoutEmail(newGuestCheckoutEmail: string): void {\n this._guestCheckoutEmail = newGuestCheckoutEmail;\n }\n\n @action\n public updateTermsAndConditionsAcceptance(newIsTermsAndConditionAccepted: boolean): void {\n this._isTermsAndConditionAccepted = newIsTermsAndConditionAccepted;\n }\n\n @action\n public updateCustomerAccountAmount(newAmount: number): void {\n this._customerAccountAmount = newAmount;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionContext, IActionInput } from '@msdyn365-commerce/core';\n\nimport { IModuleStates } from './module-state.data';\n\n/**\n * GetModulesInput.\n */\nexport class ModuleStatesCacheKey implements IActionInput {\n public getCacheKey = () => 'ModuleState';\n\n public getCacheObjectType = () => 'ModuleState';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport function getModuleStates(ctx: IActionContext): IModuleStates {\n const cacheKey = new ModuleStatesCacheKey();\n\n let moduleStates = ctx.get(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n if (moduleStates) {\n return moduleStates;\n }\n ctx.update(cacheKey, {});\n moduleStates = ctx.get(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n return moduleStates;\n}\n\nexport function updateModuleStates(value: IModuleStates, ctx: IActionContext): void {\n const cacheKey = new ModuleStatesCacheKey();\n ctx.update(cacheKey, value);\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModule } from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport isMatch from 'lodash/isMatch';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { getModuleStates, updateModuleStates } from './module-state';\nimport { IModuleState, IModuleStateManager, IModuleStateProps, IModuleStates } from './module-state.data';\n\nexport interface IProps extends IModule, IModuleStateProps {\n enableControl?: boolean;\n}\n\nconst sectionContainerModuleId = 'section-container';\nconst paymentInstrumentModuleId = 'payment-instrument';\n\nconst withModuleState =

(WrappedComponent: React.ComponentType

): React.ComponentType

=> {\n /**\n *\n * ModuleState component.\n * @extends {React.Component

}\n */\n @observer\n class ModuleState extends React.Component

{\n constructor(props: P) {\n super(props);\n this.initializeState();\n }\n\n public shouldComponentUpdate(nextProps: IModuleStateProps): boolean {\n if (this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { id } = this.props;\n return ;\n }\n\n private readonly initializeState = (): void => {\n const { id, typeName, context } = this.props;\n const states = getModuleStates(context.actionContext);\n if (!states) {\n this.props.telemetry.error('withModuleState initializeState() - states not found');\n return;\n }\n\n if (states[id]) {\n // State has been initialized\n return;\n }\n\n updateModuleStates(\n {\n ...states,\n [id]: {\n id,\n typeName,\n hasInitialized: false,\n hasError: false,\n isRequired: true,\n isCancellable: true,\n isSubmitContainer: false,\n status: undefined,\n childIds: []\n }\n },\n context.actionContext\n );\n };\n\n /**\n * GetModuleStateManager\n * Get module state manager by id.\n * @param id\n */\n private readonly getModuleStateManager = (id: string): IModuleStateManager => {\n const moduleState = this.get()[id];\n return {\n ...moduleState!,\n hasInitialized: this.validate(id, { hasInitialized: true }, true), // All has initialized is initialized\n hasError: this.validate(id, { hasError: true }), // Partial has error is error\n isReady: this.validate(id, { status: 'ready' }, true, true), // All ready is ready (exclued disabled and skipped)\n isUpdating: this.validate(id, { status: 'updating' }), // Partial updating is updating\n isPending: this.validate(id, { status: 'pending' }), // Partial pending is pending\n isSkipped: this.validate(id, { status: 'skipped' }, true, true), // All skipped is skipped (exclued disabled)\n isDisabled: this.validate(id, { status: 'disabled' }, true), // All disabled is disabled\n isCancelAllowed: this.validate(id, { isCancellable: true }, true, true), // Partial not allowed is not allowed\n shouldSubmitContainer: this.validate(id, { isSubmitContainer: true }), // Partial submit is submit.\n hasExternalSubmitGroup: this.hasExternalSubmitGroup(),\n hasModuleState: this.hasModuleState(id),\n setIsRequired: (value: boolean): void => {\n this.update(id, { isRequired: value });\n },\n setIsCancellable: (value: boolean): void => {\n this.update(id, { isCancellable: value });\n },\n setIsSubmitContainer: (value: boolean): void => {\n this.update(id, { isSubmitContainer: value });\n },\n setHasError: (value: boolean): void => {\n this.update(id, { hasError: value });\n },\n onReady: (): void => {\n this.update(id, { status: 'ready' });\n },\n onUpdating: (): void => {\n this.update(id, { status: 'updating' });\n },\n onPending: (): void => {\n this.update(id, { status: 'pending' });\n },\n onSkip: (): void => {\n this.update(id, { status: 'skipped' });\n },\n onDisable: (): void => {\n this.update(id, { status: 'disabled' });\n },\n getModule: (moduleId: string): IModuleStateManager => this.getModuleStateManager(moduleId),\n getModuleByTypeName: (typeName: string): IModuleStateManager => this.getModuleStateManagerByTypeName(typeName),\n init: (options?: Partial): void => {\n if (moduleState?.hasInitialized) {\n // State has been initialized\n return;\n }\n this.update(id, {\n hasInitialized: true,\n ...options\n });\n }\n };\n };\n\n /**\n * GetModuleStateManagerByTypeName\n * Get module state manager by type name.\n * @param typeName\n */\n private readonly getModuleStateManagerByTypeName = (typeName: string): IModuleStateManager => {\n const moduleStates = getModuleStates(this.props.context.actionContext);\n const moduleState = Object.values(moduleStates).find(_moduleState => _moduleState?.typeName === typeName);\n return this.getModuleStateManager((moduleState && moduleState.id) || '');\n };\n\n /**\n * Get\n * Get all module states.\n */\n private readonly get = (): IModuleStates => {\n return getModuleStates(this.props.context.actionContext);\n };\n\n /**\n * Update\n * Update module state.\n * @param id\n * @param value\n */\n private readonly update = (id: string, value: Partial): void => {\n // Console.log('withModuleState - update', id, value);\n const modules = this.get();\n if (!modules[id]) {\n this.props.telemetry.error(`withModuleState update() - Module state with id ${id} is not found.`);\n return;\n }\n modules[id] = {\n ...modules[id]!,\n ...value\n };\n };\n\n private readonly _validateLeaf = (id: string, source: Partial): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n return isMatch(module, source);\n };\n\n private readonly _validateContainer = (\n id: string,\n source: Partial,\n allMatched?: boolean,\n skipSkippableItem?: boolean\n ): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n // Module doesn't has module state\n return !!allMatched;\n }\n\n if (skipSkippableItem && (module.status === 'disabled' || module.status === 'skipped')) {\n // Skip disabled or skipped modules\n return !!allMatched;\n }\n\n // It is leaf module\n if (!module.childIds || module.childIds.length === 0) {\n return this._validateLeaf(id, source);\n }\n\n let childIds = module.childIds;\n\n if (this.props.context.app.config.shouldEnableSinglePaymentAuthorizationCheckout) {\n // For new checkout flow, we bypass the isReady check for payment section container to enable the place order button.\n childIds = childIds.filter(childId => !this._isPaymentSectionContainer(childId));\n }\n\n // It is container module\n const method = allMatched ? 'every' : 'some';\n return childIds[method](childId => this._validateContainer(childId, source, allMatched, skipSkippableItem));\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\n if (!moduleId.includes(sectionContainerModuleId)) {\n return false;\n }\n\n const modules = this.get();\n const module = modules[moduleId];\n\n if (module && ArrayExtensions.hasElements(module.childIds.filter(childId => childId.includes(paymentInstrumentModuleId)))) {\n return true;\n }\n\n return false;\n };\n\n /**\n * Validate\n * Validate current module and all its child module match the provided condition.\n * @param id\n * @param source\n * @param allMatched\n * @param skipSkippableItem\n */\n private readonly validate = (\n id: string,\n source: Partial,\n allMatched?: boolean,\n skipSkippableItem?: boolean\n ): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n\n // It is leaf module\n if (!module.childIds || module.childIds.length === 0) {\n return this._validateLeaf(id, source);\n }\n\n // It is container module\n return this._validateContainer(id, source, allMatched, skipSkippableItem);\n };\n\n /**\n * HasExternalSubmitGroup\n * Module will use external submit group.\n */\n private readonly hasExternalSubmitGroup = (): boolean => {\n return !!this.props.enableControl;\n };\n\n /**\n * HasModuleState\n * Module is using module state manager.\n * @param id\n */\n private readonly hasModuleState = (id: string): boolean => {\n const modules = this.get();\n const module = modules[id];\n return !!module;\n };\n }\n\n return ModuleState;\n};\n\nexport default withModuleState;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICategoryPromotionalContentData } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuData {\n categories: AsyncResult;\n}\n\nexport interface IMenuItemData {\n id?: number;\n linkText?: string;\n linkURL?: string;\n imageSource?: string;\n imageDestinationURL?: string;\n subMenu?: IMenuItemData[];\n promotionalContent?: ICategoryPromotionalContentData[];\n menuSource?: string;\n shouldOpenNewTab?: boolean;\n ariaLabel?: string;\n}\n\n/**\n *\n * Menu type index id.\n */\nexport enum MenuTypeIndexId {\n Cms = 1000,\n Retail = 5000\n}\n\n/**\n *\n * Menu type source.\n */\nexport enum MenuSource {\n Cms = 'Cms',\n Retail = 'Retail'\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject } from '@msdyn365-commerce/core';\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport * as React from 'react';\n\nimport { IMenuItemData, INavigationMenuData, MenuSource, MenuTypeIndexId } from './navigation-menu.data';\nimport { ICmsNavItemsData, INavigationMenuProps, ISubMenusData, navigationMenuSource } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuViewProps extends INavigationMenuProps {\n className: string;\n menuItemData: IMenuItemData[];\n Navigation: IModuleProps;\n MenuList: INodeProps;\n ListItem: INodeProps;\n Link: INodeProps;\n Button: INodeProps;\n Span: INodeProps;\n ImageContainer: INodeProps;\n MobileDescriptionContainer: INodeProps;\n MobileBackButton: INodeProps;\n MobileDescriptionLabel: INodeProps;\n imageSettings: IImageSettings;\n gridSettings: IGridSettings;\n isMobileView: boolean;\n DivContainer?: INodeProps;\n ImageDivContainer?: INodeProps;\n showCategoryImage?: boolean;\n showPromotionalContent?: boolean;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface INavigationMenuState {\n isMobile: boolean;\n}\n\n/**\n *\n * NavigationMenu component.\n * @extends {React.PureComponent>}\n */\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\n private static CMSItemIdInit: number = MenuTypeIndexId.Cms;\n\n private static RSItemIdInit: number = MenuTypeIndexId.Retail;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n private menuItemList: IMenuItemData[];\n\n private isRetail: boolean = true;\n\n private isCMS: boolean = true;\n\n @observable\n private viewport: GridSize;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && nameTranslations.length > 0) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation && nameTranslation.Text;\n }\n\n constructor(props: INavigationMenuProps) {\n super(props);\n this._updateViewport = this._updateViewport.bind(this);\n this.viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\n this.state = { isMobile: this.isMobile };\n this.menuItemList = [];\n }\n\n @computed get isMobile(): boolean {\n return this.viewport === 'xs' || this.viewport === 'sm';\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n this.resizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\n }\n this._updateViewport();\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n }\n\n public render(): JSX.Element | null {\n this.menuItemList = this._mapData();\n if (isEmptyOrNullObject(this.props.data)) {\n this.props.telemetry.error('Navigatiomenu returned null');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=224&h=300&m=6', w: 0, h: 0 },\n xl: { q: 'w=224&h=300&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n const viewProps = {\n ...this.props,\n ...this.state,\n imageSettings: defaultImageSettings,\n gridSettings: this.props.context.request.gridSettings,\n Navigation: {\n moduleProps: this.props,\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\n tag: 'nav',\n role: this.isMobile ? 'listbox' : 'navigation'\n },\n MenuList: {\n className: 'ms-nav__list',\n tag: 'ul',\n role: this.isMobile ? 'listbox' : 'menu'\n },\n ListItem: {\n className: 'ms-nav__list__item',\n role: 'presentation',\n tag: 'li'\n },\n showCategoryImage: this.props.config.displayCategoryImage ?? false,\n showPromotionalContent: this.props.config.displayPromotionalImage ?? false,\n Link: {\n tag: 'a',\n className: 'ms-nav__list__item__link',\n role: this.isMobile ? 'option' : 'menuitem'\n },\n DivContainer: {\n tag: 'div',\n className: 'ms-nav__feature'\n },\n ImageDivContainer: {\n tag: 'div',\n className: 'category-image',\n role: 'tabpanel'\n },\n Button: {\n className: 'ms-nav__list__item__button',\n tag: 'button',\n role: this.isMobile ? 'option' : 'menuitem',\n onClick: this.props\n },\n ImageContainer: {\n className: 'ms-nav__list__item__image'\n },\n Span: {\n className: 'ms-nav__list__item__span',\n tag: 'span'\n },\n MobileDescriptionContainer: {\n className: 'ms-nav__list__mobile__container'\n },\n MobileBackButton: {\n className: 'ms-nav__list__mobile__container__button',\n tag: 'button',\n 'aria-label': this.props.resources.backButtonAriaLabel,\n onClick: this.props\n },\n MobileDescriptionLabel: {\n className: 'ms-nav__list__mobile__container__span',\n tag: 'span'\n },\n isMobileView: this.state.isMobile,\n menuItemData: this.menuItemList,\n className: classnames('ms-nav', this.props.config.className)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _mapData(): IMenuItemData[] {\n const { data, config } = this.props;\n const mergedData: IMenuItemData[] = [];\n if (this.isRetail && data && data.categories && data.categories.result && data.categories.result.length > 0) {\n data.categories.result.map((item: CategoryHierarchy, index) =>\n mergedData.push(this._constructMenuItemData(item, undefined, true, index, true))\n );\n }\n\n if (this.isCMS && config.cmsNavItems && config.cmsNavItems.length > 0) {\n config.cmsNavItems.map((item: ICmsNavItemsData, idx: number) =>\n mergedData.push(this._constructMenuItemData(undefined, item, false, idx + 1))\n );\n }\n return this._constructTopMenuItemData(mergedData);\n }\n\n private _constructTopMenuItemData(mergedData: IMenuItemData[]): IMenuItemData[] {\n const enableTopLevelMenu = this.props.config.enabletopMenu ?? false;\n if (!enableTopLevelMenu) {\n return mergedData;\n }\n const mergedRootMenuData: IMenuItemData[] = [];\n const topMenu = {\n id: 1,\n linkText: this.props.config.rootMenuNavigation ?? '...',\n linkURL: '#',\n imageSource: undefined,\n subMenu: mergedData\n } as IMenuItemData;\n mergedRootMenuData.push(topMenu);\n\n return mergedRootMenuData;\n }\n\n private _constructMenuItemData(\n retailItem?: CategoryHierarchy,\n cmsItem?: ICmsNavItemsData,\n isRetail?: boolean,\n idx?: number,\n addedAllMenu?: boolean\n ): IMenuItemData {\n const locale =\n this.props.context && this.props.context.request && this.props.context.request.locale\n ? this.props.context.request.locale\n : 'en-us';\n const { categoryPromotionalContent } = this.props.config;\n const cmsItemText = (cmsItem && cmsItem.linkText) || '';\n const { menuAriaLabel } = this.props.resources;\n\n // Filter category promotional data based on category name\n const promotionalData =\n retailItem &&\n categoryPromotionalContent?.filter(promoItem => promoItem.categoryName?.toLowerCase() === retailItem?.Name?.toLowerCase());\n\n // First check if image is available from promotional data else read from retail server\n let imageSource: string = 'empty';\n if (ArrayExtensions.hasElements(retailItem?.Images) && retailItem!.Images[0].Uri) {\n imageSource = retailItem!.Images[0].Uri;\n }\n if (isRetail) {\n return {\n id: NavigationMenu.RSItemIdInit++,\n linkText: NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? '',\n linkURL: retailItem?.Url,\n imageSource,\n subMenu: this._getNestedChildren(retailItem, imageSource, addedAllMenu),\n promotionalContent: this.props.config.displayPromotionalImage && promotionalData,\n menuSource: MenuSource.Retail,\n ariaLabel: `${NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? ''} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n return {\n id: NavigationMenu.CMSItemIdInit++,\n linkText: cmsItemText,\n linkURL: (cmsItem && cmsItem.linkUrl && cmsItem.linkUrl.destinationUrl) || '',\n imageDestinationURL: (cmsItem && cmsItem.imageLink && cmsItem.imageLink.destinationUrl) || '',\n imageSource: (cmsItem && cmsItem.image && cmsItem.image.src) || '',\n subMenu: this._getCMSNestedChildren(cmsItem),\n menuSource: MenuSource.Cms,\n shouldOpenNewTab: cmsItem?.openInNewTab,\n ariaLabel: `${cmsItemText} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n\n private _getNestedChildren(category?: CategoryHierarchy, imageSourceUrl?: string, addedAllMenu: boolean = false): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n if (!category || !category.Children || category.Children.length === 0) {\n return [];\n }\n if (!this.props.config.enabletopMenu && addedAllMenu) {\n nestedChildren.push({\n linkText: this.props.resources.allCategoryMenuText,\n imageSource: imageSourceUrl,\n linkURL: getCategoryUrl(category, (this.props.context as unknown) as IActionContext, {})\n });\n }\n category.Children.map((item: CategoryHierarchy, index) => {\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, false));\n });\n return nestedChildren;\n }\n\n private _getCMSNestedChildren(category?: ICmsNavItemsData): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n\n if (!category || !category.subMenus || category.subMenus.length === 0) {\n return [];\n }\n\n category.subMenus.map((item: ISubMenusData, idx: number) => {\n nestedChildren.push(this._constructMenuItemData(undefined, item, false, idx));\n });\n return nestedChildren;\n }\n\n private readonly _setNavigationSource = (sourceType?: navigationMenuSource): void => {\n switch (sourceType) {\n case navigationMenuSource.retailServerOnly:\n this.isRetail = true;\n this.isCMS = false;\n break;\n case navigationMenuSource.cmsOnly:\n this.isRetail = false;\n this.isCMS = true;\n break;\n case navigationMenuSource.all:\n this.isRetail = true;\n this.isCMS = true;\n break;\n default:\n }\n };\n\n private _updateViewport(): void {\n this.viewport = this._getViewport();\n this.setState({ isMobile: this.isMobile });\n }\n\n private _getViewport(): GridSize {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n }\n}\n\nexport default NavigationMenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { INavigationMenuViewProps } from './navigation-menu';\nimport { IMenuItemData } from './navigation-menu.data';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n mobileViewLabelText?: string;\n categoryImageAltText: string;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private currentLevel: number = 0;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\n\n this.currentLevel = 1;\n return (\n \n \n {isMobileView && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: undefined })\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}{' '}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: item?.id })\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false\n ): JSX.Element | null {\n const { Link } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\n const categoryImageDisplay =\n !isMobileView &&\n (showCategoryImage || showPromotionalContent) &&\n !ArrayExtensions.hasElements(this.state.categoryImage) &&\n !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuView.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n private readonly _handleGoBack = () => () => {\n NavigationMenuView.isBackTrack = true;\n this.setState({ activeMenu: this.state.parentMenu });\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n mobileViewLabelText: '',\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Parent user clicked Sub menu list.\n * @param optionLinkText -Sub menu list.\n * @returns Ref.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n if (!NavigationMenuView.isBackTrack && index === 0) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '' });\n }\n }\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n return (\n \n );\n }\n return null;\n };\n}\n\nexport default NavigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\n\n/**\n * INavigationMenuViewRootProps.\n */\nexport interface INavigationMenuViewRootProps {\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\n}\n\n/**\n * Represent navigation menu state interface.\n */\nexport interface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: Msdyn365.IImageData[] | null;\n mobileViewLabelText?: string;\n drawerKeyValue: Msdyn365.IDictionary;\n isOnlyMobile: boolean;\n isNavOpen: boolean;\n}\n\n/**\n * NavMenuConstants enum.\n */\nexport enum NavMenuConstants {\n zero = 0,\n one = 1,\n two = 2,\n three = 3,\n four = 4,\n escapeKey = 27,\n rootMenu = 1\n}\n\n/**\n * GridSizes.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Get category image.\n * @param props - Navigation menu props.\n * @param categoryImage - Category Image.\n * @param alttext - AltText String.\n * @returns Returns Node.\n */\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootDisabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootDisabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n\n this.state = {\n activeMenu: 1,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = 1;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: 1,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = 1;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props.navProps;\n\n return (\n \n \n {this._renderDisplay()}\n

\n
\n \n \n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (ArrayExtensions.hasElements(menuItemData)) {\n menuItemData[0].id = 1;\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of menuItemData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\n if (!menu) {\n return null;\n }\n\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\n const item: IMenuItemData = menu[Number(index)];\n\n if (item.id === this.state.activeMenu) {\n if (!NavigationMenuRootDisabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\n }\n return item;\n }\n const found = this._getFromSubMenu(item.id, item.subMenu);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootDisabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootDisabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootDisabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootEnabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootEnabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private menuItemData: IMenuItemData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n this.state = {\n activeMenu: NavMenuConstants.rootMenu,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n this._addShopAllLink();\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = NavMenuConstants.one;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: NavMenuConstants.rootMenu,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = NavMenuConstants.one;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { Navigation } = this.props.navProps;\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n let menuItemData: IMenuItemData[] = [];\n if (this.state.isOnlyMobile) {\n menuItemData = this.menuItemData;\n } else {\n menuItemData = this.props.navProps.menuItemData;\n }\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n let cmsMenuData: IMenuItemData[] | undefined = [];\n let retailMenuItemData: IMenuItemData[] | undefined = [];\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\n\n for (const item of retailMenuData) {\n retailMenuItemData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n item.subMenu = retailMenuItemData;\n }\n\n for (const item of menuItemData) {\n cmsMenuData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail);\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n let menuItem: IMenuItemData | null = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({\n parentMenu: undefined\n });\n } else {\n this.setState({\n parentMenu: undefined,\n mobileViewLabelText: menuItemDatum.linkText\n });\n }\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum);\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of retailMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n\n for (const [index, item] of cmsMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item?.subMenu;\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\n const subMenu: IMenuItemData = subMenus[Number(index)];\n let parentMenuId = item?.id;\n\n if (subMenu.id === this.state.activeMenu) {\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\n parentMenuId = undefined;\n }\n\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\n }\n return subMenu;\n }\n const found = this._getFromSubMenu(subMenu);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootEnabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootEnabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Add shop all link for Mobile submenu.\n */\n private readonly _addShopAllLink = (): void => {\n const { menuItemData } = this.props.navProps;\n this.menuItemData = menuItemData;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n this.menuItemData[0].subMenu?.map(item => {\n const shopAllObject = {};\n Object.assign(shopAllObject, { imageSource: item.imageSource });\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\n Object.assign(shopAllObject, { linkURL: item.linkURL });\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\n item.subMenu.unshift(shopAllObject);\n }\n return item;\n });\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootEnabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\n\n/**\n * Render the Navigation menu.\n * @param props - The navigation menu view props.\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\n */\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\n if (props.config.enabletopMenu) {\n return ;\n }\n\n return ;\n};\n\nexport default navigationMenuView;\n"],"names":["CheckoutPickupCartLines","moduleClassName","cartLines","title","itemTitle","resources","isMobileCheck","isMobile","variant","VariantType","context","gridSettings","xs","w","sm","md","lg","xl","isMobileView","ArrayExtensions","React","className","map","cartLine","isShowQty","quantity","classnames","key","lineId","Image","imageProps","role","format","productQuantityInfo","altText","id","defaultImageSettings","viewports","q","h","lazyload","quality","CheckoutShippingAddress","constructor","props","super","countryRegionId","customerAddresses","addressListSelectedAddress","countryRegions","addressPurposes","defaultAddressType","multiplePickupStoreSwitchName","retailMultiplePickUpOptionEnabled","countriesAvail","enGB","it","enUS","eu","_initPickupGroup","async","pickupCartLines","this","_getCartLinesforDelivery","products","_getProductsByCartLines","data","checkout","result","checkoutCart","cart","ChannelId","line","product","find","x","RecordId","ProductId","push","setState","shippingGroups","error","telemetry","_onSuggestionSelected","_clearAddressFields","address","addressFormat","getTranformedAddress","stateProvinceInfo","set","addUpdateAddress","Street","ZipCode","CountyName","City","State","DistrictName","FullAddress","County","setTimeout","addressFormatItem","getAddressFormat","ThreeLetterISORegionName","formatAddress","undefined","name","autoSuggest","excludedAddressFields","includes","_clearValidation","validationError","_dataInitialize","reaction","countryStates","featureState","feature","Name","IsEnabled","CartLines","filter","_isDelivery","_isNotPickupMode","DeliveryMode","FulfillmentStoreId","deliveryMode","pickupDeliveryModeCode","request","channel","PickupDeliveryModeCode","channelDeliveryOptionConfig","pickupDeliveryMode","PickupDeliveryModeCodes","some","pickupMode","channelId","actionContext","productInputs","ObjectExtensions","ProductInput","requestContext","apiSettings","getSimpleProducts","_renderAddOrUpdateAddress","onSaveHandler","onCancelHandler","currentOperation","AddressOperation","addressCommon","isAuthenticatedFlow","AddressAddUpdate","isUpdating","addressType","AddressType","defaultCountryRegionId","selectedAddress","hasError","addressActionResponse","telemetryContent","dropdownDisplayData","getPrefilledAddressDropdownData","addressStateDefaultSelectionText","onInputChange","_onAddressAddUpdateInputChange","onDropdownChange","_onAddressAddUpdateDropdownChange","hasExternalSubmitGroup","moduleState","onSave","onSubmit","onCancel","_resetView","_renderSelectAddress","onAddAddressHandler","AddressSelect","addresses","onAddressOptionChange","_onAddressOptionChange","onAddAddress","_goToAddAddress","_onSelectAddress","_attachMapAutoSuggest","storeSelectorStateManager","isMapApiLoaded","attachAutoSuggest","event","addressRecordId","currentTarget","value","toString","onAddressAddUpdate","locale","validateAddressFormat","target","type","checked","replace","RegExp","AddressItemType","_onCountryChange","_onAddressAddUpdateSubmit","response","document","getElementById","_isNewAddress","updateCustomerAddress","addCustomerAddress","Promise","resolve","_updateModuleState","then","newAddress","_onAddOrUpdateSuccess","twoLetterIsoRegionName","getTwoLetterISORegionName","TwoLetterISORegionName","changeAutoSuggestionCountryCode","_getAddressFormatExcludeList","config","addressFormatExcludeList","showAddressType","_getStateProvinces","getStateProvinces","state","StateId","_getDefaultAddress","IsPrimary","length","_getAddressFromCartExpressPaymentDetails","expressPaymentDetailsFromCartPage","tokenizedPaymentCard","isExpressAddressAppliedInCartPage","addressFromCartExpress","getExpressAddress","getAddressFromTokenizedPaymentCard","_getLocale","threeLetterIsoRegionName","getThreeLetterIsoRegionName","_updateCurrentOperation","errorMessage","notValidCountryError","Country","NameOnCard","Address1","StreetNumber","Address2","Zip","Phone","AddressTypeValue","expressAddress","countryRegion","country","ISOCode","toLowerCase","CountryRegionId","_initModuleState","init","status","_canShip","onEdit","checkoutState","defaultAddress","ShippingAddress","isExpressCheckoutApplied","shippingAddressFromExpressCheckout","isEmpty","_setShippingAddress","updateHasShippingAddress","newHasShippingAddress","information","shippingAddress","emailDeliveryModeCode","EmailDeliveryModeCode","hasInvoiceLine","_setDefaultCountryRegionId","newShippingAddress","updateShippingAddress","catch","operation","onReady","onPending","onUpdating","existingAddress","localeString","sitePath","currency","Currency","AddressCommon","AddressFormat","AddressMetaData","getTelemetryObject","telemetryPageName","friendlyName","autoSuggestionEnabled","autoSuggestOptions","BingMapsApiKey","BingMapsEnabled","options","AutoSuggest","ChannelCountryRegionISOCode","DefaultLanguageId","_loadMapAPI","loadMapApi","disposeAutoSuggest","shouldComponentUpdate","nextProps","nextState","render","renderView","headingImages","itemsText","singleItemText","imageSettings","cartlines","LineId","src","PrimaryImageUrl","fallBackSrc","getFallbackImageUrl","ItemId","loadFailureBehavior","Quantity","itemText","lineImageProps","cartLineImages","isRetailMultiplePickUpOptionEnabled","viewState","isShowAddress","isShowAddresList","isShowAddOrUpdateAddress","moduleProps","showAddress","_renderShowAddress","showAddressSelectHandler","showAddOrUpdateAddressHandler","showAddOrUpdateAddress","showAddressSelect","properties","ExtensionProperties","property","Key","Value","StringValue","JSON","parse","AddressShow","market","getDefaultCountryRegionId","__decorate","observable","action","computed","withModuleState","observer","AddressDetail","items","Node","item","description","SelectAddress","addButton","isShowSaveButton","saveButton","isShowCancelButton","cancelButton","SelectItem","input","showItems","AddressForm","heading","other","autocomplete","select","nativeInputValueSetter","Object","getOwnPropertyDescriptor","window","HTMLInputElement","prototype","populateFormElements","addressComponent","formMap","types","googleComponent","autocompleteFormField","selectedValue","element","is_convert_a2_to_a3","i","eValue","convert_a2_to_a3","selectItemByValue","short_name","setAttribute","Event","bubbles","dispatchEvent","formValue","long_name","call","eCustom","phoneValidation","addressForm","getElementsByClassName","saveAddressButton","closest","county","countyCtn","countyAlert","onkeyup","classList","remove","textContent","onclick","e","add","elements","querySelectorAll","fieldInALL","forEach","stopPropagation","googleComponents","google","maps","places","Autocomplete","componentRestrictions","startTypingYourAddress","clearInstanceListeners","addListener","place","getPlace","addressComponents","address_components","addr","gMapsAutocomplete","o","optionV","countrySelect","stateSelect","disabled","Boolean","provinceSelect","province","querySelector","phone","phoneCtn","phoneAlert","pattern","pattern2","match","addressPhoneRequiredErrorMessage","removeAttribute","checkPhone","AddressItem","label","alert","maxLength","AddressError","message","Module","AF","AX","AL","DZ","AS","AD","AO","AI","AQ","AG","AR","AM","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BA","BW","BV","BR","IO","BN","BG","BF","BI","KH","CM","CA","CV","KY","CF","TD","CL","CN","CX","CC","CO","KM","CG","CD","CK","CR","CI","HR","CU","CY","CZ","DK","DJ","DM","DO","EC","EG","SV","GQ","ER","EE","ET","FK","FO","FJ","FI","FR","GF","PF","TF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GG","GN","GW","GY","HT","HM","VA","HN","HK","HU","IS","IN","ID","IR","IQ","IE","IM","IL","IT","JM","JP","JE","JO","KZ","KE","KI","KP","KR","KW","KG","LA","LV","LB","LS","LR","LY","LI","LT","LU","MO","MK","MG","MW","MY","MV","ML","MT","MH","MQ","MR","MU","YT","MX","FM","MD","MC","MN","ME","MS","MA","MZ","MM","NA","NR","NP","NL","AN","NC","NZ","NI","NE","NG","NU","NF","MP","NO","OM","PK","PW","PS","PA","PG","PY","PE","PH","PN","PL","PT","PR","QA","RE","RO","RU","RW","BL","SH","KN","LC","MF","PM","VC","WS","SM","ST","SA","SN","RS","SC","SL","SG","SK","SI","SB","SO","ZA","GS","ES","LK","SD","SR","SJ","SZ","SE","CH","SY","TW","TJ","TZ","TH","TL","TG","TK","TO","TT","TN","TR","TM","TC","TV","UG","UA","AE","GB","US","UM","UY","UZ","VU","VE","VN","VG","VI","WF","EH","YE","ZM","ZW","focusOnCheckoutError","checkoutErrorRef","ctx","getCheckoutState","exception","current","scrollIntoView","updateCheckoutErrorFocus","newCheckoutErrorFocus","CheckoutModule","countryCode","defaultLanguageId","inputId","containerId","selectedSuggestionCallback","autoSuggestManager","Microsoft","Maps","loadModule","callback","AutosuggestManager","attachAutosuggest","errorCallback","debug","credentials","bingMapsApiKey","setOptions","detachAutosuggest","dispose","lang","marketISOCode","currentCountryRegion","parseRetailException","errorTitle","addressErrorMessageTitle","addressGenericErrorMessage","user","isAuthenticated","GetStateProvincesInput","getStateProvinceAction","updateLogisticsLocationRoleRecordId","submitCustomerAddress","addAddress","updateAddress","updateCustomerPrimaryAddress","updatePrimaryAddress","addressAction","AddressManagementInput","execAddressAction","GetAddressPurposesInput","getAddressPurposesAction","addressPurpose","purpose","LogisticsLocationRoleRecordId","AddressItemDisplayType","AddressValidationRuleType","countryRegionsInfo","addressMetaData","stateDefaultSelectionText","defaultStateText","dropdownData","getCountryFormat","getStateFormat","unshift","getAddressTypeFormat","_getCountryRegionInfo","propertyName","validationtor","isValid","_inputValidation","postalCode","selectedState","StateName","adminDistrict","addressLine","locality","district","formattedAddress","_validateRegEx","validationRule","regEx","test","get","countryRegionInfo","_getAddressDisplayFormat","ShortName","Description","validationRules","addressDisplayItem","AddressFormatLines","AddressTypeItem","_extendAddressDisplayFormat","nameDisplayItem","formatLine","AddressComponentNameValue","addressItem","getItemFormat","isNewLine","NewLine","phoneDisplayItem","isPrimaryDisplayItem","excluded","required","metaData","requiredFieldRegEx","resourcesPrefix","excludedTypes","requiredFields","_init","_addItem","PhoneRegex","displayType","nameKey","_validationRules","isRequired","rule","optionalString","ruleType","keys","itemType","_validationRule","itemId","isChecked","additionalAddributes","autoFocus","shouldBeAutoFocused","onChange","payLoad","getPayloadObject","attributes","getTelemetryAttributes","getRequriedAttribute","getAddessItems","shouldAutoFocus","index","elementId","classname","AddressInputComponent","AdressCheckboxComponent","displayData","AdressDropdownComponent","AddressLabelComponent","text","AddressAlertComponent","editAddressHeading","addAddressHeading","Heading","AddressButtonComponent","addressSaveButtonText","ariaLabel","addressSaveButtonAriaLabel","onClick","addressCancelButtonText","addressCancelButtonAriaLabel","AddressErrorTitleComponent","AddressErrorMessageComponent","AddressBillingCheckbox","additionalAttributes","AddressBillingHeading","isDisabled","isShowLabel","labelText","mainClass","isSelected","getDropdownItem","ErrorComponent","shouldUseAutoFocus","htmlFor","getButtonAriaLabel","addressName","getAddressList","showPrimaryButton","onEditAddress","onRemoveAddress","onUpdatePrimaryAddress","List","isShowList","isSelectedAddress","isShowError","isInvalidAsyncState","canRenderAsyncCustomerDataAsUnmodifiable","isAsyncCustomer","isAsyncCustomerAddressCreationFeatureEnabled","Item","Error","isShowPrimaryButton","primaryButton","addressPrimaryButtonText","addressPrimaryButtonAriaLabel","editButton","addressEditButtonText","addressEditButtonAriaLabel","removeButton","addressRemoveButtonText","addressRemoveButtonAriaLabel","getPrimaryAddressList","primaryAddressSectionHeading","primaryAddresses","getOtherAddressList","otherAddressSectionHeading","otherAddresses","AddressList","handleLineItemHeadingChange","ListAddress","Msdyn365","tag","headingTag","editProps","contextRequest","isShowEmptyListMessage","emptyListMessage","addressEmptyListAddressMessage","addressAddButtonText","addressAddButtonAriaLabel","primaryAddressList","otherAddressList","getInput","addType","ichecked","addressChangeCheckboxAriaLabel","getAddressSelectItems","addressTypeValue","AddressDetailItemComponent","AccountManagementAddress","asyncCustAddressCreationFeatureName","asyncCustomerAddressCreationFeatureIsEnabled","_renderListAddress","_goToEditAddress","_onRemoveAddress","_onSubmitUpdatePrimaryAddress","customerInformation","IsAsyncCustomer","app","_onAddressUpdate","onSuccess","twoLetterISORegionName","_onUpdatePrimaryAddressSuccess","Deactivate","removeAddressData","_renderScreenReaderRemoveText","notification","formatNotification","removeAddressNotification","infoMessageBar","accountProcessingPendingInfoMessageCanAddAddress","accountProcessingPendingInfoMessage","AccountAddressManagement","showAddressList","screenReaderNotification","AddressLists","BusinessAccountAddress","excludedList","_resetAddressFields","_updateAddress","_updateCountryRegionId","updateForm","cleanValue","_isEmpty","_isInputRequired","addressItemValue","componentDidMount","resetAddress","CheckoutBillingAddress","_onSubmitAddress","isBillingAddressRequried","billingAddress","isBillingAddressSameAsShippingAddress","isBillingAddressSameAsShipping","isCartContainsItemsForShipping","_onBillingAddressSameAsShippingChange","setHasError","shouldEnableSinglePaymentAuthorizationCheckout","isPaymentSectionContainerHasError","updateIsBillingAddressHasError","newIsBillingAddressHasError","_setBillingAddress","newBillingAddress","updateBillingAddress","additionalProperties","_setErrorMessage","isShowSameAsShippingCheckbox","removeBillingAddress","onDisable","shouldEnableCheckoutErrorDisplayMessaging","checkoutError","errorLocation","ErrorLocation","checkoutErrorFocus","addressBillingAddressHeading","errorMessageTitle","sameAsShippingCheckbox","addressSameAsShippingAddressAriaLabel","addressSameAsShippingAddressText","loyaltyAmount","giftCardExtends","reduce","count","giftCard","Balance","customerAccountAmount","checkoutResult","paymentTenderType","isPaidByOtherPaymentSource","paymenTenderType","TotalAmount","getGiftCardTotalAmount","getLoyaltyAmount","getCustomerAccountAmount","shouldPaidByCard","isPaymentVerificationRedirection","isCheckoutCallFailed","ref","_clearError","getCacheKey","buildCacheKey","_this","getCacheObjectType","dataCacheType","createObservableDataAction","CheckoutState","inputData","CheckoutStateInput","_giftCards","_giftCardExtends","_loyaltyAmount","_guestCheckoutEmail","_isTermsAndConditionAccepted","_customerAccountAmount","_tokenizedPaymentCard","_tenderLine","_billingAddress","_shippingAddress","_cardPrefix","_loyaltyCardNumber","newTokenizedPaymentCard","newTenderLine","newCardPrefix","giftCardNumber","Id","newLoyaltyCardNumber","newAmount","newGuestCheckoutEmail","newIsTermsAndConditionAccepted","getModuleStates","cacheKey","ModuleStatesCacheKey","moduleStates","update","WrappedComponent","_super","typeName","states","hasInitialized","isCancellable","isSubmitContainer","childIds","validate","isReady","isPending","isSkipped","isCancelAllowed","shouldSubmitContainer","hasModuleState","setIsRequired","setIsCancellable","setIsSubmitContainer","onSkip","getModule","moduleId","getModuleStateManager","getModuleByTypeName","getModuleStateManagerByTypeName","values","_moduleState","modules","source","module","isMatch","allMatched","skipSkippableItem","_validateLeaf","childId","_isPaymentSectionContainer","_validateContainer","enableControl","initializeState","__extends","ModuleState","MenuTypeIndexId","MenuSource","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","bind","viewport","device","Type","navigationMenuSource","menuItemList","nameTranslations","nameTranslation","Language","Text","MsDyn365","resizeThrottledEventHandler","addThrottledEvent","componentWillUnmount","removeEventListener","_mapData","isEmptyOrNullObject","viewProps","Navigation","MenuList","ListItem","showCategoryImage","displayCategoryImage","showPromotionalContent","displayPromotionalImage","Link","DivContainer","ImageDivContainer","Button","ImageContainer","Span","MobileDescriptionContainer","MobileBackButton","backButtonAriaLabel","MobileDescriptionLabel","menuItemData","mergedData","categories","_constructMenuItemData","cmsNavItems","idx","_constructTopMenuItemData","enabletopMenu","mergedRootMenuData","topMenu","linkText","rootMenuNavigation","linkURL","imageSource","subMenu","retailItem","cmsItem","addedAllMenu","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","promoItem","categoryName","Images","Uri","RSItemIdInit","getFriendlyName","NameTranslations","Url","_getNestedChildren","promotionalContent","menuSource","CMSItemIdInit","linkUrl","destinationUrl","imageDestinationURL","imageLink","image","_getCMSNestedChildren","shouldOpenNewTab","openInNewTab","category","imageSourceUrl","nestedChildren","Children","allCategoryMenuText","getCategoryUrl","subMenus","_getViewport","innerWidth","NavigationMenuView","currentLevel","_updateCategoryImage","categoryImageSrc","option","promotionalImage","imageSrc","promotionalItemImageSettings","categoryImage","categoryImageAltText","_handleDropdownToggle","parentId","isBackTrack","activeMenu","mobileViewLabelText","parentMenu","_handleGoBack","_handleClickOutside","menuNode","contains","_handleFocusOutside","relatedTarget","_closeSubmenu","_shouldAddFocusMenuRef","optionLinkText","_getCategoryImage","generateImageUrl","categoryImageSettings","menuItemRef","body","addEventListener","componentDidUpdate","children","focus","tabIndex","_renderDisplay","menuItem","menuItemDatum","_getFromSubMenu","_createMenuItemList","found","_renderSubMenu","_renderButtonMenuItem","_renderLinkMenuItem","_renderSpanMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","levelClassName","menuOptions","hasOptions","haveSubmenu","Math","round","_renderMenu","onFocus","hoverEffect","isParent","imagesource","contentAction","etext","onMouseOver","href","onTelemetryClick","_renderPromotionalLink","level","currentItem","submenu","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","NavMenuConstants","getCategoryImage","alttext","categoryImageUrl","navProps","imageData","NavigationMenuRootDisabled","supportedLevel","four","zero","escapeKey","_toggleNavBar","previousState","isNavOpen","_bindDesktopCategoryClick","menuId","isDrawerOpen","drawerKeyValue","newPair","categoryImageSource","isOnlyMobile","_closeNavMenu","_escFunction","keyCode","_customUpdateViewport","customResizeThrottledEventHandler","_renderMobileMenu","hamburgerAriaLabel","_renderCollapseMenu","Collapse","isOpen","_renderDesktopMenu","_renderDrawerLink","StringExtensions","entries","parentMenuId","menu","one","Number","subMenuArray","isSubMenu","rootMenu","subMenuItem","isEnableMultiSupportMenu","three","getMenuItem","isHavingSubmenu","two","_renderSubMenuDrawer","_renderLinkMenuItemLevelOne","toggleButtonText","buttonText","colProps","timeout","Drawer","collapseProps","openGlyph","closeGlyph","glyphPlacement","onToggle","menuSubItem","isHoverEffect","isSubmenu","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","NavigationMenuRootEnabled","_addShopAllLink","shopAllObject","assign","cmsMenuData","retailMenuItemData","retailMenuData","stringify"],"sourceRoot":""}