{"version":3,"file":"static/js/e1655a3f3bcd6e71d16f.bundle.js","mappings":"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","sources":["webpack://Dobbies.Commerce/./src/dotdigital-extension/DataServiceEntities.g.ts?cecd","webpack://Dobbies.Commerce/./src/dotdigital-extension/DataActionExtension.g.ts?36a7","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/address-autosuggest.ts?cc82","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/actions/get-state-provinces.ts?052d","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/address-common.ts?789e","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/address-format.data.ts?44e9","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/address-module.data.ts?0d73","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/address-format.ts?7cde","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/address-meta-data.ts?f29b","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/components/address-alert.tsx?399b","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/components/address-button.tsx?2bb4","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/components/address-checkbox.tsx?4240","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/components/address-dropdown.tsx?f045","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/components/address-error-message.tsx?8491","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/components/address-error-title.tsx?839f","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/components/address-input.tsx?ee1c","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/components/address-label.tsx?5985","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/components/address-add.tsx?b40a","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/components/address-detail-item.tsx?862e","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/components/address-show.tsx?967a","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/common/components/address-list.tsx?122a","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/dobbies-loyalty-account-management-address.tsx?f83a","webpack://Dobbies.Commerce/./src/modules/dobbies-loyalty-account-management-address/dobbies-loyalty-account-management-address.view.tsx?6082","webpack://Dobbies.Commerce/./src/themes/dobbies/actions/get-customer-address.action.ts?75be","webpack://Dobbies.Commerce/./lib/dobbies-loyalty-account-management-address/module-registration.js?7c20","webpack://Dobbies.Commerce/./src/actions/get-address-purposes.ts?6b90","webpack://Dobbies.Commerce/./src/actions/get-country-regions.ts?9431","webpack://Dobbies.Commerce/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://Dobbies.Commerce/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://Dobbies.Commerce/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://Dobbies.Commerce/external var \"React\"?0d3b","webpack://Dobbies.Commerce/external var \"ReactDOM\"?853b"],"sourcesContent":["// tslint:disable\r\n/* eslint-disable security/detect-object-injection */\r\nimport * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\nimport * as Entities from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\n/**\r\n * VSIRestAPIHandler entity interface.\r\n */\r\nexport interface IVSIRestAPIHandler {\r\n Id: number;\r\n result?: string;\r\n ExtensionProperties?: Entities.CommerceProperty[];\r\n}\r\n\r\n/**\r\n * VSIRestAPIHandler entity class.\r\n */\r\nexport class VSIRestAPIHandlerExtensionClass implements IVSIRestAPIHandler {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Id: number;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public result: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ExtensionProperties: Entities.CommerceProperty[];\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Id = odataObject.Id;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.result = odataObject.result;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties = undefined;\r\n if (odataObject.ExtensionProperties) {\r\n this.ExtensionProperties = [];\r\n for (var i = 0; i < odataObject.ExtensionProperties.length; i++) {\r\n if (odataObject.ExtensionProperties[i]) {\r\n if (odataObject.ExtensionProperties[i]['@odata.type']) {\r\n var className: string = odataObject.ExtensionProperties[i]['@odata.type'];\r\n className = className.substr(className.lastIndexOf('.') + 1).concat('Class');\r\n if (EntityClasses[className]) {\r\n this.ExtensionProperties[i] = new EntityClasses[className](odataObject.ExtensionProperties[i]);\r\n }\r\n } else {\r\n this.ExtensionProperties[i] = new EntityClasses.CommercePropertyClass(odataObject.ExtensionProperties[i]);\r\n }\r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties[i] = undefined;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n * THIS FILE IS AN AUTOGENERATED TYPESCRIPT PROXY EXTENSION.\r\n * TO USE THIS FILE, IT MUST BE ADDED TO A D365COMMERCE APPLICATION\r\n */\r\n// tslint:disable\r\nimport { AsyncResult, callActionOrExecute, DataServiceQuery, IContext, IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\r\n// @ts-ignore\r\nimport * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\nimport * as DataServiceEntities from './DataServiceEntities.g';\r\n\r\n// @ts-ignore\r\nfunction vSIGetAPIResponseQuery(id?: number): DataServiceQuery {\r\n const key = id ? { Id: id } : null;\r\n return new DataServiceQuery('VSIGetRestAPIResponse', 'VSIRestAPIHandler', DataServiceEntities.VSIRestAPIHandlerExtensionClass, key);\r\n}\r\n\r\nexport function createVSIInitiateRestCallInput(\r\n targetSystem: string,\r\n methodType: string,\r\n requestHeader: string,\r\n requestBody: string,\r\n urlParams: string,\r\n servicePath: string\r\n): IDataServiceRequest {\r\n const query = vSIGetAPIResponseQuery();\r\n return query.createDataServiceRequestForOperation(\r\n 'VSI_CallGenericRestAPIHandler',\r\n true,\r\n DataServiceEntities.VSIRestAPIHandlerExtensionClass,\r\n 'false',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.IVSIRestAPIHandler' },\r\n {\r\n targetSystem: targetSystem,\r\n methodType: methodType,\r\n requestHeader: requestHeader,\r\n requestBody: requestBody,\r\n urlParams: urlParams,\r\n servicePath: servicePath\r\n }\r\n );\r\n}\r\n\r\nexport function vSIInitiateRestCallAsync(\r\n context: IContext,\r\n targetSystem: string,\r\n methodType: string,\r\n requestHeader: string,\r\n requestBody: string,\r\n urlParams: string,\r\n servicePath: string\r\n): AsyncResult {\r\n const request = createVSIInitiateRestCallInput(targetSystem, methodType, requestHeader, requestBody, urlParams, servicePath);\r\n return callActionOrExecute(request, context.callerContext);\r\n}\r\n","// tslint:disable:no-reference\r\n/// \r\n\r\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport { ITelemetry } from '@msdyn365-commerce/core';\r\nimport { IAutoSuggestOptions } from './address-autosuggest.data';\r\n/**\r\n *\r\n * Auto Suggest\r\n */\r\nexport class AutoSuggest {\r\n public readonly excludedAddressFields: string[] = ['ThreeLetterISORegionName', 'Name', 'AddressTypeValue', 'Phone'];\r\n private telemetry: ITelemetry;\r\n private countryCode?: string;\r\n private bingMapsApiKey?: string;\r\n private defaultLanguageId?: string;\r\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\r\n private autoSuggestOptions: IAutoSuggestOptions;\r\n\r\n constructor(\r\n telemetry: ITelemetry,\r\n autoSuggestOptions: IAutoSuggestOptions,\r\n BingMapsApiKey?: string,\r\n countryCode?: string,\r\n defaultLanguageId?: string\r\n ) {\r\n this.telemetry = telemetry;\r\n this.autoSuggestOptions = autoSuggestOptions;\r\n this.bingMapsApiKey = BingMapsApiKey;\r\n this.countryCode = countryCode;\r\n this.defaultLanguageId = defaultLanguageId;\r\n }\r\n\r\n public attachAutoSuggest = (\r\n inputId: string,\r\n containerId: string,\r\n selectedSuggestionCallback: (result: Microsoft.Maps.ISuggestionResult) => void\r\n ): void => {\r\n if (!this.autoSuggestManager) {\r\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\r\n callback: () => {\r\n const options = { ...this.autoSuggestOptions, countryCode: this.countryCode };\r\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\r\n this.autoSuggestManager.attachAutosuggest(inputId, containerId, selectedSuggestionCallback);\r\n document.querySelector(inputId)?.setAttribute('role', 'combobox');\r\n setTimeout(() => {\r\n document.querySelector(inputId)?.setAttribute('type', 'text');\r\n }, 0);\r\n },\r\n errorCallback: () => {\r\n if (this.telemetry) {\r\n this.telemetry.debug('Unable to attach map auto suggest.');\r\n }\r\n },\r\n credentials: this.bingMapsApiKey\r\n });\r\n }\r\n };\r\n\r\n public changeAutoSuggestionCountryCode = (countryCode?: string): void => {\r\n if (this.autoSuggestManager) {\r\n this.autoSuggestOptions.countryCode = countryCode;\r\n this.autoSuggestManager.setOptions(this.autoSuggestOptions);\r\n }\r\n };\r\n\r\n public disposeAutoSuggest = (): void => {\r\n this.autoSuggestManager?.detachAutosuggest();\r\n this.autoSuggestManager?.dispose();\r\n this.autoSuggestManager = undefined;\r\n };\r\n\r\n public _loadMapAPI = async (storeSelectorStateManager: IStoreSelectorStateManager): Promise => {\r\n await storeSelectorStateManager.loadMapApi({\r\n key: this.bingMapsApiKey,\r\n lang: this.countryCode,\r\n market: this.defaultLanguageId\r\n });\r\n };\r\n}\r\n","import { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICommerceApiSettings\r\n} from '@msdyn365-commerce/core';\r\nimport { getStateProvincesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\nimport { StateProvinceInfo } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\n/**\r\n * Input class for get state provinces data action\r\n */\r\nexport class GetStateProvincesInput implements IActionInput {\r\n public countryRegionId: string;\r\n private apiSettings: ICommerceApiSettings;\r\n\r\n constructor(countryRegionId: string, apiSettings: ICommerceApiSettings) {\r\n this.countryRegionId = countryRegionId;\r\n this.apiSettings = apiSettings;\r\n }\r\n\r\n public getCacheKey = () => buildCacheKey(`StateProvinceInfo-${this.countryRegionId}`, this.apiSettings);\r\n public getCacheObjectType = () => 'StateProvinceInfo';\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\nexport async function getStateProvinceAction(input: GetStateProvincesInput, ctx: IActionContext): Promise {\r\n return getStateProvincesAsync({ callerContext: ctx, queryResultSettings: {} }, input.countryRegionId);\r\n}\r\n\r\nexport default createObservableDataAction({\r\n action: >getStateProvinceAction\r\n});\r\n","import { addAddress, AddressManagementInput, updateAddress, updatePrimaryAddress } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IActionInput, ICoreContext, IObservableAction, ITelemetry } from '@msdyn365-commerce/core';\r\nimport { Address, CountryRegionInfo, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { getStateProvinceAction, GetStateProvincesInput } from '../actions/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 private context: ICoreContext;\r\n private resources: IAddressResource;\r\n private telemetry: ITelemetry;\r\n\r\n constructor(context: ICoreContext, resources: IAddressResource, telemetry: ITelemetry) {\r\n this.context = context;\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.context.request.user.isAuthenticated;\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 this.telemetry.debug('Unable to get state provinces');\r\n }\r\n }\r\n }\r\n return Promise.resolve(response);\r\n };\r\n\r\n // For any address, check for common requried field else treat it as invalid\\empty address.\r\n public isEmpty = (address: Address): boolean => {\r\n if (address && address.ThreeLetterISORegionName && address.State && address.City) {\r\n return false;\r\n }\r\n\r\n return true;\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);\r\n return this.execAddressAction(addressAction, input, address);\r\n };\r\n\r\n private execAddressAction = async (\r\n addressAction: IObservableAction,\r\n input: IActionInput | IActionInput[],\r\n address: Address\r\n ): 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 } else {\r\n response.address = address;\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 this.telemetry.debug('Unable to exec address action');\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","export enum AddressItemDisplayType {\r\n Input = 'Input',\r\n Dropdown = 'Dropdown',\r\n Checkbox = 'Checkbox'\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 IsPrimary = 1003,\r\n AddressTypeValue = 1004,\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\n\r\nexport interface IAddressValidationRule {\r\n type: AddressValidationRuleType;\r\n regEx: string;\r\n message: string;\r\n}\r\n\r\nexport interface IAddressDropdownsData {\r\n [index: string]: { key?: string | number; value?: string }[];\r\n}\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 Company = 'Company'\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 addressRemoveButtonText: string;\r\n addressRemoveButtonAriaLabel: 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 addressNameLabelOptional?: string;\r\n addressNameRequiredErrorMessage: string;\r\n addressPhoneLabel: string;\r\n addressPhoneLabelOptional?: string;\r\n addressPhoneRequiredErrorMessage: string;\r\n addressZipCodeLabel: string;\r\n addressZipCodeLabelOptional?: string;\r\n addressZipCodeRequiredErrorMessage: string;\r\n addressCityLabel: string;\r\n addressCityLabelOptional?: string;\r\n addressCityRequiredErrorMessage: string;\r\n addressCountyLabel: string;\r\n addressCountyLabelOptional?: string;\r\n addressCountyRequiredErrorMessage: string;\r\n addressStateLabel: string;\r\n addressStateLabelOptional?: string;\r\n addressStateRequiredErrorMessage: string;\r\n addressThreeLetterISORegionNameLabel: string;\r\n addressThreeLetterISORegionNameLabelOptional?: string;\r\n addressThreeLetterISORegionNameRequiredErrorMessage: string;\r\n addressStreetRequiredErrorMessage: string;\r\n addressDistrictLabel: string;\r\n addressDistrictLabelOptional?: string;\r\n addressDistrictRequiredErrorMessage: string;\r\n addressStreetNumberLabel: string;\r\n addressStreetNumberLabelOptional?: string;\r\n addressStreetNumberRequiredErrorMessage: string;\r\n addressBuildingComplimentLabel: string;\r\n addressBuildingComplimentLabelOptional?: string;\r\n addressBuildingComplimentRequiredErrorMessage: string;\r\n addressPostboxLabel: string;\r\n addressPostboxLabelOptional?: string;\r\n addressPostboxRequiredErrorMessage: string;\r\n addressHouseRULabel: string;\r\n addressHouseRULabelOptional?: string;\r\n addressHouseRURequiredErrorMessage: string;\r\n addressFlatRULabel: string;\r\n addressFlatRULabelOptional?: 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 * 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\n/* eslint-disable security/detect-non-literal-regexp */\r\nimport { get, set } from 'mobx';\r\n\r\nimport {\r\n Address,\r\n AddressPurpose,\r\n CountryRegionInfo,\r\n StateProvinceInfo\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { AddressItemType, IAddressDropdownsData, IAddressItem, IAddressValidationRule } 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 addressPurposes?: AddressPurpose[];\r\n private addressMetaData: AddressMetaData;\r\n\r\n constructor(countryRegionsInfo: CountryRegionInfo[], addressMetaData: AddressMetaData, addressPurposes: AddressPurpose[]) {\r\n this.countryRegionsInfo = countryRegionsInfo;\r\n this.addressMetaData = addressMetaData;\r\n this.addressPurposes = addressPurposes;\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[]): { key?: string; value?: string }[] {\r\n return (stateProvinceInfo || []).map(state => {\r\n return {\r\n key: state.StateId,\r\n value: state.StateName\r\n };\r\n });\r\n }\r\n\r\n public getAddressTypeFormat(): { key?: number; value?: string }[] {\r\n return (this.addressPurposes || []).map(addressPurpose => {\r\n return {\r\n key: addressPurpose.AddressType,\r\n value: addressPurpose.Name\r\n };\r\n });\r\n }\r\n\r\n public getPrefilledAddressDropdownData = (\r\n stateDefaultSelectionText: string,\r\n stateProvinceInfo?: StateProvinceInfo[]\r\n ): IAddressDropdownsData => {\r\n const defaultStateText = {\r\n key: '',\r\n value: stateDefaultSelectionText\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);\r\n dropdownData[AddressItemType[AddressItemType.State]].unshift(defaultStateText);\r\n dropdownData[AddressItemType[AddressItemType.AddressTypeValue]] = this.getAddressTypeFormat();\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 = (\r\n address: Address,\r\n validationError: Address,\r\n countryRegionId: string,\r\n propertyName?: string\r\n ): boolean => {\r\n let isValid: boolean = true;\r\n let validationtor;\r\n const addressFormat = this.getAddressFormat(address.ThreeLetterISORegionName || countryRegionId);\r\n\r\n addressFormat.forEach(addressFormatItem => {\r\n if (!propertyName || (propertyName && addressFormatItem.name === propertyName)) {\r\n validationtor = this._inputValidation(addressFormatItem, validationError, address);\r\n if (validationtor !== undefined) {\r\n isValid = validationtor;\r\n }\r\n }\r\n });\r\n\r\n return isValid;\r\n };\r\n\r\n public getTranformedAddress = (result: Microsoft.Maps.ISuggestionResult, stateProvinceInfo?: StateProvinceInfo[]): Address => {\r\n const address: Address = {};\r\n\r\n // Zip Code\r\n if (result.address.postalCode !== undefined) {\r\n address.ZipCode = result.address.postalCode;\r\n } else {\r\n address.ZipCode = '';\r\n }\r\n\r\n // State\r\n if (stateProvinceInfo) {\r\n const selectedState = stateProvinceInfo.find(state => state.StateName === result.address.adminDistrict);\r\n if (!selectedState) {\r\n address.State = '';\r\n address.StateName = result.address.adminDistrict;\r\n } else {\r\n address.State = selectedState.StateId;\r\n address.StateName = selectedState.StateName;\r\n }\r\n }\r\n\r\n // Street\r\n if (result.address.addressLine !== undefined) {\r\n address.Street = result.address.addressLine;\r\n } else {\r\n address.Street = ' ';\r\n }\r\n\r\n // City\r\n if (result.address.locality !== undefined) {\r\n address.City = result.address.locality;\r\n } else {\r\n address.City = '';\r\n }\r\n\r\n // District\r\n if (result.address.district !== undefined) {\r\n address.DistrictName = result.address.district;\r\n address.CountyName = result.address.district;\r\n } else {\r\n address.DistrictName = '';\r\n }\r\n\r\n // formatted Address\r\n address.FullAddress = result.address.formattedAddress;\r\n\r\n return address;\r\n };\r\n\r\n private _inputValidation(addressFormatItem: IAddressItem, validationError: Address, address: Address): boolean | undefined {\r\n set(validationError, { [addressFormatItem.name]: null });\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 return false;\r\n }\r\n }\r\n return undefined;\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 AddressTypeItem = this._extendAddressDisplayFormat(AddressItemType.AddressTypeValue, true);\r\n if (AddressTypeItem) {\r\n addressDisplayItem.push(AddressTypeItem);\r\n }\r\n\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 const isPrimaryDisplayItem = this._extendAddressDisplayFormat(AddressItemType.IsPrimary, false);\r\n if (isPrimaryDisplayItem) {\r\n addressDisplayItem.push(isPrimaryDisplayItem);\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","/* eslint-disable security/detect-object-injection */\r\nimport {\r\n AddressItemDisplayType,\r\n AddressItemType,\r\n AddressValidationRuleType,\r\n 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 private metaData: IAddressItem[] = [];\r\n private resources: IAddressResource;\r\n private requiredFieldRegEx: string = '\\\\S';\r\n private resourcesPrefix: string = 'address';\r\n private maxLength: number = 64;\r\n private requiredFields: AddressItemType[];\r\n private excludedTypes: AddressItemType[];\r\n\r\n constructor(resources: IAddressResource, excluded?: AddressItemType[], required?: AddressItemType[]) {\r\n this.resources = resources || {};\r\n this.excludedTypes = excluded || [];\r\n this.requiredFields =\r\n required !== undefined\r\n ? required\r\n : [\r\n AddressItemType.Name,\r\n AddressItemType.ZipCode,\r\n AddressItemType.City,\r\n AddressItemType.State,\r\n AddressItemType.ThreeLetterISORegionName,\r\n AddressItemType.Street,\r\n AddressItemType.Phone\r\n ];\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 this._addItem(AddressItemType.AddressTypeValue, AddressItemDisplayType.Dropdown);\r\n this._addItem(AddressItemType.IsPrimary, AddressItemDisplayType.Checkbox);\r\n }\r\n\r\n private _addItem(type: AddressItemType, displayType: AddressItemDisplayType): void {\r\n if (this.excludedTypes.includes(type)) {\r\n return;\r\n }\r\n\r\n const nameKey = AddressItemType[type].replace('_', '');\r\n\r\n // find out if currentItem is required field\r\n const validationRules = this._validationRules(type, nameKey);\r\n let isRequired = false;\r\n validationRules.forEach(rule => {\r\n if (rule.type === AddressValidationRuleType.Required) {\r\n isRequired = true;\r\n }\r\n });\r\n\r\n // if no optional string is provided in resource file, use the original label text\r\n const optionalString =\r\n this.resources[`${this.resourcesPrefix}${nameKey}LabelOptional`] || this.resources[`${this.resourcesPrefix}${nameKey}Label`];\r\n const item: IAddressItem = {\r\n type,\r\n displayType,\r\n name: AddressItemType[type],\r\n label: isRequired ? this.resources[`${this.resourcesPrefix}${nameKey}Label`] : optionalString,\r\n maxLength: this.maxLength,\r\n validationRules: validationRules,\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 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 * 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 {message && <>{message}}\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 { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\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 telemetryContent?: ITelemetryContent;\r\n onClick(event: React.MouseEvent): void;\r\n}\r\n\r\nconst AddressButton: React.FC = ({ className, text, ariaLabel, disabled, telemetryContent, onClick }) => {\r\n const payLoad = getPayloadObject('click', telemetryContent!, text);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n return (\r\n \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 { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressCheckbox {\r\n id?: string;\r\n name?: string;\r\n className: string;\r\n type: string;\r\n isChecked: boolean;\r\n autoFocus?: boolean;\r\n additionalAddributes?: object;\r\n telemetryContent?: ITelemetryContent;\r\n onChange(event: React.ChangeEvent): void;\r\n}\r\n\r\nconst AdressCheckbox: React.FC = ({\r\n id,\r\n name,\r\n className,\r\n type,\r\n isChecked,\r\n additionalAddributes,\r\n telemetryContent,\r\n autoFocus,\r\n onChange\r\n}) => {\r\n const payLoad = getPayloadObject('click', telemetryContent!, name!);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default AdressCheckbox;\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 | number;\r\n additionalAddributes?: object;\r\n displayData: { key?: string | number; value?: string }[];\r\n onChange(event: React.ChangeEvent): void;\r\n}\r\n\r\nconst getDropdownItem = (key?: string | number, value?: string, selectedValue?: string | number): React.ReactNode => {\r\n let isSelected: boolean;\r\n if (typeof key === 'number') {\r\n isSelected = key === selectedValue;\r\n } else {\r\n isSelected = typeof selectedValue === 'string' && (key || '').toLowerCase() === (selectedValue || '').toLowerCase();\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst AdressDropdown: React.FC = ({ id, name, className, value, additionalAddributes, displayData, onChange }) => (\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 IAdressErrorMessage {\r\n message: string;\r\n}\r\n\r\nconst AdressErrorMessage: React.FC = ({ message }) =>

{message}

;\r\n\r\nexport default AdressErrorMessage;\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 IAdressErrorTitle {\r\n title: string;\r\n}\r\n\r\nconst AdressErrorTitle: React.FC = ({ title }) =>

{title}

;\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 { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\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 autoFocus?: boolean;\r\n additionalAddributes?: object;\r\n telemetryContent?: ITelemetryContent;\r\n onChange(event: React.ChangeEvent): void;\r\n}\r\n\r\nconst AdressInput: React.FC = ({\r\n id,\r\n name,\r\n className,\r\n type,\r\n value,\r\n maxLength,\r\n additionalAddributes,\r\n autoFocus,\r\n telemetryContent,\r\n onChange\r\n}) => {\r\n const payLoad = getPayloadObject('click', telemetryContent!, name!);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n /* VSI Customization - START - 03/02/21 - Mark input field as numeric field if it is for phone input */\r\n const isPhone = name ? name.toLowerCase() === 'phone' : undefined;\r\n const patternAttribute = isPhone\r\n ? { pattern: `^\\s*\\(?(020[7,8]{1}\\)?[ ]?[1-9]{1}[0-9{2}[ ]?[0-9]{4})|(0[1-8]{1}[0-9]{3}\\)?[ ]?[1-9]{1}[0-9]{2}[ ]?[0-9]{3})\\s*$` }\r\n : {};\r\n /* VSI Customization - END */\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default AdressInput;\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 = ({ id, text }) => (\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, ITelemetryContent } 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 {\r\n AddressItemDisplayType,\r\n AddressItemType,\r\n AddressValidationRuleType,\r\n IAddressDropdownsData,\r\n IAddressItem,\r\n IAddressValidationRule\r\n} from '../address-format.data';\r\nimport AddressAlertComponent from './address-alert';\r\nimport AddressButtonComponent from './address-button';\r\nimport AdressCheckboxComponent from './address-checkbox';\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 defaultAddressType: number;\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 telemetryContent?: ITelemetryContent;\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\nconst getAddessItems = (selectedAddress: Address, props: IAddressAddInputProps): IAddressAddItem[] => {\r\n const {\r\n addressFormat,\r\n addressType,\r\n dropdownDisplayData,\r\n defaultCountryRegionId,\r\n defaultAddressType,\r\n validationError = {},\r\n onInputChange,\r\n onDropdownChange\r\n } = props;\r\n\r\n // @ts-ignore\r\n return addressFormat.map((addressFormatItem, index) => {\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()}`, {\r\n 'msc-address-form__item-newline': addressFormatItem.isNewLine,\r\n 'address-form__item-invalid': errorMessage\r\n });\r\n let input;\r\n\r\n if (addressFormatItem.displayType === AddressItemDisplayType.Input) {\r\n input = (\r\n \r\n );\r\n } else if (addressFormatItem.displayType === AddressItemDisplayType.Checkbox) {\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\r\n if (addressFormatItem.type === AddressItemType.AddressTypeValue) {\r\n selectedValue = selectedValue || defaultAddressType;\r\n }\r\n\r\n input = (\r\n \r\n );\r\n }\r\n\r\n return {\r\n key: addressFormatItem.name,\r\n AddressItem: { className: className, id: `${elementId}_container` },\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 {\r\n editAddressHeading,\r\n addAddressHeading,\r\n selectedAddress = {},\r\n resources,\r\n hasError,\r\n onCancel,\r\n onSave,\r\n hasExternalSubmitGroup,\r\n isUpdating,\r\n addressActionResponse,\r\n telemetryContent\r\n } = props;\r\n const heading = selectedAddress.RecordId ? editAddressHeading : addAddressHeading;\r\n return {\r\n AddressForm: { className: 'msc-address-form' },\r\n heading: heading && ,\r\n items: getAddessItems(selectedAddress, props),\r\n isShowSaveButton: !hasExternalSubmitGroup,\r\n saveButton: onSave && (\r\n \r\n ),\r\n isShowCancelButton: !hasExternalSubmitGroup,\r\n cancelButton: onCancel && (\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 \r\n ),\r\n message: addressActionResponse && addressActionResponse.errorMessage && (\r\n \r\n )\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 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 = ({ isNewLine, isShowLabel, labelText, name, value }) => {\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\r\n ? `msc-address-detail__item msc-address-detail__item-address-detail_${labelText}`\r\n : classname(className, { 'msc-address-detail__item-empty': isEmpty, 'msc-address-detail__item-newline': isNewLine });\r\n return (\r\n \r\n {isShowLabel && (\r\n <>\r\n {labelText}\r\n \r\n \r\n )}\r\n {value}\r\n \r\n );\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, AddressPurpose } 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 addressPurposes: AddressPurpose[];\r\n}\r\n\r\nexport const AddressShow = (props: IAddressShowInputProps): IAddressShowProps => {\r\n const { addressFormat, addressPurposes, address } = props;\r\n\r\n return {\r\n AddressDetail: { className: 'msc-address-detail' },\r\n items: addressFormat.map(item => {\r\n if (item.name === AddressItemType[AddressItemType.AddressTypeValue]) {\r\n const addressType = addressPurposes.find(\r\n addressTypeValue => addressTypeValue.AddressType.toString() === (address[item.name] || '').toString()\r\n );\r\n if (addressType) {\r\n const value = addressType.Name || '';\r\n return {\r\n key: item.name,\r\n description: (\r\n \r\n )\r\n };\r\n }\r\n }\r\n return {\r\n key: item.name,\r\n description: (\r\n \r\n )\r\n };\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 Msdyn365 from '@msdyn365-commerce/core';\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, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { Address, AddressPurpose } 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 removeButton: 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 addressPurposes: AddressPurpose[];\r\n heading?: HeadingData;\r\n primaryAddressSectionHeading?: HeadingData;\r\n otherAddressSectionHeading?: HeadingData;\r\n addressActionResponse?: IAddressResponse;\r\n resources: IAddressResource;\r\n contextRequest: Msdyn365.IRequestContext;\r\n telemetryContent?: ITelemetryContent;\r\n onAddAddress(): void;\r\n onEditAddress(address?: Address): void;\r\n onRemoveAddress(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 = (\r\n className: string,\r\n addresses: Address[],\r\n showPrimaryButton: boolean,\r\n props: IAddressListInputProps,\r\n heading?: HeadingData\r\n): IAddressList => {\r\n const {\r\n resources,\r\n isUpdating,\r\n addressActionResponse,\r\n selectedAddress,\r\n addressFormat,\r\n onEditAddress,\r\n onRemoveAddress,\r\n onUpdatePrimaryAddress,\r\n addressPurposes,\r\n telemetryContent\r\n } = 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(\r\n (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({\r\n addressFormat: addressFormat.getAddressFormat(address.ThreeLetterISORegionName || ''),\r\n address: address,\r\n addressPurposes: addressPurposes\r\n }),\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 {\r\n onUpdatePrimaryAddress(address);\r\n }\r\n }}\r\n />\r\n ),\r\n editButton: (\r\n {\r\n onEditAddress(address);\r\n }\r\n }}\r\n />\r\n ),\r\n removeButton: (\r\n {\r\n onRemoveAddress(address);\r\n }\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, telemetryContent } = props;\r\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\r\n heading!.text = event.target.value;\r\n };\r\n const headingComponent = heading && heading.text && (\r\n \r\n );\r\n\r\n return {\r\n ListAddress: { className: 'ms-address-list' },\r\n heading: headingComponent,\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 * 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\n/* tslint:disable: no-duplicate-imports */\r\nimport classnames from 'classnames';\r\nimport { action, observable, reaction, set } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport {\r\n Address,\r\n AddressPurpose,\r\n CountryRegionInfo,\r\n StateProvinceInfo\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport { IContext } from '@msdyn365-commerce/retail-proxy';\r\nimport { vSIInitiateRestCallAsync } from '../../dotdigital-extension/DataActionExtension.g';\r\nimport { GetCustomerAddressInput } from '../../themes/dobbies/actions/get-customer-address.action';\r\nimport { IDeliveryOption, IPostCodeDropDownOption, IPostCodeVerification } from '../dobbies-checkout-shipping-address';\r\nimport { AutoSuggest } from './common/address-autosuggest';\r\nimport { IAutoSuggestOptions } from './common/address-autosuggest.data';\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 { AddressOperation, AddressType, IAddressResource, IAddressResponse } 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 { IDobbiesLoyaltyAccountManagementAddressData } from './dobbies-loyalty-account-management-address.data';\r\nimport { IDobbiesLoyaltyAccountManagementAddressProps } from './dobbies-loyalty-account-management-address.props.autogenerated';\r\n\r\nexport interface IAccountManagementAddressViewState {\r\n isShowAddresList: boolean;\r\n isShowAddOrUpdateAddress: boolean;\r\n}\r\nexport interface IDobbiesLoyaltyAccountManagementAddressState {\r\n postCodeEmptyErrorMessage: string;\r\n addressOptions: IPostCodeDropDownOption[];\r\n}\r\n\r\nexport interface IAccountManagementAddressViewProps\r\n 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 renderPostCodeSearchInput: React.ReactNode;\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 IDobbiesLoyaltyAccountManagementAddressProps,\r\n IDobbiesLoyaltyAccountManagementAddressState\r\n> {\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 addressPurposes: AddressPurpose[];\r\n private resources: IAddressResource;\r\n private defaultAddressType: number = 6; // Default to Home\r\n private telemetryContent: ITelemetryContent;\r\n private autoSuggest?: AutoSuggest;\r\n /* VSI-Customization -- START post code input ref */\r\n private postCodeInputRef: React.RefObject;\r\n /* VSI-Customization -- END */\r\n\r\n constructor(props: IDobbiesLoyaltyAccountManagementAddressProps) {\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.countryRegions = data.countryRegions.result || [];\r\n this.addressPurposes = data.addressPurposes.result || [];\r\n this.customerAddresses = data.address.result || [];\r\n this.addUpdateAddress = {};\r\n this.validationError = {};\r\n this.addressCommon = new AddressCommon(context, resources, telemetry);\r\n this.addressFormat = new AddressFormat(\r\n this.countryRegions,\r\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\r\n this.addressPurposes\r\n );\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n\r\n /* VSI-Customization -- START post code lookup related (input ref and state) */\r\n this.postCodeInputRef = React.createRef();\r\n this.state = {\r\n addressOptions: [],\r\n postCodeEmptyErrorMessage: ''\r\n };\r\n /* VSI-Customization -- END */\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n const {\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled, autoSuggestOptions }\r\n } = this.props;\r\n // VSI- Customization -- Update the current operation based on user address(s)\r\n const addressCount = (await this.props.data.address).length;\r\n if (addressCount === 0) {\r\n this._goToAddAddress();\r\n }\r\n // Update custom data action and share state across module\r\n this.props.context.actionContext.update(new GetCustomerAddressInput(), { addresses: this.props.data.address.result });\r\n\r\n this.props.data.countryRegions.then(() => {\r\n this._setDefaultCountryRegionId();\r\n });\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 if (autoSuggestionEnabled) {\r\n if (channel && !channel.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n return;\r\n }\r\n\r\n if (channel && !channel.BingMapsEnabled) {\r\n telemetry.error('Map is disabled from HQ.');\r\n return;\r\n }\r\n\r\n const options: IAutoSuggestOptions = { ...autoSuggestOptions };\r\n this.autoSuggest = new AutoSuggest(\r\n telemetry,\r\n options,\r\n channel?.BingMapsApiKey,\r\n channel?.ChannelCountryRegionISOCode,\r\n channel?.DefaultLanguageId\r\n );\r\n\r\n reaction(\r\n () =>\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi !== undefined &&\r\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update),\r\n async () => {\r\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\r\n }\r\n );\r\n\r\n reaction(\r\n () => {\r\n this.props.data.storeSelectorStateManager.result?.isMapApiLoaded;\r\n },\r\n async () => {\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n await this._attachMapAutoSuggest();\r\n }\r\n }\r\n );\r\n }\r\n }\r\n\r\n public async componentDidUpdate(): Promise {\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\r\n await this._attachMapAutoSuggest();\r\n }\r\n } else {\r\n this.autoSuggest?.disposeAutoSuggest();\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { renderView, config } = this.props;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n renderPostCodeSearchInput: this._renderPostCodeInputField(),\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 /* VSI-Customization -- START Post Code Lookup related code */\r\n private findAddress = async (e: React.ChangeEvent) => {\r\n const { value } = e.currentTarget;\r\n if (value && value.length >= 5) {\r\n const context: IContext = { callerContext: this.props.context.actionContext };\r\n const urlParams = {\r\n key: '1024c-01f0c-70dd6-06464',\r\n postcode: this.postCodeInputRef.current?.value,\r\n response: 'data_formatted'\r\n };\r\n const res = await vSIInitiateRestCallAsync(\r\n context,\r\n 'Fetchify',\r\n 'get',\r\n \"{'cache-control':'no-cache' , 'Accept':'application/json'}\",\r\n '',\r\n JSON.stringify(urlParams),\r\n `/json/rapidaddress`\r\n );\r\n if (res.result) {\r\n const responseResult: IPostCodeVerification = JSON.parse(res.result);\r\n /* VSI-Customization -- START If response got from API map it into array and update it with state (setState) */\r\n if (!responseResult.error_msg) {\r\n const addressOptions = this.mapPostCodeOptions(responseResult);\r\n this.setState({ addressOptions: addressOptions, postCodeEmptyErrorMessage: '' });\r\n /* VSI-Customization -- START If error code returns it means postcode isn't valid */\r\n } else {\r\n this.setState({ addressOptions: [], postCodeEmptyErrorMessage: this.props.resources.validPostCodeErrorText });\r\n }\r\n }\r\n } else if (value.length < 5) {\r\n this.setState({ addressOptions: [], postCodeEmptyErrorMessage: '' });\r\n }\r\n };\r\n /* VSI-Customization -- END */\r\n /* VSI-Customization -- START If postcode is invalid display the error text message that please enter a valid postcode */\r\n private _renderEmptyPostCodeErrorMessage = () => {\r\n return (\r\n <>\r\n {this.state.postCodeEmptyErrorMessage && (\r\n
\r\n

{this.state.postCodeEmptyErrorMessage}

\r\n
\r\n )}\r\n \r\n );\r\n };\r\n /* VSI-Customization -- END */\r\n /* VSI-Customization -- START When user selects option from autosuggestion box embed the selected option values into form fields */\r\n private handleAddressOption = (option: IPostCodeDropDownOption) => (e: React.MouseEvent) => {\r\n const { addressOptions } = this.state;\r\n if (addressOptions && addressOptions.length > 0) {\r\n const addressOption = addressOptions.find(x => x.option.toLowerCase() === option.option.toLowerCase());\r\n if (addressOption) {\r\n // populate values into form\r\n this.onAddressAddUpdate('City', addressOption.town);\r\n this.onAddressAddUpdate('Street', `${addressOption.postCode.line_1}, ${addressOption.postCode.line_2}`);\r\n this.onAddressAddUpdate('ZipCode', addressOption.code);\r\n // clear the postcode input field\r\n // clear the array\r\n this.postCodeInputRef.current!.value = '';\r\n this.setState({ addressOptions: [] });\r\n } else {\r\n this.onAddressAddUpdate('City', '');\r\n this.onAddressAddUpdate('Street', '');\r\n this.onAddressAddUpdate('ZipCode', '');\r\n }\r\n }\r\n };\r\n /* VSI-Customization -- END */\r\n /* VSI-Customization -- START Created JSX based on options retrieved from API */\r\n private _renderAddressOptions = (): React.ReactNode => {\r\n const { addressOptions } = this.state;\r\n if (addressOptions && addressOptions.length > 0) {\r\n return (\r\n
\r\n {addressOptions\r\n .sort((a, b) => a.option.localeCompare(b.option))\r\n .map((option: IPostCodeDropDownOption) => {\r\n return (\r\n // tslint:disable-next-line: react-a11y-event-has-role\r\n
\r\n {option.option}\r\n
\r\n );\r\n })}\r\n
\r\n );\r\n }\r\n return;\r\n };\r\n /* VSI-Customization -- END */\r\n /* VSI-Customization -- START Render input field with button */\r\n private _renderPostCodeInputField = () => {\r\n return (\r\n
\r\n \r\n {this.state.addressOptions?.length > 0 ? (\r\n
{this._renderAddressOptions()}
\r\n ) : (\r\n
{this._renderEmptyPostCodeErrorMessage()}
\r\n )}\r\n
\r\n );\r\n };\r\n /* VSI-Customization -- END */\r\n /* VSI-Customization -- START Map response data into array and update state with mapped array */\r\n private mapPostCodeOptions = (data: IPostCodeVerification) => {\r\n const addressOptions: IPostCodeDropDownOption[] = [];\r\n data &&\r\n data.delivery_points.map((option: IDeliveryOption) => {\r\n // create object and push it into array of type IPostCodeDropDownOption\r\n const obj: IPostCodeDropDownOption = {\r\n option: `${option.line_1}, ${option.line_2}, ${data.town}`,\r\n dps: option.dps,\r\n postCode: option,\r\n town: data.town,\r\n code: data.postcode\r\n };\r\n addressOptions.push(obj);\r\n });\r\n return addressOptions;\r\n };\r\n /* VSI-Customization -- END */\r\n\r\n private _renderAddOrUpdateAddress = (): IAddressAddUpdateProps => {\r\n return AddressAddUpdate({\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 defaultAddressType: this.defaultAddressType,\r\n selectedAddress: this.addUpdateAddress,\r\n validationError: this.validationError,\r\n addressActionResponse: this.addressActionResponse,\r\n dropdownDisplayData: this.addressFormat.getPrefilledAddressDropdownData(\r\n this.resources.addressStateDefaultSelectionText,\r\n this.stateProvinceInfo\r\n ),\r\n telemetryContent: this.telemetryContent,\r\n onInputChange: this._onAddressAddUpdateInputChange,\r\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\r\n onSave: this._onAddressAddUpdateSubmit,\r\n onCancel: this._resetView,\r\n /* VSI-Customization -- START Heading issue resolved */\r\n addAddressHeading: this.props.config.addAddressHeading,\r\n editAddressHeading: this.props.config.editAddressHeading\r\n /* VSI-Customization -- END */\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 isUpdating: this.isUpdating,\r\n selectedAddress: this.selectedAddress,\r\n addressFormat: this.addressFormat,\r\n addresses: this.customerAddresses,\r\n addressPurposes: this.addressPurposes,\r\n resources: this.resources,\r\n heading: config.heading,\r\n primaryAddressSectionHeading: config.primaryAddressSectionHeading,\r\n otherAddressSectionHeading: config.otherAddressSectionHeading,\r\n contextRequest: this.props.context.request,\r\n telemetryContent: this.telemetryContent,\r\n onEditAddress: this._goToEditAddress,\r\n onRemoveAddress: this._onRemoveAddress,\r\n onAddAddress: this._goToAddAddress,\r\n onUpdatePrimaryAddress: this._onSubmitUpdatePrimaryAddress\r\n });\r\n };\r\n\r\n private _attachMapAutoSuggest = async (): Promise => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager?.isMapApiLoaded) {\r\n this.autoSuggest?.attachAutoSuggest('#shipping_addressstreet', '#shipping_addressstreet_container', this._onSuggestionSelected);\r\n }\r\n };\r\n\r\n @action\r\n private _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\r\n this._clearAddressFields();\r\n const address = this.addressFormat.getTranformedAddress(result, this.stateProvinceInfo);\r\n set(this.addUpdateAddress, { ['Street']: '' });\r\n set(this.addUpdateAddress, { ['ZipCode']: address.ZipCode });\r\n set(this.addUpdateAddress, { ['CountyName']: address.CountyName });\r\n set(this.addUpdateAddress, { ['City']: address.City });\r\n set(this.addUpdateAddress, { ['State']: address.State });\r\n set(this.addUpdateAddress, { ['DistrictName']: address.DistrictName });\r\n set(this.addUpdateAddress, { ['FullAddress']: address.FullAddress });\r\n // Bing autosuggest put the complete address in the Street input box. Updating the street input box to show only street address.\r\n setTimeout(() => {\r\n set(this.addUpdateAddress, { ['Street']: address.Street });\r\n }, 0);\r\n };\r\n\r\n @action\r\n private _clearAddressFields = (): void => {\r\n const addressFormatItem = this.addressFormat.getAddressFormat(\r\n this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\r\n );\r\n addressFormatItem.forEach(format => {\r\n if (this.addUpdateAddress[format.name] !== undefined && !this.autoSuggest?.excludedAddressFields.includes(format.name)) {\r\n this.addressFormat[format.name] = '';\r\n }\r\n });\r\n this._clearValidation();\r\n };\r\n\r\n @action\r\n private _clearValidation = (): void => {\r\n this.validationError = {};\r\n };\r\n\r\n private onAddressAddUpdate = (name: string, value: string | boolean | number) => {\r\n set(this.addUpdateAddress, { [name]: value });\r\n this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId, name);\r\n };\r\n\r\n private _onAddressAddUpdateInputChange = (event: React.ChangeEvent): void => {\r\n if (event.target.type === 'checkbox') {\r\n this.onAddressAddUpdate(event.target.name, event.target.checked);\r\n } else {\r\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\r\n this.onAddressAddUpdate(event.target.name, value);\r\n }\r\n };\r\n\r\n private _onAddressAddUpdateDropdownChange = (event: React.ChangeEvent): void => {\r\n if (event.target.name === AddressItemType[AddressItemType.AddressTypeValue]) {\r\n this.onAddressAddUpdate(event.target.name, +event.target.value);\r\n } else {\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 // Update the custom data action and share state across modules\r\n this.props.context.actionContext.update(new GetCustomerAddressInput(), { addresses: result.customerAddresses });\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 let response: Promise;\r\n if (this.addressCommon.isAuthenticatedFlow()) {\r\n response =\r\n this.currentOperation === AddressOperation.Update\r\n ? this.addressCommon.updateCustomerAddress(this.addUpdateAddress)\r\n : 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 const twoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(countryRegionId);\r\n set(this.addUpdateAddress, { ['ThreeLetterISORegionName']: countryRegionId });\r\n set(this.addUpdateAddress, { ['TwoLetterISORegionName']: twoLetterISORegionName });\r\n this.autoSuggest?.changeAutoSuggestionCountryCode(twoLetterISORegionName);\r\n this._clearAddressFields();\r\n };\r\n\r\n private _getAddressFormatExcludeList = (): AddressItemType[] => {\r\n const { config } = this.props;\r\n const addressFormatExcludeList: AddressItemType[] = [];\r\n\r\n if (!config.showAddressType) {\r\n addressFormatExcludeList.push(AddressItemType.AddressTypeValue);\r\n }\r\n\r\n addressFormatExcludeList.push(AddressItemType.IsPrimary);\r\n\r\n return addressFormatExcludeList;\r\n };\r\n\r\n private _getStateProvinces = (): void => {\r\n if (\r\n !this.countryRegionId ||\r\n !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\r\n ) {\r\n return;\r\n }\r\n\r\n // tslint:disable-next-line:no-floating-promises\r\n this.addressCommon.getStateProvinces(this.countryRegionId).then((result: StateProvinceInfo[]) => {\r\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\r\n // Reset state if selected state not found in the list.\r\n if (!stateInfo) {\r\n set(this.addUpdateAddress, { ['State']: '' });\r\n }\r\n this.stateProvinceInfo = result;\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 _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 _onRemoveAddress = (address: Address): void => {\r\n address.Deactivate = true;\r\n const response = this.addressCommon.updateCustomerAddress(address);\r\n this._onAddressUpdate(response, this._onAddOrUpdateSuccess);\r\n };\r\n\r\n private _goToAddAddress = (): void => {\r\n this.addUpdateAddress = {};\r\n this._setDefaultCountryRegionId();\r\n set(this.addUpdateAddress, { ['ThreeLetterISORegionName']: this.countryRegionId });\r\n set(this.addUpdateAddress, { ['AddressTypeValue']: this.defaultAddressType });\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","/*---------------------------------------------------------------------------------------------\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\n/* tslint:disable: no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport {\r\n IAddressList,\r\n IAddressListItem,\r\n IAddressListProps,\r\n IAddressShowItem,\r\n IAddressShowProps,\r\n IAddressAddItem,\r\n IAddressAddUpdateProps\r\n} from '@msdyn365-commerce-modules/address';\r\nimport { IAccountManagementAddressViewProps } from './dobbies-loyalty-account-management-address';\r\n\r\nconst AddressShow: React.FC = ({ AddressDetail, items }) => {\r\n return (\r\n \r\n {items &&\r\n items.map((item: IAddressShowItem) => {\r\n const { key, description } = item;\r\n if (key.toLowerCase() !== 'threeletterisoregionname') {\r\n return <>{description};\r\n }\r\n return;\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst AddressList: React.FC = ({ List, isShowList, heading, items }) => {\r\n if (!isShowList) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {heading}\r\n {items &&\r\n items.map((item: IAddressListItem) => {\r\n const { Item, key, error, showItems, isShowPrimaryButton, primaryButton, editButton, removeButton } = item;\r\n const { Error, isShowError, title, message } = error;\r\n return (\r\n \r\n \r\n {isShowError && (\r\n \r\n {title}\r\n {message}\r\n \r\n )}\r\n {isShowPrimaryButton && primaryButton}\r\n {editButton}\r\n {removeButton}\r\n \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 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 postCodeInput\r\n}) => {\r\n return (\r\n \r\n {heading}\r\n {/* VSI-Customization -- START Render input field for postcode and button */}\r\n {postCodeInput}\r\n {/* VSI-Customization -- END */}\r\n {/* Customization to hide country from form */}\r\n {items &&\r\n items.map((item: IAddressAddItem) => {\r\n const { AddressItem, key, label, alert, input } = item;\r\n if (key.toLowerCase() !== 'threeletterisoregionname') {\r\n return (\r\n \r\n {label}\r\n {alert}\r\n {input}\r\n \r\n );\r\n } else {\r\n return;\r\n }\r\n })}\r\n {hasError && (\r\n \r\n {error.title}\r\n {error.message}\r\n \r\n )}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n \r\n );\r\n};\r\n\r\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\n};\r\n\r\nexport default AccountManagementAddressView;\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\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { Address } from '@msdyn365-commerce/retail-proxy';\r\n\r\n/**\r\n * GetCustomerAddress Input Action\r\n */\r\n\r\nexport class GetCustomerAddressInput implements Msdyn365.IActionInput {\r\n // TODO: Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () => `customerAddress`;\r\n public getCacheObjectType = () => 'customerAddress';\r\n public dataCacheType = (): Msdyn365.CacheType => 'request';\r\n}\r\n\r\n// TODO: Create a data model here or import one to capture the response of the action\r\nexport interface IGetCustomerAddressData {\r\n addresses: Address[] | undefined;\r\n}\r\n\r\n/**\r\n * TODO: Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (args: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\r\n return new GetCustomerAddressInput();\r\n};\r\n\r\n/**\r\n * TODO: Use this function to call your action and process the results as needed\r\n */\r\nasync function action(input: GetCustomerAddressInput, ctx: Msdyn365.IActionContext): Promise {\r\n return { addresses: undefined };\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n id: 'GetCustomerAddress',\r\n input: createInput\r\n});\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['dobbies-loyalty-account-management-address'] = {\n c: () => require('partner/modules/dobbies-loyalty-account-management-address/dobbies-loyalty-account-management-address.tsx'),\n $type: 'contentModule',\n da: [{name:'address', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-address', runOn: 0},{name:'addressPurposes', path:'@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes', runOn: 0},{name:'countryRegions', path:'@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions', runOn: 0},{name:'getCustomerAddress', path:'themes/dobbies/actions/get-customer-address.action', runOn: 0},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'dobbies-loyalty-account-management-address',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/dobbies-loyalty-account-management-address'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes';\n let dataAction = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions';\n let dataAction = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n let dataAction = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-address';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-address');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'themes/dobbies/actions/get-customer-address.action';\n let dataAction = require('partner/themes/dobbies/actions/get-customer-address.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|dobbies-loyalty-account-management-address|dobbies-loyalty-account-management-address'] = {\n c: () => require('partner/modules/dobbies-loyalty-account-management-address/dobbies-loyalty-account-management-address.view.tsx'),\n cn: '__local__-__local__-dobbies-loyalty-account-management-address'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getAddressPurposesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { buildCacheKey, QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for get Address Purposes data action.\n */\nexport class GetAddressPurposesInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('AddressPurpose', this.apiSettings);\n\n public getCacheObjectType = () => 'AddressPurpose';\n\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nconst createInput = (inputData: ICreateActionContext>): GetAddressPurposesInput => {\n return new GetAddressPurposesInput(inputData.requestContext.apiSettings);\n};\n\nexport async function getAddressPurposesAction(input: GetAddressPurposesInput, ctx: IActionContext): Promise {\n return getAddressPurposesAsync({\n callerContext: ctx,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx)\n });\n}\n\nexport const getAddressPurposesActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/address/get-address-purposes',\n action: >getAddressPurposesAction,\n input: createInput\n});\n\nexport default getAddressPurposesActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getCountryRegionsByLanguageIdAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { CountryRegionInfo } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for get country regions data action.\n */\nexport class GetCountryRegionsInput implements IActionInput {\n public locale: string;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(locale: string, apiSettings: ICommerceApiSettings) {\n this.locale = locale;\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`CountryRegionInfo-${this.locale}`, this.apiSettings);\n\n public getCacheObjectType = () => 'CountryRegionInfo';\n\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nconst createInput = (inputData: ICreateActionContext>): GetCountryRegionsInput => {\n if (!(inputData.requestContext && inputData.requestContext.locale)) {\n throw new Error('Unable to create country regions input. Locale is not provided.');\n }\n\n return new GetCountryRegionsInput(inputData.requestContext.locale, inputData.requestContext.apiSettings);\n};\n\nexport async function getCountryRegionsAction(input: GetCountryRegionsInput, ctx: IActionContext): Promise {\n // This API is returning more that 100 records. So, can't use the default page size for this.\n // Removing the query result setting.\n return getCountryRegionsByLanguageIdAsync({ callerContext: ctx, queryResultSettings: {} }, input.locale);\n}\n\nexport const getCountryRegionsActionDataAction = createObservableDataAction({\n action: >getCountryRegionsAction,\n input: createInput\n});\n\nexport default getCountryRegionsActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\nimport { action, computed, observable } from 'mobx';\n\nimport {\n IListMapViewState,\n ILoadMapApiInput,\n IStoreInfo,\n IStoreSelectionStateContext,\n IStoreSelectorLocation,\n IStoreSelectorStateManager\n} from './i-store-selection-state-manager';\n\n/**\n * Abstract instance of IStoreSelectorStateManager with base implementation\n * of everything except the geoLocate function.\n */\nexport abstract class BaseStoreSelectorStateManager implements IStoreSelectorStateManager {\n @computed public get isDialogOpen(): Readonly {\n return this._context !== undefined;\n }\n\n @computed public get context(): Readonly {\n return this._context;\n }\n\n @observable public isMapApiLoaded?: boolean;\n\n @observable public selectedStoreLocationId?: string;\n\n @observable public preferredStore?: IStoreInfo;\n\n @observable public listMapViewState: IListMapViewState = { displayList: true, displayMap: false };\n\n @observable public isMapModuleLoaded?: boolean;\n\n @observable public lastInlineShownStoreInfo?: IStoreInfo;\n\n @observable protected _context?: IStoreSelectionStateContext;\n\n private readonly preferredStoreLocalStorageKey: string = '_msdyn365__preferredStore_';\n\n constructor() {\n this.isMapModuleLoaded = false;\n const value = this._readFromToCookie(this.preferredStoreLocalStorageKey);\n try {\n const storeInfo: IStoreInfo | undefined = value ? JSON.parse(value) : undefined;\n if (storeInfo) {\n this.preferredStore = storeInfo;\n }\n } catch {\n this.preferredStore = undefined;\n }\n }\n\n public abstract geoLocate(searchTerm: string, actionContext: IActionContext): Promise;\n\n public abstract loadMapApi(input: ILoadMapApiInput): Promise;\n\n @action\n public async toggleListMapViewState(): Promise {\n this.listMapViewState = {\n displayList: !this.listMapViewState.displayList,\n displayMap: !this.listMapViewState.displayMap\n };\n }\n\n @action\n public async setMapModuleLoaded(input: boolean): Promise {\n this.isMapModuleLoaded = input;\n }\n\n @action\n public async setOrgUnitStoreInformation(input: IStoreSelectionStateContext): Promise {\n this._context = input;\n }\n\n @action\n public async setSelectedStoreLocationId(storeId: string | undefined): Promise {\n this.selectedStoreLocationId = storeId;\n }\n\n @action\n public async setPreferredStoreLocation(\n storeId?: string,\n storeName?: string | undefined,\n writeToCookie: boolean = false,\n latitude?: number,\n longitude?: number\n ): Promise {\n const storeInfo: IStoreInfo = { StoreId: storeId, StoreName: storeName, Latitude: latitude, Longitude: longitude };\n this.preferredStore = storeInfo;\n if (writeToCookie) {\n this._writeToCookie(this.preferredStoreLocalStorageKey, JSON.stringify(storeInfo));\n }\n }\n\n @action\n public async setLastInlineStoreInfo(latitude?: number, longitude?: number): Promise {\n const storeInfo: IStoreInfo = { StoreId: '', StoreName: '', Latitude: latitude, Longitude: longitude };\n this.lastInlineShownStoreInfo = storeInfo;\n }\n\n @action\n public async clearPreferredStore(writeToCookie: boolean): Promise {\n this.preferredStore = undefined;\n if (writeToCookie) {\n this._removeCookie(this.preferredStoreLocalStorageKey);\n }\n }\n\n @action\n public async openDialog(input: IStoreSelectionStateContext): Promise {\n if (this._context && this._context.id === input.id) {\n throw new Error('Dialog is already opened');\n }\n\n this._context = input;\n }\n\n @action\n public async closeDialog(): Promise {\n this._context = undefined;\n }\n\n private _removeCookie(key: string): void {\n if (!key) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.removeItem(key);\n }\n }\n\n private _writeToCookie(key: string, value: string | undefined): void {\n if (!key || !value) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.setItem(key, value);\n }\n }\n\n private _readFromToCookie(key: string): string | undefined {\n if (!key) {\n return undefined;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n const cookieValue = storage.getItem(key);\n if (cookieValue) {\n return cookieValue;\n }\n }\n\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { action } from 'mobx';\n\nimport { BaseStoreSelectorStateManager } from './base-store-selector-state-manager';\nimport { ILoadMapApiInput, IStoreSelectorLocation } from './i-store-selection-state-manager';\nimport { IMapWindow, MapLocationsResult } from './models/map-data';\n\ndeclare const window: IMapWindow;\n\n/**\n * Instance of IStoreSelectorStateManager manager that uses Map service\n * for geo location.\n */\nexport class MapStoreSelectorStateManager extends BaseStoreSelectorStateManager {\n private readonly SERVICE_ENDPOINT: string = 'https://dev.virtualearth.net/REST/v1/';\n\n private readonly MAP_API_ENDPOINT: string = 'https://www.bing.com/api/maps/mapcontrol?callback=mapAPIReady';\n\n @action\n public async geoLocate(searchTerm: string, actionContext: IActionContext): Promise {\n if (\n !searchTerm ||\n !actionContext.requestContext.channel ||\n !actionContext.requestContext.channel.BingMapsApiKey ||\n !actionContext.requestContext.channel.BingMapsEnabled\n ) {\n return undefined;\n }\n\n let searchContent: string = searchTerm;\n\n const jsonp = `mapSearchCallback_${crypto.getRandomValues(new Uint32Array(1))[0]}`;\n\n if (actionContext.requestContext.channel.ChannelCountryRegionISOCode) {\n searchContent = `${searchTerm.trim()} ${actionContext.requestContext.channel.ChannelCountryRegionISOCode}`;\n }\n\n const query = encodeURI(searchContent);\n const key = encodeURI(actionContext.requestContext.channel.BingMapsApiKey);\n\n const geolocationApiUrl =\n actionContext.requestContext.app &&\n actionContext.requestContext.app.config &&\n actionContext.requestContext.app.config.geolocationApiUrl;\n const requestUrl = `${\n geolocationApiUrl ? geolocationApiUrl : this.SERVICE_ENDPOINT\n }/Locations?query=${query}&key=${key}&jsonp=${jsonp}`;\n\n return new Promise(resolve => {\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('src', requestUrl);\n\n window[jsonp] = (data: MapLocationsResult) => {\n delete window[jsonp];\n script.remove();\n\n if (data && data.resourceSets && data.resourceSets.length > 0 && data.resourceSets[0].resources.length > 0) {\n resolve({\n latitude: data.resourceSets[0].resources[0].point.coordinates[0],\n longitude: data.resourceSets[0].resources[0].point.coordinates[1]\n });\n }\n\n resolve(undefined);\n };\n\n document.body.appendChild(script);\n });\n }\n\n @action\n public async loadMapApi(input: ILoadMapApiInput): Promise {\n if (StringExtensions.isNullOrEmpty(input.key)) {\n return Promise.resolve();\n }\n\n const isScriptAlreadyLoaded = !!document?.getElementById('msdyn_map-api-script');\n\n if (isScriptAlreadyLoaded) {\n if (window) {\n const currentWindowAPI = window.mapAPIReady;\n window.mapAPIReady = () => {\n if (currentWindowAPI) {\n currentWindowAPI();\n }\n this.isMapApiLoaded = true;\n };\n }\n // Prevents from loading multiple script into the body\n return Promise.resolve();\n }\n\n const url = `${this.MAP_API_ENDPOINT}${input.key ? `&key=${input.key}` : ''}${input.lang ? `&setLang=${input.lang}` : ''}${\n input.market ? `&setMkt=${input.market}` : ''\n }`;\n\n return new Promise((resolve, reject) => {\n const script = document?.createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.defer = true;\n script.src = url;\n script.id = 'msdyn_map-api-script';\n if (window) {\n window.mapAPIReady = () => {\n this.isMapApiLoaded = true;\n resolve();\n };\n }\n script.addEventListener('error', (error: string | Event) => {\n reject(error);\n });\n document?.body?.appendChild(script);\n });\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IStoreSelectorStateManager } from './i-store-selection-state-manager';\nimport { MapStoreSelectorStateManager } from './map-store-selector-state-manager';\n\nexport function createStoreSelectorStateInput(result: IStoreSelectorStateManager): GenericInput {\n return new GenericInput('mapSSSM', result, 'IStoreSelectorStateManager');\n}\n\nconst createStoreSelectorStateInputInternal = (inputData: ICreateActionContext>): IActionInput => {\n return createStoreSelectorStateInput(new MapStoreSelectorStateManager());\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createStoreSelectorStateInputInternal\n});\n\nexport default getGenericActionDataAction;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["VSIRestAPIHandlerExtensionClass","constructor","odataObject","this","Id","result","ExtensionProperties","undefined","i","length","className","substr","lastIndexOf","concat","EntityClasses","createVSIInitiateRestCallInput","targetSystem","methodType","requestHeader","requestBody","urlParams","servicePath","id","key","DataServiceQuery","DataServiceEntities","vSIGetAPIResponseQuery","createDataServiceRequestForOperation","bypassCache","returnEntity","vSIInitiateRestCallAsync","context","request","callActionOrExecute","callerContext","AutoSuggest","telemetry","autoSuggestOptions","BingMapsApiKey","countryCode","defaultLanguageId","excludedAddressFields","attachAutoSuggest","inputId","containerId","selectedSuggestionCallback","autoSuggestManager","Microsoft","Maps","loadModule","callback","_document$querySelect","options","_objectSpread","AutosuggestManager","attachAutosuggest","document","querySelector","setAttribute","setTimeout","_document$querySelect2","errorCallback","debug","credentials","bingMapsApiKey","changeAutoSuggestionCountryCode","setOptions","disposeAutoSuggest","_this$autoSuggestMana","_this$autoSuggestMana2","detachAutosuggest","dispose","_loadMapAPI","async","storeSelectorStateManager","loadMapApi","lang","market","GetStateProvincesInput","countryRegionId","apiSettings","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","getStateProvinceAction","input","ctx","getStateProvincesAsync","queryResultSettings","createObservableDataAction","action","AddressCommon","resources","getDefaultCountryRegionId","countryRegions","marketISOCode","currentCountryRegion","find","countryRegion","ISOCode","CountryRegionId","parseRetailException","errorTitle","addressErrorMessageTitle","errorMessage","addressGenericErrorMessage","isAuthenticatedFlow","user","isAuthenticated","getStateProvinces","response","actionContext","error","Promise","resolve","isEmpty","address","ThreeLetterISORegionName","State","City","addCustomerAddress","submitCustomerAddress","addAddress","updateCustomerAddress","updateAddress","updateCustomerPrimaryAddress","updatePrimaryAddress","addressAction","AddressTypeValue","AddressManagementInput","execAddressAction","addresses","RecordId","customerAddresses","AddressItemDisplayType","AddressValidationRuleType","AddressItemType","AddressOperation","AddressType","AddressFormat","countryRegionsInfo","addressMetaData","addressPurposes","getPrefilledAddressDropdownData","stateDefaultSelectionText","stateProvinceInfo","defaultStateText","value","dropdownData","getCountryFormat","getStateFormat","unshift","getAddressTypeFormat","getTwoLetterISORegionName","_getCountryRegionInfo","validateAddressFormat","validationError","propertyName","validationtor","isValid","getAddressFormat","forEach","addressFormatItem","name","_inputValidation","getTranformedAddress","postalCode","ZipCode","selectedState","state","StateName","adminDistrict","StateId","addressLine","Street","locality","district","DistrictName","CountyName","FullAddress","formattedAddress","_validateRegEx","validationRule","regEx","RegExp","test","get","countryRegionInfo","_getAddressDisplayFormat","map","ShortName","addressPurpose","Name","set","validationRules","message","toLowerCase","addressDisplayItem","AddressFormatLines","AddressTypeItem","_extendAddressDisplayFormat","push","nameDisplayItem","formatLine","AddressComponentNameValue","addressItem","getItemFormat","isNewLine","NewLine","phoneDisplayItem","Phone","isPrimaryDisplayItem","IsPrimary","type","AddressMetaData","excluded","required","metaData","requiredFieldRegEx","resourcesPrefix","maxLength","excludedTypes","requiredFields","_init","item","_addItem","Input","County","Dropdown","District","StreetNumber","BuildingCompliment","Postbox","House_RU","Flat_RU","CountryOKSMCode_RU","Checkbox","displayType","includes","nameKey","replace","_validationRules","isRequired","rule","Required","optionalString","label","ruleType","Object","keys","itemType","_validationRule","_ref","React","role","text","ariaLabel","disabled","telemetryContent","onClick","payLoad","getPayloadObject","attributes","getTelemetryAttributes","assign","isChecked","additionalAddributes","autoFocus","onChange","checked","displayData","getDropdownItem","selectedValue","isSelected","title","isPhone","patternAttribute","pattern","htmlFor","getRequriedAttribute","getAddessItems","selectedAddress","props","addressFormat","addressType","dropdownDisplayData","defaultCountryRegionId","defaultAddressType","onInputChange","onDropdownChange","index","elementId","classname","AddressInputComponent","AdressCheckboxComponent","AdressDropdownComponent","AddressItem","AddressLabelComponent","alert","AddressAlertComponent","isShowLabel","labelText","mainClass","AddressShow","AddressDetail","items","addressTypeValue","toString","description","AddressDetailItemComponent","getButtonAriaLabel","addressName","getAddressList","showPrimaryButton","heading","isUpdating","addressActionResponse","onEditAddress","onRemoveAddress","onUpdatePrimaryAddress","List","isShowList","Heading","isSelectedAddress","isShowError","Item","showItems","Error","AddressErrorTitleComponent","AddressErrorMessageComponent","isShowPrimaryButton","primaryButton","AddressButtonComponent","addressPrimaryButtonText","addressPrimaryButtonAriaLabel","editButton","addressEditButtonText","addressEditButtonAriaLabel","removeButton","addressRemoveButtonText","addressRemoveButtonAriaLabel","getPrimaryAddressList","primaryAddressSectionHeading","primaryAddresses","filter","getOtherAddressList","otherAddressSectionHeading","otherAddresses","AccountManagementAddress","super","findAddress","e","currentTarget","_this$postCodeInputRe","postcode","postCodeInputRef","current","res","JSON","stringify","responseResult","parse","error_msg","setState","addressOptions","postCodeEmptyErrorMessage","validPostCodeErrorText","mapPostCodeOptions","_renderEmptyPostCodeErrorMessage","handleAddressOption","option","addressOption","x","onAddressAddUpdate","town","postCode","line_1","line_2","code","_renderAddressOptions","sort","a","b","localeCompare","dps","_renderPostCodeInputField","_this$state$addressOp","ref","placeholder","enterPostCodePlaceholderText","data","delivery_points","obj","_renderAddOrUpdateAddress","editAddressHeading","addAddressHeading","hasError","onCancel","onSave","hasExternalSubmitGroup","AddressForm","isShowSaveButton","saveButton","addressSaveButtonText","addressSaveButtonAriaLabel","isShowCancelButton","cancelButton","addressCancelButtonText","addressCancelButtonAriaLabel","AddressError","AddressAddUpdate","Shipping","addUpdateAddress","addressStateDefaultSelectionText","_onAddressAddUpdateInputChange","_onAddressAddUpdateDropdownChange","_onAddressAddUpdateSubmit","_resetView","config","_renderListAddress","onAddAddress","ListAddress","Msdyn365","tag","headingTag","editProps","onEdit","event","target","requestContext","contextRequest","isShowEmptyListMessage","emptyListMessage","addressEmptyListAddressMessage","addButton","addressAddButtonText","addressAddButtonAriaLabel","primaryAddressList","otherAddressList","AddressList","_goToEditAddress","_onRemoveAddress","_goToAddAddress","_onSubmitUpdatePrimaryAddress","_attachMapAutoSuggest","_this$autoSuggest","isMapApiLoaded","autoSuggest","_onSuggestionSelected","_clearAddressFields","format","_this$autoSuggest2","_clearValidation","_onCountryChange","_onAddressUpdate","onSuccess","then","update","GetCustomerAddressInput","addressCommon","currentOperation","Update","_onAddOrUpdateSuccess","_this$autoSuggest3","twoLetterISORegionName","_getAddressFormatExcludeList","addressFormatExcludeList","showAddressType","_getStateProvinces","Add","some","_updateCurrentOperation","operation","_onUpdatePrimaryAddressSuccess","Deactivate","_setDefaultCountryRegionId","getTelemetryObject","telemetryPageName","friendlyName","channel","autoSuggestionEnabled","reaction","BingMapsEnabled","ChannelCountryRegionISOCode","DefaultLanguageId","_this$props$data$stor","_this$autoSuggest4","_this$props$data$stor2","_this$props$data$stor3","_this$autoSuggest5","render","renderView","renderPostCodeSearchInput","viewState","isShowAddresList","isShowAddOrUpdateAddress","AccountAddressManagement","moduleProps","classnames","showAddressList","showAddOrUpdateAddress","__decorate","observable","observer","Node","_ref2","AddressLists","_ref3","_ref4","postCodeInput","Module","args","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","path","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","viewDictionary","cn","GetAddressPurposesInput","getAddressPurposesAction","getAddressPurposesAsync","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","getAddressPurposesActionDataAction","inputData","GetCountryRegionsInput","locale","getCountryRegionsAction","getCountryRegionsByLanguageIdAsync","getCountryRegionsActionDataAction","BaseStoreSelectorStateManager","listMapViewState","displayList","displayMap","preferredStoreLocalStorageKey","isMapModuleLoaded","_readFromToCookie","storeInfo","preferredStore","_unused","_context","storeId","selectedStoreLocationId","storeName","writeToCookie","arguments","StoreId","StoreName","Latitude","Longitude","_writeToCookie","latitude","longitude","lastInlineShownStoreInfo","_removeCookie","MsDyn365","isBrowser","localStorage","removeItem","setItem","cookieValue","getItem","computed","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchTerm","searchContent","jsonp","crypto","getRandomValues","Uint32Array","trim","query","encodeURI","geolocationApiUrl","app","requestUrl","script","createElement","remove","resourceSets","point","coordinates","body","appendChild","_document","StringExtensions","isNullOrEmpty","getElementById","currentWindowAPI","mapAPIReady","url","reject","_document2","_document3","defer","src","addEventListener","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","getGenericAction","module","exports","ReactDOM"],"sourceRoot":""}