{"version":3,"sources":["webpack:///src/modules/account-management-address/account-management-address.tsx?2c3f","webpack:///src/modules/checkout-shipping-address/checkout-shipping-address.view.tsx?e155","webpack:///src/common/components/address-select.tsx?e342","webpack:///src/common/address-autosuggest.ts?520f","webpack:///src/common/components/address-button.tsx?e3b2","webpack:///src/modules/business-account-address/index.ts?0f93","webpack:///src/common/components/address-error-title.tsx?a723","webpack:///src/modules/business-account-address/business-account-address.tsx?d57d","webpack:///src/common/components/address-label.tsx?9ddc","webpack:///src/common/components/address-show.tsx?376c","webpack:///src/common/address-meta-data.ts?d29d","webpack:///../../src/index.ts?0e3e","webpack:///src/modules/account-management-address/account-management-address.view.tsx?739e","webpack:///src/common/address-format.data.ts?da4c","webpack:///src/modules/checkout-billing-address/index.ts?56c1","webpack:///../../../src/module-state-manager/with-module-state.tsx?61ca","webpack:///src/common/components/address-billing-checkbox.tsx?1b2a","webpack:///src/common/components/address-alert.tsx?0da8","webpack:///src/modules/checkout-shipping-address/components/checkout-shipping-cartlines-images.tsx?7802","webpack:///src/modules/checkout-shipping-address/checkout-shipping-address.tsx?bd44","webpack:///src/modules/checkout-shipping-address/index.ts?8a8c","webpack:///../../src/checkout-state.ts?acd8","webpack:///src/modules/business-account-address/business-account-address.view.tsx?dcd1","webpack:///src/common/components/address-dropdown.tsx?3e73","webpack:///src/common/components/address-billing-heading.tsx?4a5c","webpack:///src/modules/checkout-billing-address/checkout-billing-address.tsx?83e6","webpack:///../../../src/module-state-manager/module-state.ts?7579","webpack:///./src/modules/custom-checkout-shipping-address/custom-checkout-shipping-address.view.tsx?4320","webpack:///src/common/components/address-list.tsx?8cb2","webpack:///src/common/address-format.ts?400b","webpack:///src/common/address-common.ts?0583","webpack:///src/modules/account-management-address/index.ts?5d50","webpack:///src/modules/checkout-billing-address/checkout-billing-address.view.tsx?d08e","webpack:///../../../src/module-state-manager/index.ts?8e3a","webpack:///src/common/components/address-checkbox.tsx?a46e","webpack:///src/common/components/address-add.tsx?0cbd","webpack:///src/index.ts?c6ae","webpack:///./src/modules/custom-checkout-shipping-address/common/address-autosuggest.ts?2b2f","webpack:///./src/modules/custom-checkout-shipping-address/components/checkout-shipping-cartlines-images.tsx?3a17","webpack:///./src/modules/custom-checkout-shipping-address/custom-checkout-shipping-address.tsx?6f4c","webpack:///src/common/components/address-error-message.tsx?c7bd","webpack:///src/common/components/address-input.tsx?ed8f","webpack:///../../src/checkout-state-data-action.ts?8344","webpack:///src/common/components/address-detail-item.tsx?c5b6","webpack:///src/common/address-module.data.ts?1a63"],"names":["AccountManagementAddress","React","constructor","props","super","countryRegionId","countryRegions","addressPurposes","defaultAddressType","_onSuggestionSelected","async","this","_clearAddressFields","address","addressFormat","getTranformedAddress","result","stateProvinceInfo","set","addUpdateAddress","Street","ZipCode","CountyName","City","State","DistrictName","FullAddress","setTimeout","getAddressFormat","ThreeLetterISORegionName","forEach","format","undefined","name","autoSuggest","excludedAddressFields","includes","_clearValidation","validationError","_dataInitialize","data","reaction","customerAddresses","_renderAddOrUpdateAddress","AddressAddUpdate","isUpdating","resources","addressType","AddressType","Shipping","defaultCountryRegionId","selectedAddress","addressActionResponse","dropdownDisplayData","getPrefilledAddressDropdownData","addressStateDefaultSelectionText","telemetryContent","onInputChange","_onAddressAddUpdateInputChange","onDropdownChange","_onAddressAddUpdateDropdownChange","onSave","_onAddressAddUpdateSubmit","onCancel","_resetView","_renderListAddress","config","heading","text","headingTag","tag","AddressList","addresses","primaryAddressSectionHeading","otherAddressSectionHeading","contextRequest","context","request","handleLineItemHeadingChange","event","target","value","onEditAddress","_goToEditAddress","onRemoveAddress","_onRemoveAddress","onAddAddress","_goToAddAddress","onUpdatePrimaryAddress","_onSubmitUpdatePrimaryAddress","_attachMapAutoSuggest","storeSelectorStateManager","isMapApiLoaded","attachAutoSuggest","onAddressAddUpdate","validateAddressFormat","type","checked","replace","RegExp","AddressItemType","AddressTypeValue","_onCountryChange","_onAddressUpdate","response","onSuccess","then","hasError","addressCommon","isAuthenticatedFlow","currentOperation","AddressOperation","Update","updateCustomerAddress","addCustomerAddress","Promise","resolve","_onAddOrUpdateSuccess","twoLetterISORegionName","getTwoLetterISORegionName","TwoLetterISORegionName","changeAutoSuggestionCountryCode","_getAddressFormatExcludeList","addressFormatExcludeList","showAddressType","push","IsPrimary","_getStateProvinces","Add","getStateProvinces","some","state","StateId","_updateCurrentOperation","operation","updateCustomerPrimaryAddress","_onUpdatePrimaryAddressSuccess","Deactivate","removeAddressData","_renderScreenReaderRemoveText","notification","formatNotification","removeAddressNotification","Name","className","_setDefaultCountryRegionId","List","telemetry","AddressCommon","AddressFormat","AddressMetaData","getTelemetryObject","telemetryPageName","friendlyName","actionContext","requestContext","channel","autoSuggestionEnabled","autoSuggestOptions","BingMapsApiKey","error","BingMapsEnabled","options","AutoSuggest","ChannelCountryRegionISOCode","DefaultLanguageId","loadMapApi","_loadMapAPI","disposeAutoSuggest","shouldComponentUpdate","nextProps","nextState","render","renderView","viewState","isShowAddresList","isShowAddOrUpdateAddress","AccountAddressManagement","moduleProps","classnames","showAddressList","showAddOrUpdateAddress","screenReaderNotification","market","getDefaultCountryRegionId","__decorate","observable","action","observer","AddressShow","AddressDetail","items","Node","Object","map","item","description","AddressSelect","SelectAddress","addButton","isShowSaveButton","saveButton","isShowCancelButton","cancelButton","SelectItem","key","input","showItems","AddressForm","AddressItem","label","alert","AddressError","title","message","CheckoutShippingAddressView","CheckoutShippingAddress","showAddress","showAddressSelect","cartLineImages","Module","isShowAddress","getInput","index","onAddressOptionChange","ichecked","RecordId","additionalAttributes","length","addressChangeCheckboxAriaLabel","AddressInputComponent","toString","onChange","additionalAddributes","getAddressSelectItems","hasExternalSubmitGroup","AddressButtonComponent","addressAddButtonText","ariaLabel","addressAddButtonAriaLabel","onClick","addressSaveButtonText","addressSaveButtonAriaLabel","addressCancelButtonText","addressCancelButtonAriaLabel","countryCode","defaultLanguageId","inputId","containerId","selectedSuggestionCallback","autoSuggestManager","Microsoft","Maps","loadModule","callback","AutosuggestManager","attachAutosuggest","document","querySelector","setAttribute","errorCallback","debug","credentials","bingMapsApiKey","setOptions","detachAutosuggest","dispose","lang","AddressButtonFunctionComponent","disabled","isDisabled","role","payLoad","getPayloadObject","attributes","getTelemetryAttributes","AddressErrorTitleFunctionComponent","BusinessAccountAddress","shouldAutoFocus","excludedList","_resetAddressFields","addressFormatItem","displayType","AddressItemDisplayType","Input","Checkbox","countryStates","Company","_updateAddress","_updateCountryRegionId","updateForm","isRequired","cleanValue","_isEmpty","_isInputRequired","addressItemValue","ObjectExtensions","isNullOrUndefined","validationRules","validationRule","AddressValidationRuleType","Required","componentDidMount","resetAddress","AddressLabelFunctionComponent","id","itemId","htmlFor","find","addressTypeValue","AddressDetailItemComponent","isNewLine","isShowLabel","Phone","labelText","excluded","required","metaData","requiredFieldRegEx","resourcesPrefix","maxLength","excludedTypes","requiredFields","_init","getItemFormat","_addItem","PhoneRegex","defaultRegex","County","Dropdown","StreetNumber","BuildingCompliment","Postbox","House_RU","Flat_RU","CountryOKSMCode_RU","nameKey","_validationRules","rule","optionalString","ruleType","keys","itemType","_validationRule","Format","regEx","isShowList","Item","isShowPrimaryButton","primaryButton","editButton","removeButton","Error","isShowError","AddressLists","ListAddress","isShowEmptyListMessage","emptyListMessage","primaryAddressList","otherAddressList","AccountManagementAddressView","withModuleState","WrappedComponent","_super","_this","typeName","states","getModuleStates","updateModuleStates","_a","hasInitialized","isCancellable","isSubmitContainer","status","childIds","moduleState","get","validate","isReady","isPending","isSkipped","isCancelAllowed","shouldSubmitContainer","hasModuleState","setIsRequired","update","setIsCancellable","setIsSubmitContainer","setHasError","onReady","onUpdating","onPending","onSkip","onDisable","getModule","moduleId","getModuleStateManager","getModuleByTypeName","getModuleStateManagerByTypeName","init","__assign","moduleStates","values","_moduleState","modules","source","module","isMatch","allMatched","skipSkippableItem","_validateLeaf","app","shouldEnableSinglePaymentAuthorizationCheckout","filter","childId","_isPaymentSectionContainer","_validateContainer","ArrayExtensions","hasElements","enableControl","initializeState","__extends","ModuleState","AddressBillingCheckbox","isChecked","AddressAlertFunctionComponent","CheckoutPickupCartLines","moduleClassName","cartLines","itemTitle","isMobileCheck","isMobile","variant","VariantType","Browser","gridSettings","xs","w","sm","md","lg","xl","isMobileView","cartLine","isShowQty","quantity","lineId","Image","imageProps","productQuantityInfo","altText","defaultImageSettings","viewports","q","h","lazyload","quality","addressListSelectedAddress","multiplePickupStoreSwitchName","retailMultiplePickUpOptionEnabled","_initPickupGroup","pickupCartLines","_getCartLinesforDelivery","products","_getProductsByCartLines","checkout","checkoutCart","cart","ChannelId","line","product","x","ProductId","setState","shippingGroups","formatAddress","featureState","feature","IsEnabled","CartLines","_isDelivery","_isNotPickupMode","DeliveryMode","FulfillmentStoreId","deliveryMode","pickupDeliveryModeCode","PickupDeliveryModeCode","channelDeliveryOptionConfig","pickupDeliveryMode","PickupDeliveryModeCodes","pickupMode","channelId","productInputs","ProductInput","apiSettings","getSimpleProducts","onSaveHandler","onCancelHandler","onSubmit","_renderSelectAddress","onAddAddressHandler","_onAddressOptionChange","_onSelectAddress","addressRecordId","currentTarget","_updateModuleState","newAddress","twoLetterIsoRegionName","_getDefaultAddress","_getAddressFromCartExpressPaymentDetails","expressPaymentDetailsFromCartPage","tokenizedPaymentCard","getAddressFromTokenizedPaymentCard","Country","threeLetterIsoRegionName","getThreeLetterIsoRegionName","NameOnCard","Address1","Address2","Zip","countryRegion","country","ISOCode","toLowerCase","CountryRegionId","_initModuleState","_canShip","onEdit","checkoutState","defaultAddress","ShippingAddress","isExpressCheckoutApplied","shippingAddressFromExpressCheckout","isEmpty","Show","_setShippingAddress","updateHasShippingAddress","newHasShippingAddress","shippingAddress","emailDeliveryModeCode","EmailDeliveryModeCode","hasInvoiceLine","newShippingAddress","updateShippingAddress","catch","properties","ExtensionProperties","property","Key","Value","StringValue","JSON","parse","headingImages","itemsText","singleItemText","imageSettings","cartlines","LineId","src","PrimaryImageUrl","fallBackSrc","getFallbackImageUrl","ItemId","loadFailureBehavior","Quantity","itemText","lineImageProps","isRetailMultiplePickUpOptionEnabled","_renderShowAddress","showAddressSelectHandler","showAddOrUpdateAddressHandler","computed","_giftCards","_giftCardExtends","_loyaltyAmount","_guestCheckoutEmail","_isTermsAndConditionAccepted","_customerAccountAmount","CheckoutState","_tokenizedPaymentCard","_tenderLine","_billingAddress","_shippingAddress","_cardPrefix","_loyaltyCardNumber","newTokenizedPaymentCard","newTenderLine","newBillingAddress","newCardPrefix","giftCardNumber","giftCard","Id","__spreadArrays","newLoyaltyCardNumber","newAmount","newGuestCheckoutEmail","newIsTermsAndConditionAccepted","BusinessAccountAddressView","AddressDropdownFunctionComponent","displayData","selectedValue","isSelected","getDropdownItem","AddressBillingHeading","CheckoutBillingAddress","Billing","_onSubmitAddress","isBillingAddressRequried","billingAddress","isBillingAddressSameAsShippingAddress","isBillingAddressSameAsShipping","isCartContainsItemsForShipping","_onBillingAddressSameAsShippingChange","_setBillingAddress","updateBillingAddress","additionalProperties","removeBillingAddress","isShowSameAsShippingCheckbox","addressBillingAddressHeading","sameAsShippingCheckbox","addressSameAsShippingAddressAriaLabel","addressSameAsShippingAddressText","loyaltyAmount","giftCardExtends","reduce","count","Balance","customerAccountAmount","checkoutResult","paymentTenderType","isPaidByOtherPaymentSource","paymenTenderType","TotalAmount","getGiftCardTotalAmount","getLoyaltyAmount","getCustomerAccountAmount","shouldPaidByCard","getCacheKey","getCacheObjectType","dataCacheType","ctx","cacheKey","ModuleStatesCacheKey","channelCountryRegionISOCode","addressPhoneRequiredErrorMessage","saveAddressButton","phone","getElementById","phoneCtn","closest","phoneAlert","getElementsByClassName","onkeyup","classList","add","textContent","contains","remove","isRequiredIsFilled","querySelectorAll","element","onchange","allAreFilled","removeAttribute","checkPhone","inputC","contriesFiltered","_isMilitaryCheck","isMilitaryVal","localStorage","getItem","isMilitary","setIsMilitary","setItem","String","isMilitaryText","removeItem","showAddOrUpdateAddressExt","getButtonAriaLabel","addressName","getAddressList","showPrimaryButton","errorTitle","errorMessage","Heading","isSelectedAddress","AddressErrorTitleComponent","AddressErrorMessageComponent","classname","addressPrimaryButtonText","addressPrimaryButtonAriaLabel","addressEditButtonText","addressEditButtonAriaLabel","addressRemoveButtonText","addressRemoveButtonAriaLabel","getPrimaryAddressList","primaryAddresses","getOtherAddressList","otherAddresses","Msdyn365","editProps","addressEmptyListAddressMessage","countryRegionsInfo","addressMetaData","stateDefaultSelectionText","defaultStateText","dropdownData","getCountryFormat","getStateFormat","unshift","getAddressTypeFormat","_getCountryRegionInfo","propertyName","validationtor","isValid","_inputValidation","postalCode","selectedState","StateName","adminDistrict","addressLine","locality","district","formattedAddress","_validateRegEx","test","countryRegionInfo","_getAddressDisplayFormat","ShortName","addressPurpose","addressDisplayItem","AddressFormatLines","AddressTypeItem","_extendAddressDisplayFormat","nameDisplayItem","formatLine","AddressComponentNameValue","addressItem","NewLine","phoneDisplayItem","isPrimaryDisplayItem","marketISOCode","currentCountryRegion","parseRetailException","addressErrorMessageTitle","addressGenericErrorMessage","user","isAuthenticated","GetStateProvincesInput","getStateProvinceAction","updateLogisticsLocationRoleRecordId","submitCustomerAddress","addAddress","updateAddress","updatePrimaryAddress","addressAction","AddressManagementInput","execAddressAction","GetAddressPurposesInput","getAddressPurposesAction","purpose","LogisticsLocationRoleRecordId","CheckoutBillingAddressView","AddressCheckboxFunctionComponent","autoFocus","shouldBeAutoFocused","getRequriedAttribute","getAddessItems","elementId","AdressCheckboxComponent","AdressDropdownComponent","AddressLabelComponent","AddressAlertComponent","editAddressHeading","addAddressHeading","AddressErrorMessageFunctionComponent","AddressInputFunctionComponent","shouldUseAutoFocus","createObservableDataAction","inputData","CheckoutStateInput","AddressDetailItemFunctionComponent","mainClass"],"mappings":"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","file":"static/js/16.68060dbbedfa2382aa3d.chunk.js","sourcesContent":["/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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}\n\n/**\n *\n * Address component.\n * @extends {React.Component>}\n */\n@observer\nclass AccountManagementAddress extends React.Component> {\n @observable private currentOperation: AddressOperation;\n\n @observable private selectedAddress?: Address;\n\n @observable private countryRegionId: string = 'USA';\n\n @observable private stateProvinceInfo?: StateProvinceInfo[];\n\n @observable private customerAddresses: Address[];\n\n @observable private addUpdateAddress: 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 removeAddressData?: 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 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, this.props.telemetry\n );\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 /**\n * Clear Address Fields.\n */\n @action\n private readonly _clearAddressFields = (): void => {\n const addressFormatItem = this.addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId);\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 public async componentDidMount(): Promise {\n\n const {\n context: {\n telemetry,\n actionContext: {\n requestContext: {\n channel\n }\n }\n },\n config: {\n autoSuggestionEnabled,\n autoSuggestOptions\n }\n } = this.props;\n\n // Initializing data props\n this._dataInitialize(this.props);\n\n this.props.data.countryRegions.then(() => {\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\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(telemetry, options, channel?.BingMapsApiKey, channel?.ChannelCountryRegionISOCode, channel?.DefaultLanguageId);\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi !== undefined && (\n this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update\n ),\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(nextProps: IAccountManagementAddressProps,\n nextState: IAccountManagementAddressViewState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n\n }\n\n public render(): JSX.Element {\n const { renderView, config } = this.props;\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 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 * 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 {\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 /**\n * Render List Address Function.\n * @returns - AddressList.\n */\n private readonly _renderListAddress = (): IAddressListProps => {\n const { config } = this.props;\n\n /**\n * Render Address ttitle.\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 {\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 }\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\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 = this.currentOperation === AddressOperation.Update ? this.addressCommon.updateCustomerAddress(\n this.addUpdateAddress\n ) : this.addressCommon.addCustomerAddress(\n this.addUpdateAddress\n );\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 (!this.countryRegionId || !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)) {\n return;\n }\n\n this.addressCommon.getStateProvinces(this.countryRegionId).then(\n (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. All rights reserved.\n * See License.txt 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 = ({\n AddressDetail,\n items\n}) => {\n\n return (\n \n {items.map((item: IAddressShowItem) => {\n return (\n <>\n {item.description}\n \n );\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\n return (\n \n {addButton}\n {items.map((item: IAddressSelectItem) => {\n const SelectItem = item.SelectItem;\n return (\n {item.input}\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\n return (\n \n {heading}\n {items.map((item: IAddressAddItem) => {\n const { AddressItem, key, label, alert, input } = item;\n return (\n {label}\n {alert}\n {input}\n );\n })}\n {hasError && \n {error.title}\n {error.message}\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 { CheckoutShippingAddress, viewState, showAddress, showAddressSelect, showAddOrUpdateAddress, cartLineImages } = props;\n\n return (\n \n {cartLineImages}\n {viewState.isShowAddress && }\n {viewState.isShowAddresList && }\n {viewState.isShowAddOrUpdateAddress && }\n \n );\n};\n\nexport default CheckoutShippingAddressView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Address, AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { 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 } = props;\n\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': resources.addressChangeCheckboxAriaLabel\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({ addressFormat: addressFormat.getAddressFormat(address.ThreeLetterISORegionName || ''), address, addressPurposes })\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. All rights reserved.\n * See License.txt 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(telemetry: ITelemetry, autoSuggestOptions: IAutoSuggestOptions, BingMapsApiKey?: string, countryCode?: string, defaultLanguageId?: string) {\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 = (inputId: string, containerId: string, selectedSuggestionCallback: (result: Microsoft.Maps.ISuggestionResult) => void): 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 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. All rights reserved.\n * See License.txt 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 {text}\n \n );\n};\n\nexport default AddressButtonFunctionComponent;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport BusinessAccountAddress from './business-account-address';\nimport BusinessAccountAddressView from './business-account-address.view';\n\nexport * from './business-account-address';\nexport * from './business-account-address.data';\nexport { IBusinessAccountAddressConfig, IBusinessAccountAddressProps, IBusinessAccountAddressResources } from './business-account-address.props.autogenerated';\nexport * from './business-account-address.view';\n\nexport {\n BusinessAccountAddress,\n BusinessAccountAddressView\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 (\n

\n {title}\n

\n );\n};\n\nexport default AddressErrorTitleFunctionComponent;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 = 8; // Default to 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 },\n this.excludedList, props.isRequired ? undefined : []),\n this.addressPurposes\n );\n this.addressCommon = new AddressCommon(context, resources, telemetry);\n this.validationError = {};\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\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 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(this.countryRegions, new AddressMetaData({ ...resources }, this.excludedList, []), this.addressPurposes);\n updateForm(false, this.addUpdateAddress);\n }\n } else {\n // Get new addressFormat as if address was a required field\n this.addressFormat = new AddressFormat(this.countryRegions,\n new AddressMetaData({ ...resources },\n this.excludedList, undefined\n ),\n this.addressPurposes);\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 (ObjectExtensions.isNullOrUndefined(addressFormatItem) || !addressFormatItem.validationRules || addressFormatItem.validationRules.length === 0) {\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. All rights reserved.\n * See License.txt 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 {\n id: itemId,\n text\n } = props;\n\n return (\n \n );\n};\n\nexport default AddressLabelFunctionComponent;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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((addressTypeValue) => addressTypeValue.AddressType.toString() === (address[item.name] || '').toString());\n if (addressType) {\n const value = addressType.Name || '';\n return {\n key: item.name,\n description: \n };\n }\n }\n return {\n key: item.name,\n description: \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\nimport { PhoneRegex } from '@msdyn365-commerce-modules/retail-actions';\n\nimport {\n AddressItemDisplayType, AddressItemType, AddressValidationRuleType, 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\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 = required !== undefined ? required : [AddressItemType.Name, AddressItemType.ZipCode, AddressItemType.City, AddressItemType.State, AddressItemType.ThreeLetterISORegionName, AddressItemType.Street];\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 = 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","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport checkoutStateDataAction from './checkout-state-data-action';\n\nexport * from './checkout-state';\nexport * from './checkout-state-data-action';\nexport * from './module-state-manager';\n\nexport { checkoutStateDataAction };\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 = ({\n AddressDetail,\n items\n}) => {\n\n return (\n \n {items.map((item: IAddressShowItem) => {\n return (\n <>\n {item.description}\n \n );\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 = ({\n List,\n isShowList,\n heading,\n items\n}) => {\n\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 {isShowError && \n {title}\n {message}\n }\n {isShowPrimaryButton && primaryButton}\n {editButton}\n {removeButton}\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\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\n return (\n \n {heading}\n {items.map((item: IAddressAddItem) => {\n const { AddressItem, key, label, alert, input } = item;\n return (\n {label}\n {alert}\n {input}\n );\n })}\n {hasError && \n {error.title}\n {error.message}\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 { AccountAddressManagement, viewState, showAddressList, showAddOrUpdateAddress, screenReaderNotification } = props;\n\n return (\n \n {viewState.isShowAddresList && }\n {viewState.isShowAddOrUpdateAddress && }\n {screenReaderNotification}\n \n );\n};\n\nexport default AccountManagementAddressView;\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. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport CheckoutBillingAddress from './checkout-billing-address';\nimport CheckoutBillingAddressView from './checkout-billing-address.view';\n\nexport * from './checkout-billing-address';\nexport * from './checkout-billing-address.data';\nexport { ICheckoutBillingAddressConfig, ICheckoutBillingAddressProps, ICheckoutBillingAddressResources } from './checkout-billing-address.props.autogenerated';\nexport * from './checkout-billing-address.view';\n\nexport {\n CheckoutBillingAddress,\n CheckoutBillingAddressView\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\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 = (id: string, source: Partial, allMatched?: boolean, skipSkippableItem?: boolean): 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 { 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\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. All rights reserved.\n * See License.txt 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 {\n message &&\n <>\n {message}\n \n }\n \n );\n};\n\nexport default AddressAlertFunctionComponent;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 = ({ moduleClassName, cartLines, title, itemTitle, resources }) => {\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
\n {title}\n
\n
\n {itemTitle}\n
\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 ? isShowQty && \n {cartLine.quantity}\n
: isShowQty &&
}\n {!isMobileView && isShowQty && \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. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Address, AddressPurpose, CartLine, CountryRegionInfo, SimpleProduct, StateProvinceInfo, TenderLine, 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 { CheckoutPickupCartLines, defaultImageSettings, ICartLineWithProduct, ICheckoutShippingCartLineInfo,\n ICheckoutShippingCartLinesProps } from './components/checkout-shipping-cartlines-images';\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}\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 showAddOrUpdateAddressHandler?(onSaveHandler?: () => void, onCancelHandler?: () => void): IAddressAddUpdateProps;\n showAddressSelectHandler?(onAddAddressHandler?: () => void, onSaveHandler?: () => void, onCancelHandler?: () => void): 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}\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 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 this.validationError = {};\n this.retailMultiplePickUpOptionEnabled = data.featureState.result\n ?.find(feature => feature.Name === this.multiplePickupStoreSwitchName)?.IsEnabled;\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\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(this.props.data.checkout.result?.checkoutCart.cart.ChannelId || 0,\n pickupCartLines);\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\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 /**\n * Method to clear address fields.\n */\n @action\n private readonly _clearAddressFields = (): void => {\n const addressFormatItem = this.addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId);\n for (const formatAddress of addressFormatItem) {\n if (this.addUpdateAddress[formatAddress.name] !== undefined && !this.autoSuggest?.excludedAddressFields.includes(formatAddress.name)) {\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\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const properties = this.props.data.cart?.result?.cart?.ExtensionProperties?.find(\n property => property.Key === 'expressPaymentDetails')?.Value?.StringValue ?? '';\n\n return properties ? JSON.parse(properties) as IExpressPaymentDetails : null;\n }\n\n public async componentDidMount(): Promise {\n const {\n context: {\n telemetry,\n actionContext: {\n requestContext: {\n channel\n }\n }\n },\n config: {\n autoSuggestionEnabled,\n autoSuggestOptions\n },\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 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\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(telemetry, options, channel?.BingMapsApiKey, channel?.ChannelCountryRegionISOCode, channel?.DefaultLanguageId);\n\n // Customer doesn't have any address. Then add view will be loaded directly. Code for the same to handle that\n if (this.props.data.storeSelectorStateManager.result && (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)) {\n await this.autoSuggest._loadMapAPI(await this.props.data.storeSelectorStateManager);\n }\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi && (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 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\n public render(): JSX.Element | null {\n if (!this._canShip()) {\n return null;\n }\n\n const { config, context, renderView, resources } = this.props;\n const { headingImages, itemsText, singleItemText } = resources;\n const { imageSettings } = config;\n\n // Line images\n const cartlines: ICheckoutShippingCartLineInfo[] = this.state.shippingGroups.filter(x => !ObjectExtensions.isNullOrUndefined(x.product)).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\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)?.IsEnabled;\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\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: (\n onAddAddressHandler?: () => void,\n onSaveHandler?: () => void,\n 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: (\n onSaveHandler?: () => void,\n 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 * 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 =\n data.featureState.result?.find(feature => feature.Name === this.multiplePickupStoreSwitchName)?.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)?.IsEnabled;\n if (retailMultiplePickUpOptionEnabled && deliveryMode !== undefined) {\n const pickupDeliveryMode = channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.some(pickupMode => pickupMode !== deliveryMode);\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.filter(line => !ObjectExtensions.isNullOrUndefined(line.ProductId))\n .map(line => new ProductInput(line.ProductId || 0, actionContext.requestContext.apiSettings, channelId, undefined,\n actionContext.requestContext));\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 = (\n onSaveHandler?: () => void,\n onCancelHandler?: () => void\n ): IAddressAddUpdateProps => {\n const addressFormat = this.currentOperation === AddressOperation.Add && this.addressCommon.isAuthenticatedFlow() ? this.addressFormat : 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 /**\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()) {\n response =\n this.currentOperation === AddressOperation.Update ? this.addressCommon.updateCustomerAddress(\n this.addUpdateAddress\n ) : this.addressCommon.addCustomerAddress(\n this.addUpdateAddress\n );\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 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 - Addresss.\n */\n private readonly _getAddressFromCartExpressPaymentDetails = (): Address | undefined => {\n if (this.expressPaymentDetailsFromCartPage) {\n const { tokenizedPaymentCard } = this.expressPaymentDetailsFromCartPage;\n const address = tokenizedPaymentCard ? this.getAddressFromTokenizedPaymentCard(tokenizedPaymentCard) : undefined;\n return address;\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 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\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._onAddressAddUpdateSubmit();\n break;\n case AddressOperation.List:\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._clearAddressFields();\n if (!(!this.selectedAddress && !this.addressCommon.isAuthenticatedFlow())) {\n this._resetView();\n }\n\n break;\n case AddressOperation.List:\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 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 ? checkout.result.checkoutCart.cart.CartLines?.some(\n cartLine => ((cartLine.DeliveryMode && cartLine.DeliveryMode !== '') ? (cartLine.DeliveryMode !== channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.find(deliveryMode => deliveryMode === cartLine.DeliveryMode) &&\n cartLine.DeliveryMode !== emailDeliveryModeCode) : cartLine)\n ) : checkout.result.checkoutCart.cart.CartLines?.some(\n cartLine => ((cartLine.DeliveryMode && cartLine.DeliveryMode !== '') ? (cartLine.DeliveryMode !== pickupDeliveryModeCode &&\n cartLine.DeliveryMode !== emailDeliveryModeCode) : 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 })\n .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\nexport default CheckoutShippingAddress;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport CheckoutShippingAddress from './checkout-shipping-address';\nimport CheckoutShippingAddressView from './checkout-shipping-address.view';\n\nexport * from './checkout-shipping-address';\nexport * from './checkout-shipping-address.data';\nexport { ICheckoutShippingAddressConfig, ICheckoutShippingAddressProps, ICheckoutShippingAddressResources } from './checkout-shipping-address.props.autogenerated';\nexport * from './checkout-shipping-address.view';\n\nexport {\n CheckoutShippingAddress,\n CheckoutShippingAddressView\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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. All rights reserved.\n * See License.txt 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\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 {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. All rights reserved.\n * See License.txt 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 {\n id: itemId,\n name,\n className,\n value,\n additionalAddributes,\n displayData,\n onChange\n } = props;\n\n return (\n \n {displayData && displayData.map(item => (\n getDropdownItem(item.key, item.value, value)\n ))}\n \n );\n};\n\nexport default AddressDropdownFunctionComponent;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 = ({\n text\n}) => (\n

\n {text}\n

\n);\n\nexport default IAddressBillingHeading;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { 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';\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}\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}\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\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 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 },\n this._getAddressFormatExcludeList()\n ),\n this.addressPurposes);\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n\n // This.addRenderRef = React.createRef();\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 /**\n * Clear address fields.\n */\n @action\n private readonly _clearAddressFields = (): void => {\n const addressFormatItem = this.addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId);\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 public async componentDidMount(): Promise {\n\n const {\n context: {\n telemetry,\n actionContext: {\n requestContext: {\n channel\n }\n }\n },\n config: {\n autoSuggestionEnabled,\n autoSuggestOptions\n }\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\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(telemetry, options, channel?.BingMapsApiKey, channel?.ChannelCountryRegionISOCode, channel?.DefaultLanguageId);\n\n // Customer doesn't have any address. Then add view will be loaded directly. Code for the same to handle that\n if (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 () => this.props.data.storeSelectorStateManager.result?.loadMapApi && (\n this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update\n ),\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\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: ICheckoutBillingAddressProps, nextState: ICheckoutBillingAddressViewState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n\n }\n\n public render(): JSX.Element | null {\n if (!(this.isBillingAddressRequried)) {\n return null;\n }\n\n const { resources } = this.props;\n\n const { renderView, config } = this.props;\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\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 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 {\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\n private _renderShowAddress(): IAddressShowProps | null {\n if (this.selectedAddress) {\n return AddressShow(\n { address: this.selectedAddress, addressFormat: this.addressFormat.getAddressFormat(\n this.selectedAddress.ThreeLetterISORegionName ?? ''\n ),\n addressPurposes: this.addressPurposes\n }\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 (!this.countryRegionId || !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)) {\n return;\n }\n\n this.addressCommon.getStateProvinces(this.countryRegionId).then(\n (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\n ?.find(feature => feature.Name === multiplePickupStoreSwitchName)?.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 ? false : (retailMultiplePickUpOptionEnabled ? (\n (this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).some(\n cartLine => ((cartLine.DeliveryMode && cartLine.DeliveryMode !== '') ? (cartLine.DeliveryMode !== channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.find(deliveryMode => deliveryMode === cartLine.DeliveryMode) && cartLine.DeliveryMode !== emailDeliveryModeCode) : cartLine)\n ) : ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).some(\n cartLine => ((cartLine.DeliveryMode && cartLine.DeliveryMode !== '') ? (cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode) : 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(\n (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n },\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: {\n checkout\n },\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 this.shouldPaidByCard;\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 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._onSubmitAddress();\n break;\n case AddressOperation.Show:\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._resetView();\n this._clearAddressFields();\n break;\n case AddressOperation.Show:\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 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 {\n newBillingAddress,\n additionalProperties: {\n isBillingAddressSameAsShippingAddress: this.isBillingAddressSameAsShipping\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, { ThreeLetterISORegionName: this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId });\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\nexport default CheckoutBillingAddress;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt 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 './custom-checkout-shipping-address';\r\nimport { ICustomCheckoutShippingAddressConfig } from './custom-checkout-shipping-address.props.autogenerated';\r\nimport { IAddressResource } from '@msdyn365-commerce-modules/address/src/common';\r\nexport interface IAddressAddUpdatePropsExt extends IAddressAddUpdateProps {\r\n config: ICustomCheckoutShippingAddressConfig;\r\n resources: IAddressResource;\r\n channelCountryRegionISOCode?: string;\r\n}\r\n\r\ninterface ICountryInput {\r\n key: string;\r\n value: string;\r\n}\r\nconst AddressShow: React.FC = ({ AddressDetail, items }) => {\r\n return (\r\n \r\n {items &&\r\n items.map((item: IAddressShowItem) => {\r\n return <>{item.description};\r\n })}\r\n \r\n );\r\n};\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 &&\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\nconst checkPhone = (addressPhoneRequiredErrorMessage: string) => {\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\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.length < 1) {\r\n phoneCtn.classList.add('address-form__item-invalid');\r\n phoneAlert.textContent = addressPhoneRequiredErrorMessage;\r\n saveAddressButton.setAttribute('disabled', 'true');\r\n } else {\r\n phoneAlert.textContent === addressPhoneRequiredErrorMessage &&\r\n phoneCtn.classList.contains('address-form__item-invalid') &&\r\n phoneCtn.classList.remove('address-form__item-invalid');\r\n if (phoneAlert.textContent === addressPhoneRequiredErrorMessage) {\r\n phoneAlert.textContent = '';\r\n }\r\n if (document.getElementsByClassName('address-form__item-invalid').length > 0) {\r\n saveAddressButton.setAttribute('disabled', 'true');\r\n } else {\r\n isRequiredIsFilled();\r\n }\r\n }\r\n };\r\n document\r\n .getElementsByClassName('msc-address-form')[0]\r\n .querySelectorAll('input, select')\r\n .forEach(function(element) {\r\n (element as HTMLInputElement).onchange = () => {\r\n isRequiredIsFilled();\r\n };\r\n });\r\n const isRequiredIsFilled = () => {\r\n let allAreFilled = true;\r\n document\r\n .getElementsByClassName('msc-address-form')[0]\r\n .querySelectorAll(\"[aria-required = 'true']\")\r\n .forEach(function(element) {\r\n if (!allAreFilled) {\r\n return;\r\n }\r\n if (!(element as HTMLInputElement).value) {\r\n allAreFilled = false;\r\n return;\r\n }\r\n });\r\n if (allAreFilled && document.getElementsByClassName('address-form__item-invalid').length === 0) {\r\n saveAddressButton.removeAttribute('disabled');\r\n } else {\r\n saveAddressButton.setAttribute('disabled', 'true');\r\n }\r\n };\r\n }\r\n};\r\n\r\nconst AddressAddUpdate: React.FC = props => {\r\n const {\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 config,\r\n channelCountryRegionISOCode\r\n } = props;\r\n\r\n React.useEffect(() => {\r\n checkPhone(props.resources.addressPhoneRequiredErrorMessage);\r\n }, [(document?.getElementById('shipping_addressphone') as HTMLInputElement)?.value]);\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 const inputC = React.cloneElement(input as React.ReactElement, {});\r\n if (key === 'ThreeLetterISORegionName') {\r\n if (channelCountryRegionISOCode === 'US') {\r\n const contriesFiltered = inputC.props.displayData.filter((item: ICountryInput) => item.key === 'USA');\r\n inputC.props.displayData = contriesFiltered;\r\n } else if (channelCountryRegionISOCode === 'IT') {\r\n const contriesFiltered = inputC.props.displayData.filter(\r\n (item: ICountryInput) => item.key === 'ITA' || item.key === 'SMR'\r\n );\r\n inputC.props.displayData = contriesFiltered;\r\n }\r\n }\r\n return (\r\n \r\n {label}\r\n {alert}\r\n {inputC}\r\n \r\n );\r\n })}\r\n {_isMilitaryCheck(config)}\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\nconst _isMilitaryCheck = (config: ICustomCheckoutShippingAddressConfig) => {\r\n const isMilitaryVal = localStorage.getItem('is_military_address') === 'true' ? true : false;\r\n const [isMilitary, setIsMilitary] = React.useState(isMilitaryVal);\r\n const handleChange = () => {\r\n setIsMilitary(!isMilitary);\r\n };\r\n React.useEffect(() => {\r\n localStorage.setItem('is_military_address', String(isMilitary));\r\n }, [isMilitary]);\r\n if (!config.isMilitaryText || config.isMilitaryText === '') {\r\n localStorage.removeItem('is_military_address');\r\n return;\r\n }\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\nconst CheckoutShippingAddressView: React.FC = props => {\r\n const { CheckoutShippingAddress, viewState, showAddress, showAddressSelect, showAddOrUpdateAddress, cartLineImages } = props;\r\n const showAddOrUpdateAddressExt = {\r\n ...showAddOrUpdateAddress,\r\n config: props.config\r\n };\r\n const channelCountryRegionISOCode = props?.context?.request?.channel?.ChannelCountryRegionISOCode;\r\n\r\n return (\r\n \r\n {cartLineImages}\r\n {viewState.isShowAddress && }\r\n {viewState.isShowAddresList && }\r\n {viewState.isShowAddOrUpdateAddress && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutShippingAddressView;\r\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 classname 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}\n\nconst getButtonAriaLabel = (ariaLabel: string, addressName?: string): string => {\n return ariaLabel.replace('{addressName}', addressName || '');\n};\n\nconst getAddressList = (className: string, addresses: Address[], showPrimaryButton: boolean, props: IAddressListInputProps, heading?: HeadingData): IAddressList => {\n const { resources, isUpdating, addressActionResponse, selectedAddress, addressFormat, onEditAddress, onRemoveAddress, onUpdatePrimaryAddress, addressPurposes, telemetryContent } = 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((address: Address): IAddressListItem => {\n const isSelectedAddress = selectedAddress && selectedAddress.RecordId === address.RecordId;\n const isShowError = isSelectedAddress && errorTitle && errorMessage;\n return {\n Item: { className: `${className}-list` },\n key: address.RecordId || 0,\n showItems: AddressShow({ addressFormat: addressFormat.getAddressFormat(address.ThreeLetterISORegionName || ''), address, addressPurposes }),\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 ),\n editButton: (\n {\n onEditAddress(address);\n },\n role: 'link'\n }\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\n const headingComponent = heading?.text && (\n {\n // Required\n }, requestContext: props.contextRequest }}\n />\n );\n\n return {\n ListAddress: { className: 'ms-address-list' },\n heading: headingComponent,\n isShowEmptyListMessage: addresses.length === 0,\n emptyListMessage:

\n {resources.addressEmptyListAddressMessage}\n

,\n addButton: (\n \n ),\n primaryAddressList: getPrimaryAddressList(props),\n otherAddressList: getOtherAddressList(props)\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 {\n Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { get, set } from 'mobx';\n\nimport {\n AddressItemType, IAddressDropdownsData, IAddressItem, IAddressValidationRule\n} 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.Name\n };\n });\n }\n\n public getPrefilledAddressDropdownData = (stateDefaultSelectionText: string, stateProvinceInfo?: StateProvinceInfo[]): 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 = (address: Address, validationError: Address, countryRegionId: string, propertyName?: string): 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. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IActionInput, ICoreContext, IObservableAction, ITelemetry } from '@msdyn365-commerce/core';\nimport {\n Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n addAddress, AddressManagementInput, ArrayExtensions,\n updateAddress, updatePrimaryAddress } 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\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 (addressAction: IObservableAction, address: Address): 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 (addressAction: IObservableAction, input: IActionInput | IActionInput[], address: Address): 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(purpose => purpose.AddressType === address.AddressTypeValue);\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\nimport AccountManagementAddress from './account-management-address';\nimport AccountManagementAddressView from './account-management-address.view';\n\nexport * from './account-management-address';\nexport * from './account-management-address.data';\nexport * from './account-management-address.props.autogenerated';\nexport * from './account-management-address.view';\n\nexport {\n AccountManagementAddress,\n AccountManagementAddressView\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 = ({\n AddressDetail,\n items\n}) => {\n\n return (\n \n {items.map((item: IAddressShowItem) => {\n return (\n <>\n {item.description}\n \n );\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\n return (\n \n {heading}\n {items.map((item: IAddressAddItem) => {\n const { AddressItem, key, label, alert, input } = item;\n return (\n {label}\n {alert}\n {input}\n );\n })}\n {hasError && \n {error.title}\n {error.message}\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 { CheckoutBillingAddress, viewState, heading, sameAsShippingCheckbox, showAddress, showAddOrUpdateAddress } = props;\n\n return (\n \n {heading}\n {viewState.isShowSameAsShippingCheckbox && sameAsShippingCheckbox}\n {viewState.isShowAddress && }\n {viewState.isShowAddOrUpdateAddress && }\n \n );\n};\n\nexport default CheckoutBillingAddressView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport withModuleState from './with-module-state';\n\nexport * from './module-state';\nexport * from './module-state.data';\n\nexport { withModuleState };\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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. All rights reserved.\n * See License.txt 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, AddressItemType, AddressValidationRuleType, IAddressDropdownsData,\n IAddressItem, 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 { addressFormat, addressType, dropdownDisplayData, defaultCountryRegionId, defaultAddressType, validationError = {}, onInputChange, onDropdownChange, shouldAutoFocus } = 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()}`, { 'msc-address-form__item-newline': addressFormatItem.isNewLine, 'address-form__item-invalid': errorMessage });\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 { editAddressHeading, addAddressHeading, selectedAddress = {}, resources, hasError, onCancel, onSave, hasExternalSubmitGroup, isUpdating, addressActionResponse, telemetryContent } = 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 message: addressActionResponse && addressActionResponse.errorMessage && \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 { AutoSuggest } from './common/address-autosuggest';\nimport { IAutoSuggestOptions } from './common/address-autosuggest.data';\n\nexport * from './actions/get-country-regions';\nexport * from './actions/get-country-state';\nexport * from './actions/get-state-provinces';\nexport * from './common';\nexport * from './modules/account-management-address';\nexport * from './modules/business-account-address';\nexport * from './modules/checkout-billing-address';\nexport * from './modules/checkout-shipping-address';\n\n/**\n * Exporting.\n */\nexport {\n AutoSuggest,\n IAutoSuggestOptions\n};\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { ITelemetry } from '@msdyn365-commerce/core';\r\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\r\n\r\nimport { IAutoSuggestOptions } from './address-autosuggest.data';\r\n\r\n/**\r\n *\r\n * Auto Suggest.\r\n */\r\nexport class AutoSuggest {\r\n public readonly excludedAddressFields: string[] = ['ThreeLetterISORegionName', 'Name', 'AddressTypeValue', 'Phone'];\r\n\r\n private readonly telemetry: ITelemetry;\r\n\r\n private readonly countryCode?: string;\r\n\r\n private readonly bingMapsApiKey?: string;\r\n\r\n private readonly defaultLanguageId?: string;\r\n\r\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\r\n\r\n private autoSuggestOptions: IAutoSuggestOptions;\r\n\r\n constructor(\r\n telemetry: ITelemetry,\r\n autoSuggestOptions: IAutoSuggestOptions,\r\n BingMapsApiKey?: string,\r\n countryCode?: string,\r\n defaultLanguageId?: string\r\n ) {\r\n this.telemetry = telemetry;\r\n this.autoSuggestOptions = autoSuggestOptions;\r\n this.bingMapsApiKey = BingMapsApiKey;\r\n this.countryCode = countryCode;\r\n this.defaultLanguageId = defaultLanguageId;\r\n }\r\n\r\n public attachAutoSuggest = (\r\n inputId: string,\r\n containerId: string,\r\n selectedSuggestionCallback: (result: Microsoft.Maps.ISuggestionResult) => void\r\n ): void => {\r\n if (!this.autoSuggestManager) {\r\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\r\n callback: () => {\r\n const options = { ...this.autoSuggestOptions, countryCode: this.countryCode };\r\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\r\n this.autoSuggestManager.attachAutosuggest(inputId, containerId, selectedSuggestionCallback);\r\n document.querySelector(inputId)?.setAttribute('role', 'combobox');\r\n setTimeout(() => {\r\n document.querySelector(inputId)?.setAttribute('type', 'text');\r\n }, 0);\r\n },\r\n errorCallback: () => {\r\n if (this.telemetry) {\r\n this.telemetry.debug('Unable to attach map auto suggest.');\r\n }\r\n },\r\n credentials: this.bingMapsApiKey\r\n });\r\n }\r\n };\r\n\r\n public changeAutoSuggestionCountryCode = (countryCode?: string): void => {\r\n if (this.autoSuggestManager) {\r\n this.autoSuggestOptions.countryCode = countryCode;\r\n this.autoSuggestManager.setOptions(this.autoSuggestOptions);\r\n }\r\n };\r\n\r\n public disposeAutoSuggest = (): void => {\r\n this.autoSuggestManager?.detachAutosuggest();\r\n this.autoSuggestManager?.dispose();\r\n this.autoSuggestManager = undefined;\r\n };\r\n\r\n public _loadMapAPI = async (storeSelectorStateManager: IStoreSelectorStateManager): Promise => {\r\n await storeSelectorStateManager.loadMapApi({\r\n key: this.bingMapsApiKey,\r\n lang: this.defaultLanguageId,\r\n market: this.countryCode\r\n });\r\n };\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IImageProps, IImageSettings, Image } 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 } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { ICustomCheckoutShippingAddressResources } from '../custom-checkout-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: ICustomCheckoutShippingAddressResources;\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 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 if (isShowQty) {\r\n className = classnames(className, ' product-image-wide');\r\n }\r\n return (\r\n
\r\n \r\n {isShowQty && (\r\n \r\n )}\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 * 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. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Address, AddressPurpose, CartLine, CountryRegionInfo, SimpleProduct, StateProvinceInfo } 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 './common/address-autosuggest';\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 { ICustomCheckoutShippingAddressData } from './custom-checkout-shipping-address.data';\r\nimport { ICustomCheckoutShippingAddressProps } from './custom-checkout-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\nexport interface ICheckoutAddressProps extends ICustomCheckoutShippingAddressProps, 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 showAddressSelect: IAddressSelectProps;\r\n showAddOrUpdateAddress: IAddressAddUpdateProps;\r\n cartLineImages?: React.ReactNode;\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 readonly countryRegions: CountryRegionInfo[];\r\n\r\n private readonly 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 readonly retailMultiplePickUpOptionEnabled?: boolean = false;\r\n\r\n 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 @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 this.props.telemetry.error(error);\r\n this.setState({ shippingGroups: [] });\r\n }\r\n };\r\n\r\n // @ts-ignore\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: address.State });\r\n set(this.addUpdateAddress, { DistrictName: address.DistrictName });\r\n set(this.addUpdateAddress, { FullAddress: address.FullAddress });\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 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 } = this.props;\r\n\r\n this.props.data.checkout.then(() => {\r\n this._setDefaultCountryRegionId();\r\n this._initModuleState();\r\n });\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 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 showAddressSelect: this._renderSelectAddress(),\r\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress(),\r\n cartLineImages: isRetailMultiplePickUpOptionEnabled ? cartLineImages : undefined\r\n };\r\n\r\n return renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Method to get cartlines for delivery.\r\n * @returns The cartline 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 cartline for delivery.\r\n * @param line -The cartline.\r\n * @returns True/false as per cartline 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 cartline for delivery.\r\n * @param deliveryMode -The delivery mode.\r\n * @returns True/false as per cartline 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 cartline for delivery.\r\n * @param channelId -The channelid.\r\n * @param cartLines -Cartline 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(line => new ProductInput(line.ProductId || 0, actionContext.requestContext.apiSettings, channelId));\r\n return getSimpleProducts(productInputs, actionContext);\r\n };\r\n\r\n /**\r\n * Method to render add/update address.\r\n * @returns Address app/update props.\r\n */\r\n private readonly _renderAddOrUpdateAddress = (): IAddressAddUpdateProps => {\r\n const addressFormat =\r\n this.currentOperation === AddressOperation.Add && this.addressCommon.isAuthenticatedFlow()\r\n ? this.addressFormat\r\n : this.addressFormat;\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 onSave: this.onSubmit,\r\n\r\n onCancel: !this.selectedAddress && !this.addressCommon.isAuthenticatedFlow() ? () => {} : this._resetView\r\n });\r\n };\r\n\r\n /**\r\n * Method to render select address.\r\n * @returns Select address props.\r\n */\r\n private readonly _renderSelectAddress = (): IAddressSelectProps => {\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 onAddAddress: this._goToAddAddress,\r\n onSave: this._onSelectAddress,\r\n\r\n onCancel: !this.selectedAddress ? () => {} : this._resetView\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 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 let response: Promise;\r\n if (this.addressCommon.isAuthenticatedFlow()) {\r\n response =\r\n this.currentOperation === AddressOperation.Update\r\n ? this.addressCommon.updateCustomerAddress(this.addUpdateAddress)\r\n : Promise.resolve({ address: 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 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({ customerAddresses: result.customerAddresses, address: newAddress });\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, { TwoLetterISORegionName: twoLetterISORegionName });\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\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 && request.channel && 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 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 if (this._canShip()) {\r\n const defaultAddress = this.props.data.checkout.result?.checkoutCart.cart.ShippingAddress ?? this._getDefaultAddress();\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 } else {\r\n this._updateCurrentOperation(AddressOperation.Add);\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._onAddressAddUpdateSubmit();\r\n break;\r\n case AddressOperation.List:\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._clearAddressFields();\r\n if (!(!this.selectedAddress && !this.addressCommon.isAuthenticatedFlow())) {\r\n this._resetView();\r\n }\r\n\r\n break;\r\n case AddressOperation.List:\r\n if (this.selectedAddress) {\r\n this._resetView();\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\r\n private readonly onEdit = (): void => {\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/fale 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\r\n this.props.data.checkout.result.updateShippingAddress({ newShippingAddress });\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 get shippingAddress(): Address | undefined {\r\n return this.props.data.checkout.result && 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._updateModuleState();\r\n };\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 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\nexport default CheckoutShippingAddress;\r\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 (\n

\n {message}\n

\n );\n};\n\nexport default AddressErrorMessageFunctionComponent;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } 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. All rights reserved.\n * See License.txt 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 {\n isNewLine,\n isShowLabel,\n labelText,\n name,\n value\n } = 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 ? `msc-address-detail__item msc-address-detail__item-address-detail_${labelText}` : classname(className, { 'msc-address-detail__item-empty': isEmpty, 'msc-address-detail__item-newline': isNewLine });\n return (\n \n {\n isShowLabel && <>\n \n {labelText}\n \n \n \n }\n {value}\n \n );\n};\n\nexport default AddressDetailItemFunctionComponent;\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"],"sourceRoot":""}