{"version":3,"sources":["webpack:///src/common/components/address-list.tsx?8cb2","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-list.tsx?754d","webpack:///./src/modules/smwe-account-management-address/smwe-account-management-address.tsx?35da","webpack:///./src/common/components/address-select.tsx?85a3","webpack:///./src/modules/smwe-checkout-shipping-address/smwe-checkout-shipping-address.tsx?9114","webpack:///src/common/address-autosuggest.ts?520f","webpack:///src/common/components/address-button.tsx?e3b2","webpack:///./src/common/components/address-billing-checkbox.tsx?7444","webpack:///./src/common/components/address-billing-heading.tsx?49ee","webpack:///./src/modules/smwe-checkout-billing-address/smwe-checkout-billing-address.tsx?d744","webpack:///./src/modules/wine-club-signup/wine-club-data.ts?aeec","webpack:///./src/common/components/address-alert.tsx?f4e6","webpack:///./src/common/components/address-dropdown.tsx?f3a6","webpack:///./src/common/components/address-label.tsx?a734","webpack:///./src/common/components/address-add.tsx?2ff5","webpack:///./src/modules/smwe-checkout-billing-address/smwe-checkout-billing-address.view.tsx?2734","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-detail-item.tsx?c5b6","webpack:///src/common/components/address-show.tsx?376c","webpack:///src/common/address-meta-data.ts?d29d","webpack:///../../../src/module-state-manager/module-state.ts?7579","webpack:///../../../src/module-state-manager/with-module-state.tsx?61ca","webpack:///./src/common/address.fields.ts?a6cc","webpack:///src/modules/account-management-address/account-management-address.view.tsx?739e","webpack:///src/common/address-format.data.ts?da4c","webpack:///./src/common/components/address-error-title.tsx?9499","webpack:///./src/common/components/address-detail-item.tsx?b203","webpack:///./src/common/components/address-show.tsx?6d63","webpack:///src/common/components/address-select.tsx?e342","webpack:///src/modules/checkout-shipping-address/checkout-shipping-address.tsx?bd44","webpack:///./src/common/address-format.ts?1cbd","webpack:///src/modules/business-account-address/business-account-address.view.tsx?dcd1","webpack:///./src/modules/smwe-account-management-address/smwe-account-management-address.view.tsx?ff91","webpack:///./src/common/address-module.data.ts?6f83","webpack:///./src/common/address-format.data.ts?dd26","webpack:///src/common/components/address-billing-checkbox.tsx?1b2a","webpack:///src/common/components/address-billing-heading.tsx?4a5c","webpack:///src/modules/checkout-billing-address/checkout-billing-address.tsx?83e6","webpack:///./src/common/components/address-button.tsx?7b0b","webpack:///./src/common/components/address-input.tsx?a87b","webpack:///./src/common/components/address-warning.tsx?4892","webpack:///./src/common/components/address-error-message.tsx?fd46","webpack:///src/common/address-format.ts?400b","webpack:///src/common/address-common.ts?0583","webpack:///./src/modules/smwe-checkout-shipping-address/smwe-checkout-shipping-address.view.tsx?81a2","webpack:///src/modules/checkout-billing-address/checkout-billing-address.view.tsx?d08e","webpack:///src/common/components/address-alert.tsx?0da8","webpack:///src/common/components/address-checkbox.tsx?a46e","webpack:///src/common/components/address-dropdown.tsx?3e73","webpack:///src/common/components/address-label.tsx?9ddc","webpack:///src/common/components/address-add.tsx?0cbd","webpack:///src/common/components/address-error-message.tsx?c7bd","webpack:///./src/common/address-meta-data.ts?a686","webpack:///src/common/components/address-input.tsx?ed8f","webpack:///./src/common/address-common.ts?d91f","webpack:///src/common/address-module.data.ts?1a63"],"names":["getButtonAriaLabel","ariaLabel","addressName","replace","getAddressList","className","addresses","showPrimaryButton","props","heading","resources","isUpdating","addressActionResponse","selectedAddress","addressFormat","onEditAddress","onRemoveAddress","onUpdatePrimaryAddress","addressPurposes","telemetryContent","errorTitle","errorMessage","List","isShowList","length","React","Heading","Object","items","map","address","isSelectedAddress","RecordId","isShowError","Item","key","showItems","AddressShow","getAddressFormat","ThreeLetterISORegionName","error","Error","title","AddressErrorTitleComponent","message","AddressErrorMessageComponent","isShowPrimaryButton","primaryButton","AddressButtonComponent","classname","disabled","text","addressPrimaryButtonText","addressPrimaryButtonAriaLabel","Name","onClick","editButton","addressEditButtonText","addressEditButtonAriaLabel","removeButton","addressRemoveButtonText","addressRemoveButtonAriaLabel","getPrimaryAddressList","primaryAddressSectionHeading","primaryAddresses","filter","IsPrimary","getOtherAddressList","otherAddressSectionHeading","otherAddresses","AccountManagementAddress","constructor","super","countryRegionId","defaultAddressType","_renderAddOrUpdateAddress","AddressAddUpdate","this","addressType","AddressType","Shipping","addUpdateAddress","defaultCountryRegionId","validationError","dropdownDisplayData","getPrefilledAddressDropdownData","addressStateDefaultSelectionText","stateProvinceInfo","onInputChange","_onAddressAddUpdateInputChange","onDropdownChange","_onAddressAddUpdateDropdownChange","onSave","_onAddressAddUpdateSubmit","onCancel","_resetView","_renderListAddress","config","onAddAddress","ListAddress","Msdyn365","tag","headingTag","editProps","onEdit","event","target","value","requestContext","contextRequest","isShowEmptyListMessage","emptyListMessage","addressEmptyListAddressMessage","addButton","addressAddButtonText","addressAddButtonAriaLabel","primaryAddressList","otherAddressList","AddressList","customerAddresses","context","request","_goToEditAddress","_onRemoveAddress","_goToAddAddress","_onSubmitUpdatePrimaryAddress","_attachMapAutoSuggest","async","data","storeSelectorStateManager","result","isMapApiLoaded","autoSuggest","attachAutoSuggest","_onSuggestionSelected","_clearAddressFields","getTranformedAddress","set","ZipCode","CountyName","City","State","DistrictName","FullAddress","setTimeout","Street","forEach","format","undefined","name","excludedAddressFields","includes","_clearValidation","onAddressAddUpdate","validateAddressFormat","type","checked","RegExp","AddressItemType","AddressTypeValue","_onCountryChange","_onAddressUpdate","response","onSuccess","then","hasError","addressCommon","isAuthenticatedFlow","currentOperation","AddressOperation","Update","updateCustomerAddress","addCustomerAddress","Promise","resolve","_onAddOrUpdateSuccess","twoLetterISORegionName","getTwoLetterISORegionName","changeAutoSuggestionCountryCode","_getAddressFormatExcludeList","addressFormatExcludeList","showAddressType","push","_getStateProvinces","Add","getStateProvinces","some","state","StateId","_updateCurrentOperation","operation","updateCustomerPrimaryAddress","_onUpdatePrimaryAddressSuccess","Deactivate","_setDefaultCountryRegionId","telemetry","countryRegions","AddressCommon","AddressFormat","AddressMetaData","getTelemetryObject","telemetryPageName","friendlyName","actionContext","channel","autoSuggestionEnabled","autoSuggestOptions","reaction","BingMapsApiKey","BingMapsEnabled","options","AutoSuggest","ChannelCountryRegionISOCode","DefaultLanguageId","loadMapApi","_loadMapAPI","disposeAutoSuggest","render","renderView","viewState","isShowAddresList","isShowAddOrUpdateAddress","AccountAddressManagement","moduleProps","classnames","showAddressList","showAddOrUpdateAddress","market","getDefaultCountryRegionId","__decorate","observable","action","observer","AddressDetail","Node","item","description","AddressSelect","SelectAddress","isShowSaveButton","saveButton","isShowCancelButton","cancelButton","SelectItem","input","AddressForm","AddressItem","label","alert","AddressError","CheckoutShippingAddressView","CheckoutShippingAddress","showAddress","showAddressSelect","Module","isShowAddress","catch","e","exception","customerAccountNumber","user","componentDidMount","getInput","index","onAddressOptionChange","ichecked","additionalAttributes","AddressInputComponent","toString","onChange","additionalAddributes","getAddressSelectItems","addressListSelectedAddress","hasExternalSubmitGroup","moduleState","onSubmit","_renderSelectAddress","addressSaveButtonText","addressSaveButtonAriaLabel","addressCancelButtonText","addressCancelButtonAriaLabel","_onAddressOptionChange","_onSelectAddress","addressRecordId","currentTarget","find","_updateModuleState","_getDefaultAddress","_initModuleState","status","_canShip","_forceDisable","_setShippingAddress","init","defaultAddress","Show","cart","emailDeliveryModeCode","EmailDeliveryModeCode","CartLines","DeliveryMode","onDisable","shippingAddress","checkout","checkoutCart","isEmpty","cartLine","PickupDeliveryModeCode","newShippingAddress","TwoLetterISORegionName","updateShippingAddress","onReady","onPending","onUpdating","countryStates","_renderShowAddress","store","WineClubDataStore","getInstance","get","wineState","getModuleByTypeName","deliveryType","hasModuleState","computed","withModuleState","countryCode","defaultLanguageId","inputId","containerId","selectedSuggestionCallback","autoSuggestManager","Microsoft","Maps","loadModule","callback","AutosuggestManager","attachAutosuggest","document","querySelector","setAttribute","errorCallback","debug","credentials","bingMapsApiKey","setOptions","detachAutosuggest","dispose","lang","AddressButton","payLoad","getPayloadObject","attributes","getTelemetryAttributes","AddressBillingCheckbox","isChecked","shouldShowCheckbox","IAddressBillingHeadingGenerator","CheckoutBillingAddress","Billing","_onSubmitAddress","isBillingAddressRequried","isCartContainsItemsForShipping","clubStore","isBillingAddressSameAsShipping","ItemId","billingAddress","_onBillingAddressSameAsShippingChange","_setBillingAddress","updateCartDeliverySpecification","setHasError","checkoutState","updateCartDeliverySpecificationInput","deliveryModeId","substatus","_containsOnlyGifts","setError","addressGenericErrorMessage","updateBillingAddress","newBillingAddress","isDisabled","isShowSameAsShippingCheckbox","AddressBillingHeadingComponent","addressBillingAddressHeading","sameAsShippingCheckbox","AddressBillingCheckoxComponent","addressSameAsShippingAddressAriaLabel","addressSameAsShippingAddressText","pickupDeliveryModeCode","loyaltyAmount","giftCards","reduce","count","giftCard","Balance","TotalAmount","getGiftCardTotalAmount","getLoyaltyAmount","shouldPaidByCard","emailCode","nonDigitalItems","line","LOCAL_STORAGE_LOCATION","changeEvents","window","previousWineData","localStorage","getItem","reset","wineClubData","JSON","parse","instance","getDeliveryMapFromConfig","coreContext","app","wineClubShippingLabels","standard","pickup","premium","edit","newData","_save","deleteKeys","keys","tosAgree","forMyself","clubId","variantPreference","isInResetState","setItem","stringify","AdressAlert","role","AdressDropdown","id","displayData","selectedValue","isSelected","toLowerCase","getDropdownItem","AdressLabel","htmlFor","getRequriedAttribute","validationRules","validationRule","AddressValidationRuleType","Required","getLabelText","isShipping","labelText","AddressFields","getPlaceholderText","placeholderText","getAddressItems","getWarningMessage","test","addressFormatItem","elementId","isNewLine","displayType","AddressItemDisplayType","Input","maxLength","hasWarning","placeholder","AdressDropdownComponent","Country","AddressLabelComponent","AddressAlertComponent","editAddressHeading","addAddressHeading","CheckoutBillingAddressView","AdressErrorTitle","BusinessAccountAddress","excludedList","_resetAddressFields","Checkbox","Company","_updateAddress","_updateCountryRegionId","updateForm","isRequired","cleanValue","_isEmpty","i","_isInputRequired","addressItemValue","resetAddress","AddressDetailItem","isShowLabel","mainClass","addressTypeValue","AddressDetailItemComponent","Phone","excluded","required","metaData","requiredFieldRegEx","resourcesPrefix","excludedTypes","requiredFields","_init","getItemFormat","_addItem","County","Dropdown","District","StreetNumber","BuildingCompliment","Postbox","House_RU","Flat_RU","CountryOKSMCode_RU","nameKey","_validationRules","rule","optionalString","ruleType","itemType","_validationRule","regEx","getCacheKey","getCacheObjectType","dataCacheType","getModuleStates","ctx","cacheKey","ModuleStatesCacheKey","moduleStates","update","WrappedComponent","_super","_this","typeName","states","_a","hasInitialized","isCancellable","isSubmitContainer","childIds","validate","isReady","isPending","isSkipped","isCancelAllowed","shouldSubmitContainer","setIsRequired","setIsCancellable","setIsSubmitContainer","onSkip","getModule","moduleId","getModuleStateManager","getModuleStateManagerByTypeName","__assign","values","_moduleState","modules","source","module","isMatch","allMatched","skipSkippableItem","_validateLeaf","method","childId","_validateContainer","enableControl","initializeState","__extends","ModuleState","AddressLists","AccountManagementAddressView","phoneNumberString","match","join","_formatPhoneNumber","multiplePickupStoreSwitchName","retailMultiplePickUpOptionEnabled","_getShippingAddressFromCartLines","channelDeliveryOptionConfig","cartLines","PickupDeliveryModeCodes","deliveryMode","ShippingAddress","hasInvoiceLine","featureState","feature","IsEnabled","countryRegionsInfo","addressMetaData","stateDefaultSelectionText","isShippingAddress","defaultStateText","dropdownData","getCountryFormat","getStateFormat","unshift","_getCountryRegionInfo","ISOCode","isBilling","isValid","ZipCodeIndex","findIndex","ZipCodeValidationIndex","splice","_validateRegEx","propertyName","countryRegionInfo","_getAddressDisplayFormat","countryRegion","CountryRegionId","ShortName","statesSettings","StateName","addressDisplayItem","AddressFormatLines","nameDisplayItem","_extendAddressDisplayFormat","formatLine","AddressComponentNameValue","addressItem","NewLine","phoneDisplayItem","BusinessAccountAddressView","IAddressBillingHeading","isBillingAddressSameAsShippingAddress","additionalProperties","removeBillingAddress","giftCardExtends","checkoutResult","paymentTenderType","tokenizedPaymentCard","isPaidByOtherPaymentSource","paymenTenderType","_onInputBlur","bind","warningMessage","onBlur","el","setState","AdressErrorMessage","getAddressTypeFormat","validationtor","_inputValidation","postalCode","selectedState","adminDistrict","addressLine","locality","district","formattedAddress","addressPurpose","AddressTypeItem","isPrimaryDisplayItem","marketISOCode","currentCountryRegion","parseRetailException","addressErrorMessageTitle","isAuthenticated","GetStateProvincesInput","apiSettings","getStateProvinceAction","submitCustomerAddress","addAddress","updateAddress","updatePrimaryAddress","addressAction","AddressManagementInput","execAddressAction","AdressCheckbox","autoFocus","getAddessItems","AdressCheckboxComponent","phoneValidation","zipcodeValidation","AdressInput"],"mappings":"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","file":"static/js/21.2f44d081b9f4a256c11b.chunk.js","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { Heading as HeadingData } from '@msdyn365-commerce-modules/data-types';\nimport { Heading, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { Address, AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { AddressFormat } from '../../common/address-format';\nimport { IAddressResource, IAddressResponse } from '../../common/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 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: 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: address, addressPurposes: addressPurposes }),\n error: {\n Error: { className: `${className}-error` },\n isShowError: isShowError ? true : false,\n title: ,\n message: \n },\n isShowPrimaryButton: showPrimaryButton,\n\n primaryButton: (\n { onUpdatePrimaryAddress(address); }\n }\n }\n />\n ),\n editButton: (\n { onEditAddress(address); }\n }\n }\n />\n ),\n removeButton: (\n { onRemoveAddress(address); }\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 } = props;\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n heading!.text = event.target.value;\n };\n const headingComponent = heading && heading.text && (\n \n );\n\n return {\n ListAddress: { className: 'ms-address-list' },\n heading: headingComponent,\n isShowEmptyListMessage: addresses.length === 0,\n emptyListMessage:

{resources.addressEmptyListAddressMessage}

,\n addButton: (\n \n ),\n primaryAddressList: getPrimaryAddressList(props),\n otherAddressList: getOtherAddressList(props)\n };\n};\n","\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport classnames from 'classnames';\nimport { action, observable, reaction, set } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport {\n Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\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 {\n AddressOperation, AddressType, IAddressResource, IAddressResponse\n} 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\nexport interface IAccountManagementAddressViewState {\n isShowAddresList: boolean;\n isShowAddOrUpdateAddress: boolean;\n}\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}\n\n/**\n *\n * Address component\n * @extends {React.Component>}\n */\n@observer\nclass AccountManagementAddress extends React.Component> {\n @observable private currentOperation: AddressOperation;\n @observable private selectedAddress?: Address;\n @observable private countryRegionId: string = 'USA';\n @observable private stateProvinceInfo?: StateProvinceInfo[];\n @observable private customerAddresses: Address[];\n @observable private addUpdateAddress: Address;\n @observable private validationError: object;\n @observable private addressActionResponse?: IAddressResponse;\n @observable private isUpdating?: boolean;\n @observable private hasError?: boolean;\n\n private addressCommon: AddressCommon;\n private addressFormat: AddressFormat;\n private countryRegions: CountryRegionInfo[];\n private addressPurposes: AddressPurpose[];\n private resources: IAddressResource;\n private defaultAddressType: number = 6; // Default to Home\n private telemetryContent: ITelemetryContent;\n private autoSuggest?: AutoSuggest;\n\n 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(this.countryRegions, new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()), this.addressPurposes);\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\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 this.props.data.countryRegions.then(() => {\n this._setDefaultCountryRegionId();\n });\n\n reaction(\n () => this.countryRegionId,\n () => this._getStateProvinces()\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 && (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update),\n async () => {\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\n }\n );\n\n reaction(\n () => {\n this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\n },\n async () => {\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\n await this._attachMapAutoSuggest();\n }\n }\n );\n }\n }\n\n 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 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 };\n\n return renderView(viewProps) as React.ReactElement;\n }\n\n private _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(this.resources.addressStateDefaultSelectionText, this.stateProvinceInfo),\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 private _renderListAddress = (): IAddressListProps => {\n const { config } = this.props;\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: config.heading,\n primaryAddressSectionHeading: config.primaryAddressSectionHeading,\n otherAddressSectionHeading: config.otherAddressSectionHeading,\n contextRequest: this.props.context.request,\n telemetryContent: this.telemetryContent,\n onEditAddress: this._goToEditAddress,\n onRemoveAddress: this._onRemoveAddress,\n onAddAddress: this._goToAddAddress,\n onUpdatePrimaryAddress: this._onSubmitUpdatePrimaryAddress\n }\n );\n };\n\n private _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 @action\n private _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 // 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 @action\n private _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 @action\n private _clearValidation = (): void => {\n this.validationError = {};\n }\n\n private 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 private _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 private _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 private _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 private _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(this.addUpdateAddress) : this.addressCommon.addCustomerAddress(this.addUpdateAddress);\n } else {\n response = Promise.resolve({ address: this.addUpdateAddress });\n }\n\n this._onAddressUpdate(response, this._onAddOrUpdateSuccess);\n }\n\n private _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 private _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 private _getStateProvinces = (): void => {\n if (!this.countryRegionId || !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)) {\n return;\n }\n\n // tslint:disable-next-line:no-floating-promises\n this.addressCommon.getStateProvinces(this.countryRegionId).then(\n (result: StateProvinceInfo[]) => {\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\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 private _updateCurrentOperation = (operation: AddressOperation) => {\n this.currentOperation = operation;\n }\n\n private _onSubmitUpdatePrimaryAddress = (address: Address): void => {\n this.selectedAddress = address;\n const response = this.addressCommon.updateCustomerPrimaryAddress(address);\n this._onAddressUpdate(response, this._onUpdatePrimaryAddressSuccess);\n }\n\n private _goToEditAddress = (address: Address): void => {\n this.addUpdateAddress = { ...address };\n this.countryRegionId = this.addUpdateAddress.ThreeLetterISORegionName || 'USA';\n this._updateCurrentOperation(AddressOperation.Update);\n }\n\n private _onRemoveAddress = (address: Address): void => {\n address.Deactivate = true;\n const response = this.addressCommon.updateCustomerAddress(address);\n this._onAddressUpdate(response, this._onAddOrUpdateSuccess);\n }\n\n private _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 private _onAddOrUpdateSuccess = (response: IAddressResponse): void => {\n if (response.customerAddresses) {\n this.customerAddresses = response.customerAddresses;\n }\n this._resetView();\n }\n\n private _onUpdatePrimaryAddressSuccess = (response: IAddressResponse): void => {\n if (response.customerAddresses) {\n this.customerAddresses = response.customerAddresses;\n }\n }\n\n private _resetView = (): void => {\n this.selectedAddress = undefined;\n this._updateCurrentOperation(AddressOperation.List);\n }\n}\n\nexport default AccountManagementAddress;","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\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\nconst AddressShow: React.FC = ({\n AddressDetail,\n items\n}) => {\n\n return (\n \n {items && items.map((item: IAddressShowItem) => {\n return (\n <>\n {item.description}\n \n );\n })}\n \n );\n};\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 && 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\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 && 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\nconst CheckoutShippingAddressView: React.FC = props => {\n const { CheckoutShippingAddress, viewState, showAddress, showAddressSelect, showAddOrUpdateAddress } = props;\n\n return (\n \n {viewState.isShowAddress && }\n {viewState.isShowAddresList && }\n {viewState.isShowAddOrUpdateAddress && }\n \n );\n};\n\nexport default CheckoutShippingAddressView;\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport classname from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { Heading as HeadingData } from '@msdyn365-commerce-modules/data-types';\r\nimport { Heading, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { Address } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { AddressFormat } from '../../common/address-format';\r\nimport { IAddressResource, IAddressResponse } from '../../common/address-module.data';\r\nimport AddressButtonComponent from './address-button';\r\nimport AddressErrorMessageComponent from './address-error-message';\r\nimport AddressErrorTitleComponent from './address-error-title';\r\nimport { AddressShow, IAddressShowProps } from './address-show';\r\n\r\nexport interface IAddressListError {\r\n Error: INodeProps;\r\n isShowError: boolean;\r\n title: React.ReactNode;\r\n message: React.ReactNode;\r\n}\r\n\r\nexport interface IAddressListItem {\r\n Item: INodeProps;\r\n key: number;\r\n error: IAddressListError;\r\n showItems: IAddressShowProps;\r\n isShowPrimaryButton: boolean;\r\n primaryButton: React.ReactNode;\r\n editButton: React.ReactNode;\r\n}\r\n\r\nexport interface IAddressList {\r\n List: INodeProps;\r\n isShowList: boolean;\r\n heading: React.ReactNode;\r\n items: IAddressListItem[];\r\n}\r\n\r\nexport interface IAddressListProps {\r\n ListAddress: INodeProps;\r\n heading: React.ReactNode;\r\n isShowEmptyListMessage: boolean;\r\n emptyListMessage: React.ReactNode;\r\n addButton: React.ReactNode;\r\n primaryAddressList: IAddressList;\r\n otherAddressList: IAddressList;\r\n}\r\n\r\nexport interface IAddressListInputProps {\r\n isUpdating?: boolean;\r\n selectedAddress?: Address;\r\n addressFormat: AddressFormat;\r\n addresses: Address[];\r\n heading?: HeadingData;\r\n primaryAddressSectionHeading?: HeadingData;\r\n otherAddressSectionHeading?: HeadingData;\r\n addressActionResponse?: IAddressResponse;\r\n resources: IAddressResource;\r\n onAddAddress(): void;\r\n onEditAddress(address?: Address): void;\r\n onUpdatePrimaryAddress(address: Address): void;\r\n}\r\n\r\nconst getButtonAriaLabel = (ariaLabel: string, addressName?: string): string => {\r\n return ariaLabel.replace('{addressName}', addressName || '');\r\n};\r\n\r\nconst getAddressList = (className: string, addresses: Address[], showPrimaryButton: boolean, props: IAddressListInputProps, heading?: HeadingData): IAddressList => {\r\n const { resources, isUpdating, addressActionResponse, selectedAddress, addressFormat, onEditAddress, onUpdatePrimaryAddress } = props;\r\n const { errorTitle = null, errorMessage = null } = addressActionResponse || {};\r\n\r\n return {\r\n List: { className: className },\r\n isShowList: addresses.length > 0,\r\n heading: heading && ,\r\n items: addresses.map((address: Address): IAddressListItem => {\r\n const isSelectedAddress = selectedAddress && selectedAddress.RecordId === address.RecordId;\r\n const isShowError = isSelectedAddress && errorTitle && errorMessage;\r\n return {\r\n Item: { className: `${className}-list` },\r\n key: address.RecordId || 0,\r\n showItems: AddressShow({ addressFormat: addressFormat.getAddressFormat(address.ThreeLetterISORegionName || ''), address: address }),\r\n error: {\r\n Error: { className: `${className}-error` },\r\n isShowError: isShowError ? true : false,\r\n title: ,\r\n message: \r\n },\r\n isShowPrimaryButton: showPrimaryButton,\r\n\r\n primaryButton: (\r\n { onUpdatePrimaryAddress(address); }\r\n }\r\n }\r\n />\r\n ),\r\n editButton: (\r\n { onEditAddress(address); }\r\n }\r\n }\r\n />\r\n )\r\n };\r\n })\r\n };\r\n};\r\n\r\nconst getPrimaryAddressList = (props: IAddressListInputProps): IAddressList => {\r\n const { addresses, primaryAddressSectionHeading } = props;\r\n const primaryAddresses = addresses.filter((address: Address) => address.IsPrimary);\r\n return getAddressList('msc-address-list__primary', primaryAddresses, false, props, primaryAddressSectionHeading);\r\n};\r\n\r\nconst getOtherAddressList = (props: IAddressListInputProps): IAddressList => {\r\n const { addresses, otherAddressSectionHeading } = props;\r\n const otherAddresses = addresses.filter((address: Address) => !address.IsPrimary);\r\n return getAddressList('msc-address-list__primary', otherAddresses, true, props, otherAddressSectionHeading);\r\n};\r\n\r\nexport const AddressList = (props: IAddressListInputProps): IAddressListProps => {\r\n const { addresses, heading, resources, onAddAddress } = props;\r\n\r\n return {\r\n ListAddress: { className: 'ms-address-list' },\r\n heading: heading && ,\r\n isShowEmptyListMessage: addresses.length === 0,\r\n emptyListMessage:

{resources.addressEmptyListAddressMessage}

,\r\n addButton: (\r\n \r\n ),\r\n primaryAddressList: getPrimaryAddressList(props),\r\n otherAddressList: getOtherAddressList(props)\r\n };\r\n};\r\n","\r\n/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport classnames from 'classnames';\r\nimport { observable, reaction, set } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\r\nimport {\r\n Address, CountryRegionInfo, StateProvinceInfo\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { AddressCommon } from '../../common/address-common';\r\nimport { AddressFormat } from '../../common/address-format';\r\nimport { AddressItemType } from '../../common/address-format.data';\r\nimport { AddressMetaData } from '../../common/address-meta-data';\r\nimport {\r\n AddressOperation, AddressType, IAddressResource, IAddressResponse\r\n} from '../../common/address-module.data';\r\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '../../common/components/address-add';\r\nimport { AddressList, IAddressListProps } from '../../common/components/address-list';\r\nimport { ISmweAccountManagementAddressData } from './smwe-account-management-address.data';\r\nimport { ISmweAccountManagementAddressProps } from './smwe-account-management-address.props.autogenerated';\r\n\r\nexport interface IAccountManagementAddressViewState {\r\n isShowAddresList: boolean;\r\n isShowAddOrUpdateAddress: boolean;\r\n}\r\n\r\nexport interface IAccountManagementAddressViewProps extends React.Component> {\r\n className: string;\r\n currentOperation: AddressOperation;\r\n selectedAddress?: Address;\r\n addUpdateAddress: Address;\r\n countryRegionId: string;\r\n stateProvinceInfo?: StateProvinceInfo[];\r\n customerAddresses: Address[];\r\n validationError: object;\r\n addressActionResponse?: IAddressResponse;\r\n viewState: IAccountManagementAddressViewState;\r\n AccountAddressManagement: IModuleProps;\r\n isUpdating: boolean;\r\n showAddressList: IAddressListProps;\r\n showAddOrUpdateAddress: IAddressAddUpdateProps;\r\n}\r\n\r\n/**\r\n *\r\n * Address component\r\n * @extends {React.Component>}\r\n */\r\n@observer\r\nclass AccountManagementAddress extends React.Component> {\r\n @observable private currentOperation: AddressOperation;\r\n @observable private selectedAddress?: Address;\r\n @observable private countryRegionId: string = 'USA';\r\n @observable private stateProvinceInfo?: StateProvinceInfo[];\r\n @observable private customerAddresses: Address[];\r\n @observable private addUpdateAddress: Address;\r\n @observable private validationError: object;\r\n @observable private addressActionResponse?: IAddressResponse;\r\n @observable private isUpdating?: boolean;\r\n @observable private hasError?: boolean;\r\n\r\n private addressCommon: AddressCommon;\r\n private addressFormat: AddressFormat;\r\n private countryRegions: CountryRegionInfo[];\r\n private customerAccountNumber?: string;\r\n private resources: IAddressResource;\r\n\r\n constructor(props: ISmweAccountManagementAddressProps) {\r\n super(props);\r\n const { context, data, resources, telemetry } = this.props;\r\n\r\n this.resources = resources;\r\n this.currentOperation = AddressOperation.List;\r\n this.customerAccountNumber = context && context.request && context.request.user && context.request.user.customerAccountNumber;\r\n this.countryRegions = data.countryRegions.result || [];\r\n this.customerAddresses = data.address.result || [];\r\n this.addUpdateAddress = {};\r\n this.validationError = {};\r\n this.addressFormat = new AddressFormat(context, this.countryRegions, new AddressMetaData({ ...resources }));\r\n this.addressCommon = new AddressCommon(context, resources, telemetry, this.customerAccountNumber);\r\n this._setDefaultCountryRegionId();\r\n }\r\n\r\n public componentDidMount(): void {\r\n reaction(\r\n () => this.countryRegionId,\r\n () => this._getStateProvinces()\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\r\n public render(): JSX.Element {\r\n const { renderView, config } = this.props;\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 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 isShowAddresList: this.currentOperation === AddressOperation.List,\r\n isShowAddOrUpdateAddress: this.currentOperation !== AddressOperation.List,\r\n },\r\n AccountAddressManagement: {\r\n moduleProps: this.props,\r\n className: classnames('ms-account-management-address', config.className)\r\n },\r\n showAddressList: this._renderListAddress(),\r\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress()\r\n };\r\n\r\n return renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private _renderAddOrUpdateAddress = (): IAddressAddUpdateProps => {\r\n return AddressAddUpdate(\r\n {\r\n isUpdating: this.isUpdating,\r\n resources: this.resources,\r\n addressType: AddressType.Shipping,\r\n addressFormat: this.addressFormat.getAddressFormat((this.addUpdateAddress.ThreeLetterISORegionName) || this.countryRegionId),\r\n defaultCountryRegionId: this.countryRegionId,\r\n selectedAddress: this.addUpdateAddress,\r\n validationError: this.validationError,\r\n addressActionResponse: this.addressActionResponse,\r\n dropdownDisplayData: this.addressFormat.getPrefilledAddressDropdownData(this.resources.addressStateDefaultSelectionText, this.stateProvinceInfo, true),\r\n onInputChange: this._onAddressAddUpdateInputChange,\r\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\r\n onSave: this._onAddressAddUpdateSubmit,\r\n onCancel: this._resetView\r\n }\r\n );\r\n };\r\n\r\n private _renderListAddress = (): IAddressListProps => {\r\n const { config } = this.props;\r\n\r\n return AddressList(\r\n {\r\n isUpdating: this.isUpdating,\r\n selectedAddress: this.selectedAddress,\r\n addressFormat: this.addressFormat,\r\n addresses: this.customerAddresses,\r\n resources: this.resources,\r\n heading: config.heading,\r\n primaryAddressSectionHeading: config.primaryAddressSectionHeading,\r\n otherAddressSectionHeading: config.otherAddressSectionHeading,\r\n onEditAddress: this._goToEditAddress,\r\n onAddAddress: this._goToAddAddress,\r\n onUpdatePrimaryAddress: this._onSubmitUpdatePrimaryAddress\r\n }\r\n );\r\n };\r\n\r\n private onAddressAddUpdate = (name: string, value: string) => {\r\n set(this.addUpdateAddress, { [name]: value });\r\n };\r\n\r\n private _onAddressAddUpdateInputChange = (event: React.ChangeEvent): void => {\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 private _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 private _onAddressUpdate = (response: Promise, onSuccess: (response: IAddressResponse) => void): void => {\r\n this.isUpdating = true;\r\n response.then(\r\n (result: IAddressResponse) => {\r\n if (result.address) {\r\n this.hasError = false;\r\n onSuccess(result);\r\n } else {\r\n this.hasError = true;\r\n this.addressActionResponse = result;\r\n }\r\n this.isUpdating = false;\r\n },\r\n () => {\r\n this.hasError = true;\r\n this.isUpdating = false;\r\n }\r\n );\r\n };\r\n\r\n private _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 = this.currentOperation === AddressOperation.Update ? this.addressCommon.updateCustomerAddress(this.addUpdateAddress) : this.addressCommon.addCustomerAddress(this.addUpdateAddress);\r\n } else {\r\n response = Promise.resolve({ address: this.addUpdateAddress });\r\n }\r\n\r\n this._onAddressUpdate(response, this._onAddOrUpdateSuccess);\r\n };\r\n\r\n private _onCountryChange = (countryRegionId: string) => {\r\n this.countryRegionId = countryRegionId;\r\n set(this.addUpdateAddress, { ['ThreeLetterISORegionName']: countryRegionId });\r\n };\r\n\r\n private _getStateProvinces = (): void => {\r\n if (!this.countryRegionId || !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)) {\r\n return;\r\n }\r\n\r\n // tslint:disable-next-line:no-floating-promises\r\n this.addressCommon.getStateProvinces(this.countryRegionId).then(\r\n (result: StateProvinceInfo[]) => {\r\n this.stateProvinceInfo = result;\r\n }).catch(e => this.props.telemetry.exception(e));\r\n };\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\r\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\r\n }\r\n\r\n private _updateCurrentOperation = (operation: AddressOperation) => {\r\n this.currentOperation = operation;\r\n };\r\n\r\n private _onSubmitUpdatePrimaryAddress = (address: Address): void => {\r\n this.selectedAddress = address;\r\n const response = this.addressCommon.updateCustomerPrimaryAddress(address);\r\n this._onAddressUpdate(response, this._onUpdatePrimaryAddressSuccess);\r\n };\r\n\r\n private _goToEditAddress = (address: Address): void => {\r\n this.addUpdateAddress = { ...address };\r\n this.countryRegionId = this.addUpdateAddress.ThreeLetterISORegionName || 'USA';\r\n this._updateCurrentOperation(AddressOperation.Update);\r\n };\r\n\r\n private _goToAddAddress = (): void => {\r\n this.addUpdateAddress = {};\r\n set(this.addUpdateAddress, { ['ThreeLetterISORegionName']: this.countryRegionId });\r\n\r\n this._setDefaultCountryRegionId();\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n };\r\n\r\n private _onAddOrUpdateSuccess = (response: IAddressResponse): void => {\r\n if (response.customerAddresses) {\r\n this.customerAddresses = response.customerAddresses;\r\n }\r\n this._resetView();\r\n };\r\n\r\n private _onUpdatePrimaryAddressSuccess = (response: IAddressResponse): void => {\r\n if (response.customerAddresses) {\r\n this.customerAddresses = response.customerAddresses;\r\n }\r\n };\r\n\r\n private _resetView = (): void => {\r\n this.selectedAddress = undefined;\r\n this._updateCurrentOperation(AddressOperation.List);\r\n };\r\n}\r\n\r\nexport default AccountManagementAddress;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { Address } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { AddressFormat } from '../../common/address-format';\r\nimport { IAddressResource } from '../../common/address-module.data';\r\nimport AddressButtonComponent from './address-button';\r\nimport { AddressInputComponent } from './address-input';\r\nimport { AddressShow, IAddressShowProps } from './address-show';\r\n\r\nexport interface IAddressSelectInputProps {\r\n hasExternalSubmitGroup?: boolean;\r\n addressFormat: AddressFormat;\r\n addresses: Address[];\r\n resources: IAddressResource;\r\n selectedAddress: Address;\r\n onAddressOptionChange(event: React.ChangeEvent): void;\r\n onAddAddress(): void;\r\n onSave(): void;\r\n onCancel(): void;\r\n}\r\n\r\nexport interface IAddressSelectItem {\r\n key: number;\r\n SelectItem: INodeProps;\r\n input: React.ReactNode;\r\n showItems: IAddressShowProps;\r\n}\r\n\r\nexport interface IAddressSelectProps {\r\n SelectAddress: INodeProps;\r\n addButton: React.ReactNode;\r\n items: IAddressSelectItem[];\r\n isShowSaveButton: boolean;\r\n saveButton: React.ReactNode;\r\n isShowCancelButton: boolean;\r\n cancelButton: React.ReactNode;\r\n}\r\n\r\nconst getInput = (index: number, address: Address, props: IAddressSelectInputProps): React.ReactNode => {\r\n const { addresses, onAddressOptionChange, selectedAddress } = props;\r\n\r\n const ichecked = address.RecordId === selectedAddress.RecordId;\r\n const additionalAttributes = {\r\n checked: ichecked,\r\n 'aria-checked': ichecked,\r\n 'aria-setsize': addresses.length,\r\n 'aria-posinset': index + 1\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst getAddressSelectItems = (props: IAddressSelectInputProps): IAddressSelectItem[] => {\r\n const { addresses, addressFormat } = props;\r\n\r\n return addresses.map((address, index) => {\r\n return {\r\n key: address.RecordId || 0,\r\n SelectItem: { className: 'msc-address-select__item' },\r\n input: getInput(index, address, props),\r\n showItems: AddressShow({ addressFormat: addressFormat.getAddressFormat(address.ThreeLetterISORegionName || ''), address: address })\r\n };\r\n });\r\n};\r\n\r\nexport const AddressSelect = (props: IAddressSelectInputProps): IAddressSelectProps => {\r\n const { resources, onCancel, onSave, onAddAddress, hasExternalSubmitGroup } = props;\r\n\r\n return {\r\n SelectAddress: { className: 'msc-address-select' },\r\n addButton: (\r\n \r\n ),\r\n isShowSaveButton: !hasExternalSubmitGroup,\r\n saveButton: (\r\n \r\n ),\r\n isShowCancelButton: !hasExternalSubmitGroup,\r\n cancelButton: (\r\n \r\n ),\r\n items: getAddressSelectItems(props)\r\n };\r\n};","\r\n/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport classnames from 'classnames';\r\nimport { computed, observable, reaction, set } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IModuleStateProps, statusType, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { Address, CountryRegionInfo, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { AddressCommon } from '../../common/address-common';\r\nimport { AddressFormat } from '../../common/address-format';\r\nimport { AddressItemType } from '../../common/address-format.data';\r\nimport { AddressMetaData } from '../../common/address-meta-data';\r\nimport {\r\n AddressOperation, AddressType, IAddressResource, IAddressResponse\r\n} from '../../common/address-module.data';\r\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '../../common/components/address-add';\r\nimport { AddressSelect, IAddressSelectProps } from '../../common/components/address-select';\r\nimport { AddressShow, IAddressShowProps } from '../../common/components/address-show';\r\nimport { WineClubDataStore } from '../wine-club-signup/wine-club-data';\r\nimport { ISmweCheckoutShippingAddressData } from './smwe-checkout-shipping-address.data';\r\nimport { ISmweCheckoutShippingAddressProps } from './smwe-checkout-shipping-address.props.autogenerated';\r\n\r\nexport interface IProps extends ISmweCheckoutShippingAddressProps, IModuleStateProps { }\r\n\r\nexport interface ICheckoutShippingAddressViewState {\r\n isShowAddress: boolean;\r\n isShowAddresList: boolean;\r\n isShowAddOrUpdateAddress: boolean;\r\n}\r\n\r\nexport interface ICheckoutShippingAddressViewProps extends IProps {\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}\r\n\r\n/**\r\n *\r\n * Address component\r\n * @extends {React.Component>}\r\n */\r\n// @ts-ignore\r\n@withModuleState\r\n@observer\r\nclass CheckoutShippingAddress extends React.Component {\r\n @observable private currentOperation: AddressOperation;\r\n @observable private selectedAddress?: Address;\r\n @observable private addUpdateAddress: Address;\r\n @observable private countryRegionId: string = 'USA';\r\n @observable private stateProvinceInfo?: StateProvinceInfo[];\r\n @observable private customerAddresses: Address[];\r\n @observable private validationError: object;\r\n @observable private addressActionResponse?: IAddressResponse;\r\n @observable private isUpdating?: boolean;\r\n @observable private hasError?: boolean;\r\n @observable private addressListSelectedAddress: Address = {};\r\n\r\n private addressCommon: AddressCommon;\r\n private addressFormat: AddressFormat;\r\n private countryRegions: CountryRegionInfo[];\r\n private customerAccountNumber?: string;\r\n private resources: IAddressResource;\r\n\r\n constructor(props: IProps) {\r\n super(props);\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.customerAccountNumber = context && context.request && context.request.user && context.request.user.customerAccountNumber;\r\n this.countryRegions = data.countryRegions.result || [];\r\n this.customerAddresses = data.address.result || [];\r\n this.stateProvinceInfo = data.countryStates.result || [];\r\n this.addressFormat = new AddressFormat(context, this.countryRegions, new AddressMetaData({ ...resources }));\r\n this.addressCommon = new AddressCommon(context, resources, telemetry, this.customerAccountNumber);\r\n this.validationError = {};\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.props.data.checkout.then(() => {\r\n this._setDefaultCountryRegionId();\r\n this._initModuleState();\r\n }).catch(e => this.props.telemetry.exception(e));\r\n\r\n reaction(\r\n () => this.countryRegionId,\r\n () => this._getStateProvinces()\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\r\n public render(): JSX.Element | null {\r\n if (!this._canShip()) {\r\n return null;\r\n }\r\n\r\n const { renderView, config } = this.props;\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: 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 };\r\n\r\n return renderView(viewProps) as React.ReactElement;\r\n\r\n }\r\n\r\n private _renderAddOrUpdateAddress = (): IAddressAddUpdateProps => {\r\n return AddressAddUpdate(\r\n {\r\n isUpdating: this.isUpdating,\r\n resources: this.resources,\r\n addressType: AddressType.Shipping,\r\n addressFormat: this.addressFormat.getAddressFormat((this.addUpdateAddress.ThreeLetterISORegionName) || this.countryRegionId),\r\n defaultCountryRegionId: this.countryRegionId,\r\n selectedAddress: this.addUpdateAddress,\r\n validationError: this.validationError,\r\n hasError: this.hasError,\r\n addressActionResponse: this.addressActionResponse,\r\n dropdownDisplayData: this.addressFormat.getPrefilledAddressDropdownData(this.resources.addressStateDefaultSelectionText, this.stateProvinceInfo, true),\r\n onInputChange: this._onAddressAddUpdateInputChange,\r\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\r\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\r\n onSave: this.onSubmit,\r\n // tslint:disable-next-line: no-empty\r\n onCancel: !this.selectedAddress && !this.addressCommon.isAuthenticatedFlow() ? () => { } : this._resetView\r\n }\r\n );\r\n };\r\n\r\n private _renderSelectAddress = (): IAddressSelectProps => {\r\n return AddressSelect(\r\n {\r\n addressFormat: this.addressFormat,\r\n addresses: this.customerAddresses,\r\n resources: this.resources,\r\n selectedAddress: this.addressListSelectedAddress,\r\n onAddressOptionChange: this._onAddressOptionChange,\r\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\r\n onAddAddress: this._goToAddAddress,\r\n onSave: this._onSelectAddress,\r\n // tslint:disable-next-line: no-empty\r\n onCancel: !this.selectedAddress ? () => { } : this._resetView\r\n }\r\n );\r\n };\r\n\r\n private _renderShowAddress(): IAddressShowProps | null {\r\n if (this.selectedAddress) {\r\n return AddressShow({ address: this.selectedAddress, addressFormat: this.addressFormat.getAddressFormat(this.selectedAddress.ThreeLetterISORegionName || '') });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _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 private onAddressAddUpdate = (name: string, value: string) => {\r\n set(this.addUpdateAddress, { [name]: value });\r\n };\r\n\r\n private _onAddressAddUpdateInputChange = (event: React.ChangeEvent): void => {\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 private _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 private _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 = this.currentOperation === AddressOperation.Update ? this.addressCommon.updateCustomerAddress(this.addUpdateAddress) : this.addressCommon.addCustomerAddress(this.addUpdateAddress);\r\n } else {\r\n response = Promise.resolve({ address: this.addUpdateAddress });\r\n }\r\n\r\n this.isUpdating = true;\r\n this._updateModuleState();\r\n\r\n response.then(\r\n (result: IAddressResponse) => {\r\n this.isUpdating = false;\r\n\r\n if (result.address) {\r\n this.hasError = false;\r\n this._onAddOrUpdateSuccess(result);\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 private _onCountryChange = (countryRegionId: string) => {\r\n this.countryRegionId = countryRegionId;\r\n set(this.addUpdateAddress, { ['ThreeLetterISORegionName']: countryRegionId });\r\n };\r\n\r\n private _getStateProvinces = (): void => {\r\n if (!this.countryRegionId || !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)) {\r\n return;\r\n }\r\n\r\n // tslint:disable-next-line:no-floating-promises\r\n this.addressCommon.getStateProvinces(this.countryRegionId).then(\r\n (result: StateProvinceInfo[]) => {\r\n this.stateProvinceInfo = result;\r\n }).catch(e => this.props.telemetry.exception(e));\r\n };\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\r\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\r\n }\r\n\r\n private _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 private _forceDisable(): boolean {\r\n const store = WineClubDataStore.getInstance().get();\r\n const wineState = this.props.moduleState.getModuleByTypeName('checkout-club-info-collector');\r\n return store.deliveryType === 'PICKUP' && wineState.hasModuleState;\r\n }\r\n\r\n private _initModuleState = (): void => {\r\n let status: statusType = this._canShip() ? 'updating' : 'disabled';\r\n if (this._forceDisable()) {\r\n status = 'disabled';\r\n this._setShippingAddress(this.addressListSelectedAddress); // DG: Force the shipping address to be {} instead of undefined. Undefined breaks API calls.\r\n }\r\n const { request } = this.props.context;\r\n this.props.moduleState.init({\r\n status: status,\r\n onEdit: this.onEdit,\r\n onCancel: this.onCancel,\r\n onSubmit: this.onSubmit\r\n });\r\n\r\n const defaultAddress = this._getDefaultAddress();\r\n if (this._canShip()) {\r\n if (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 } else {\r\n this.props.data.cart.then(() => {\r\n const { cart } = this.props.data;\r\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\r\n // \"GIFT CARD CHECK\"\r\n if (cart && cart.result && cart.result.CartLines && cart.result.CartLines.filter(item => item.DeliveryMode === emailDeliveryModeCode).length === 1) {\r\n if (!defaultAddress) {\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n }\r\n }\r\n }).catch(e => this.props.telemetry.exception(e));\r\n }\r\n\r\n if (this._forceDisable()) { this.props.moduleState.onDisable(); }\r\n };\r\n\r\n // private _setBillingAddress = (newBillingAddress: Address): void => {\r\n // if (this.props.data.checkout.result) {\r\n // this.props.data.checkout.result.updateBillingAddress({newBillingAddress});\r\n // }\r\n // }\r\n\r\n private 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 private onCancel = (): void => {\r\n switch (this.currentOperation) {\r\n case AddressOperation.Add:\r\n case AddressOperation.Update:\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 private 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 private _canShip = (): boolean => {\r\n const { checkout } = this.props.data;\r\n const { request } = this.props.context;\r\n if (!checkout.result || !request.channel || checkout.result.checkoutCart.isEmpty) {\r\n return false;\r\n }\r\n // @ts-ignore: Type-checker not realizing above request.channel check\r\n return checkout.result.checkoutCart.cart.CartLines.some(cartLine => cartLine.DeliveryMode !== request.channel.PickupDeliveryModeCode);\r\n };\r\n\r\n private _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 private _goToAddAddress = () => {\r\n this._setDefaultCountryRegionId();\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n };\r\n\r\n private _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 private _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 // tslint:disable-next-line:no-floating-promises\r\n void this.props.data.checkout.result.updateShippingAddress({ newShippingAddress });\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 private _resetView = (): void => {\r\n switch (this.currentOperation) {\r\n case AddressOperation.Add:\r\n case AddressOperation.Update:\r\n this._updateCurrentOperation(this.addressCommon.isAuthenticatedFlow() ? AddressOperation.List : AddressOperation.Show, this.shippingAddress);\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 _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, { ['ThreeLetterISORegionName']: this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId });\r\n } else if (this.currentOperation === AddressOperation.List) {\r\n this.addressListSelectedAddress = { ...this.selectedAddress } || {};\r\n }\r\n };\r\n\r\n private _updateModuleState = () => {\r\n if (this._forceDisable()) { this.props.moduleState.onDisable(); return; }\r\n if (this.currentOperation === AddressOperation.Show) {\r\n this.props.moduleState.onReady();\r\n } else if (this.isUpdating) {\r\n this.props.moduleState.onPending();\r\n } else {\r\n this.props.moduleState.onUpdating();\r\n }\r\n };\r\n}\r\n\r\nexport default CheckoutShippingAddress;","// tslint:disable:no-reference\n/// \n\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport { ITelemetry } from '@msdyn365-commerce/core';\nimport { IAutoSuggestOptions } from './address-autosuggest.data';\n/**\n *\n * Auto Suggest\n */\nexport class AutoSuggest {\n public readonly excludedAddressFields: string[] = ['ThreeLetterISORegionName', 'Name', 'AddressTypeValue', 'Phone'];\n private telemetry: ITelemetry;\n private countryCode?: string;\n private bingMapsApiKey?: string;\n private defaultLanguageId?: string;\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\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.countryCode,\n market: this.defaultLanguageId\n });\n }\n}","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\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 onClick(event: React.MouseEvent): void;\n}\n\nconst AddressButton: React.FC = ({ className, text, ariaLabel, disabled, telemetryContent, onClick }) => {\n const payLoad = getPayloadObject('click', telemetryContent!, text);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n {text}\n );\n};\n\nexport default AddressButton;\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\nimport { WineClubDataStore } from '../../modules/wine-club-signup/wine-club-data';\r\nimport { AddressInputComponent } from './address-input';\r\n\r\nexport interface IAddressBillingCheckbox {\r\n isChecked: boolean;\r\n value: string;\r\n ariaLabel: string;\r\n text: string;\r\n wineState: boolean;\r\n onChange(event: React.ChangeEvent): void;\r\n}\r\n\r\nconst AddressBillingCheckbox: React.FC = ({\r\n isChecked,\r\n value,\r\n ariaLabel,\r\n text,\r\n wineState,\r\n onChange\r\n}) => {\r\n\r\n const additionalAttributes = {\r\n checked: isChecked,\r\n 'aria-checked': isChecked,\r\n };\r\n\r\n const clubData = WineClubDataStore.getInstance().get();\r\n let shouldShowCheckbox = true;\r\n if (clubData.deliveryType === 'PICKUP' && wineState) {\r\n shouldShowCheckbox = false;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default AddressBillingCheckbox;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAddressBillingHeading {\r\n text: string;\r\n}\r\n\r\nconst IAddressBillingHeadingGenerator: React.FC = ({\r\n text\r\n}) => (\r\n

{text}

\r\n );\r\n\r\nexport default IAddressBillingHeadingGenerator;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport classnames from 'classnames';\r\nimport { computed, observable, reaction, set } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\r\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\r\nimport {\r\n Address, CountryRegionInfo, GiftCard, StateProvinceInfo\r\n} from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { AddressCommon } from '../../common/address-common';\r\nimport { AddressFormat } from '../../common/address-format';\r\nimport { AddressItemType } from '../../common/address-format.data';\r\nimport { AddressMetaData } from '../../common/address-meta-data';\r\nimport {\r\n AddressOperation, AddressType, IAddressResource, IAddressResponse\r\n} from '../../common/address-module.data';\r\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '../../common/components/address-add';\r\nimport AddressBillingCheckoxComponent from '../../common/components/address-billing-checkbox';\r\nimport AddressBillingHeadingComponent from '../../common/components/address-billing-heading';\r\nimport { AddressShow, IAddressShowProps } from '../../common/components/address-show';\r\n\r\nimport { ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport { WineClubDataStore } from '../wine-club-signup/wine-club-data';\r\nimport { ISmweCheckoutBillingAddressData } from './smwe-checkout-billing-address.data';\r\nimport { ISmweCheckoutBillingAddressProps } from './smwe-checkout-billing-address.props.autogenerated';\r\n\r\nexport interface IProps extends ISmweCheckoutBillingAddressProps, IModuleStateProps { }\r\n\r\nexport interface ICheckoutBillingAddressViewState {\r\n isShowAddress: boolean;\r\n isShowAddOrUpdateAddress: boolean;\r\n isShowSameAsShippingCheckbox: boolean;\r\n}\r\n\r\nexport interface ICheckoutBillingAddressViewProps extends IProps {\r\n className: string;\r\n currentOperation: AddressOperation;\r\n selectedAddress?: Address;\r\n addUpdateAddress: Address;\r\n countryRegionId: string;\r\n stateProvinceInfo?: StateProvinceInfo[];\r\n validationError: object;\r\n addressActionResponse?: IAddressResponse;\r\n viewState: ICheckoutBillingAddressViewState;\r\n CheckoutBillingAddress: IModuleProps;\r\n sameAsShippingCheckbox: React.ReactNode;\r\n heading: React.ReactNode;\r\n showAddress: IAddressShowProps;\r\n showAddOrUpdateAddress: IAddressAddUpdateProps;\r\n}\r\n\r\n/**\r\n *\r\n * CheckoutBillingAddress component\r\n * @extends {React.PureComponent>}\r\n */\r\n// @ts-ignore\r\n@withModuleState\r\n@observer\r\nclass CheckoutBillingAddress extends React.Component {\r\n\r\n @observable private currentOperation: AddressOperation;\r\n @observable private isBillingAddressSameAsShipping: boolean;\r\n @observable private selectedAddress?: Address;\r\n @observable private addUpdateAddress: Address;\r\n @observable private countryRegionId: string = 'USA';\r\n @observable private stateProvinceInfo?: StateProvinceInfo[];\r\n @observable private validationError: object;\r\n @observable private addressActionResponse?: IAddressResponse;\r\n\r\n private addressCommon: AddressCommon;\r\n private addressFormat: AddressFormat;\r\n private countryRegions: CountryRegionInfo[];\r\n private customerAccountNumber?: string;\r\n private resources: IAddressResource;\r\n // private addRenderRef: React.RefObject;\r\n\r\n constructor(props: IProps) {\r\n super(props);\r\n const { context, data, resources, telemetry } = this.props;\r\n\r\n this.addUpdateAddress = {};\r\n this.validationError = {};\r\n this.isBillingAddressSameAsShipping = false;\r\n this.resources = resources;\r\n this.currentOperation = AddressOperation.List;\r\n this.customerAccountNumber = context && context.request && context.request.user && context.request.user.customerAccountNumber;\r\n this.countryRegions = data.countryRegions.result || [];\r\n this.stateProvinceInfo = data.countryStates.result || [];\r\n this.addressFormat = new AddressFormat(context, this.countryRegions, new AddressMetaData({ ...resources }));\r\n this.addressCommon = new AddressCommon(context, resources, telemetry, this.customerAccountNumber);\r\n\r\n // this.addRenderRef = React.createRef();\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.props.data.checkout.then(() => {\r\n this._initModuleState();\r\n this._setDefaultCountryRegionId();\r\n }).catch(e => this.props.telemetry.exception(e));\r\n\r\n reaction(\r\n () => this.countryRegionId,\r\n () => this._getStateProvinces()\r\n );\r\n\r\n reaction(\r\n () => this.currentOperation,\r\n () => {\r\n this._getStateProvinces();\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.checkout.result && this.props.data.checkout.result.shippingAddress,\r\n shippingAddress => {\r\n if (this.props.moduleState.isUpdating) {\r\n if (shippingAddress && this.isBillingAddressSameAsShipping) {\r\n this.isBillingAddressSameAsShipping = true;\r\n this._updateCurrentOperation(AddressOperation.Show, shippingAddress);\r\n } else if (shippingAddress && this.isBillingAddressSameAsShipping) {\r\n this._updateCurrentOperation(AddressOperation.Show, shippingAddress);\r\n }\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.isBillingAddressRequried,\r\n isBillingAddressRequried => {\r\n if (isBillingAddressRequried && this.props.moduleState.isDisabled) {\r\n this.onEdit();\r\n } else {\r\n this.props.moduleState.onDisable();\r\n }\r\n }\r\n );\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (!(this.isBillingAddressRequried)) {\r\n return null;\r\n }\r\n\r\n const { resources } = this.props;\r\n\r\n const { renderView, config } = this.props;\r\n\r\n const clubStore = WineClubDataStore.getInstance().get();\r\n const wineState = this.props.moduleState.getModuleByTypeName('checkout-club-info-collector').hasModuleState;\r\n\r\n let isShowSameAsShippingCheckbox = this.isCartContainsItemsForShipping && this.props.moduleState.isUpdating;\r\n if (clubStore.deliveryType === 'PICKUP' && wineState) {\r\n isShowSameAsShippingCheckbox = false;\r\n }\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 countryRegionId: this.countryRegionId,\r\n stateProvinceInfo: this.stateProvinceInfo,\r\n validationError: this.validationError,\r\n addressActionResponse: this.addressActionResponse,\r\n className: config.className,\r\n viewState: {\r\n isShowAddress: this.selectedAddress && this.currentOperation === AddressOperation.Show,\r\n isShowAddOrUpdateAddress: this.currentOperation !== AddressOperation.Show,\r\n isShowSameAsShippingCheckbox: isShowSameAsShippingCheckbox\r\n },\r\n CheckoutBillingAddress: {\r\n moduleProps: this.props,\r\n className: classnames('ms-checkout-billing-address', config.className)\r\n },\r\n heading: ,\r\n // tslint:disable-next-line: max-line-length\r\n sameAsShippingCheckbox: (\r\n \r\n ),\r\n showAddress: this._renderShowAddress(),\r\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress()\r\n };\r\n\r\n return renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private _renderAddOrUpdateAddress = (): IAddressAddUpdateProps => {\r\n return AddressAddUpdate(\r\n {\r\n resources: this.resources,\r\n addressType: AddressType.Billing,\r\n addressFormat: this.addressFormat.getAddressFormat((this.addUpdateAddress.ThreeLetterISORegionName) || this.countryRegionId),\r\n defaultCountryRegionId: this.countryRegionId,\r\n selectedAddress: this.addUpdateAddress,\r\n validationError: this.validationError,\r\n addressActionResponse: this.addressActionResponse,\r\n dropdownDisplayData: this.addressFormat.getPrefilledAddressDropdownData(this.resources.addressStateDefaultSelectionText, this.stateProvinceInfo),\r\n onInputChange: this._onAddressAddUpdateInputChange,\r\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\r\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\r\n onSave: this._onSubmitAddress,\r\n onCancel: this._resetView\r\n }\r\n );\r\n };\r\n\r\n private _renderShowAddress(): IAddressShowProps | null {\r\n if (this.selectedAddress) {\r\n return AddressShow({ address: this.selectedAddress, addressFormat: this.addressFormat.getAddressFormat(this.selectedAddress.ThreeLetterISORegionName || '') });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _onCountryChange = (countryRegionId: string) => {\r\n this.countryRegionId = countryRegionId;\r\n set(this.addUpdateAddress, { ['ThreeLetterISORegionName']: countryRegionId });\r\n };\r\n\r\n private onAddressAddUpdate = (name: string, value: string) => {\r\n set(this.addUpdateAddress, { [name]: value });\r\n };\r\n\r\n private _onAddressAddUpdateInputChange = (event: React.ChangeEvent): void => {\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 private _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 private _getStateProvinces = (): void => {\r\n if (!this.countryRegionId || !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)) {\r\n return;\r\n }\r\n\r\n // tslint:disable-next-line:no-floating-promises\r\n this.addressCommon.getStateProvinces(this.countryRegionId).then(\r\n (result: StateProvinceInfo[]) => {\r\n this.stateProvinceInfo = result;\r\n }).catch(e => this.props.telemetry.exception(e));\r\n };\r\n\r\n private _initModuleState = (): void => {\r\n this.props.moduleState.init({\r\n status: this.isBillingAddressRequried ? '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.isBillingAddressRequried) {\r\n const { checkout } = this.props.data;\r\n const cart = checkout.result && checkout.result.checkoutCart.cart;\r\n if (this.isCartContainsItemsForShipping) {\r\n const clubStore = WineClubDataStore.getInstance().get();\r\n const wineState = this.props.moduleState.getModuleByTypeName('checkout-club-info-collector').hasModuleState;\r\n if (clubStore.deliveryType === 'PICKUP' && wineState) {\r\n this.isBillingAddressSameAsShipping = false;\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n } else {\r\n this.isBillingAddressSameAsShipping = true;\r\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\r\n }\r\n } else if (cart && cart.CartLines && cart.CartLines.filter(item=>item.ItemId==='GIFTCARD').length===1) {\r\n if (this.billingAddress) {\r\n this._updateCurrentOperation(AddressOperation.Show, this.billingAddress);\r\n } else {\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n }\r\n } else {\r\n this.isBillingAddressSameAsShipping = false;\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n }\r\n }\r\n };\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\r\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\r\n }\r\n\r\n private _onBillingAddressSameAsShippingChange = (event: React.ChangeEvent) => {\r\n this.isBillingAddressSameAsShipping = event.currentTarget.checked;\r\n\r\n if (this.isBillingAddressSameAsShipping && this.shippingAddress) {\r\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\r\n } else {\r\n this._updateCurrentOperation(AddressOperation.Add, this.billingAddress);\r\n }\r\n };\r\n\r\n @computed get isCartContainsItemsForShipping(): boolean {\r\n const { request } = this.props.context;\r\n\r\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\r\n return ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).some(cartLine => cartLine.DeliveryMode !== pickupDeliveryModeCode);\r\n }\r\n\r\n @computed get billingAddress(): Address | undefined {\r\n return this.props.data.checkout.result && this.props.data.checkout.result.billingAddress;\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 @computed get getLoyaltyAmount(): number {\r\n const checkoutState = this.props.data.checkout.result;\r\n return checkoutState && checkoutState.loyaltyAmount ? checkoutState.loyaltyAmount : 0;\r\n }\r\n\r\n @computed get getGiftCardTotalAmount(): number {\r\n const checkoutState = this.props.data.checkout.result;\r\n if (!checkoutState || !checkoutState.giftCards) {\r\n return 0;\r\n }\r\n return checkoutState.giftCards.reduce(\r\n (count: number, giftCard: GiftCard) => {\r\n return count + (giftCard.Balance || 0);\r\n },\r\n 0);\r\n }\r\n\r\n @computed get shouldPaidByCard(): boolean {\r\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\r\n if (!cart || !cart.CartLines || !cart.CartLines.length) {\r\n return false;\r\n }\r\n // Use payment card when it is not free or gift card balance + Loyalty amount can not cover the total amount\r\n const amountDue = (cart.TotalAmount || 0) - this.getGiftCardTotalAmount - this.getLoyaltyAmount;\r\n return amountDue > 0;\r\n }\r\n\r\n @computed get isBillingAddressRequried(): boolean {\r\n return this.shouldPaidByCard;\r\n }\r\n\r\n private _onSubmitAddress = (): void => {\r\n const isBilling = true;\r\n if (!this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId, isBilling)) {\r\n this.props.moduleState.setHasError(true);\r\n return;\r\n }\r\n\r\n this._setBillingAddress(this.addUpdateAddress);\r\n this._updateCurrentOperation(AddressOperation.Show, this.addUpdateAddress);\r\n this._updateModuleState();\r\n // tslint:disable-next-line:no-floating-promises\r\n void this.updateCartDeliverySpecification();\r\n };\r\n\r\n private updateCartDeliverySpecification = async(): Promise => {\r\n const { resources } = this.props;\r\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\r\n if(this.props.data.checkout.result?.checkoutCart.cart &&\r\n this.props.data.checkout.result?.checkoutCart.cart.CartLines &&\r\n this.props.data.checkout.result?.checkoutCart.cart.CartLines.length > 0 &&\r\n this.props.data.checkout.result?.checkoutCart.cart.CartLines[0].DeliveryMode) {\r\n const updateCartDeliverySpecificationInput = {\r\n deliveryModeId: this.props.data.checkout.result?.checkoutCart.cart.CartLines[0].DeliveryMode || '',\r\n shippingAddress: checkoutState.shippingAddress\r\n };\r\n await checkoutState.checkoutCart.updateCartDeliverySpecification(updateCartDeliverySpecificationInput)\r\n .then((response) => {\r\n if (\r\n response.status === 'FAILED' &&\r\n response.substatus === 'NOCONTENT' &&\r\n this._containsOnlyGifts()\r\n ) {\r\n this.onReady();\r\n return;\r\n }\r\n if (response.status === 'FAILED') {\r\n this.setError(resources.addressGenericErrorMessage);\r\n } else {\r\n this.onReady();\r\n }\r\n })\r\n .catch(\r\n () => {\r\n this.setError(resources.addressGenericErrorMessage);\r\n }\r\n );\r\n }\r\n };\r\n\r\n private async _containsOnlyGifts(): Promise {\r\n const cart = await this.props.data.checkout;\r\n const emailCode = this.props.context.request.channel?.EmailDeliveryModeCode;\r\n const nonDigitalItems = cart.checkoutCart.cart.CartLines?.filter(line => line.DeliveryMode !== emailCode);\r\n return nonDigitalItems?.length === 0;\r\n }\r\n\r\n private onReady = () => {\r\n this.props.moduleState.onReady();\r\n };\r\n\r\n private setError = (errorMessage: string): void => {\r\n this.props.telemetry.error(errorMessage);\r\n this.props.moduleState.setHasError(true);\r\n this.props.moduleState.onUpdating();\r\n };\r\n\r\n private onSubmit = (): void => {\r\n switch (this.currentOperation) {\r\n case AddressOperation.Add:\r\n case AddressOperation.Update:\r\n this._onSubmitAddress();\r\n break;\r\n case AddressOperation.Show:\r\n if (this.selectedAddress) {\r\n this._setBillingAddress(this.selectedAddress);\r\n this._updateCurrentOperation(AddressOperation.Show, this.selectedAddress);\r\n this._updateModuleState();\r\n // tslint:disable-next-line:no-floating-promises\r\n void this.updateCartDeliverySpecification();\r\n }\r\n break;\r\n default:\r\n // tslint:disable-next-line:no-floating-promises\r\n void this.updateCartDeliverySpecification();\r\n this.props.telemetry.error('Invalid operation');\r\n }\r\n };\r\n\r\n private onCancel = (): void => {\r\n switch (this.currentOperation) {\r\n case AddressOperation.Add:\r\n case AddressOperation.Update:\r\n this._resetView();\r\n break;\r\n case AddressOperation.Show:\r\n // @ts-ignore: Compiler not reconizing property form extending class\r\n this._resetView();\r\n break;\r\n default:\r\n this.props.telemetry.error('Invalid operation');\r\n }\r\n };\r\n\r\n private onEdit = (): void => {\r\n if (this.isBillingAddressSameAsShipping && this.shippingAddress && this.isCartContainsItemsForShipping) {\r\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\r\n } else {\r\n this._updateCurrentOperation(AddressOperation.Add, this.billingAddress);\r\n }\r\n this.props.moduleState.onUpdating();\r\n };\r\n\r\n private _setBillingAddress = (address: Address): void => {\r\n if (this.props.data.checkout.result) {\r\n // tslint:disable-next-line: no-floating-promises\r\n void this.props.data.checkout.result.updateBillingAddress({ newBillingAddress: address });\r\n }\r\n };\r\n\r\n private _resetView = () => {\r\n this._updateCurrentOperation(AddressOperation.Show, this.billingAddress);\r\n this._updateModuleState();\r\n };\r\n\r\n private _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, { ['ThreeLetterISORegionName']: this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId });\r\n }\r\n };\r\n\r\n private _updateModuleState = () => {\r\n if (this.currentOperation === AddressOperation.Show) {\r\n this.props.moduleState.onReady();\r\n } else {\r\n this.props.moduleState.onUpdating();\r\n }\r\n };\r\n}\r\n\r\nexport default CheckoutBillingAddress;\r\n","import { ICoreContext } from '@msdyn365-commerce/core-internal';\r\nimport { wineClubShippingLabels } from '../../settings/app.settings';\r\n\r\nexport type WineClubDataRef = {\r\n variantPreference: string | null;\r\n forMyself: boolean | null;\r\n deliveryType: DeliveryType;\r\n clubId: number | null;\r\n tosAgree: boolean;\r\n pickupLocationId?: string;\r\n};\r\n\r\nexport type DeliveryType = 'STANDARD' | 'PREMIUM' | 'PICKUP';\r\nexport type DeletableKeys = 'variantPreference' | 'forMyself' | 'deliveryType' | 'clubId' | 'tosAgree' | 'pickupLocationId';\r\n\r\n/**\r\n * singleton class responsible for the users selections\r\n */\r\nexport class WineClubDataStore {\r\n private static instance: WineClubDataStore;\r\n\r\n private readonly LOCAL_STORAGE_LOCATION: string = 'WINE-CLUB-SELECTIONS';\r\n\r\n private wineClubData!: WineClubDataRef;\r\n\r\n private changeEvents: ((newData: WineClubDataRef) => void)[] = [];\r\n\r\n /**\r\n * get the current pages data\r\n * @returns singleton data of data store\r\n */\r\n public static getInstance(onChange?: (newData: WineClubDataRef) => void): WineClubDataStore {\r\n if (!WineClubDataStore.instance) {\r\n WineClubDataStore.instance = new WineClubDataStore();\r\n }\r\n\r\n if (onChange) {\r\n WineClubDataStore.instance.changeEvents.push(onChange);\r\n }\r\n\r\n return WineClubDataStore.instance;\r\n }\r\n\r\n // tslint:disable-next-line: no-any\r\n public getDeliveryMapFromConfig(coreContext: ICoreContext<{ [x: string]: any }>): {\r\n standard: string; premium: string; pickup: string;\r\n } {\r\n const config = coreContext.app.config.wineClubShippingLabels || {};\r\n return {\r\n standard: config.standard,\r\n pickup: config.pickup,\r\n premium: config.premium\r\n };\r\n }\r\n\r\n public edit(newData: WineClubDataRef): void {\r\n this.wineClubData = newData;\r\n this.changeEvents.forEach(event => event(newData));\r\n this._save();\r\n }\r\n\r\n public get(): WineClubDataRef {\r\n return { ...this.wineClubData };\r\n }\r\n\r\n public deleteKeys(...keys: DeletableKeys[]): void {\r\n keys.forEach(key => delete this.wineClubData[key]);\r\n this.changeEvents.forEach(event => event(this.wineClubData));\r\n this._save();\r\n }\r\n\r\n public reset(): WineClubDataStore {\r\n this.wineClubData = {\r\n deliveryType: 'STANDARD',\r\n tosAgree: false,\r\n forMyself: null,\r\n clubId: null,\r\n variantPreference: null\r\n };\r\n this.changeEvents.forEach(event => event(this.wineClubData));\r\n this._save();\r\n return this;\r\n }\r\n\r\n public isInResetState(): boolean {\r\n const {\r\n deliveryType,\r\n tosAgree,\r\n forMyself,\r\n clubId,\r\n variantPreference\r\n } = this.wineClubData;\r\n\r\n return deliveryType === 'STANDARD' &&\r\n tosAgree === false &&\r\n forMyself === null &&\r\n clubId === null &&\r\n variantPreference === null;\r\n }\r\n\r\n private constructor() {\r\n // tslint:disable-next-line: no-typeof-undefined\r\n if (typeof window !== 'undefined') {\r\n const previousWineData = window && window.localStorage.getItem(this.LOCAL_STORAGE_LOCATION);\r\n\r\n if (!previousWineData) {\r\n this.reset();\r\n return;\r\n }\r\n\r\n this.wineClubData = JSON.parse(previousWineData);\r\n }\r\n }\r\n\r\n private _save(): void {\r\n // tslint:disable-next-line: no-typeof-undefined\r\n if (typeof window !== 'undefined') {\r\n window.localStorage.setItem(this.LOCAL_STORAGE_LOCATION, JSON.stringify(this.wineClubData));\r\n }\r\n }\r\n}","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressAlert {\r\n message?: string;\r\n}\r\n\r\nconst AdressAlert: React.FC = ({ message }) => (\r\n \r\n {\r\n message &&\r\n <>\r\n {message}\r\n \r\n }\r\n \r\n);\r\n\r\nexport default AdressAlert;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressDropdown {\r\n id: string;\r\n name: string;\r\n className: string;\r\n value: string;\r\n additionalAddributes?: object;\r\n displayData: { key?: string; value?: string; disabled?: boolean }[];\r\n onChange(event: React.ChangeEvent): void;\r\n}\r\n\r\nconst getDropdownItem = (key?: string, value?: string, disabled?: boolean, selectedValue?: string): React.ReactNode => {\r\n const isSelected = (key || '').toLowerCase() === (selectedValue || '').toLowerCase();\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst AdressDropdown: React.FC = ({\r\n id,\r\n name,\r\n className,\r\n value,\r\n additionalAddributes,\r\n displayData,\r\n onChange\r\n}) => (\r\n \r\n {displayData && displayData.map(item =>\r\n (\r\n getDropdownItem(item.key, item.value, item.disabled, value)\r\n ))\r\n }\r\n \r\n );\r\n\r\nexport default AdressDropdown;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressLabel {\r\n id: string;\r\n text: string;\r\n}\r\n\r\nconst AdressLabel: React.FC = ({\r\n id,\r\n text\r\n}) => (\r\n \r\n );\r\n\r\nexport default AdressLabel;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport classname from 'classnames';\r\nimport { get } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { Heading as HeadingData } from '@msdyn365-commerce-modules/data-types';\r\nimport { Heading, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { Address } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { AddressType, IAddressResource, IAddressResponse } from '../../common/address-module.data';\r\nimport { AddressFields } from '../../common/address.fields';\r\nimport {\r\n AddressItemDisplayType, AddressItemType, AddressValidationRuleType, IAddressDropdownsData,\r\n IAddressItem, IAddressValidationRule\r\n} from '../address-format.data';\r\nimport AddressAlertComponent from './address-alert';\r\nimport AddressButtonComponent from './address-button';\r\nimport AdressDropdownComponent from './address-dropdown';\r\nimport AddressErrorMessageComponent from './address-error-message';\r\nimport AddressErrorTitleComponent from './address-error-title';\r\nimport { AddressInputComponent } from './address-input';\r\nimport AddressLabelComponent from './address-label';\r\n\r\nexport interface IAddressAddInputProps {\r\n isUpdating?: boolean;\r\n hasError?: boolean;\r\n hasExternalSubmitGroup?: boolean;\r\n addressType: AddressType;\r\n addressFormat: IAddressItem[];\r\n defaultCountryRegionId: string;\r\n selectedAddress?: Address;\r\n dropdownDisplayData: IAddressDropdownsData;\r\n resources: IAddressResource;\r\n addressActionResponse?: IAddressResponse;\r\n addAddressHeading?: HeadingData;\r\n editAddressHeading?: HeadingData;\r\n validationError?: object;\r\n onInputChange(event: React.ChangeEvent): void;\r\n onDropdownChange(event: React.ChangeEvent): void;\r\n onSave(): void;\r\n onCancel(): void;\r\n}\r\n\r\nexport interface IAddressError {\r\n AddressError: INodeProps;\r\n title: React.ReactNode;\r\n message: React.ReactNode;\r\n}\r\n\r\nexport interface IAddressAddItem {\r\n key: string;\r\n AddressItem: INodeProps;\r\n label: React.ReactNode;\r\n alert: React.ReactNode;\r\n input: React.ReactNode;\r\n}\r\n\r\nexport interface IAddressAddUpdateProps {\r\n AddressForm: INodeProps;\r\n heading: React.ReactNode;\r\n items: IAddressAddItem[];\r\n hasError: boolean;\r\n error: IAddressError;\r\n isShowSaveButton: boolean;\r\n saveButton: React.ReactNode;\r\n isShowCancelButton: boolean;\r\n cancelButton: React.ReactNode;\r\n}\r\n\r\nconst getRequriedAttribute = (validationRules?: IAddressValidationRule[]): object => {\r\n const requriedRule = (validationRules || []).find(validationRule => {\r\n return validationRule.type === AddressValidationRuleType.Required;\r\n });\r\n\r\n return requriedRule ? { 'aria-required': true } : {};\r\n};\r\n\r\nfunction getLabelText (item: IAddressItem, isShipping: boolean): string {\r\n let labelText = item.label.replace(' *required', '');\r\n if (item.name === AddressFields.Street) { labelText = 'Street Address'; }\r\n if (isShipping && item.name === AddressFields.State) { labelText = 'State (not available in all states)'; }\r\n return labelText;\r\n}\r\n\r\nfunction getPlaceholderText (name: string): string {\r\n let placeholderText = '';\r\n if (name === AddressFields.Name) { placeholderText = 'First and last name'; }\r\n if (name === AddressFields.Street) { placeholderText = 'Enter a valid delivery address'; }\r\n return placeholderText;\r\n}\r\n\r\nconst getAddressItems = (selectedAddress: Address, props: IAddressAddInputProps): IAddressAddItem[] => {\r\n const { addressFormat, addressType, dropdownDisplayData, defaultCountryRegionId, validationError = {}, onInputChange, onDropdownChange } = props;\r\n\r\n function getWarningMessage (name: string, value: string): string | void {\r\n if (addressType !== AddressType.Shipping) {\r\n return;\r\n }\r\n if (name === AddressFields.Name) {\r\n const regex = /^([a-zA-Z]{2,}\\s[a-zA-Z]{1,}'?-?[a-zA-Z]{1,}\\s?([a-zA-Z]{1,})?)$/;\r\n if (!regex.test(value) && value.length > 0) {\r\n return 'Make sure you entered your first and last name';\r\n }\r\n }\r\n if (name === AddressFields.Street) {\r\n const regex = /^ *((#\\d+)|((box|bin)[-. \\/\\\\]?\\d+)|(.*p[ \\.]? ?(o|0)[-. \\/\\\\]? *-?((box|bin)|b|(#|num)?\\d+))|(p(ost)? *(o(ff(ice)?)?)? *((box|bin)|b)? *\\d+)|(p *-?\\/?(o)? *-?box)|post office box|((box|bin)|b) *(number|num|#)? *\\d+|(num|number|#) *\\d+)/i;\r\n if (regex.test(value)) {\r\n return 'PO Box is not a valid delivery address';\r\n }\r\n }\r\n }\r\n\r\n // @ts-ignore\r\n return addressFormat.map((addressFormatItem) => {\r\n const elementId = `${addressType.toLowerCase()}_address${addressFormatItem.name.toLowerCase()}`;\r\n const errorMessage = get(validationError, addressFormatItem.name);\r\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 });\r\n let input;\r\n\r\n if (addressFormatItem.displayType === AddressItemDisplayType.Input) {\r\n input = (\r\n \r\n );\r\n } else {\r\n const displayData = dropdownDisplayData[addressFormatItem.name];\r\n let selectedValue = selectedAddress[addressFormatItem.name];\r\n\r\n if (addressFormatItem.type === AddressItemType.ThreeLetterISORegionName) {\r\n selectedValue = selectedValue || defaultCountryRegionId;\r\n }\r\n input = (\r\n \r\n );\r\n }\r\n\r\n if (addressType === AddressType.Shipping && addressFormatItem.name === AddressFields.Country) {\r\n return {\r\n key: addressFormatItem.name,\r\n AddressItem: { className: className },\r\n label: null,\r\n alert: null,\r\n input: null\r\n };\r\n }\r\n\r\n return {\r\n key: addressFormatItem.name,\r\n AddressItem: { className: className },\r\n label: ,\r\n alert: ,\r\n input: input\r\n };\r\n });\r\n};\r\n\r\nexport const AddressAddUpdate = (props: IAddressAddInputProps): IAddressAddUpdateProps => {\r\n const { editAddressHeading, addAddressHeading, selectedAddress = {}, resources, hasError, onCancel, onSave, hasExternalSubmitGroup, isUpdating, addressActionResponse } = props;\r\n const heading = selectedAddress.RecordId ? editAddressHeading : addAddressHeading;\r\n\r\n return {\r\n AddressForm: { className: 'msc-address-form' },\r\n heading: heading && ,\r\n items: getAddressItems(selectedAddress, props),\r\n isShowSaveButton: !hasExternalSubmitGroup,\r\n saveButton: (\r\n \r\n ),\r\n isShowCancelButton: !hasExternalSubmitGroup,\r\n cancelButton: (\r\n \r\n ),\r\n hasError: hasError || false,\r\n error: {\r\n AddressError: { className: 'msc-address-form__error' },\r\n title: addressActionResponse && addressActionResponse.errorTitle && ,\r\n message: addressActionResponse && addressActionResponse.errorMessage && \r\n }\r\n };\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport { IAddressAddItem, IAddressAddUpdateProps } from '../../common/components/address-add';\r\nimport { IAddressShowItem, IAddressShowProps } from '../../common/components/address-show';\r\nimport { ICheckoutBillingAddressViewProps } from './smwe-checkout-billing-address';\r\n\r\nconst AddressShow: React.FC = ({\r\n AddressDetail,\r\n items\r\n}) => {\r\n\r\n return (\r\n \r\n {items && items.map((item: IAddressShowItem) => {\r\n return (\r\n <>\r\n {item.description}\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst AddressAddUpdate: React.FC = ({\r\n AddressForm,\r\n heading,\r\n items,\r\n hasError,\r\n error,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton,\r\n}) => {\r\n\r\n return (\r\n \r\n {heading}\r\n {items && items.map((item: IAddressAddItem) => {\r\n const { AddressItem, key, label, alert, input } = item;\r\n return (\r\n {label}\r\n {alert}\r\n {input}\r\n );\r\n })}\r\n {hasError && \r\n {error.title}\r\n {error.message}\r\n }\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n \r\n );\r\n};\r\n\r\nconst CheckoutBillingAddressView: React.FC = props => {\r\n const { CheckoutBillingAddress, viewState, heading, sameAsShippingCheckbox, showAddress, showAddOrUpdateAddress } = props;\r\n\r\n return (\r\n \r\n {heading}\r\n {viewState.isShowSameAsShippingCheckbox && sameAsShippingCheckbox}\r\n {viewState.isShowAddress && }\r\n {viewState.isShowAddOrUpdateAddress && }\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutBillingAddressView;\r\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nexport interface IAdressErrorTitle {\n title: string;\n}\n\nconst AdressErrorTitle: React.FC = ({ title }) => (\n

\n {title}\n

\n);\n\nexport default AdressErrorTitle;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy';\nimport classnames from 'classnames';\nimport { observable, set } from 'mobx';\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\nexport interface IBusinessAccountAddressExtendedProps extends IBusinessAccountAddressProps {\n hasError: boolean;\n isRequired: boolean;\n resetAddress: boolean;\n updateForm(errors: boolean, currentAddress?: Address): void;\n}\n\nexport interface IBusinessAccountAddressState {\n countryId?: string;\n states?: StateProvinceInfo[];\n}\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 @observable private countryRegionId: string = 'USA';\n @observable private stateProvinceInfo?: StateProvinceInfo[];\n @observable private validationError: object;\n\n private addressActionResponse?: IAddressResponse;\n private isUpdating?: boolean;\n private addressCommon: AddressCommon;\n private addressFormat: AddressFormat;\n private countryRegions: CountryRegionInfo[];\n private addressPurposes: AddressPurpose[];\n private resources: IAddressResource;\n private defaultAddressType: number = 8; // Default to Business\n private excludedList: AddressItemType[] = [AddressItemType.Name, AddressItemType.AddressTypeValue, AddressItemType.IsPrimary]; // Default to hiding Name and AddressType inputs\n private telemetryContent: ITelemetryContent;\n\n 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(this.countryRegions, new AddressMetaData({ ...resources }, this.excludedList, props.isRequired ? undefined : []), this.addressPurposes);\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 this._setDefaultCountryRegionId();\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: 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 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 // 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 private _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 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 private _onAddressAddUpdateInputChange = (event: React.ChangeEvent): void => {\n this._updateAddress(event.target.name, event.target.value);\n };\n\n private _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 private _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, new AddressMetaData({ ...resources }, this.excludedList, undefined), this.addressPurposes);\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 // walk through array and check if valued is defined or value is not an empty string\n private _isEmpty = () => {\n const addressFormat = this.addressFormat.getAddressFormat(this.countryRegionId);\n for (let i = 0; i < addressFormat.length; i ++) {\n const addressFormatItem = addressFormat[i];\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 private _isInputRequired = (addressFormatItem: IAddressItem): boolean => {\n if (addressFormatItem === null || !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 && request.channel && request.channel.ChannelCountryRegionISOCode;\n\n // tslint:disable: no-floating-promises\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 private _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 // 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 * Licensed under the MIT License. See License.txt in the project root for license information.\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\nconst AddressDetailItem: React.FC = ({\n isNewLine,\n isShowLabel,\n labelText,\n name,\n value\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 {labelText}\n \n \n }\n {value}\n \n );\n};\n\nexport default AddressDetailItem;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport { Address, AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { AddressItemType, IAddressItem } from '../../common/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};","import {\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 metaData: IAddressItem[] = [];\n private resources: IAddressResource;\n private requiredFieldRegEx: string = '\\\\S';\n private resourcesPrefix: string = 'address';\n private maxLength: number = 64;\n private requiredFields: AddressItemType[];\n private 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);\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.District, 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): 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);\n let isRequired = false;\n validationRules.forEach(rule => {\n if (rule.type === AddressValidationRuleType.Required) {\n isRequired = true;\n }\n });\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: validationRules,\n isNewLine: true\n };\n\n this.metaData.push(item);\n }\n\n private _validationRules(type: AddressItemType, name: 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 = 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 default:\n }\n }\n return validationRules;\n }\n\n private _validationRule(type: AddressValidationRuleType, regEx: string, message: string): IAddressValidationRule {\n return {\n type,\n regEx,\n message\n };\n }\n\n}","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CacheType, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { IModuleStates } from './module-state.data';\n\n/**\n * GetModulesInput\n */\nexport class ModuleStatesCacheKey implements IActionInput {\n public getCacheKey = () => 'ModuleState';\n public getCacheObjectType = () => 'ModuleState';\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport function getModuleStates(ctx: IActionContext): IModuleStates {\n const cacheKey = new ModuleStatesCacheKey();\n\n // @ts-ignore\n let moduleStates = ctx.get(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n if (moduleStates) {\n return moduleStates;\n }\n ctx.update(cacheKey, {});\n moduleStates = ctx.get(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n return moduleStates;\n}\n\nexport function updateModuleStates(value: IModuleStates, ctx: IActionContext): void {\n const cacheKey = new ModuleStatesCacheKey();\n ctx.update(cacheKey, value);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { IModule } from '@msdyn365-commerce/core';\nimport isMatch from 'lodash/isMatch';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\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 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 render(): JSX.Element | null {\n const { id } = this.props;\n return ;\n }\n\n private 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 */\n private 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 => this.update(id, { isRequired: value }),\n setIsCancellable: (value: boolean): void => this.update(id, { isCancellable: value }),\n setIsSubmitContainer: (value: boolean): void => this.update(id, { isSubmitContainer: value }),\n setHasError: (value: boolean): void => this.update(id, { hasError: value }),\n onReady: (): void => this.update(id, { status: 'ready' }),\n onUpdating: (): void => this.update(id, { status: 'updating' }),\n onPending: (): void => this.update(id, { status: 'pending' }),\n onSkip: (): void => this.update(id, { status: 'skipped' }),\n onDisable: (): void => this.update(id, { status: 'disabled' }),\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 */\n private 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 get = (): IModuleStates => {\n return getModuleStates(this.props.context.actionContext);\n };\n\n /**\n * Update\n * Update module state\n */\n private 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 _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 _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) {\n return this._validateLeaf(id, source);\n }\n\n // It is container module\n const method = allMatched ? 'every' : 'some';\n return module.childIds[method](childId => this._validateContainer(childId, source, allMatched, skipSkippableItem));\n };\n\n /**\n * Validate\n * Validate current module and all its child module match the provided condition\n */\n private 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) {\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 hasExternalSubmitGroup = (): boolean => {\n return !!this.props.enableControl;\n };\n\n /**\n * hasModuleState\n * Module is using module state manager\n */\n private 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;","\r\n/**\r\n * Enum describing the names of the various Address Input fields\r\n */\r\nexport enum AddressFields {\r\n Name = 'Name',\r\n Street = 'Street',\r\n City = 'City',\r\n State = 'State',\r\n ZipCode = 'ZipCode',\r\n Phone = 'Phone',\r\n Country = 'ThreeLetterISORegionName'\r\n}","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\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\nconst AddressShow: React.FC = ({\n AddressDetail,\n items\n}) => {\n\n return (\n \n {items && items.map((item: IAddressShowItem) => {\n return (\n <>\n {item.description}\n \n );\n })}\n \n );\n};\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 && 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\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\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 && 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\nconst AccountManagementAddressView: React.FC = props => {\n const { AccountAddressManagement, viewState, showAddressList, showAddOrUpdateAddress } = props;\n\n return (\n \n {viewState.isShowAddresList && }\n {viewState.isShowAddOrUpdateAddress && }\n \n );\n};\n\nexport default AccountManagementAddressView;\n","export 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 District = 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}","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressErrorTitle {\r\n title: string;\r\n}\r\n\r\nconst AdressErrorTitle: React.FC = ({ title }) => (\r\n

\r\n {title}\r\n

\r\n);\r\n\r\nexport default AdressErrorTitle;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport classname from 'classnames';\r\nimport * as React from 'react';\r\n\r\nexport interface IAddressDetailItem {\r\n isNewLine: boolean;\r\n isShowLabel: boolean;\r\n labelText: string;\r\n name: string;\r\n value: string;\r\n}\r\n\r\nconst AddressDetailItem: React.FC = ({\r\n isNewLine,\r\n isShowLabel,\r\n labelText,\r\n name,\r\n value\r\n}) => {\r\n const className = `msc-address-detail__item msc-address-detail__item-${name.toLowerCase()}`;\r\n const isEmpty = !(value && value.length > 0);\r\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 });\r\n value = (name.toLowerCase() === 'phone') ? _formatPhoneNumber(value) : value;\r\n return (\r\n \r\n {\r\n isShowLabel && <>\r\n {labelText}\r\n \r\n \r\n }\r\n {value}\r\n \r\n );\r\n};\r\n\r\nfunction _formatPhoneNumber(phoneNumberString: string): string {\r\n const cleaned = phoneNumberString.replace(/\\D/g, '');\r\n const match = cleaned.match(/^(1|)?(\\d{3})(\\d{3})(\\d{4})$/);\r\n if (match) {\r\n const intlCode = (match[1] ? '+1-' : '');\r\n return [intlCode, match[2], '-', match[3], '-', match[4]].join('');\r\n }\r\n return '';\r\n}\r\n\r\nexport default AddressDetailItem;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport { Address } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { AddressItemType, IAddressItem } from '../../common/address-format.data';\r\nimport AddressDetailItemComponent from './address-detail-item';\r\n\r\nexport interface IAddressShowItem {\r\n key: string;\r\n description: React.ReactNode;\r\n}\r\n\r\nexport interface IAddressShowProps {\r\n AddressDetail: INodeProps;\r\n items: IAddressShowItem[];\r\n}\r\n\r\nexport interface IAddressShowInputProps {\r\n addressFormat: IAddressItem[];\r\n address: Address;\r\n}\r\n\r\nexport const AddressShow = (props: IAddressShowInputProps): IAddressShowProps => {\r\n const { addressFormat, address } = props;\r\n\r\n return {\r\n AddressDetail: { className: 'msc-address-detail' },\r\n items: addressFormat.map((item) => {\r\n return {\r\n key: item.name,\r\n description: \r\n };\r\n })\r\n };\r\n};","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nimport { INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { Address, AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { AddressFormat } from '../../common/address-format';\nimport { IAddressResource } from '../../common/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 } = 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 };\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: address, addressPurposes: 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 * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport classnames from 'classnames';\nimport { action, computed, observable, reaction, set } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n getTelemetryObject, IModuleProps, ITelemetryContent\n} from '@msdyn365-commerce-modules/utilities';\nimport {\n Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo\n} from '@msdyn365-commerce/retail-proxy';\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 {\n AddressOperation, AddressType, IAddressResource, IAddressResponse\n} 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';\n\nexport interface ICheckoutAddressProps extends ICheckoutShippingAddressProps, IModuleStateProps { }\n\nexport interface ICheckoutShippingAddressViewState {\n isShowAddress: boolean;\n isShowAddresList: boolean;\n isShowAddOrUpdateAddress: boolean;\n}\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 showAddressSelect: IAddressSelectProps;\n showAddOrUpdateAddress: IAddressAddUpdateProps;\n}\n\n/**\n *\n * Address component\n * @extends {React.Component>}\n */\n// @ts-ignore\n@withModuleState\n@observer\nclass CheckoutShippingAddress extends React.Component {\n @observable private currentOperation: AddressOperation;\n @observable private selectedAddress?: Address;\n @observable private addUpdateAddress: Address;\n @observable private countryRegionId: string = 'USA';\n @observable private stateProvinceInfo?: StateProvinceInfo[];\n @observable private customerAddresses: Address[];\n @observable private validationError: object;\n @observable private addressActionResponse?: IAddressResponse;\n @observable private isUpdating?: boolean;\n @observable private hasError?: boolean;\n @observable private addressListSelectedAddress: Address = {};\n\n private addressCommon: AddressCommon;\n private addressFormat: AddressFormat;\n private countryRegions: CountryRegionInfo[];\n private addressPurposes: AddressPurpose[];\n private resources: IAddressResource;\n private defaultAddressType: number = 6; // Default to Home\n private telemetryContent?: ITelemetryContent;\n private autoSuggest?: AutoSuggest;\n private multiplePickupStoreSwitchName: string = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n constructor(props: ICheckoutAddressProps) {\n super(props);\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(this.countryRegions, new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()), 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 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 } = this.props;\n\n this.props.data.checkout.then(() => {\n this._setDefaultCountryRegionId();\n this._initModuleState();\n });\n\n reaction(\n () => this.countryRegionId,\n () => this._getStateProvinces()\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 // 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 }\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 render(): JSX.Element | null {\n if (!this._canShip()) {\n return null;\n }\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 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 showAddressSelect: this._renderSelectAddress(),\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress()\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n\n private _renderAddOrUpdateAddress = (): IAddressAddUpdateProps => {\n const addressFormat = this.currentOperation === AddressOperation.Add && this.addressCommon.isAuthenticatedFlow() ? this.addressFormat : this.addressFormat;\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 onSave: this.onSubmit,\n // tslint:disable-next-line: no-empty\n onCancel: !this.selectedAddress && !this.addressCommon.isAuthenticatedFlow() ? () => { } : this._resetView\n });\n };\n\n private _renderSelectAddress = (): IAddressSelectProps => {\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 onAddAddress: this._goToAddAddress,\n onSave: this._onSelectAddress,\n // tslint:disable-next-line: no-empty\n onCancel: !this.selectedAddress ? () => { } : this._resetView\n });\n };\n\n private _renderShowAddress(): IAddressShowProps | null {\n if (this.selectedAddress) {\n return AddressShow({\n address: this.selectedAddress,\n addressFormat: this.addressFormat.getAddressFormat(this.selectedAddress.ThreeLetterISORegionName || ''),\n addressPurposes: this.addressPurposes\n });\n }\n\n return null;\n }\n\n private _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 @action\n private _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 // 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 @action\n private _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 @action\n private _clearValidation = (): void => {\n this.validationError = {};\n }\n\n private _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 private 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 private _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 private _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 private _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\n ? this.addressCommon.updateCustomerAddress(this.addUpdateAddress)\n : this.addressCommon.addCustomerAddress(this.addUpdateAddress);\n } else {\n response = Promise.resolve({ address: this.addUpdateAddress });\n }\n\n this.isUpdating = true;\n this._updateModuleState();\n\n response.then(\n (result: IAddressResponse) => {\n this.isUpdating = false;\n\n if (result.address) {\n this.hasError = false;\n this._onAddOrUpdateSuccess(result);\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 private _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 private _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 private _getStateProvinces = (): void => {\n if (\n !this.countryRegionId ||\n !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\n ) {\n return;\n }\n\n // tslint:disable-next-line:no-floating-promises\n this.addressCommon.getStateProvinces(this.countryRegionId).then((result: StateProvinceInfo[]) => {\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\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 private _setDefaultCountryRegionId(): void {\n const { request } = this.props.context;\n const market = request && request.channel && request.channel.ChannelCountryRegionISOCode;\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\n }\n\n private _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 private _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 if (this._canShip()) {\n const defaultAddress = this._getShippingAddressFromCartLines() || this._getDefaultAddress();\n if (defaultAddress && !this.addressCommon.isEmpty(defaultAddress)) {\n this._updateCurrentOperation(AddressOperation.Show, defaultAddress);\n this._setShippingAddress(defaultAddress);\n this._updateModuleState();\n } else {\n this._updateCurrentOperation(AddressOperation.Add);\n }\n }\n };\n\n private 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 private 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 private 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 private _getShippingAddressFromCartLines = (): Address | undefined => {\n const { request } = this.props.context;\n const { channelDeliveryOptionConfig } = this.props.data;\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\n\n const cartLines = this.retailMultiplePickUpOptionEnabled ?\n ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(\n cartLine => (cartLine.DeliveryMode && cartLine.DeliveryMode !== '')\n ? (cartLine.DeliveryMode !== channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.find(deliveryMode => deliveryMode === cartLine.DeliveryMode) && cartLine.DeliveryMode !== emailDeliveryModeCode)\n : cartLine\n ):\n ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(\n cartLine => (cartLine.DeliveryMode && cartLine.DeliveryMode !== '')\n ? (cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode)\n : cartLine\n );\n\n if (cartLines && cartLines.length > 0) {\n return cartLines[0].ShippingAddress;\n }\n\n return undefined;\n };\n\n private _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-ignore: Type-checker not realizing above request.channel check\n return this.retailMultiplePickUpOptionEnabled?\n checkout?.result?.checkoutCart?.cart?.CartLines?.some(\n cartLine => (cartLine.DeliveryMode && cartLine.DeliveryMode !== '')\n ? (cartLine.DeliveryMode !== channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.find(deliveryMode => deliveryMode === cartLine.DeliveryMode) && cartLine.DeliveryMode !== emailDeliveryModeCode)\n : cartLine\n )\n : checkout?.result?.checkoutCart?.cart?.CartLines?.some(\n cartLine => (cartLine.DeliveryMode && cartLine.DeliveryMode !== '')\n ? (cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode)\n : cartLine\n );\n };\n\n private _onSelectAddress = () => {\n this._updateCurrentOperation(AddressOperation.Show, this.addressListSelectedAddress);\n this._setShippingAddress(this.addressListSelectedAddress);\n this._updateModuleState();\n };\n\n private _goToAddAddress = () => {\n this._setDefaultCountryRegionId();\n this._updateCurrentOperation(AddressOperation.Add);\n };\n\n private _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 private _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 // tslint:disable-next-line:no-floating-promises\n this.props.data.checkout.result.updateShippingAddress({ newShippingAddress });\n }\n };\n\n @computed get shippingAddress(): Address | undefined {\n return this.props.data.checkout.result && this.props.data.checkout.result.shippingAddress;\n }\n\n private _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 private _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 private _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","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { get, set } from 'mobx';\r\n\r\nimport {\r\n Address, CountryRegionInfo, StateProvinceInfo\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { AddressFields } from './address.fields';\r\n\r\nimport {\r\n AddressItemType, IAddressDropdownsData, IAddressItem, IAddressValidationRule\r\n} from './address-format.data';\r\nimport { AddressMetaData } from './address-meta-data';\r\n\r\n/**\r\n *\r\n * Retail Service Address format parser\r\n */\r\nexport class AddressFormat {\r\n private countryRegionsInfo?: CountryRegionInfo[];\r\n private addressMetaData: AddressMetaData;\r\n private context: ICoreContext;\r\n\r\n constructor(context: ICoreContext, countryRegionsInfo: CountryRegionInfo[], addressMetaData: AddressMetaData) {\r\n this.countryRegionsInfo = countryRegionsInfo;\r\n this.addressMetaData = addressMetaData;\r\n this.context = context;\r\n }\r\n\r\n public getAddressFormat(countryRegionId: string): IAddressItem[] {\r\n const countryRegionInfo = this._getCountryRegionInfo(countryRegionId);\r\n if (countryRegionInfo) {\r\n return this._getAddressDisplayFormat(countryRegionInfo);\r\n }\r\n return [];\r\n }\r\n\r\n public getCountryFormat(): { key?: string; value?: string }[] {\r\n return (this.countryRegionsInfo || []).map(countryRegion => {\r\n return {\r\n key: countryRegion.CountryRegionId,\r\n value: countryRegion.ShortName\r\n };\r\n });\r\n }\r\n\r\n public getStateFormat(stateProvinceInfo?: StateProvinceInfo[], isShippingAddress?: boolean): { key?: string; value?: string; disabled?: boolean }[] {\r\n let isDisabled = false;\r\n return (stateProvinceInfo || []).map(state => {\r\n if (isShippingAddress) {\r\n if (!this.context.actionContext.requestContext.app.config.statesSettings[state.StateId!.toLowerCase()]) {\r\n isDisabled = true;\r\n } else {\r\n isDisabled = false;\r\n }\r\n }\r\n return {\r\n key: state.StateId,\r\n value: state.StateName,\r\n disabled: isDisabled\r\n };\r\n });\r\n }\r\n\r\n public getPrefilledAddressDropdownData = (stateDefaultSelectionText: string, stateProvinceInfo?: StateProvinceInfo[], isShippingAddress?: boolean): IAddressDropdownsData => {\r\n const defaultStateText = {\r\n key: '',\r\n value: stateDefaultSelectionText,\r\n disabled: false\r\n };\r\n const dropdownData: IAddressDropdownsData = {};\r\n\r\n dropdownData[AddressItemType[AddressItemType.ThreeLetterISORegionName]] = this.getCountryFormat();\r\n dropdownData[AddressItemType[AddressItemType.State]] = this.getStateFormat(stateProvinceInfo, isShippingAddress);\r\n dropdownData[AddressItemType[AddressItemType.State]].unshift(defaultStateText);\r\n\r\n return dropdownData;\r\n };\r\n\r\n public getTwoLetterISORegionName = (countryRegionId: string): string | undefined => {\r\n const countryRegionInfo = this._getCountryRegionInfo(countryRegionId);\r\n\r\n return countryRegionInfo!.ISOCode;\r\n };\r\n\r\n public validateAddressFormat = (address: Address, validationError: Address, countryRegionId: string, isBilling?: boolean): boolean => {\r\n let isValid: boolean = true;\r\n const addressFormat = this.getAddressFormat((address.ThreeLetterISORegionName) || countryRegionId);\r\n\r\n if (isBilling) {\r\n const ZipCodeIndex = addressFormat.findIndex(addressFormatItem => addressFormatItem.name === AddressFields.ZipCode);\r\n const ZipCodeValidationIndex = addressFormat[ZipCodeIndex].validationRules!.findIndex(validationRule => validationRule.regEx !== '\\\\S');\r\n addressFormat[ZipCodeIndex].validationRules!.splice(ZipCodeValidationIndex, 1);\r\n }\r\n\r\n addressFormat.forEach(addressFormatItem => {\r\n set(validationError, { [addressFormatItem.name]: null });\r\n\r\n for (const validationRule of (addressFormatItem.validationRules || [])) {\r\n if (!this._validateRegEx(address, addressFormatItem.name, validationRule)) {\r\n set(validationError, { [addressFormatItem.name]: validationRule.message });\r\n isValid = false;\r\n break;\r\n }\r\n }\r\n });\r\n return isValid;\r\n };\r\n\r\n private _validateRegEx = (address: Address, propertyName: string, validationRule: IAddressValidationRule): boolean => {\r\n if (validationRule.regEx && validationRule.regEx.length > 0) {\r\n const regex = new RegExp(validationRule.regEx);\r\n return regex.test(get(address, propertyName) || '');\r\n }\r\n return true;\r\n };\r\n\r\n private _getCountryRegionInfo(countryRegionId: string): CountryRegionInfo | undefined {\r\n return (this.countryRegionsInfo || []).find(countryRegion => {\r\n return ((countryRegion.CountryRegionId || '').toLowerCase() === countryRegionId.toLowerCase());\r\n });\r\n }\r\n\r\n private _getAddressDisplayFormat(countryRegionInfo: CountryRegionInfo): IAddressItem[] {\r\n const addressDisplayItem: IAddressItem[] = [];\r\n\r\n if (countryRegionInfo && countryRegionInfo.AddressFormatLines) {\r\n const nameDisplayItem = this._extendAddressDisplayFormat(AddressItemType.Name, true);\r\n if (nameDisplayItem) {\r\n addressDisplayItem.push(nameDisplayItem);\r\n }\r\n\r\n countryRegionInfo.AddressFormatLines.forEach(formatLine => {\r\n if (formatLine.AddressComponentNameValue) {\r\n const addressItem = this.addressMetaData.getItemFormat(formatLine.AddressComponentNameValue);\r\n if (addressItem) {\r\n addressItem.isNewLine = formatLine.NewLine || false;\r\n addressDisplayItem.push(addressItem);\r\n }\r\n }\r\n });\r\n\r\n const phoneDisplayItem = this._extendAddressDisplayFormat(AddressItemType.Phone, false);\r\n if (phoneDisplayItem) {\r\n addressDisplayItem.push(phoneDisplayItem);\r\n }\r\n }\r\n\r\n return addressDisplayItem;\r\n }\r\n\r\n private _extendAddressDisplayFormat(type: AddressItemType, isNewLine: boolean): IAddressItem | undefined {\r\n const addressItem = this.addressMetaData.getItemFormat(type);\r\n if (addressItem) {\r\n addressItem.isNewLine = isNewLine;\r\n }\r\n return addressItem;\r\n }\r\n\r\n}\r\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport { IAddressAddItem, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { IBusinessAccountAddressViewProps } from './business-account-address';\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 && items.map((item: IAddressAddItem) => {\n const { AddressItem, key, label, alert, input } = item;\n return (\n \n {label}\n {hasError && alert}\n {input}\n \n );\n })}\n {hasError &&\n \n {error.title}\n {error.message}\n \n }\n {isShowSaveButton && saveButton}\n {isShowCancelButton && cancelButton}\n \n );\n};\n\nconst BusinessAccountAddressView: React.FC = props => {\n const { BusinessAccountAddress, showAddOrUpdateAddress } = props;\n\n return (\n \n {}\n \n );\n};\n\nexport default BusinessAccountAddressView;\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IAddressAddItem, IAddressAddUpdateProps } from '../../common/components/address-add';\r\nimport { IAddressList, IAddressListItem, IAddressListProps } from '../../common/components/address-list';\r\nimport { IAddressShowItem, IAddressShowProps } from '../../common/components/address-show';\r\nimport { IAccountManagementAddressViewProps } from './smwe-account-management-address';\r\n\r\nconst AddressShow: React.FC = ({\r\n AddressDetail,\r\n items\r\n}) => {\r\n\r\n return (\r\n \r\n {items && items.map((item: IAddressShowItem) => {\r\n return (\r\n <>\r\n {item.description}\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst AddressList: React.FC = ({\r\n List,\r\n isShowList,\r\n heading,\r\n items\r\n}) => {\r\n\r\n if (!isShowList) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {heading}\r\n {items && items.map((item: IAddressListItem) => {\r\n const { Item, key, error, showItems, isShowPrimaryButton, primaryButton, editButton } = item;\r\n const { Error, isShowError, title, message } = error;\r\n return (\r\n \r\n {isShowError && \r\n {title}\r\n {message}\r\n }\r\n {isShowPrimaryButton && primaryButton}\r\n {editButton}\r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst AddressLists: React.FC = ({\r\n ListAddress,\r\n heading,\r\n isShowEmptyListMessage,\r\n emptyListMessage,\r\n addButton,\r\n primaryAddressList,\r\n otherAddressList\r\n}) => {\r\n\r\n return (\r\n \r\n {heading}\r\n {isShowEmptyListMessage && emptyListMessage}\r\n {addButton}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst AddressAddUpdate: React.FC = ({\r\n AddressForm,\r\n heading,\r\n items,\r\n hasError,\r\n error,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton,\r\n}) => {\r\n\r\n return (\r\n \r\n {heading}\r\n {items && items.map((item: IAddressAddItem) => {\r\n const { AddressItem, key, label, alert, input } = item;\r\n return (\r\n {label}\r\n {alert}\r\n {input}\r\n );\r\n })}\r\n {hasError && \r\n {error.title}\r\n {error.message}\r\n }\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n \r\n );\r\n};\r\n\r\nconst AccountManagementAddressView: React.FC = props => {\r\n const { AccountAddressManagement, viewState, showAddressList, showAddOrUpdateAddress } = props;\r\n\r\n return (\r\n \r\n {viewState.isShowAddresList && }\r\n {viewState.isShowAddOrUpdateAddress && }\r\n \r\n );\r\n};\r\n\r\nexport default AccountManagementAddressView;\r\n","import { Heading } from '@msdyn365-commerce-modules/data-types';\r\nimport { Address } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport enum AddressOperation {\r\n Add = 'Add',\r\n Show = 'Show',\r\n Update = 'Update',\r\n List = 'List'\r\n}\r\n\r\nexport enum AddressType {\r\n Shipping = 'Shipping',\r\n Billing = 'Billing'\r\n}\r\n\r\nexport interface IDropdownDisplayData {\r\n [index: string]: { key?: string; value?: string }[];\r\n}\r\n\r\nexport interface IAddressResponse {\r\n errorTitle?: string;\r\n errorMessage?: string;\r\n customerAddresses?: Address[];\r\n address?: Address;\r\n}\r\n\r\nexport interface IAddressConfig {\r\n heading?: Heading;\r\n primaryAddressSectionHeading?: Heading;\r\n otherAddressSectionHeading?: Heading;\r\n addAddressHeading?: Heading;\r\n editAddressHeading?: Heading;\r\n}\r\n\r\nexport interface IAddressResource {\r\n addressAddButtonText: string;\r\n addressAddButtonAriaLabel: string;\r\n addressPrimaryButtonText: string;\r\n addressPrimaryButtonAriaLabel: string;\r\n addressEditButtonText: string;\r\n addressEditButtonAriaLabel: string;\r\n addressSaveButtonText: string;\r\n addressSaveButtonAriaLabel: string;\r\n addressCancelButtonText: string;\r\n addressCancelButtonAriaLabel: string;\r\n addressStateDefaultSelectionText: string;\r\n addressNameLabel: string;\r\n addressNameRequiredErrorMessage: string;\r\n addressPhoneLabel: string;\r\n addressPhoneRequiredErrorMessage: string;\r\n addressZipCodeLabel: string;\r\n addressZipCodeRequiredErrorMessage: string;\r\n addressCityLabel: string;\r\n addressCityRequiredErrorMessage: string;\r\n addressCountyLabel: string;\r\n addressCountyRequiredErrorMessage: string;\r\n addressStateLabel: string;\r\n addressStateRequiredErrorMessage: string;\r\n addressThreeLetterISORegionNameLabel: string;\r\n addressThreeLetterISORegionNameRequiredErrorMessage: string;\r\n addressStreetRequiredErrorMessage: string;\r\n addressDistrictLabel: string;\r\n addressDistrictRequiredErrorMessage: string;\r\n addressStreetNumberLabel: string;\r\n addressStreetNumberRequiredErrorMessage: string;\r\n addressBuildingComplimentLabel: string;\r\n addressBuildingComplimentRequiredErrorMessage: string;\r\n addressPostboxLabel: string;\r\n addressPostboxRequiredErrorMessage: string;\r\n addressHouseRULabel: string;\r\n addressHouseRURequiredErrorMessage: string;\r\n addressFlatRULabel: string;\r\n addressFlatRURequiredErrorMessage: string;\r\n addressCountryOKSMCodeRULabel: string;\r\n addressCountryOKSMCodeRURequiredErrorMessage: string;\r\n addressErrorMessageTitle: string;\r\n addressGenericErrorMessage: string;\r\n addressEmptyListAddressMessage: string;\r\n}\r\n\r\n// tslint:disable-next-line:no-empty-interface\r\nexport interface IAddressModuleData {}","export enum AddressItemDisplayType {\r\n Input = 'Input',\r\n Dropdown = 'Dropdown'\r\n}\r\n\r\nexport enum AddressValidationRuleType {\r\n Required = 'Required',\r\n Format = 'Format'\r\n}\r\n\r\nexport enum AddressItemType {\r\n Name = 1001,\r\n Phone = 1002,\r\n ZipCode = 1,\r\n City = 2,\r\n County = 3,\r\n State = 4,\r\n ThreeLetterISORegionName = 5,\r\n Street = 6,\r\n District = 7,\r\n StreetNumber = 8,\r\n BuildingCompliment = 9,\r\n Postbox = 10,\r\n House_RU = 21,\r\n Flat_RU = 22,\r\n CountryOKSMCode_RU = 23,\r\n}\r\n\r\nexport interface IAddressItem {\r\n name: string;\r\n type: AddressItemType;\r\n label: string;\r\n maxLength: number;\r\n displayType: AddressItemDisplayType;\r\n validationRules?: IAddressValidationRule[];\r\n isNewLine: boolean;\r\n}\r\nexport interface IAddressValidationRule {\r\n type: AddressValidationRuleType;\r\n regEx: string;\r\n message: string;\r\n}\r\nexport interface IAddressDropdownsData {\r\n [index: string]: { key?: string; value?: string }[];\r\n}\r\n\r\n// tslint:disable-next-line:no-empty-interface\r\nexport interface IAddressFormatData {}","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\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\nconst 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};\n\nexport default AddressBillingCheckbox;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nexport interface IAddressBillingHeading {\n text: string;\n}\n\nconst IAddressBillingHeading: React.FC = ({\n text\n}) => (\n

{text}

\n );\n\nexport default IAddressBillingHeading;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport classnames from 'classnames';\nimport { action, computed, observable, reaction, set } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport {\n Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\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 {\n AddressOperation, AddressType, IAddressResource, IAddressResponse\n} from '../../common/address-module.data';\nimport { AddressAddUpdate, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport AddressBillingCheckoxComponent from '../../common/components/address-billing-checkbox';\nimport AddressBillingHeadingComponent 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\nexport interface IProps extends ICheckoutBillingAddressProps, IModuleStateProps { }\n\nexport interface ICheckoutBillingAddressViewState {\n isShowAddress: boolean;\n isShowAddOrUpdateAddress: boolean;\n isShowSameAsShippingCheckbox: boolean;\n}\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-ignore\n@withModuleState\n@observer\nclass CheckoutBillingAddress extends React.Component {\n\n @observable private currentOperation: AddressOperation;\n @observable private isBillingAddressSameAsShipping: boolean;\n @observable private selectedAddress?: Address;\n @observable private addUpdateAddress: Address;\n @observable private countryRegionId: string = 'USA';\n @observable private stateProvinceInfo?: StateProvinceInfo[];\n @observable private validationError: object;\n @observable private addressActionResponse?: IAddressResponse;\n\n private addressCommon: AddressCommon;\n private addressFormat: AddressFormat;\n private countryRegions: CountryRegionInfo[];\n private addressPurposes: AddressPurpose[];\n private resources: IAddressResource;\n private defaultAddressType: number = 6; // Default to Home\n // private addRenderRef: React.RefObject;\n private telemetryContent?: ITelemetryContent;\n private autoSuggest?: AutoSuggest;\n\n 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(this.countryRegions, new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()), this.addressPurposes);\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n // this.addRenderRef = React.createRef();\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 this.props.data.checkout.then(() => {\n this._setDefaultCountryRegionId();\n this._initModuleState();\n });\n\n reaction(\n () => this.countryRegionId,\n () => this._getStateProvinces()\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 // tslint:disable-next-line:no-floating-promises\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 && (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 }\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 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 // tslint:disable-next-line: max-line-length\n sameAsShippingCheckbox: (\n \n ),\n showAddress: this._renderShowAddress(),\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress()\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n\n private _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(this.resources.addressStateDefaultSelectionText, this.stateProvinceInfo),\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({ address: this.selectedAddress, addressFormat: this.addressFormat.getAddressFormat(this.selectedAddress.ThreeLetterISORegionName || ''), addressPurposes: this.addressPurposes });\n }\n\n return null;\n }\n\n private _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 private _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 private _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 @action\n private _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 // 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 @action\n private _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 @action\n private _clearValidation = (): void => {\n this.validationError = {};\n }\n\n private 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 private _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 private _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 private _getStateProvinces = (): void => {\n if (!this.countryRegionId || !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)) {\n return;\n }\n\n // tslint:disable-next-line:no-floating-promises\n this.addressCommon.getStateProvinces(this.countryRegionId).then(\n (result: StateProvinceInfo[]) => {\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\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 _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 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 private _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 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 && request.channel && request.channel.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\n\n // if hasInvoiceLine is true, there are only invoices no items in cart and return false here\n return this.props.data.checkout.result?.checkoutCart.hasInvoiceLine\n ? false\n : retailMultiplePickUpOptionEnabled ?\n ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).some(\n cartLine => (cartLine.DeliveryMode && cartLine.DeliveryMode !== '')\n ? (cartLine.DeliveryMode !== channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.find(deliveryMode => deliveryMode === cartLine.DeliveryMode) && cartLine.DeliveryMode !== emailDeliveryModeCode)\n : cartLine\n )\n :((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).some(\n cartLine => (cartLine.DeliveryMode && cartLine.DeliveryMode !== '')\n ? (cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode)\n : cartLine\n );\n }\n\n @computed get billingAddress(): Address | undefined {\n return this.props.data.checkout.result && this.props.data.checkout.result.billingAddress;\n }\n\n @computed get shippingAddress(): Address | undefined {\n return this.props.data.checkout.result && this.props.data.checkout.result.shippingAddress;\n }\n\n @computed get getLoyaltyAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n return checkoutState && checkoutState.loyaltyAmount ? checkoutState.loyaltyAmount : 0;\n }\n\n @computed 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 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) {\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;\n\n return amountDue > 0 && !isPaidByOtherPaymentSource;\n }\n\n @computed get isBillingAddressRequried(): boolean {\n return this.shouldPaidByCard;\n }\n\n private _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 private 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 private 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 // @ts-ignore: Compiler not reconizing property form extending class\n this._resetView();\n break;\n default:\n this.props.telemetry.error('Invalid operation');\n }\n };\n\n private 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 private _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 // tslint:disable-next-line:no-floating-promises\n this.props.data.checkout.result.updateBillingAddress({ newBillingAddress, additionalProperties: { isBillingAddressSameAsShippingAddress: this.isBillingAddressSameAsShipping } });\n }\n }\n\n private _resetView = () => {\n this._updateCurrentOperation(AddressOperation.Show, this.billingAddress);\n this._updateModuleState();\n }\n\n private _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 private _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;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAddressButton {\r\n className: string;\r\n text: string;\r\n ariaLabel: string;\r\n disabled?: boolean;\r\n onClick(event: React.MouseEvent): void;\r\n}\r\n\r\nconst AddressButton: React.FC = ({ className, text, ariaLabel, disabled, onClick }) => (\r\n \r\n {text}\r\n \r\n);\r\n\r\nexport default AddressButton;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\nimport { createAddressWarning } from './address-warning';\r\n\r\nexport interface IAdressInput {\r\n id?: string;\r\n name?: string;\r\n className: string;\r\n type: string;\r\n value: string;\r\n maxLength?: number;\r\n additionalAddributes?: object;\r\n placeholder?: string;\r\n onChange(event: React.ChangeEvent): void;\r\n hasWarning?(name: string, value: string): string | void;\r\n}\r\n\r\ninterface IAdressState {\r\n warningMessage: string;\r\n}\r\n\r\n/**\r\n * Class definition for an input field within a shipping address form\r\n */\r\nexport class AddressInputComponent extends React.Component {\r\n constructor (props: IAdressInput) {\r\n super(props);\r\n this._onInputBlur = this._onInputBlur.bind(this);\r\n this.state = {warningMessage: ''};\r\n }\r\n\r\n public render (): JSX.Element {\r\n const {\r\n id,\r\n name,\r\n className,\r\n type,\r\n value,\r\n maxLength,\r\n additionalAddributes,\r\n placeholder,\r\n onChange,\r\n } = this.props;\r\n return (\r\n \r\n {this.state.warningMessage && createAddressWarning(this.state.warningMessage)}\r\n \r\n \r\n );\r\n }\r\n\r\n private _onInputBlur (el: React.ChangeEvent): void {\r\n const hasWarning = this.props.hasWarning && this.props.hasWarning(this.props.name || '', el.target.value);\r\n if (hasWarning) {\r\n this.setState({warningMessage: hasWarning});\r\n } else {\r\n this.setState({warningMessage: ''});\r\n }\r\n }\r\n}","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAddressWarning {\r\n message?: string;\r\n}\r\n\r\nexport const createAddressWarning = (message?: string) => {\r\n return (\r\n \r\n {message || ''}\r\n \r\n );\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressErrorMessage {\r\n message: string;\r\n}\r\n\r\nconst AdressErrorMessage: React.FC = ({ message }) => (\r\n

\r\n {message}\r\n

\r\n);\r\n\r\nexport default AdressErrorMessage;\r\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { get, set } from 'mobx';\n\nimport {\n Address, AddressPurpose, CountryRegionInfo, StateProvinceInfo\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\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 countryRegionsInfo?: CountryRegionInfo[];\n private addressPurposes?: AddressPurpose[];\n private 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 private _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) || '');\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","import {\n addAddress, AddressManagementInput, updateAddress, updatePrimaryAddress\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { IActionInput, ICoreContext, IObservableAction, ITelemetry } from '@msdyn365-commerce/core';\nimport {\n Address, CountryRegionInfo, StateProvinceInfo\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\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 context: ICoreContext;\n private resources: IAddressResource;\n private 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 = (address: Address): Promise => {\n return this.submitCustomerAddress(addAddress, address);\n };\n\n public updateCustomerAddress = (address: Address): Promise => {\n return this.submitCustomerAddress(updateAddress, address);\n };\n\n public updateCustomerPrimaryAddress = (address: Address): Promise => {\n return this.submitCustomerAddress(updatePrimaryAddress, address);\n };\n\n private submitCustomerAddress = (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 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","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport { IAddressAddItem, IAddressAddUpdateProps } from '../../common/components/address-add';\r\nimport { IAddressSelectItem, IAddressSelectProps } from '../../common/components/address-select';\r\nimport { IAddressShowItem, IAddressShowProps } from '../../common/components/address-show';\r\nimport { ICheckoutShippingAddressViewProps } from './smwe-checkout-shipping-address';\r\n\r\nconst AddressShow: React.FC = ({\r\n AddressDetail,\r\n items\r\n}) => {\r\n\r\n return (\r\n \r\n {items && items.map((item: IAddressShowItem) => {\r\n return (\r\n <>\r\n {item.description}\r\n \r\n );\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\r\n return (\r\n \r\n {addButton}\r\n {items && items.map((item: IAddressSelectItem) => {\r\n const SelectItem = item.SelectItem;\r\n return (\r\n {item.input}\r\n \r\n );\r\n })}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n \r\n );\r\n};\r\n\r\nconst AddressAddUpdate: React.FC = ({\r\n AddressForm,\r\n heading,\r\n items,\r\n hasError,\r\n error,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton,\r\n}) => {\r\n\r\n return (\r\n \r\n {heading}\r\n {items && items.map((item: IAddressAddItem) => {\r\n const { AddressItem, key, label, alert, input } = item;\r\n return (\r\n {label}\r\n {alert}\r\n {input}\r\n );\r\n })}\r\n {hasError && \r\n {error.title}\r\n {error.message}\r\n }\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n \r\n );\r\n};\r\n\r\nconst CheckoutShippingAddressView: React.FC = props => {\r\n const { CheckoutShippingAddress, viewState, showAddress, showAddressSelect, showAddOrUpdateAddress } = props;\r\n return (\r\n \r\n {viewState.isShowAddress && }\r\n {viewState.isShowAddresList && }\r\n {viewState.isShowAddOrUpdateAddress && }\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutShippingAddressView;\r\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\n\nimport { IAddressAddItem, IAddressAddUpdateProps } from '../../common/components/address-add';\nimport { IAddressShowItem, IAddressShowProps } from '../../common/components/address-show';\nimport { ICheckoutBillingAddressViewProps } from './checkout-billing-address';\n\nconst AddressShow: React.FC = ({\n AddressDetail,\n items\n}) => {\n\n return (\n \n {items && items.map((item: IAddressShowItem) => {\n return (\n <>\n {item.description}\n \n );\n })}\n \n );\n};\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 && 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\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 * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nexport interface IAdressAlert {\n message?: string;\n}\n\nconst AdressAlert: React.FC = ({ message }) => (\n \n {\n message &&\n <>\n {message}\n \n }\n \n);\n\nexport default AdressAlert;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\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\nconst AdressCheckbox: React.FC = ({\n id,\n name,\n className,\n type,\n isChecked,\n additionalAddributes,\n telemetryContent,\n autoFocus,\n onChange\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent!, name!);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n );\n};\n\nexport default AdressCheckbox;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\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\nconst AdressDropdown: React.FC = ({\n id,\n name,\n className,\n value,\n additionalAddributes,\n displayData,\n onChange\n}) => (\n \n {displayData && displayData.map(item =>\n (\n getDropdownItem(item.key, item.value, value)\n ))\n }\n \n );\n\nexport default AdressDropdown;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nexport interface IAdressLabel {\n id: string;\n text: string;\n}\n\nconst AdressLabel: React.FC = ({\n id,\n text\n}) => (\n \n );\n\nexport default AdressLabel;\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport classname from 'classnames';\nimport { get } from 'mobx';\nimport * as React from 'react';\n\nimport { Heading as HeadingData } from '@msdyn365-commerce-modules/data-types';\nimport { Heading, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { Address } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { AddressType, IAddressResource, IAddressResponse } from '../../common/address-module.data';\nimport {\n AddressItemDisplayType, AddressItemType, AddressValidationRuleType, IAddressDropdownsData,\n IAddressItem, IAddressValidationRule\n} from '../address-format.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 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 } = props;\n\n // @ts-ignore\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: className, id: `${elementId}_container` },\n label: ,\n alert: ,\n input: 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 * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from 'react';\n\nexport interface IAdressErrorMessage {\n message: string;\n}\n\nconst AdressErrorMessage: React.FC = ({ message }) => (\n

\n {message}\n

\n);\n\nexport default AdressErrorMessage;\n","import {\r\n AddressItemDisplayType, AddressItemType, AddressValidationRuleType, IAddressItem,\r\n IAddressValidationRule\r\n} from './address-format.data';\r\nimport { IAddressResource } from './address-module.data';\r\n\r\n/**\r\n * Address meta data\r\n */\r\nexport class AddressMetaData {\r\n\r\n private metaData: IAddressItem[] = [];\r\n private resources: IAddressResource;\r\n private requiredFieldRegEx: string = '\\\\S';\r\n\r\n private phoneValidation: string = '^\\\\(?([0-9]{3})\\\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$';\r\n private zipcodeValidation: string = '(^[0-9]{5}$)|(^[0-9]{5}-[0-9]{4}$)';\r\n private resourcesPrefix: string = 'address';\r\n private maxLength: number = 64;\r\n private requiredFields: AddressItemType[];\r\n\r\n constructor(resources: IAddressResource) {\r\n this.resources = resources || {};\r\n this.requiredFields = [AddressItemType.Name, AddressItemType.ZipCode, AddressItemType.City, AddressItemType.State, AddressItemType.ThreeLetterISORegionName, AddressItemType.Street, AddressItemType.Phone];\r\n this._init();\r\n }\r\n\r\n public getItemFormat(id: number): IAddressItem | undefined {\r\n return this.metaData.find((item) => {\r\n return item.type === id;\r\n });\r\n }\r\n\r\n private _init(): void {\r\n this._addItem(AddressItemType.Name, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.Phone, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.ZipCode, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.City, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.County, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.State, AddressItemDisplayType.Dropdown);\r\n this._addItem(AddressItemType.ThreeLetterISORegionName, AddressItemDisplayType.Dropdown);\r\n this._addItem(AddressItemType.Street, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.District, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.StreetNumber, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.BuildingCompliment, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.Postbox, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.House_RU, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.Flat_RU, AddressItemDisplayType.Input);\r\n this._addItem(AddressItemType.CountryOKSMCode_RU, AddressItemDisplayType.Input);\r\n }\r\n\r\n private _addItem(type: AddressItemType, displayType: AddressItemDisplayType): void {\r\n const nameKey = AddressItemType[type].replace('_', '');\r\n const item: IAddressItem = {\r\n type,\r\n displayType,\r\n name: AddressItemType[type],\r\n label: this.resources[`${this.resourcesPrefix}${nameKey}Label`],\r\n maxLength: this.maxLength,\r\n validationRules: this._validationRules(type, nameKey),\r\n isNewLine: true\r\n };\r\n\r\n this.metaData.push(item);\r\n }\r\n\r\n private _validationRules(type: AddressItemType, name: string): IAddressValidationRule[] {\r\n const validationRules: IAddressValidationRule[] = [];\r\n\r\n if (type === AddressItemType.Phone) {\r\n validationRules.push(\r\n this._validationRule(AddressValidationRuleType.Required, this.phoneValidation, 'Phone # is invalid')\r\n );\r\n }\r\n\r\n if (type === AddressItemType.ZipCode) {\r\n validationRules.push(\r\n this._validationRule(AddressValidationRuleType.Required, this.zipcodeValidation, 'Invalid Zip Code')\r\n );\r\n }\r\n\r\n for (const ruleType of Object.keys(AddressValidationRuleType)) {\r\n const key = `${this.resourcesPrefix}${name}${ruleType}`;\r\n const message = this.resources[`${key}ErrorMessage`];\r\n switch (ruleType) {\r\n case AddressValidationRuleType.Required: {\r\n if (this.requiredFields.find((itemType: AddressItemType) => itemType === type)) {\r\n validationRules.push(this._validationRule(ruleType, this.requiredFieldRegEx, message));\r\n }\r\n break;\r\n }\r\n default:\r\n }\r\n }\r\n return validationRules;\r\n }\r\n\r\n private _validationRule(type: AddressValidationRuleType, regEx: string, message: string): IAddressValidationRule {\r\n return {\r\n type,\r\n regEx,\r\n message\r\n };\r\n }\r\n\r\n}\r\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\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\nconst AdressInput: React.FC = ({\n id,\n name,\n className,\n type,\n value,\n maxLength,\n additionalAddributes,\n autoFocus,\n telemetryContent,\n onChange\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent!, name!);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n );\n};\n\nexport default AdressInput;\n","import {\r\n addAddress, AddressManagementInput, updateAddress, updatePrimaryAddress\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IActionInput, ICoreContext, IObservableAction, ITelemetry } from '@msdyn365-commerce/core';\r\nimport {\r\n Address, CountryRegionInfo, StateProvinceInfo\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { getStateProvinceAction, GetStateProvincesInput } from '../dataActions/get-state-provinces';\r\nimport { IAddressResource, IAddressResponse } from './address-module.data';\r\n\r\n/**\r\n *\r\n * Address common\r\n */\r\nexport class AddressCommon {\r\n\r\n private context: ICoreContext;\r\n private customerAccountNumber?: string;\r\n private resources: IAddressResource;\r\n private telemetry: ITelemetry;\r\n\r\n constructor(context: ICoreContext, resources: IAddressResource, telemetry: ITelemetry, customerAccountNumber?: string) {\r\n this.context = context;\r\n this.customerAccountNumber = customerAccountNumber;\r\n this.resources = resources;\r\n this.telemetry = telemetry;\r\n }\r\n\r\n public getDefaultCountryRegionId = (countryRegionId: string, countryRegions: CountryRegionInfo[], market?: string): string => {\r\n const marketISOCode = market || 'US';\r\n const currentCountryRegion = countryRegions.find(countryRegion => (countryRegion.ISOCode || '') === marketISOCode);\r\n return (currentCountryRegion && currentCountryRegion.CountryRegionId) || countryRegionId;\r\n };\r\n\r\n public parseRetailException = (resources: IAddressResource): IAddressResponse => {\r\n return {\r\n errorTitle: resources.addressErrorMessageTitle,\r\n errorMessage: resources.addressGenericErrorMessage\r\n };\r\n };\r\n\r\n public isAuthenticatedFlow = (): boolean => {\r\n return !!this.customerAccountNumber;\r\n };\r\n\r\n public getStateProvinces = async (countryRegionId: string): Promise => {\r\n let response: StateProvinceInfo[] = [];\r\n if (this.context && this.context.actionContext) {\r\n try {\r\n const input = new GetStateProvincesInput(countryRegionId, this.context.request.apiSettings);\r\n response = await getStateProvinceAction(input, this.context.actionContext);\r\n } catch (error) {\r\n if (this.telemetry) {\r\n this.telemetry.error(`Error encountered ${error}`);\r\n }\r\n }\r\n }\r\n return Promise.resolve(response);\r\n };\r\n\r\n public addCustomerAddress = (address: Address): Promise => {\r\n return this.submitCustomerAddress(addAddress, address);\r\n };\r\n\r\n public updateCustomerAddress = (address: Address): Promise => {\r\n return this.submitCustomerAddress(updateAddress, address);\r\n };\r\n\r\n public updateCustomerPrimaryAddress = (address: Address): Promise => {\r\n return this.submitCustomerAddress(updatePrimaryAddress, address);\r\n };\r\n\r\n private submitCustomerAddress = (addressAction: IObservableAction, address: Address): Promise => {\r\n address.AddressTypeValue = address.AddressTypeValue || 7; // 7 sets it to HOME by default\r\n\r\n const input = new AddressManagementInput(address, this.customerAccountNumber || '');\r\n return this.execAddressAction(addressAction, input, address);\r\n };\r\n\r\n private execAddressAction = async (addressAction: IObservableAction, input: IActionInput | IActionInput[], address: Address): Promise => {\r\n let response: IAddressResponse = {};\r\n\r\n if (this.context && this.context.actionContext) {\r\n try {\r\n const addresses = await addressAction(input, this.context.actionContext);\r\n if (addresses.length > 0) {\r\n response.address = address.RecordId ? address : addresses[addresses.length - 1];\r\n }\r\n response.customerAddresses = addresses;\r\n } catch (error) {\r\n if (this.telemetry) {\r\n this.telemetry.error(`Error encountered ${error}`);\r\n }\r\n response = this.parseRetailException(this.resources);\r\n }\r\n }\r\n return Promise.resolve(response);\r\n };\r\n}\r\n","import { Heading } from '@msdyn365-commerce-modules/data-types';\nimport { Address } from '@msdyn365-commerce/retail-proxy';\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 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 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 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}"],"sourceRoot":""}