{"version":3,"file":"static/js/55b458c41b89761b6dde.bundle.js","mappings":"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","sources":["webpack://Dobbies.Commerce/./src/actions/checkout-modules-state-share.ts?faea","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-checkout-shipping-address/actions/get-address-purposes.ts?1aa7","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/actions/get-country-regions.ts?d476","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/actions/get-country-state.ts?ca54","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/actions/get-state-provinces.ts?b95e","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/address-autosuggest.ts?405f","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/address-format.data.ts?3c20","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/address-module.data.ts?d0c1","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/address-common.ts?d1d3","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/address-format.ts?1971","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/address-meta-data.ts?5708","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/components/address-alert.tsx?7a64","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/components/address-button.tsx?ee02","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/components/address-checkbox.tsx?e89f","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/components/address-dropdown.tsx?a012","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/components/address-error-message.tsx?f11f","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/components/address-error-title.tsx?a6f5","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/components/address-input.tsx?8091","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/components/address-label.tsx?425c","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/components/address-add.tsx?7608","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/components/address-detail-item.tsx?422e","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/components/address-show.tsx?68de","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/common/components/address-select.tsx?57fd","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/dobbies-checkout-shipping-address.tsx?f950","webpack://Dobbies.Commerce/./src/modules/dobbies-checkout-shipping-address/dobbies-checkout-shipping-address.view.tsx?da65","webpack://Dobbies.Commerce/./src/themes/dobbies/actions/search-by-criteria.ts?6a4e","webpack://Dobbies.Commerce/./src/themes/dobbies/utilities/post-code-restriction/get-restricted-products.tsx?5e6d","webpack://Dobbies.Commerce/./src/themes/dobbiesclub/views/dobbies-checkout-shipping-address.view.tsx?2f0b","webpack://Dobbies.Commerce/./lib/dobbies-checkout-shipping-address/module-registration.js?2b9e","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/../../src/checkout-state-data-action.ts?8344","webpack://Dobbies.Commerce/../../src/checkout-state.ts?acd8","webpack://Dobbies.Commerce/../../src/checkout-utilities.data.ts?b2cc","webpack://Dobbies.Commerce/../../../src/module-state-manager/module-state.ts?7579","webpack://Dobbies.Commerce/../../../src/module-state-manager/with-module-state.tsx?61ca","webpack://Dobbies.Commerce/external var \"React\"?0d3b","webpack://Dobbies.Commerce/external var \"ReactDOM\"?853b"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\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 {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\n\r\n/**\r\n * CheckoutModulesStateShare Input Action\r\n */\r\n\r\nexport class CheckoutModulesStateShareInput implements 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 = () => `checkoutModulesSharedState`;\r\n public getCacheObjectType = () => 'checkoutModulesSharedState';\r\n public dataCacheType = (): 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 ICheckoutModulesSharedState {\r\n invalidAddressForCartProducts?: boolean; // Used to display msg in delivery section\r\n notBtPostCode?: boolean; // Used to display msg in shipping address section\r\n isFirstAddress?: boolean; // Check if it is guest checkout or if loggedIn user enters address for the first time and doesn't have any saved address\r\n loggedInUserNewAddress?: boolean; // Check if it is loggedIn user and tries to add NEW address for second or onwards time, dont disbale shipping address buttom but delivery options if there is restriction case\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 = (inputData: ICreateActionContext>): IActionInput => {\r\n return new CheckoutModulesStateShareInput();\r\n};\r\n/**\r\n * TODO: Use this function to call your action and process the results as needed\r\n */\r\nexport async function sampleStateAction(input: CheckoutModulesStateShareInput, ctx: IActionContext): Promise {\r\n return {\r\n invalidAddressForCartProducts: undefined,\r\n notBtPostCode: undefined,\r\n isFirstAddress: undefined,\r\n loggedInUserNewAddress: undefined\r\n };\r\n}\r\n\r\n/**\r\n * SampleState - create action\r\n */\r\nexport default createObservableDataAction({\r\n action: >sampleStateAction,\r\n input: createInput\r\n});\r\n","// 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","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICommerceApiSettings,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { getAddressPurposesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\nimport { AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { buildCacheKey, QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Input class for get Address Purposes data action.\r\n */\r\nexport class GetAddressPurposesInput implements IActionInput {\r\n private readonly apiSettings: ICommerceApiSettings;\r\n\r\n constructor(apiSettings: ICommerceApiSettings) {\r\n this.apiSettings = apiSettings;\r\n }\r\n\r\n public getCacheKey = () => buildCacheKey('AddressPurpose', this.apiSettings);\r\n\r\n public getCacheObjectType = () => 'AddressPurpose';\r\n\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n/**\r\n * Creates the input required to make the retail api call.\r\n * @param inputData\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): GetAddressPurposesInput => {\r\n return new GetAddressPurposesInput(inputData.requestContext.apiSettings);\r\n};\r\n\r\nexport async function getAddressPurposesAction(input: GetAddressPurposesInput, ctx: IActionContext): Promise {\r\n return getAddressPurposesAsync({\r\n callerContext: ctx,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx)\r\n });\r\n}\r\n\r\nexport const getAddressPurposesActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/address/get-address-purposes',\r\n action: >getAddressPurposesAction,\r\n input: createInput\r\n});\r\n\r\nexport default getAddressPurposesActionDataAction;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICommerceApiSettings,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { getCountryRegionsByLanguageIdAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\nimport { CountryRegionInfo } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Input class for get country regions data action.\r\n */\r\nexport class GetCountryRegionsInput implements IActionInput {\r\n public locale: string;\r\n\r\n private readonly apiSettings: ICommerceApiSettings;\r\n\r\n constructor(locale: string, apiSettings: ICommerceApiSettings) {\r\n this.locale = locale;\r\n this.apiSettings = apiSettings;\r\n }\r\n\r\n public getCacheKey = () => buildCacheKey(`CountryRegionInfo-${this.locale}`, this.apiSettings);\r\n\r\n public getCacheObjectType = () => 'CountryRegionInfo';\r\n\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n/**\r\n * Creates the input required to make the retail api call.\r\n * @param inputData\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): GetCountryRegionsInput => {\r\n if (!(inputData.requestContext && inputData.requestContext.locale)) {\r\n throw new Error('Unable to create country regions input. Locale is not provided.');\r\n }\r\n\r\n return new GetCountryRegionsInput(inputData.requestContext.locale, inputData.requestContext.apiSettings);\r\n};\r\n\r\nexport async function getCountryRegionsAction(input: GetCountryRegionsInput, ctx: IActionContext): Promise {\r\n // This API is returning more that 100 records. So, can't use the default page size for this.\r\n // Removing the query result setting.\r\n return getCountryRegionsByLanguageIdAsync({ callerContext: ctx, queryResultSettings: {} }, input.locale);\r\n}\r\n\r\nexport const getCountryRegionsActionDataAction = createObservableDataAction({\r\n action: >getCountryRegionsAction,\r\n input: createInput\r\n});\r\n\r\nexport default getCountryRegionsActionDataAction;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICommerceApiSettings,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { CountryRegionInfo, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport { getCountryRegionsAction, GetCountryRegionsInput } from './get-country-regions';\r\nimport { getStateProvinceAction, GetStateProvincesInput } from './get-state-provinces';\r\n\r\n/**\r\n * Input class for get country regions data action.\r\n */\r\nexport class GetCountryStateInput implements IActionInput {\r\n public locale: string;\r\n\r\n public apiSettings: ICommerceApiSettings;\r\n\r\n constructor(locale: string, apiSettings: ICommerceApiSettings) {\r\n this.locale = locale;\r\n this.apiSettings = apiSettings;\r\n }\r\n\r\n public getCacheKey = () => buildCacheKey(`CountryStateInfo-${this.locale}`, this.apiSettings);\r\n\r\n public getCacheObjectType = () => 'StateProvinceInfo';\r\n\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n/**\r\n * Creates the input required to make the retail api call.\r\n * @param inputData\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): GetCountryStateInput => {\r\n const { locale, apiSettings } = inputData.requestContext;\r\n if (!(inputData.requestContext && locale)) {\r\n throw new Error('Unable to create country regions input. Locale is not provided.');\r\n }\r\n return new GetCountryStateInput(locale, apiSettings);\r\n};\r\n\r\nexport async function getCountryStateAction(input: GetCountryStateInput, ctx: IActionContext): Promise {\r\n const countryInput = new GetCountryRegionsInput(input.locale, input.apiSettings);\r\n const countryRegionsInfo = await getCountryRegionsAction(countryInput, ctx);\r\n\r\n const channelConfiguration = ctx.requestContext.channel;\r\n\r\n const marketISOCode = (channelConfiguration && channelConfiguration.ChannelCountryRegionISOCode) || 'US';\r\n const currentCountryRegion = countryRegionsInfo.find(countryRegion => (countryRegion.ISOCode || '') === marketISOCode);\r\n const countryRegionId = (currentCountryRegion && currentCountryRegion.CountryRegionId) || 'USA';\r\n\r\n const stateInput = new GetStateProvincesInput(countryRegionId, input.apiSettings);\r\n return getStateProvinceAction(stateInput, ctx);\r\n}\r\n\r\nexport const getCountryStateActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/address/get-country-state',\r\n action: >getCountryStateAction,\r\n input: createInput\r\n});\r\n\r\nexport default getCountryStateActionDataAction;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\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\nimport { buildCacheKey, QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\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\r\n private readonly 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\r\n public getCacheObjectType = () => 'StateProvinceInfo';\r\n\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\nexport async function getStateProvinceAction(input: GetStateProvincesInput, ctx: IActionContext): Promise {\r\n return getStateProvincesAsync(\r\n {\r\n callerContext: ctx,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx)\r\n },\r\n input.countryRegionId\r\n );\r\n}\r\n\r\nexport const getStateProvinceActionDataAction = createObservableDataAction({\r\n action: >getStateProvinceAction\r\n});\r\n\r\nexport default getStateProvinceActionDataAction;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { ITelemetry } from '@msdyn365-commerce/core';\r\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\r\n\r\nimport { IAutoSuggestOptions } from './address-autosuggest.data';\r\n\r\n/**\r\n *\r\n * Auto Suggest.\r\n */\r\nexport class AutoSuggest {\r\n public readonly excludedAddressFields: string[] = ['ThreeLetterISORegionName', 'Name', 'AddressTypeValue', 'Phone'];\r\n\r\n private readonly telemetry: ITelemetry;\r\n\r\n private readonly countryCode?: string;\r\n\r\n private readonly bingMapsApiKey?: string;\r\n\r\n private readonly defaultLanguageId?: string;\r\n\r\n private autoSuggestManager: Microsoft.Maps.AutosuggestManager | undefined;\r\n\r\n private autoSuggestOptions: IAutoSuggestOptions;\r\n\r\n constructor(\r\n telemetry: ITelemetry,\r\n autoSuggestOptions: IAutoSuggestOptions,\r\n BingMapsApiKey?: string,\r\n countryCode?: string,\r\n defaultLanguageId?: string\r\n ) {\r\n this.telemetry = telemetry;\r\n this.autoSuggestOptions = autoSuggestOptions;\r\n this.bingMapsApiKey = BingMapsApiKey;\r\n this.countryCode = countryCode;\r\n this.defaultLanguageId = defaultLanguageId;\r\n }\r\n\r\n public attachAutoSuggest = (\r\n inputId: string,\r\n containerId: string,\r\n selectedSuggestionCallback: (result: Microsoft.Maps.ISuggestionResult) => void\r\n ): void => {\r\n if (!this.autoSuggestManager) {\r\n Microsoft.Maps.loadModule('Microsoft.Maps.AutoSuggest', {\r\n callback: () => {\r\n const options = { ...this.autoSuggestOptions, countryCode: this.countryCode };\r\n this.autoSuggestManager = new Microsoft.Maps.AutosuggestManager(options);\r\n this.autoSuggestManager.attachAutosuggest(inputId, containerId, selectedSuggestionCallback);\r\n document.querySelector(inputId)?.setAttribute('role', 'combobox');\r\n setTimeout(() => {\r\n document.querySelector(inputId)?.setAttribute('type', 'text');\r\n }, 0);\r\n },\r\n errorCallback: () => {\r\n if (this.telemetry) {\r\n this.telemetry.debug('Unable to attach map auto suggest.');\r\n }\r\n },\r\n credentials: this.bingMapsApiKey\r\n });\r\n }\r\n };\r\n\r\n public changeAutoSuggestionCountryCode = (countryCode?: string): void => {\r\n if (this.autoSuggestManager) {\r\n this.autoSuggestOptions.countryCode = countryCode;\r\n this.autoSuggestManager.setOptions(this.autoSuggestOptions);\r\n }\r\n };\r\n\r\n public disposeAutoSuggest = (): void => {\r\n this.autoSuggestManager?.detachAutosuggest();\r\n this.autoSuggestManager?.dispose();\r\n this.autoSuggestManager = undefined;\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public _loadMapAPI = async (storeSelectorStateManager: IStoreSelectorStateManager): Promise => {\r\n await storeSelectorStateManager.loadMapApi({\r\n key: this.bingMapsApiKey,\r\n lang: this.defaultLanguageId,\r\n market: this.countryCode\r\n });\r\n };\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nexport 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 DistrictName = 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\nexport interface IAddressFormatData {\r\n validationRules?: IAddressValidationRule[];\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { Address } from '@msdyn365-commerce/retail-proxy';\r\nimport { Heading } from '@msdyn365-commerce-modules/data-types';\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 Invoice = 'Invoice',\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 addressChangeCheckboxAriaLabel: string;\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 addressDistrictNameLabel: string;\r\n addressDistrictNameLabelOptional?: 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 removeAddressNotification?: string;\r\n}\r\nexport interface IAddressModuleData {\r\n address: Address;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IActionInput, ICoreContext, IObservableAction, ITelemetry } from '@msdyn365-commerce/core';\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\nimport {\r\n addAddress,\r\n AddressManagementInput,\r\n // ArrayExtensions,\r\n updateAddress,\r\n updatePrimaryAddress\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n// import { getAddressPurposesAction, GetAddressPurposesInput } from '../actions/get-address-purposes';\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 readonly context: ICoreContext;\r\n\r\n private readonly resources: IAddressResource;\r\n\r\n private readonly 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 = async (address: Address): Promise => {\r\n // await this.updateLogisticsLocationRoleRecordId(address);\r\n return this.submitCustomerAddress(addAddress, address);\r\n };\r\n\r\n public updateCustomerAddress = async (address: Address): Promise => {\r\n // await this.updateLogisticsLocationRoleRecordId(address);\r\n return this.submitCustomerAddress(updateAddress, address);\r\n };\r\n\r\n public updateCustomerPrimaryAddress = async (address: Address): Promise => {\r\n return this.submitCustomerAddress(updatePrimaryAddress, address);\r\n };\r\n\r\n private readonly submitCustomerAddress = async (\r\n addressAction: IObservableAction,\r\n address: Address\r\n ): 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 readonly 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 /**\r\n * Function to get the address purposes and update the LogisticsLocationRoleRecordId to update the address type.\r\n * @param address - Address object.\r\n * @returns Returns void.\r\n */\r\n // private readonly updateLogisticsLocationRoleRecordId = async (address: Address): Promise => {\r\n // let addressPurposes: AddressPurpose[] = [];\r\n // try {\r\n // const input: GetAddressPurposesInput = new GetAddressPurposesInput(this.context.request.apiSettings);\r\n // addressPurposes = await getAddressPurposesAction(input, this.context.actionContext);\r\n // } catch (error) {\r\n // // eslint-disable-next-line @typescript-eslint/restrict-template-expressions -- Supparsing the any type for error.\r\n // this.telemetry.error(`Error encountered ${error}`);\r\n // this.telemetry.debug('Unable to get address purposes');\r\n // }\r\n // if (ArrayExtensions.hasElements(addressPurposes)) {\r\n // const addressPurpose: AddressPurpose | undefined = addressPurposes.find(\r\n // purpose => purpose.AddressType === address.AddressTypeValue\r\n // );\r\n // if (addressPurpose) {\r\n // address.LogisticsLocationRoleRecordId = addressPurpose.RecordId;\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 */\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\nimport { get, set } from 'mobx';\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 readonly countryRegionsInfo?: CountryRegionInfo[];\r\n\r\n private readonly addressPurposes?: AddressPurpose[];\r\n\r\n private readonly 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.Description\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\r\n private readonly _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) as string) || '');\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","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { PhoneRegex } from '@msdyn365-commerce-modules/retail-actions';\r\n\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 readonly metaData: IAddressItem[] = [];\r\n\r\n private readonly resources: IAddressResource;\r\n\r\n private readonly requiredFieldRegEx: string = '\\\\S';\r\n\r\n private readonly resourcesPrefix: string = 'address';\r\n\r\n private readonly maxLength: number = 64;\r\n\r\n private readonly requiredFields: AddressItemType[];\r\n\r\n private readonly 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.AddressTypeValue,\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, PhoneRegex.defaultRegex);\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.DistrictName, 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, format?: string): 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, format);\r\n const isRequired = validationRules.some(rule => rule.type === AddressValidationRuleType.Required);\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,\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, format?: 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: string = 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 case AddressValidationRuleType.Format: {\r\n validationRules.push(this._validationRule(ruleType, format!, message));\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.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressAlert {\r\n message?: string;\r\n}\r\n\r\n/**\r\n * Address alert.\r\n * @param props - Configuration of the functional component.\r\n * @returns React functional component.\r\n */\r\nexport const AddressAlertFunctionComponent: React.FC = (props: IAdressAlert) => {\r\n const message = props.message;\r\n return (\r\n \r\n {message && <>{message}}\r\n \r\n );\r\n};\r\n\r\nexport default AddressAlertFunctionComponent;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\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 role?: string;\r\n onClick(event: React.MouseEvent): void;\r\n}\r\n\r\n/**\r\n * Address button.\r\n * @param props - Configuration of the functional component.\r\n * @returns React functional component.\r\n */\r\nexport const AddressButtonFunctionComponent: React.FC = (props: IAddressButton) => {\r\n const { className, text, ariaLabel, disabled: isDisabled, telemetryContent, onClick, role } = props;\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 AddressButtonFunctionComponent;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\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\n/**\r\n * Address checkbox.\r\n * @param props - Configuration of the functional component.\r\n * @returns React functional component.\r\n */\r\nexport const AddressCheckboxFunctionComponent: React.FC = (props: IAdressCheckbox) => {\r\n const {\r\n id: itemId,\r\n name,\r\n className,\r\n type,\r\n isChecked,\r\n additionalAddributes,\r\n telemetryContent,\r\n autoFocus: shouldBeAutoFocused,\r\n onChange\r\n } = props;\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 AddressCheckboxFunctionComponent;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\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\n/**\r\n * Address dropdown.\r\n * @param props - Configuration of the functional component.\r\n * @returns React functional component.\r\n */\r\nconst AddressDropdownFunctionComponent: React.FC = ({\r\n id,\r\n name,\r\n className,\r\n value,\r\n additionalAddributes,\r\n displayData,\r\n onChange\r\n}) => (\r\n \r\n);\r\n\r\nexport default AddressDropdownFunctionComponent;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressErrorMessage {\r\n message: string;\r\n}\r\n\r\n/**\r\n * Address error message.\r\n * @param props - Configuration of the functional component.\r\n * @returns React functional component.\r\n */\r\nexport const AddressErrorMessageFunctionComponent: React.FC = (props: IAdressErrorMessage) => {\r\n const { message } = props;\r\n\r\n return

{message}

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

{title}

;\r\n};\r\n\r\nexport default AddressErrorTitleFunctionComponent;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\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\n/**\r\n * Address input.\r\n * @param props - Configuration of the functional component.\r\n * @returns React functional component.\r\n */\r\nexport const AddressInputFunctionComponent: React.FC = (props: IAdressInput) => {\r\n const {\r\n id: itemId,\r\n name,\r\n className,\r\n type,\r\n value,\r\n maxLength,\r\n additionalAddributes,\r\n autoFocus: shouldUseAutoFocus,\r\n telemetryContent,\r\n onChange\r\n } = props;\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 AddressInputFunctionComponent;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nexport interface IAdressLabel {\r\n id: string;\r\n text: string;\r\n}\r\n\r\n/**\r\n * Address label.\r\n * @param props - Configuration of the functional component.\r\n * @returns React functional component.\r\n */\r\nexport const AddressLabelFunctionComponent: React.FC = (props: IAdressLabel) => {\r\n const { id: itemId, text } = props;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default AddressLabelFunctionComponent;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { Address } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { Heading as HeadingData } from '@msdyn365-commerce-modules/data-types';\r\nimport { Heading, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classname from 'classnames';\r\nimport { get } from 'mobx';\r\nimport * as React from 'react';\r\n\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 { AddressType, IAddressResource, IAddressResponse } from '../../common/address-module.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\nimport { IPostCodeDropDownOption } from '../..';\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 postalOptions: IPostCodeDropDownOption[];\r\n shouldAutoFocus?: boolean;\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 postalOptions,\r\n validationError = {},\r\n onInputChange,\r\n onDropdownChange,\r\n shouldAutoFocus\r\n } = props;\r\n\r\n return addressFormat.map((addressFormatItem, index) => {\r\n const elementId = `${addressType.toLowerCase()}_address${addressFormatItem.name.toLowerCase()}`;\r\n let errorMessage = get(validationError, addressFormatItem.name);\r\n const addr = selectedAddress[addressFormatItem.name];\r\n if (addr && addr.length >= 1 && addressFormatItem.name === 'ZipCode' && postalOptions.length <= 0) {\r\n errorMessage = 'Postcode is not valid';\r\n }\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, id: `${elementId}_container` },\r\n label: (\r\n \r\n ),\r\n alert: ,\r\n 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\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.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\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\n/**\r\n * Address details item.\r\n * @param props - Configuration of the functional component.\r\n * @returns React functional component.\r\n */\r\nexport const AddressDetailItemFunctionComponent: React.FC = (props: IAddressDetailItem) => {\r\n const { isNewLine, isShowLabel, labelText, name, value } = props;\r\n\r\n const className = `msc-address-detail__item msc-address-detail__item-${name.toLowerCase()}`;\r\n const isEmpty = !(value && value.length > 0);\r\n const mainClass = isShowLabel\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 AddressDetailItemFunctionComponent;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { Address, AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { AddressItemType, IAddressItem } from '../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.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { Address, AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { AddressFormat } from '../address-format';\r\nimport { IAddressResource } from '../address-module.data';\r\nimport AddressButtonComponent from './address-button';\r\nimport AddressInputComponent from './address-input';\r\nimport { AddressShow, IAddressShowProps } from './address-show';\r\n\r\nexport interface IAddressSelectInputProps {\r\n hasExternalSubmitGroup?: boolean;\r\n addressFormat: AddressFormat;\r\n addresses: Address[];\r\n addressPurposes: AddressPurpose[];\r\n resources: IAddressResource;\r\n selectedAddress: Address;\r\n telemetryContent?: ITelemetryContent;\r\n onAddressOptionChange(event: React.ChangeEvent): void;\r\n onAddAddress(): void;\r\n onSave(): void;\r\n onCancel(): void;\r\n}\r\n\r\nexport interface IAddressSelectItem {\r\n key: number;\r\n SelectItem: INodeProps;\r\n input: React.ReactNode;\r\n showItems: IAddressShowProps;\r\n}\r\n\r\nexport interface IAddressSelectProps {\r\n SelectAddress: INodeProps;\r\n addButton: React.ReactNode;\r\n items: IAddressSelectItem[];\r\n isShowSaveButton: boolean;\r\n saveButton: React.ReactNode;\r\n isShowCancelButton: boolean;\r\n cancelButton: React.ReactNode;\r\n}\r\n\r\nconst getInput = (index: number, address: Address, props: IAddressSelectInputProps): React.ReactNode => {\r\n const { addresses, onAddressOptionChange, selectedAddress, resources } = props;\r\n // const addType = address.AddressTypeValue ? addressPurposes[address.AddressTypeValue - 1].Name : '';\r\n const ichecked = address.RecordId === selectedAddress.RecordId;\r\n const additionalAttributes = {\r\n checked: ichecked,\r\n 'aria-checked': ichecked,\r\n 'aria-setsize': addresses.length,\r\n 'aria-posinset': index + 1,\r\n 'aria-label': resources.addressChangeCheckboxAriaLabel\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst getAddressSelectItems = (props: IAddressSelectInputProps): IAddressSelectItem[] => {\r\n const { addresses, addressFormat, addressPurposes } = props;\r\n\r\n return addresses.map((address, index) => {\r\n return {\r\n key: address.RecordId || 0,\r\n SelectItem: { className: 'msc-address-select__item' },\r\n input: getInput(index, address, props),\r\n showItems: AddressShow({\r\n addressFormat: addressFormat.getAddressFormat(address.ThreeLetterISORegionName || ''),\r\n address,\r\n addressPurposes\r\n })\r\n };\r\n });\r\n};\r\n\r\nexport const AddressSelect = (props: IAddressSelectInputProps): IAddressSelectProps => {\r\n const { resources, onCancel, onSave, onAddAddress, hasExternalSubmitGroup } = props;\r\n\r\n return {\r\n SelectAddress: { className: 'msc-address-select' },\r\n addButton: (\r\n \r\n ),\r\n isShowSaveButton: !hasExternalSubmitGroup,\r\n saveButton: (\r\n \r\n ),\r\n isShowCancelButton: !hasExternalSubmitGroup,\r\n cancelButton: (\r\n \r\n ),\r\n items: getAddressSelectItems(props)\r\n };\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Address, AddressPurpose, IContext, CountryRegionInfo, StateProvinceInfo } from '@msdyn365-commerce/retail-proxy';\r\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\r\n// import { getFallbackImageUrl, getSimpleProducts, ObjectExtensions, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getTelemetryObject, IModuleProps, ITelemetryContent, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { action, computed, observable, reaction, set } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { CheckoutModulesStateShareInput } from '../../actions/checkout-modules-state-share';\r\nimport { vSIInitiateRestCallAsync } from '../../dotdigital-extension/DataActionExtension.g';\r\nimport { getSearchByCriteriaAsync, GetSearchByCriteriaInput } from '../../themes/dobbies/actions/search-by-criteria';\r\nimport { getRestrictedProducts } from '../../themes/dobbies/utilities/post-code-restriction/get-restricted-products';\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 { AddressSelect, IAddressSelectProps } from './common/components/address-select';\r\nimport { AddressShow, IAddressShowProps } from './common/components/address-show';\r\nimport { IDobbiesCheckoutShippingAddressData } from './dobbies-checkout-shipping-address.data';\r\nimport { IDobbiesCheckoutShippingAddressProps } from './dobbies-checkout-shipping-address.props.autogenerated';\r\nvar axios = require('axios');\r\n\r\n/**\r\n * The checkout address props interface.\r\n */\r\nexport interface ICheckoutAddressProps\r\n extends IDobbiesCheckoutShippingAddressProps,\r\n IModuleStateProps {}\r\n\r\n/**\r\n * The checkout shipping address view state.\r\n */\r\nexport interface ICheckoutShippingAddressViewState {\r\n isShowAddress: boolean;\r\n isShowAddresList: boolean;\r\n isShowAddOrUpdateAddress: boolean;\r\n addressOptions: IPostCodeDropDownOption[];\r\n postalOptions: IPostCodeDropDownOption[];\r\n postCodeEmptyErrorMessage: string;\r\n productsRestrictedPostcodes: string[];\r\n /* VSI Customization - START - 15/04/21 */\r\n hasPlantsProducts?: boolean;\r\n isNotBtPostCode?: boolean;\r\n /* VSI Customization - END */\r\n}\r\n\r\n/**\r\n * The checkout shipping address view props.\r\n */\r\nexport interface ICheckoutShippingAddressViewProps extends ICheckoutAddressProps {\r\n className: string;\r\n currentOperation: AddressOperation;\r\n selectedAddress?: Address;\r\n addUpdateAddress: Address;\r\n addressListSelectedAddress: Address;\r\n countryRegionId: string;\r\n stateProvinceInfo?: StateProvinceInfo[];\r\n customerAddresses: Address[];\r\n validationError: object;\r\n addressActionResponse?: IAddressResponse;\r\n viewState: ICheckoutShippingAddressViewState;\r\n CheckoutShippingAddress: IModuleProps;\r\n isUpdating: boolean;\r\n hasError: boolean;\r\n showAddress: IAddressShowProps;\r\n showAddressSelect: IAddressSelectProps;\r\n showAddOrUpdateAddress: IAddressAddUpdateProps;\r\n renderInputWithButton: React.ReactNode;\r\n postCodeEmptyErrorMessage: React.ReactNode;\r\n manualAddress: boolean;\r\n}\r\n\r\n/**\r\n * IExpressPaymentDetail interface.\r\n */\r\n// interface IExpressPaymentDetails {\r\n// email?: string;\r\n// tenderLine?: TenderLine;\r\n// tokenizedPaymentCard?: TokenizedPaymentCard;\r\n// paymentTenderType?: string;\r\n// address?: Address;\r\n// isExpressCheckoutAppliedInCartPage: boolean;\r\n// isExpressAddressAppliedInCartPage?: boolean;\r\n// }\r\nexport interface IDeliveryOption {\r\n organisation_name: string;\r\n department_name: string;\r\n line_1: string;\r\n line_2: string;\r\n udprn: string;\r\n dps: string;\r\n}\r\n\r\nexport interface IPostCodeVerification {\r\n delivery_points: IDeliveryOption[];\r\n delivery_point_count: string;\r\n postal_county: string;\r\n traditional_county: string;\r\n town: string;\r\n postcode: string;\r\n error_code: string;\r\n error_msg: string;\r\n}\r\n\r\nexport interface IPostCodeDropDownOption {\r\n option: string;\r\n postCode: IDeliveryOption;\r\n dps: string;\r\n town: string;\r\n code: string;\r\n}\r\n/**\r\n *\r\n * Address component.\r\n * @extends {React.Component>}\r\n */\r\n// @ts-expect-error\r\n@withModuleState\r\n@observer\r\nclass CheckoutShippingAddress extends React.Component {\r\n @observable private currentOperation: AddressOperation;\r\n\r\n @observable private selectedAddress?: Address;\r\n\r\n @observable private addUpdateAddress: Address;\r\n\r\n @observable private countryRegionId: string = 'USA';\r\n\r\n @observable private stateProvinceInfo?: StateProvinceInfo[];\r\n\r\n @observable private customerAddresses: Address[] = [];\r\n\r\n @observable private validationError: object;\r\n\r\n @observable private addressActionResponse?: IAddressResponse;\r\n\r\n @observable private isUpdating?: boolean;\r\n\r\n @observable private hasError?: boolean;\r\n\r\n @observable private addressListSelectedAddress: Address = {};\r\n\r\n private readonly addressCommon: AddressCommon;\r\n\r\n private addressFormat!: AddressFormat;\r\n\r\n private countryRegions: CountryRegionInfo[] = [];\r\n\r\n private addressPurposes: AddressPurpose[] = [];\r\n\r\n private readonly resources: IAddressResource;\r\n\r\n private readonly defaultAddressType: number = 6; // Default to Home\r\n\r\n private readonly telemetryContent?: ITelemetryContent;\r\n private postCodeInputRef: React.RefObject; // VSI Customization\r\n private autoSuggest?: AutoSuggest;\r\n\r\n private readonly multiplePickupStoreSwitchName: string = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n\r\n private retailMultiplePickUpOptionEnabled?: boolean = false;\r\n\r\n // private readonly checkoutErrorRef: React.RefObject = React.createRef();\r\n\r\n public constructor(props: ICheckoutAddressProps, state: ICheckoutShippingAddressViewState) {\r\n super(props);\r\n // this.state = { shippingGroups: [] };\r\n const { context, data, resources, telemetry } = this.props;\r\n\r\n this.addUpdateAddress = {};\r\n this.resources = resources;\r\n this.currentOperation = AddressOperation.List;\r\n this.countryRegions = data.countryRegions.result || [];\r\n this.addressPurposes = data.addressPurposes.result || [];\r\n this.customerAddresses = data.address.result || [];\r\n this.stateProvinceInfo = data.countryStates.result || [];\r\n this.addressCommon = new AddressCommon(context, resources, telemetry);\r\n this.addressFormat = new AddressFormat(\r\n this.countryRegions,\r\n new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\r\n this.addressPurposes\r\n );\r\n this.validationError = {};\r\n this.retailMultiplePickUpOptionEnabled = data.featureState.result?.find(\r\n feature => feature.Name === this.multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n this.postCodeInputRef = React.createRef();\r\n this.state = {\r\n postCodeEmptyErrorMessage: '',\r\n addressOptions: [],\r\n postalOptions: [],\r\n isShowAddresList: false,\r\n isShowAddress: false,\r\n isShowAddOrUpdateAddress: false,\r\n productsRestrictedPostcodes: []\r\n };\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n const {\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n config: { autoSuggestionEnabled, autoSuggestOptions }\r\n // resources\r\n } = this.props;\r\n\r\n // Initializing data props\r\n // this._dataInitialize(this.props);\r\n\r\n // this.addressFormat = new AddressFormat(\r\n // this.countryRegions,\r\n // new AddressMetaData({ ...resources }, this._getAddressFormatExcludeList()),\r\n // this.addressPurposes\r\n // );\r\n\r\n this.props.data.checkout.then(() => {\r\n this._setDefaultCountryRegionId();\r\n this._initModuleState();\r\n });\r\n\r\n reaction(\r\n () => this.countryRegionId,\r\n () => {\r\n this._getStateProvinces();\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.currentOperation,\r\n () => {\r\n this._getStateProvinces();\r\n }\r\n );\r\n\r\n // reaction(\r\n // () => this.props.data.checkout.result?.shippingAddressFromExpressCheckout,\r\n // () => {\r\n // if (!this.expressPaymentDetailsFromCartPage && this._canShip()) {\r\n // let address = this.props.data.checkout.result?.shippingAddressFromExpressCheckout;\r\n\r\n // if (address?.TwoLetterISORegionName) {\r\n // const threeLetterIsoRegionName = this.getThreeLetterIsoRegionName(address.TwoLetterISORegionName);\r\n\r\n // address = { ...address, ThreeLetterISORegionName: threeLetterIsoRegionName };\r\n\r\n // if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\r\n // this._onCountryChange(threeLetterIsoRegionName);\r\n // }\r\n // }\r\n\r\n // this._updateCurrentOperation(AddressOperation.Add, address);\r\n // this._onAddressAddUpdateSubmit();\r\n // }\r\n // }\r\n // );\r\n\r\n if (autoSuggestionEnabled) {\r\n if (channel && !channel.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n return;\r\n }\r\n\r\n if (channel && !channel.BingMapsEnabled) {\r\n telemetry.error('Map is disabled from HQ.');\r\n return;\r\n }\r\n\r\n const options: IAutoSuggestOptions = { ...autoSuggestOptions };\r\n this.autoSuggest = new AutoSuggest(\r\n telemetry,\r\n options,\r\n channel?.BingMapsApiKey,\r\n channel?.ChannelCountryRegionISOCode,\r\n channel?.DefaultLanguageId\r\n );\r\n\r\n // Customer doesn't have any address. Then add view will be loaded directly. Code for the same to handle that\r\n if (\r\n this.props.data.storeSelectorStateManager.result &&\r\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\r\n ) {\r\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\r\n }\r\n\r\n reaction(\r\n () =>\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi &&\r\n (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update),\r\n async () => {\r\n await this.autoSuggest?._loadMapAPI(await this.props.data.storeSelectorStateManager);\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.isMapApiLoaded,\r\n async () => {\r\n await this._attachMapAutoSuggest();\r\n }\r\n );\r\n }\r\n\r\n // if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\r\n // reaction(\r\n // () => this.props.data.checkout.result?.checkoutError,\r\n // checkoutError => {\r\n // if (\r\n // checkoutError &&\r\n // checkoutError.errorLocation === ErrorLocation.CheckoutShippingAddress &&\r\n // checkoutError.errorMessage\r\n // ) {\r\n // this._setErrorMessage(checkoutError.errorMessage);\r\n // }\r\n // }\r\n // );\r\n\r\n // reaction(\r\n // () => this.props.data.checkout.result?.checkoutErrorFocus,\r\n // checkoutErrorFocus => {\r\n // if (checkoutErrorFocus === CheckoutModule.CheckoutShippingAddress) {\r\n // focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\r\n // }\r\n // }\r\n // );\r\n // }\r\n\r\n // await this._initPickupGroup();\r\n }\r\n\r\n public async componentDidUpdate(): Promise {\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\r\n await this._attachMapAutoSuggest();\r\n }\r\n } else {\r\n this.autoSuggest?.disposeAutoSuggest();\r\n }\r\n }\r\n\r\n // public shouldComponentUpdate(nextProps: ICheckoutAddressProps, nextState: ICheckoutAddresState): boolean {\r\n // if (this.state === nextState && this.props.data === nextProps.data) {\r\n // return false;\r\n // }\r\n // return true;\r\n // }\r\n\r\n public render(): JSX.Element | null {\r\n if (!this.props.config.ignoreCanShip && !this._canShip()) {\r\n return null;\r\n }\r\n\r\n const { config, renderView } = this.props;\r\n // const { headingImages, itemsText, singleItemText, errorMessageTitle } = resources;\r\n // const { imageSettings } = config;\r\n\r\n // // Line images\r\n // const cartlines: ICheckoutShippingCartLineInfo[] = this.state.shippingGroups\r\n // .filter(x => !ObjectExtensions.isNullOrUndefined(x.product))\r\n // .map(line => ({\r\n // lineId: line.cartLine.LineId ?? '',\r\n // imageProps: {\r\n // requestContext: context.actionContext.requestContext,\r\n // className: 'ms-checkout-shipping-address__group-images-lines-line-image',\r\n // altText: line.product?.Name,\r\n // src: line.product?.PrimaryImageUrl ?? '',\r\n // fallBackSrc: getFallbackImageUrl(line.product?.ItemId, context.actionContext.requestContext.apiSettings),\r\n // gridSettings: context.request.gridSettings!,\r\n // imageSettings: imageSettings ?? defaultImageSettings,\r\n // loadFailureBehavior: 'empty'\r\n // },\r\n // quantity: line.cartLine.Quantity ?? 0\r\n // }));\r\n\r\n // const quantity = 1;\r\n // const itemText = cartlines.length > quantity ? itemsText : singleItemText;\r\n\r\n // const lineImageProps: ICheckoutShippingCartLinesProps = {\r\n // moduleClassName: 'ms-checkout-shipping-address',\r\n // cartLines: cartlines.filter(x => !ObjectExtensions.isNullOrUndefined(x)),\r\n // itemTitle: `(${format(itemText, cartlines.length)})`,\r\n // title: headingImages,\r\n // resources: this.props.resources\r\n // };\r\n\r\n // const cartLineImages: React.ReactNode = ;\r\n // const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n // const { featureState } = this.props.data;\r\n // const isRetailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\r\n // ?.IsEnabled;\r\n\r\n // const errorMessage = this.state.errorMessage;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n currentOperation: this.currentOperation,\r\n selectedAddress: this.selectedAddress,\r\n addUpdateAddress: this.addUpdateAddress,\r\n addressListSelectedAddress: this.addressListSelectedAddress,\r\n countryRegionId: this.countryRegionId,\r\n stateProvinceInfo: this.stateProvinceInfo,\r\n customerAddresses: this.customerAddresses,\r\n validationError: this.validationError,\r\n addressActionResponse: this.addressActionResponse,\r\n isUpdating: this.isUpdating,\r\n hasError: this.hasError,\r\n className: config.className,\r\n renderInputWithButton: this._renderInputWithButton(),\r\n postCodeEmptyErrorMessage: this._renderEmptyPostCodeErrorMessage(),\r\n viewState: {\r\n isShowAddress: this.currentOperation === AddressOperation.Show && this.selectedAddress,\r\n isShowAddresList: this.currentOperation === AddressOperation.List && this.customerAddresses.length > 0,\r\n isShowAddOrUpdateAddress:\r\n this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update\r\n },\r\n CheckoutShippingAddress: {\r\n moduleProps: this.props,\r\n className: classnames('ms-checkout-shipping-address', config.className)\r\n },\r\n showAddress: this._renderShowAddress(),\r\n showAddressSelect: this._renderSelectAddress(),\r\n showAddOrUpdateAddress: this._renderAddOrUpdateAddress()\r\n // alert: hasError && errorMessage && ,\r\n // checkoutErrorRef: this.checkoutErrorRef,\r\n\r\n // /**\r\n // * Show address select.\r\n // * @param onAddAddressHandler - On add address click function.\r\n // * @param onSaveHandler - On save click function.\r\n // * @param onCancelHandler - On cancel click function.\r\n // * @returns - Renders select address.\r\n // */\r\n // showAddressSelectHandler: (onAddAddressHandler?: () => void, onSaveHandler?: () => void, onCancelHandler?: () => void) =>\r\n // this._renderSelectAddress(onAddAddressHandler, onSaveHandler, onCancelHandler),\r\n\r\n // /**\r\n // * Show add/update address.\r\n // * @param onSaveHandler - On save click function.\r\n // * @param onCancelHandler - On cancel click function.\r\n // * @returns - Renders select address.\r\n // */\r\n // showAddOrUpdateAddressHandler: (onSaveHandler?: () => void, onCancelHandler?: () => void) =>\r\n // this._renderAddOrUpdateAddress(onSaveHandler, onCancelHandler),\r\n // showAddOrUpdateAddress: this._renderAddOrUpdateAddress(),\r\n // cartLineImages: isRetailMultiplePickUpOptionEnabled ? cartLineImages : undefined,\r\n // showAddressSelect: this._renderSelectAddress()\r\n };\r\n\r\n return renderView(viewProps) as React.ReactElement;\r\n }\r\n /* 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.map((option: IPostCodeDropDownOption) => {\r\n return (\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 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 enters postcode call the API and fetch the data */\r\n private findAddress = async (e: React.ChangeEvent) => {\r\n const { value } = e.currentTarget;\r\n\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 sort: 'asc'\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 private findPostalAddress = async (value: string) => {\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: value,\r\n response: 'data_formatted',\r\n sort: 'asc'\r\n };\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 postalOptions = this.mapPostCodeOptions(responseResult);\r\n this.setState({ postalOptions: postalOptions, postCodeEmptyErrorMessage: '' });\r\n /* VSI-Customization -- START If error code returns it means postcode isn't valid */\r\n } else {\r\n this.setState({ postalOptions: [] });\r\n }\r\n }\r\n } else if (value.length < 5) {\r\n this.setState({ postalOptions: [], postCodeEmptyErrorMessage: '' });\r\n }\r\n };\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 /* VSI-Customization -- START Render input field with button */\r\n private _renderInputWithButton = () => {\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\r\n // /**\r\n // * Initialize pickup group.\r\n // */\r\n // @action\r\n // private readonly _initPickupGroup = async (): Promise => {\r\n // const pickupCartLines: CartLine[] = this._getCartLinesforDelivery();\r\n // const cartLines: ICartLineWithProduct[] = [];\r\n\r\n // try {\r\n // const products = await this._getProductsByCartLines(\r\n // this.props.data.checkout.result?.checkoutCart.cart.ChannelId || 0,\r\n // pickupCartLines\r\n // );\r\n // for (const line of pickupCartLines) {\r\n // const product: SimpleProduct | undefined = products.find(x => x.RecordId === line.ProductId);\r\n // cartLines.push({ cartLine: line, product });\r\n // }\r\n // this.setState({ shippingGroups: cartLines });\r\n // } catch (error) {\r\n // this.props.telemetry.error(error);\r\n // this.setState({ shippingGroups: [] });\r\n // }\r\n // };\r\n\r\n // /**\r\n // * On suggestion selected.\r\n // * @param result - Suggestion result interface.\r\n // */\r\n // @action\r\n // private readonly _onSuggestionSelected = async (result: Microsoft.Maps.ISuggestionResult): Promise => {\r\n // this._clearAddressFields();\r\n // const address = this.addressFormat.getTranformedAddress(result, this.stateProvinceInfo);\r\n // const timeout = 0;\r\n // set(this.addUpdateAddress, { Street: '' });\r\n // set(this.addUpdateAddress, { ZipCode: address.ZipCode });\r\n // set(this.addUpdateAddress, { CountyName: address.CountyName });\r\n // set(this.addUpdateAddress, { City: address.City });\r\n // set(this.addUpdateAddress, { State: address.State });\r\n // set(this.addUpdateAddress, { DistrictName: address.DistrictName });\r\n // set(this.addUpdateAddress, { FullAddress: address.FullAddress });\r\n\r\n // // Bing autosuggest put the complete address in the Street input box. Updating the street input box to show only street address.\r\n // setTimeout(() => {\r\n // set(this.addUpdateAddress, { Street: address.Street });\r\n // }, timeout);\r\n // };\r\n\r\n // /**\r\n // * Method to clear address fields.\r\n // */\r\n // @action\r\n // private readonly _clearAddressFields = (): void => {\r\n // const addressFormatItem = this.addressFormat.getAddressFormat(\r\n // this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\r\n // );\r\n // for (const formatAddress of addressFormatItem) {\r\n // if (\r\n // this.addUpdateAddress[formatAddress.name] !== undefined &&\r\n // !this.autoSuggest?.excludedAddressFields.includes(formatAddress.name)\r\n // ) {\r\n // this.addressFormat[formatAddress.name] = '';\r\n // }\r\n // }\r\n // this._clearValidation();\r\n // };\r\n\r\n // /**\r\n // * Method to clear validation.\r\n // */\r\n // @action\r\n // private readonly _clearValidation = (): void => {\r\n // this.validationError = {};\r\n // };\r\n\r\n // public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\r\n // // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n // const properties =\r\n // this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\r\n // ?.StringValue ?? '';\r\n\r\n // return properties ? (JSON.parse(properties) as IExpressPaymentDetails) : null;\r\n // }\r\n\r\n // /**\r\n // * Method data initialization.\r\n // * @param props -The checkout address properties.\r\n // */\r\n // private readonly _dataInitialize = (props: ICheckoutAddressProps): void => {\r\n // const { data } = props;\r\n\r\n // reaction(\r\n // () => data.countryRegions.result,\r\n // () => {\r\n // this.countryRegions = data.countryRegions.result ?? [];\r\n // }\r\n // );\r\n\r\n // reaction(\r\n // () => data.addressPurposes.result,\r\n // () => {\r\n // this.addressPurposes = data.addressPurposes.result ?? [];\r\n // }\r\n // );\r\n\r\n // reaction(\r\n // () => data.address.result,\r\n // () => {\r\n // this.customerAddresses = data.address.result ?? [];\r\n // }\r\n // );\r\n\r\n // reaction(\r\n // () => data.countryStates.result,\r\n // () => {\r\n // this.stateProvinceInfo = data.countryStates.result ?? [];\r\n // }\r\n // );\r\n\r\n // reaction(\r\n // () => data.featureState.result,\r\n // () => {\r\n // this.retailMultiplePickUpOptionEnabled = data.featureState.result?.find(\r\n // feature => feature.Name === this.multiplePickupStoreSwitchName\r\n // )?.IsEnabled;\r\n // }\r\n // );\r\n // };\r\n\r\n // /**\r\n // * Method to get cart lines for delivery.\r\n // * @returns The cart line collection.\r\n // */\r\n // private readonly _getCartLinesforDelivery = (): CartLine[] => {\r\n // return this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(line => this._isDelivery(line)) ?? [];\r\n // };\r\n\r\n // /**\r\n // * Method to check cart line for delivery.\r\n // * @param line -The cart line.\r\n // * @returns True/false as per cart line delivery mode.\r\n // */\r\n // private readonly _isDelivery = (line: CartLine): boolean => {\r\n // return this._isNotPickupMode(line.DeliveryMode) && (line.FulfillmentStoreId === undefined || line.FulfillmentStoreId === '');\r\n // };\r\n\r\n // /**\r\n // * Method to check cart line for delivery.\r\n // * @param deliveryMode -The delivery mode.\r\n // * @returns True/false as per cart line delivery mode.\r\n // */\r\n // private readonly _isNotPickupMode = (deliveryMode: string | undefined): boolean => {\r\n // const pickupDeliveryModeCode = this.props.context.request.channel?.PickupDeliveryModeCode;\r\n // const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n // const { channelDeliveryOptionConfig, featureState } = this.props.data;\r\n // const retailMultiplePickUpOptionEnabled = featureState.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\r\n // ?.IsEnabled;\r\n // if (retailMultiplePickUpOptionEnabled && deliveryMode !== undefined) {\r\n // const pickupDeliveryMode = channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.some(\r\n // pickupMode => pickupMode !== deliveryMode\r\n // );\r\n // return pickupDeliveryMode !== undefined ? pickupDeliveryMode : false;\r\n // }\r\n // return deliveryMode !== undefined && pickupDeliveryModeCode !== undefined && deliveryMode !== pickupDeliveryModeCode;\r\n // };\r\n\r\n // /**\r\n // * Method to check cart line for delivery.\r\n // * @param channelId - The channelId.\r\n // * @param cartLines - Cart line collections.\r\n // * @returns Collection of SimpleProduct.\r\n // */\r\n // private readonly _getProductsByCartLines = async (channelId: number, cartLines: CartLine[]): Promise => {\r\n // const actionContext = this.props.context.actionContext;\r\n // const productInputs = cartLines\r\n // .filter(line => !ObjectExtensions.isNullOrUndefined(line.ProductId))\r\n // .map(\r\n // line =>\r\n // new ProductInput(\r\n // line.ProductId || 0,\r\n // actionContext.requestContext.apiSettings,\r\n // channelId,\r\n // undefined,\r\n // actionContext.requestContext\r\n // )\r\n // );\r\n // return getSimpleProducts(productInputs, actionContext);\r\n // };\r\n\r\n /**\r\n * Method to render add/update address.\r\n * @param onSaveHandler -- Handles onsave functionality.\r\n * @param onCancelHandler -- Handles oncancel functionality.\r\n * @returns Address app/update props.\r\n */\r\n private readonly _renderAddOrUpdateAddress = (onSaveHandler?: () => void, onCancelHandler?: () => void): IAddressAddUpdateProps => {\r\n const addressFormat =\r\n this.currentOperation === AddressOperation.Add && this.addressCommon.isAuthenticatedFlow()\r\n ? this.addressFormat\r\n : this.addressFormat;\r\n\r\n /**\r\n * On Cancel Button Function.\r\n */\r\n const onCancelButtonHandler = () => {\r\n this._resetView();\r\n onCancelHandler?.();\r\n };\r\n return AddressAddUpdate({\r\n isUpdating: this.isUpdating,\r\n resources: this.resources,\r\n addressType: AddressType.Shipping,\r\n addressFormat: addressFormat.getAddressFormat(this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId),\r\n defaultCountryRegionId: this.countryRegionId,\r\n defaultAddressType: this.defaultAddressType,\r\n selectedAddress: this.addUpdateAddress,\r\n validationError: this.validationError,\r\n hasError: this.hasError,\r\n addressActionResponse: this.addressActionResponse,\r\n telemetryContent: this.telemetryContent,\r\n postalOptions: this.state.postalOptions || [],\r\n dropdownDisplayData: addressFormat.getPrefilledAddressDropdownData(\r\n this.resources.addressStateDefaultSelectionText,\r\n this.stateProvinceInfo\r\n ),\r\n onInputChange: this._onAddressAddUpdateInputChange,\r\n onDropdownChange: this._onAddressAddUpdateDropdownChange,\r\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\r\n\r\n /**\r\n * On Save Function.\r\n */\r\n onSave: () => {\r\n this.onSubmit();\r\n onSaveHandler?.();\r\n },\r\n\r\n onCancel: !this.selectedAddress && !this.addressCommon.isAuthenticatedFlow() ? () => {} : onCancelButtonHandler\r\n });\r\n };\r\n\r\n /**\r\n * Method to render select address.\r\n * @param onAddAddressHandler - To handle add address button click.\r\n * @param onSaveHandler - To handle save button click.\r\n * @param onCancelHandler - To handle cancel button click.\r\n * @returns Select address props.\r\n */\r\n private readonly _renderSelectAddress = (\r\n onAddAddressHandler?: () => void,\r\n onSaveHandler?: () => void,\r\n onCancelHandler?: () => void\r\n ): IAddressSelectProps => {\r\n /**\r\n * On Cancel Button Function.\r\n */\r\n const onCancelButtonHandler = () => {\r\n this._resetView();\r\n onCancelHandler?.();\r\n };\r\n return AddressSelect({\r\n addressFormat: this.addressFormat,\r\n addresses: this.customerAddresses,\r\n resources: this.resources,\r\n addressPurposes: this.addressPurposes,\r\n selectedAddress: this.addressListSelectedAddress,\r\n onAddressOptionChange: this._onAddressOptionChange,\r\n hasExternalSubmitGroup: this.props.moduleState.hasExternalSubmitGroup,\r\n telemetryContent: this.telemetryContent,\r\n\r\n /**\r\n * On Add Address Function.\r\n */\r\n onAddAddress: () => {\r\n this._goToAddAddress();\r\n onAddAddressHandler?.();\r\n },\r\n\r\n /**\r\n * On Save Function.\r\n */\r\n onSave: () => {\r\n this._onSelectAddress();\r\n onSaveHandler?.();\r\n },\r\n\r\n onCancel: !this.selectedAddress ? () => {} : onCancelButtonHandler\r\n });\r\n };\r\n\r\n /**\r\n * Method to render show address.\r\n * @returns Show address props.\r\n */\r\n private _renderShowAddress(): IAddressShowProps | null {\r\n if (this.selectedAddress) {\r\n return AddressShow({\r\n address: this.selectedAddress,\r\n addressFormat: this.addressFormat.getAddressFormat(this.selectedAddress.ThreeLetterISORegionName || ''),\r\n addressPurposes: this.addressPurposes\r\n });\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Method to render map auto suggest.\r\n */\r\n private readonly _attachMapAutoSuggest = async (): Promise => {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n if (storeSelectorStateManager?.isMapApiLoaded) {\r\n this.autoSuggest?.attachAutoSuggest('#shipping_addressstreet', '#shipping_addressstreet_container', this._onSuggestionSelected);\r\n }\r\n };\r\n @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 @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 @action\r\n private _clearValidation = (): void => {\r\n this.validationError = {};\r\n };\r\n\r\n /**\r\n * Method gets called on address option change.\r\n * @param event - To get current option.\r\n */\r\n private readonly _onAddressOptionChange = (event: React.ChangeEvent) => {\r\n const addressRecordId = event.currentTarget.value;\r\n const selectedAddress = this.customerAddresses.find(address => (address.RecordId || '').toString() === addressRecordId);\r\n /* VSI Customization - START - 15/04/21 */\r\n // Check if cart has any plant product, user must enter BT postcode otherwise error message will be shown\r\n const isOtherPostcode = selectedAddress && this._isRestrictedPostCode(selectedAddress);\r\n this.setState({ isNotBtPostCode: isOtherPostcode });\r\n this._updateCheckoutSharedState(\r\n !!isOtherPostcode,\r\n !!this.props.data.checkoutModulesSharedState.result?.invalidAddressForCartProducts\r\n );\r\n\r\n /* VSI Customization - END */\r\n if (selectedAddress) {\r\n this.addressListSelectedAddress = selectedAddress;\r\n }\r\n };\r\n\r\n /**\r\n * Method to render map auto suggest.\r\n * @param name - Address name field.\r\n * @param value - Address name value field.\r\n */\r\n private readonly onAddressAddUpdate = (name: string, value: string) => {\r\n if (name === 'ZipCode') {\r\n this.findPostalAddress(value);\r\n }\r\n set(this.addUpdateAddress, { [name]: value });\r\n this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId, name);\r\n };\r\n\r\n /**\r\n * Method to get called on address update change.\r\n * @param event - Input element.\r\n */\r\n private readonly _onAddressAddUpdateInputChange = (event: React.ChangeEvent): void => {\r\n // if (event.target.type === 'checkbox') {\r\n // this.onAddressAddUpdate(event.target.name, event.target.checked);\r\n // } else {\r\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\r\n this.onAddressAddUpdate(event.target.name, value);\r\n // }\r\n };\r\n\r\n /**\r\n * Method to get called on address update dropdown change.\r\n * @param event - Select element.\r\n */\r\n private readonly _onAddressAddUpdateDropdownChange = (event: React.ChangeEvent): void => {\r\n this.onAddressAddUpdate(event.target.name, event.target.value);\r\n\r\n if (event.target.name === AddressItemType[AddressItemType.ThreeLetterISORegionName]) {\r\n this._onCountryChange(event.target.value);\r\n }\r\n };\r\n\r\n /**\r\n * Method to get called on address update submit.\r\n */\r\n private readonly _onAddressAddUpdateSubmit = (): void => {\r\n if (!this.addressFormat.validateAddressFormat(this.addUpdateAddress, this.validationError, this.countryRegionId)) {\r\n return;\r\n }\r\n if (this.state.postalOptions && this.state.postalOptions.length <= 0) {\r\n return;\r\n }\r\n\r\n let response: Promise;\r\n if (this.addressCommon.isAuthenticatedFlow()) {\r\n /* VSI Customization - START - 15/04/21 */\r\n // Check if cart has any plant product, user must enter BT postcode otherwise error message will be shown\r\n const isOtherPostCode = this.addUpdateAddress && this._isRestrictedPostCode(this.addUpdateAddress);\r\n this.setState({ isNotBtPostCode: isOtherPostCode });\r\n // Check if there is any address saved or user will enter his first address, so confirm button will not be disabled and just error message will be shown\r\n const isFirstAddress = this.customerAddresses.length === 0;\r\n // Last argument is used to check if address is entered for second time, shipping address button will not be disabled but only delivery option\r\n this._updateCheckoutSharedState(!!isOtherPostCode, !!isOtherPostCode, isFirstAddress, !isFirstAddress);\r\n // Check if it is BelFast's postcode that starts with BT\r\n if (isOtherPostCode) {\r\n return;\r\n }\r\n /* VSI Customization - END */\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 /* VSI Customization - START - 15/04/21 */\r\n // Check if cart has any plant product, user must enter BT postcode otherwise error message will be shown to guest user\r\n const isOtherPostCode = this.addUpdateAddress && this._isRestrictedPostCode(this.addUpdateAddress);\r\n this.setState({ isNotBtPostCode: isOtherPostCode });\r\n this._updateCheckoutSharedState(\r\n !!isOtherPostCode,\r\n !!this.props.data.checkoutModulesSharedState.result?.invalidAddressForCartProducts,\r\n true\r\n );\r\n // this._updateCheckoutSharedState(!!this.props.data.checkoutModulesSharedState.result?.notBtPostCode, !!isOtherPostCode);\r\n // Check if it is BelFast's postcode that starts with BT\r\n if (isOtherPostCode) {\r\n return;\r\n }\r\n /* VSI Customization - END */\r\n response = Promise.resolve({ address: this.addUpdateAddress });\r\n }\r\n\r\n this.isUpdating = true;\r\n this._updateModuleState();\r\n\r\n response.then(\r\n (result: IAddressResponse) => {\r\n this.isUpdating = false;\r\n\r\n // let newAddress = result.address;\r\n // newAddress = { ...newAddress, ...this.addUpdateAddress };\r\n\r\n if (result.address) {\r\n this.hasError = false;\r\n this._onAddOrUpdateSuccess(result);\r\n // this._clearError();\r\n // if (result.customerAddresses) {\r\n // this._onAddOrUpdateSuccess({ customerAddresses: result.customerAddresses, address: newAddress });\r\n // } else {\r\n // this._onAddOrUpdateSuccess({ address: newAddress });\r\n // }\r\n } else {\r\n this.hasError = true;\r\n this.addressActionResponse = result;\r\n this._updateModuleState();\r\n }\r\n },\r\n () => {\r\n this.hasError = true;\r\n this.isUpdating = false;\r\n this._updateModuleState();\r\n }\r\n );\r\n };\r\n\r\n /**\r\n * Method to get called on country change.\r\n * @param countryRegionId - Country region id.\r\n */\r\n private readonly _onCountryChange = (countryRegionId: string) => {\r\n this.countryRegionId = countryRegionId;\r\n const twoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(countryRegionId);\r\n set(this.addUpdateAddress, { ['ThreeLetterISORegionName']: countryRegionId });\r\n set(this.addUpdateAddress, { ['TwoLetterISORegionName']: twoLetterISORegionName });\r\n this.autoSuggest?.changeAutoSuggestionCountryCode(twoLetterISORegionName);\r\n this._clearAddressFields();\r\n };\r\n\r\n /**\r\n * Method to get all address format exclude list.\r\n * @returns Collection of address items.\r\n */\r\n private readonly _getAddressFormatExcludeList = (): AddressItemType[] => {\r\n const { config } = this.props;\r\n const addressFormatExcludeList: AddressItemType[] = [];\r\n\r\n if (!config.showAddressType) {\r\n addressFormatExcludeList.push(AddressItemType.AddressTypeValue);\r\n }\r\n\r\n addressFormatExcludeList.push(AddressItemType.IsPrimary);\r\n\r\n return addressFormatExcludeList;\r\n };\r\n\r\n /**\r\n * Method to get all state/provinces.\r\n */\r\n private readonly _getStateProvinces = (): void => {\r\n if (\r\n !this.countryRegionId ||\r\n !(this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update)\r\n ) {\r\n return;\r\n }\r\n\r\n this.addressCommon.getStateProvinces(this.countryRegionId).then((result: StateProvinceInfo[]) => {\r\n const stateInfo = result.some(state => state.StateId === this.addUpdateAddress.State);\r\n\r\n // Reset state if selected state not found in the list.\r\n if (!stateInfo) {\r\n set(this.addUpdateAddress, { ['State']: '' });\r\n }\r\n\r\n this.stateProvinceInfo = result;\r\n });\r\n };\r\n\r\n /**\r\n * Method to set default country region id.\r\n */\r\n private _setDefaultCountryRegionId(): void {\r\n const { request } = this.props.context;\r\n const market = request.channel?.ChannelCountryRegionISOCode;\r\n this.countryRegionId = this.addressCommon.getDefaultCountryRegionId(this.countryRegionId, this.countryRegions, market);\r\n }\r\n\r\n /**\r\n * Method to get default address region id.\r\n * @returns - Address object from existing addresses.\r\n */\r\n private readonly _getDefaultAddress = (): Address | undefined => {\r\n if (this.customerAddresses) {\r\n const primaryAddress = this.customerAddresses.find((address: Address) => address.IsPrimary);\r\n return primaryAddress || (this.customerAddresses.length > 0 ? this.customerAddresses[0] : undefined);\r\n }\r\n return undefined;\r\n };\r\n\r\n /**\r\n * Method to get address from express payment details from cart page.\r\n * @returns - Address.\r\n */\r\n // private readonly _getAddressFromCartExpressPaymentDetails = (): Address | undefined => {\r\n // if (this.expressPaymentDetailsFromCartPage) {\r\n // const { tokenizedPaymentCard, address, isExpressAddressAppliedInCartPage } = this.expressPaymentDetailsFromCartPage;\r\n\r\n // let addressFromCartExpress: Address | undefined;\r\n\r\n // if (isExpressAddressAppliedInCartPage) {\r\n // addressFromCartExpress = address ? this.getExpressAddress(address) : undefined;\r\n // } else {\r\n // addressFromCartExpress = tokenizedPaymentCard ? this.getAddressFromTokenizedPaymentCard(tokenizedPaymentCard) : undefined;\r\n // }\r\n\r\n // return addressFromCartExpress;\r\n // }\r\n // return undefined;\r\n // };\r\n\r\n // /**\r\n // * Get address from tokenizedPaymentCard.\r\n // * @param tokenizedPaymentCard -- The tokenizedPaymentCard from the payment.\r\n // * @returns The address.\r\n // */\r\n // private readonly getAddressFromTokenizedPaymentCard = (tokenizedPaymentCard: TokenizedPaymentCard): Address => {\r\n // const twoLetterIsoRegionName = tokenizedPaymentCard.Country;\r\n\r\n // const threeLetterIsoRegionName = twoLetterIsoRegionName ? this.getThreeLetterIsoRegionName(twoLetterIsoRegionName) : undefined;\r\n\r\n // if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\r\n // this._onCountryChange(threeLetterIsoRegionName);\r\n // }\r\n\r\n // const address: Address = {\r\n // TwoLetterISORegionName: twoLetterIsoRegionName,\r\n // Name: tokenizedPaymentCard.NameOnCard,\r\n // Street: tokenizedPaymentCard.Address1,\r\n // StreetNumber: tokenizedPaymentCard.Address2,\r\n // City: tokenizedPaymentCard.City,\r\n // State: tokenizedPaymentCard.State,\r\n // ZipCode: tokenizedPaymentCard.Zip,\r\n // Phone: tokenizedPaymentCard.Phone,\r\n // ThreeLetterISORegionName: threeLetterIsoRegionName,\r\n // AddressTypeValue: this.defaultAddressType\r\n // };\r\n\r\n // return address;\r\n // };\r\n\r\n // /**\r\n // * Get address from expressAddress.\r\n // * @param expressAddress -- The expressAddress.\r\n // * @returns The address.\r\n // */\r\n // private readonly getExpressAddress = (expressAddress: Address): Address => {\r\n // const twoLetterIsoRegionName = expressAddress.TwoLetterISORegionName;\r\n\r\n // const threeLetterIsoRegionName = twoLetterIsoRegionName ? this.getThreeLetterIsoRegionName(twoLetterIsoRegionName) : undefined;\r\n\r\n // if (threeLetterIsoRegionName && threeLetterIsoRegionName !== this.countryRegionId) {\r\n // this._onCountryChange(threeLetterIsoRegionName);\r\n // }\r\n\r\n // const address: Address = {\r\n // ...expressAddress,\r\n // ThreeLetterISORegionName: threeLetterIsoRegionName,\r\n // AddressTypeValue: this.defaultAddressType\r\n // };\r\n\r\n // return address;\r\n // };\r\n\r\n // /**\r\n // * Get three letter ISO region name from two letter ISO region name.\r\n // * @param twoLetterIsoRegionName -- The three letter ISO region name.\r\n // * @returns The three letter ISO region name.\r\n // */\r\n // private readonly getThreeLetterIsoRegionName = (twoLetterIsoRegionName: string): string | undefined => {\r\n // const countryRegion = this.countryRegions.find(country => {\r\n // return country.ISOCode?.toLowerCase() === twoLetterIsoRegionName.toLowerCase();\r\n // });\r\n\r\n // return countryRegion?.CountryRegionId;\r\n // };\r\n\r\n /**\r\n * Method to initialize all module state.\r\n */\r\n private readonly _initModuleState = (): void => {\r\n // Checks post code restriction on page loading when user's default address is selected\r\n\r\n this._isPostCodeRestricted();\r\n /* VSI Customization - END */\r\n this.props.moduleState.init({\r\n status: this._canShip() ? 'updating' : 'disabled',\r\n onEdit: this.onEdit,\r\n onCancel: this.onCancel,\r\n onSubmit: this.onSubmit\r\n });\r\n\r\n // const checkoutState = this.props.data.checkout.result;\r\n\r\n if (this._canShip()) {\r\n const defaultAddress = this._getShippingAddressFromCartLines() || this._getDefaultAddress();\r\n\r\n // if (checkoutState?.checkoutCart.cart.ShippingAddress) {\r\n // defaultAddress = checkoutState.checkoutCart.cart.ShippingAddress;\r\n // } else if (this._getAddressFromCartExpressPaymentDetails()) {\r\n // defaultAddress = this._getAddressFromCartExpressPaymentDetails();\r\n // } else if (this._getDefaultAddress()) {\r\n // defaultAddress = this._getDefaultAddress();\r\n // } else {\r\n // defaultAddress = checkoutState?.isExpressCheckoutApplied ? checkoutState.shippingAddressFromExpressCheckout : undefined;\r\n // }\r\n\r\n if (defaultAddress && !this.addressCommon.isEmpty(defaultAddress)) {\r\n this._updateCurrentOperation(AddressOperation.Show, defaultAddress);\r\n this._setShippingAddress(defaultAddress);\r\n this._updateModuleState();\r\n // checkoutState?.updateHasShippingAddress({ newHasShippingAddress: true });\r\n } else {\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n // checkoutState?.updateHasShippingAddress({ newHasShippingAddress: false });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Method get called on submit address.\r\n */\r\n private readonly onSubmit = (): void => {\r\n switch (this.currentOperation) {\r\n case AddressOperation.Add:\r\n case AddressOperation.Update:\r\n // this.props.telemetry.information('Shipping address submit for Add or Update operation.');\r\n this._onAddressAddUpdateSubmit();\r\n break;\r\n case AddressOperation.List:\r\n // this.props.telemetry.information('Shipping address submit for List operation.');\r\n this._onSelectAddress();\r\n break;\r\n default:\r\n this.props.telemetry.error('Invalid operation');\r\n }\r\n };\r\n\r\n /**\r\n * Method get called on cancel.\r\n */\r\n private readonly onCancel = (): void => {\r\n /* VSI Customization - START - 16/04/21\r\n when user has already selected an address but tries to select another address with postcode other than BT\r\n Disable the confirm & proceed button */\r\n if (this.selectedAddress && this._isRestrictedPostCode(this.selectedAddress)) {\r\n this._updateCheckoutSharedState(true, true);\r\n } else {\r\n this._updateCheckoutSharedState(false, false);\r\n }\r\n /* VSI Customization - END */\r\n switch (this.currentOperation) {\r\n case AddressOperation.Add:\r\n case AddressOperation.Update:\r\n this.props.telemetry.information('Shipping address cancel for Add or Update operation.');\r\n this._clearAddressFields();\r\n if (!(!this.selectedAddress && !this.addressCommon.isAuthenticatedFlow())) {\r\n /* VSI Customization - START - 16/04/21\r\n when user has already selected an address but tries to add new address with postcode other than BT\r\n Disable the confirm & proceed button */\r\n if (this.shippingAddress && this._isRestrictedPostCode(this.shippingAddress)) {\r\n this._updateCheckoutSharedState(true, true);\r\n } else {\r\n this._updateCheckoutSharedState(false, false);\r\n }\r\n /* VSI Customization - END */\r\n this._resetView();\r\n }\r\n\r\n break;\r\n case AddressOperation.List:\r\n this.props.telemetry.information('Shipping address cancel for List operation.');\r\n if (this.selectedAddress) {\r\n this._resetView();\r\n }\r\n break;\r\n default:\r\n this.props.telemetry.error('Invalid operation');\r\n }\r\n };\r\n\r\n /**\r\n * Method get called on edit address.\r\n */\r\n private readonly onEdit = (): void => {\r\n // this.props.telemetry.information('Shipping address onEdit is called.');\r\n\r\n if (this.addressCommon.isAuthenticatedFlow() && this.shippingAddress) {\r\n this._updateCurrentOperation(AddressOperation.List, this.shippingAddress);\r\n } else if (this.shippingAddress) {\r\n this._updateCurrentOperation(AddressOperation.Update, this.shippingAddress);\r\n }\r\n\r\n this._updateModuleState();\r\n };\r\n private _getShippingAddressFromCartLines = (): Address | undefined => {\r\n const { request } = this.props.context;\r\n const { channelDeliveryOptionConfig } = this.props.data;\r\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\r\n\r\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\r\n const cartLines = this.retailMultiplePickUpOptionEnabled\r\n ? ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\r\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\r\n ? cartLine.DeliveryMode !==\r\n channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.find(\r\n deliveryMode => deliveryMode === cartLine.DeliveryMode\r\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\r\n : cartLine\r\n )\r\n : ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\r\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\r\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\r\n : cartLine\r\n );\r\n\r\n if (cartLines && cartLines.length > 0) {\r\n return cartLines[0].ShippingAddress;\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n /**\r\n * Method to check if checkout cartlines are available fro shipping.\r\n * @returns - True/false as per the delivery mode.\r\n */\r\n private readonly _canShip = (): boolean => {\r\n const { checkout, channelDeliveryOptionConfig } = this.props.data;\r\n const { request } = this.props.context;\r\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\r\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\r\n\r\n if (!checkout.result || !request.channel || checkout.result.checkoutCart.isEmpty || checkout.result.checkoutCart.hasInvoiceLine) {\r\n return false;\r\n }\r\n\r\n // @ts-expect-error: Type-checker not realizing above request.channel check\r\n return this.retailMultiplePickUpOptionEnabled\r\n ? checkout.result.checkoutCart.cart.CartLines?.some(cartLine =>\r\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\r\n ? cartLine.DeliveryMode !==\r\n channelDeliveryOptionConfig.result?.PickupDeliveryModeCodes?.find(\r\n deliveryMode => deliveryMode === cartLine.DeliveryMode\r\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\r\n : cartLine\r\n )\r\n : checkout.result.checkoutCart.cart.CartLines?.some(cartLine =>\r\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\r\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\r\n : cartLine\r\n );\r\n };\r\n /* VSI Customization - START - 15/04/21 */\r\n /* Following function checks if user's selected address is not BT & cart has any plants product, display error message on loading checkout */\r\n private _isPostCodeRestricted = () => {\r\n const {\r\n data: {\r\n checkout: { result: checkout }\r\n },\r\n context: { actionContext, telemetry }\r\n } = this.props;\r\n // Check if product's category is plants\r\n\r\n const productIds: number[] = [];\r\n checkout?.checkoutCart?.cart.CartLines?.map(cartLine => {\r\n cartLine.ProductId && productIds.push(cartLine.ProductId);\r\n });\r\n\r\n const actionInput: GetSearchByCriteriaInput = {\r\n productIds: productIds,\r\n context: actionContext,\r\n dataCacheType: () => 'request',\r\n getCacheKey: () => 'postCodeRestriction',\r\n getCacheObjectType: () => 'postCodeRestriction'\r\n };\r\n\r\n const postCodeRestrictions: string[] = [];\r\n getSearchByCriteriaAsync(actionInput, actionContext)\r\n .then(async productsSearchResult => {\r\n for (const val of productsSearchResult) {\r\n const productAttributes = await this._getRestrictedPostCodes(\r\n val.RecordId,\r\n actionContext.requestContext.apiSettings.baseUrl\r\n );\r\n productAttributes.forEach((attr: any) => {\r\n if (attr?.Name && attr.Name === 'RestrictedPostCode' && attr.TextValue) {\r\n const postcodesTemp = JSON.parse(attr?.TextValue).RestrictedPostCode;\r\n postcodesTemp.forEach((postcode: string) => postCodeRestrictions.push(postcode));\r\n }\r\n });\r\n }\r\n\r\n // VSI Customization - 22/02/22 - Setting state as set so that we don't have duplicates to check\r\n this.setState({\r\n productsRestrictedPostcodes: [...new Set(postCodeRestrictions)]\r\n });\r\n\r\n getRestrictedProducts(productsSearchResult, this.props.context.actionContext.requestContext.apiSettings.baseUrl);\r\n const isOtherPostcode = !!(checkout?.shippingAddress && this._isRestrictedPostCode(checkout.shippingAddress));\r\n\r\n this.setState({ hasPlantsProducts: true });\r\n this._updateCheckoutSharedState(isOtherPostcode, isOtherPostcode);\r\n })\r\n .catch(error => telemetry.trace(error));\r\n };\r\n /* Following function returns true if zipCode has value starting from other than BT */\r\n private _isRestrictedPostCode = (address: Address) => {\r\n const zipCode = address && address.ZipCode ? address.ZipCode?.toLowerCase() : '';\r\n\r\n const restrictedRegions: string[] = this.state.productsRestrictedPostcodes;\r\n const isRestrictedPostCode =\r\n restrictedRegions &&\r\n restrictedRegions.find(postCode => {\r\n return zipCode.startsWith(postCode.toLowerCase());\r\n });\r\n if (isRestrictedPostCode) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n public _getRestrictedPostCodes = (productId: number, attributesBaseUrl?: string): any => {\r\n const url = attributesBaseUrl\r\n ? `${attributesBaseUrl}Commerce/Products(${productId})/GetAttributeValues(channelId=5637147577,catalogId=0)?$top=1000&api-version=7.3`\r\n : `https://scu40oznal298244666-rs.su.retail.dynamics.com/Commerce/Products(${productId})/GetAttributeValues(channelId=5637147577,catalogId=0)?$top=1000&api-version=7.3`;\r\n var config = {\r\n method: 'get',\r\n url: url,\r\n headers: {\r\n authority: attributesBaseUrl ? attributesBaseUrl.split('://')[1] : 'scu40oznal298244666-rs.su.retail.dynamics.com',\r\n accept: 'application/json',\r\n 'accept-language': 'en-GB',\r\n appsessionid: 'OtVVxv4TZOd4WbCSDTkvYH',\r\n 'cache-control': 'no-cache',\r\n 'content-type': 'application/json',\r\n contenttype: 'application/json',\r\n 'from-keystone': 'true',\r\n 'odata-maxversion': '4.0',\r\n 'odata-version': '4.0',\r\n oun: 'Y100',\r\n pragma: 'no-cache',\r\n prefer: 'return=representation',\r\n requestid: 'e42018722d257bb82e53ad56d5d963fc/2',\r\n usersessionid: 'ADCehL+M8YWP9iwro4TOSA'\r\n }\r\n };\r\n\r\n return axios(config)\r\n .then(function(response: any) {\r\n return response.data.value;\r\n })\r\n .catch(function(error: any) {\r\n console.log('err', error);\r\n });\r\n };\r\n\r\n private _updateCheckoutSharedState = (\r\n isOtherPostCode: boolean,\r\n isInvalidAddress: boolean,\r\n isFirstAddress?: boolean,\r\n loggedInUserNewAddress?: boolean\r\n ) => {\r\n this.props.context.actionContext.update(new CheckoutModulesStateShareInput(), {\r\n notBtPostCode: isOtherPostCode,\r\n invalidAddressForCartProducts: isInvalidAddress,\r\n isFirstAddress: isFirstAddress, // Check if it is guest checkout or if loggedIn user enters address for the first time and doesn't have any saved address\r\n loggedInUserNewAddress: loggedInUserNewAddress // Check if it is loggedIn user and tries to add NEW address for second or onwards time, dont disbale shipping address buttom but delivery options if there is restriction case\r\n });\r\n };\r\n /* VSI Customization - END */\r\n\r\n /**\r\n * Method get called on select address.\r\n */\r\n private readonly _onSelectAddress = () => {\r\n /* VSI Customization - START - 16/04/21 */\r\n // Check if Bt is not selected on clicking Cancel button, disable the confirm & proceed button\r\n if (this.addressListSelectedAddress && this._isRestrictedPostCode(this.addressListSelectedAddress)) {\r\n this._updateCheckoutSharedState(true, true);\r\n } else {\r\n this._updateCheckoutSharedState(false, false);\r\n }\r\n /* VSI Customization - END */\r\n this._updateCurrentOperation(AddressOperation.Show, this.addressListSelectedAddress);\r\n this._setShippingAddress(this.addressListSelectedAddress);\r\n this._updateModuleState();\r\n };\r\n\r\n /**\r\n * Method get called on goto add address.\r\n */\r\n private readonly _goToAddAddress = () => {\r\n this._setDefaultCountryRegionId();\r\n this._updateCurrentOperation(AddressOperation.Add);\r\n };\r\n\r\n /**\r\n * Method get called on add/update success.\r\n * @param response - Retail api response.\r\n */\r\n private readonly _onAddOrUpdateSuccess = (response: IAddressResponse) => {\r\n if (response.customerAddresses) {\r\n this.customerAddresses = response.customerAddresses;\r\n }\r\n\r\n if (response.address) {\r\n this._updateCurrentOperation(AddressOperation.Show, response.address);\r\n this._setShippingAddress(response.address);\r\n this._updateModuleState();\r\n }\r\n };\r\n\r\n /**\r\n * Method get called on set Shipping Address.\r\n * @param address - Retail Api address result.\r\n */\r\n private readonly _setShippingAddress = (address: Address): void => {\r\n if (this.props.data.checkout.result) {\r\n const newShippingAddress = { ...address };\r\n\r\n if (address.ThreeLetterISORegionName && !newShippingAddress.TwoLetterISORegionName) {\r\n newShippingAddress.TwoLetterISORegionName = this.addressFormat.getTwoLetterISORegionName(address.ThreeLetterISORegionName);\r\n }\r\n\r\n this.props.data.checkout.result.updateShippingAddress({ newShippingAddress });\r\n //comment code to remove the extra calls on club checkout\r\n // this.props.data.checkout.result.checkoutCart.updateShippingAddress({ newShippingAddress }).catch(error => {\r\n // this.props.telemetry.error(error);\r\n // });\r\n }\r\n };\r\n\r\n @computed private get shippingAddress(): Address | undefined {\r\n return this.props.data.checkout.result?.shippingAddress;\r\n }\r\n\r\n /**\r\n * Method get called on reset view.\r\n */\r\n private readonly _resetView = (): void => {\r\n switch (this.currentOperation) {\r\n case AddressOperation.Add:\r\n case AddressOperation.Update:\r\n this._updateCurrentOperation(\r\n this.addressCommon.isAuthenticatedFlow() ? AddressOperation.List : AddressOperation.Show,\r\n this.shippingAddress\r\n );\r\n /* VSI-Customization -- START When user clicks the cancel button for adding address update the addressOptions array to empty */\r\n this.setState({ addressOptions: [] });\r\n /* VSI-Customization -- END */\r\n break;\r\n default:\r\n this._updateCurrentOperation(AddressOperation.Show, this.shippingAddress);\r\n }\r\n this._updateModuleState();\r\n };\r\n\r\n /**\r\n * Update current operation.\r\n * @param operation - The address operation.\r\n * @param selectedAddress - The selected address.\r\n */\r\n private readonly _updateCurrentOperation = (operation: AddressOperation, selectedAddress?: Address) => {\r\n const {\r\n data: {\r\n checkoutModulesSharedState: { result: checkoutModulesSharedState }\r\n }\r\n } = this.props;\r\n this.currentOperation = operation;\r\n this.selectedAddress = selectedAddress;\r\n\r\n if (this.currentOperation === AddressOperation.Add || this.currentOperation === AddressOperation.Update) {\r\n /* VSI Customization - START - 16/04/21 */\r\n this._updateCheckoutSharedState(false, !!checkoutModulesSharedState?.invalidAddressForCartProducts);\r\n /* VSI Customization - END */\r\n this.addUpdateAddress = { ...this.selectedAddress } || {};\r\n set(this.addUpdateAddress, {\r\n ['ThreeLetterISORegionName']: this.addUpdateAddress.ThreeLetterISORegionName || this.countryRegionId\r\n });\r\n set(this.addUpdateAddress, {\r\n ['AddressTypeValue']: this.addUpdateAddress.AddressTypeValue || this.defaultAddressType\r\n });\r\n } else if (this.currentOperation === AddressOperation.List) {\r\n this.addressListSelectedAddress = { ...this.selectedAddress } || {};\r\n }\r\n };\r\n\r\n /**\r\n * Update module state.\r\n */\r\n private readonly _updateModuleState = () => {\r\n if (this.currentOperation === AddressOperation.Show) {\r\n this.props.moduleState.onReady();\r\n } else if (this.isUpdating) {\r\n this.props.moduleState.onPending();\r\n } else {\r\n this.props.moduleState.onUpdating();\r\n }\r\n };\r\n\r\n // /**\r\n // * Method to check if the customer already has the address.\r\n // * @param address - The address.\r\n // */\r\n // private readonly _isNewAddress = (address: Address): boolean => {\r\n // for (const existingAddress of this.customerAddresses) {\r\n // if (\r\n // (address.Name ?? '') === existingAddress.Name &&\r\n // (address.Street ?? '') === existingAddress.Street &&\r\n // (address.StreetNumber ?? '') === existingAddress.StreetNumber &&\r\n // (address.City ?? '') === existingAddress.City &&\r\n // (address.State ?? '') === existingAddress.State &&\r\n // (address.ZipCode ?? '') === existingAddress.ZipCode &&\r\n // (address.Phone ?? '') === existingAddress.Phone &&\r\n // (address.ThreeLetterISORegionName ?? '') === existingAddress.ThreeLetterISORegionName &&\r\n // (address.AddressTypeValue ?? '') === existingAddress.AddressTypeValue\r\n // ) {\r\n // return false;\r\n // }\r\n // }\r\n\r\n // return true;\r\n // };\r\n\r\n // @action\r\n // private readonly _setErrorMessage = (errorMessage: string): void => {\r\n // this.props.telemetry.error(errorMessage);\r\n // this.props.moduleState.setHasError(true);\r\n // this.props.moduleState.onUpdating();\r\n // this.setState({\r\n // errorMessage\r\n // });\r\n // };\r\n\r\n // private readonly _clearError = (): void => {\r\n // this.props.moduleState.setHasError(false);\r\n // this.setState({\r\n // errorMessage: ''\r\n // });\r\n // };\r\n}\r\n\r\nexport default CheckoutShippingAddress;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IAddressAddItem, IAddressAddUpdateProps } from './common/components/address-add';\r\nimport { IAddressSelectItem, IAddressSelectProps } from './common/components/address-select';\r\nimport { IAddressShowItem, IAddressShowProps } from './common/components/address-show';\r\nimport { ICheckoutShippingAddressViewProps } from './dobbies-checkout-shipping-address';\r\n\r\n/**\r\n * Address show component.\r\n * @param param0 - Root param.\r\n * @param param0.AddressDetail - Address detail.\r\n * @param param0.items - IAddressShowItem[].\r\n * @returns - Address Node.\r\n */\r\nconst AddressShow: React.FC = ({ AddressDetail, items }) => {\r\n return (\r\n \r\n {items &&\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\n/**\r\n * Address Select Component.\r\n * @param param0 - Root param.\r\n * @param param0.SelectAddress - Select address.\r\n * @param param0.addButton - Add button.\r\n * @param param0.items - IAddressSelectItem[].\r\n * @param param0.isShowSaveButton - Boolean.\r\n * @param param0.saveButton - Save button.\r\n * @param param0.isShowCancelButton - Boolean.\r\n * @param param0.cancelButton - Cancel button.\r\n * @returns - SelectAddress Node.\r\n */\r\nconst AddressSelect: React.FC = ({\r\n SelectAddress,\r\n addButton,\r\n items,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton\r\n}) => {\r\n return (\r\n \r\n {addButton}\r\n {items &&\r\n items.map((item: IAddressSelectItem) => {\r\n const SelectItem = item.SelectItem;\r\n return (\r\n \r\n {item.input}\r\n \r\n \r\n );\r\n })}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Address Add Update Component.\r\n * @param param0 - Root param.\r\n * @param param0.AddressForm - Address form.\r\n * @param param0.heading - Address heading.\r\n * @param param0.items - IAddressAddItem[].\r\n * @param param0.hasError - Boolean.\r\n * @param param0.error - Error message.\r\n * @param param0.isShowSaveButton - Boolean.\r\n * @param param0.saveButton - Save button.\r\n * @param param0.isShowCancelButton - Boolean.\r\n * @param param0.cancelButton - Cancel button.\r\n * @returns Address add update component node.\r\n */\r\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 renderInputWithButton\r\n}) => {\r\n return (\r\n \r\n {heading}\r\n {/* VSI-Customization -- START Render input field for postcode and button */}\r\n {renderInputWithButton}\r\n {/* VSI-Customization -- END */}\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\n/**\r\n * Checkout Shipping Address View Component.\r\n * @param props - Props.\r\n * @returns - CheckoutShippingAddress Module.\r\n */\r\nconst CheckoutShippingAddressView: React.FC = props => {\r\n const {\r\n CheckoutShippingAddress,\r\n // checkoutErrorRef,\r\n // alert,\r\n viewState,\r\n showAddress,\r\n showAddressSelect,\r\n showAddOrUpdateAddress\r\n // cartLineImages\r\n } = props;\r\n\r\n return (\r\n \r\n {/* {alert} */}\r\n {viewState.isShowAddress && }\r\n {viewState.isShowAddresList && }\r\n {viewState.isShowAddOrUpdateAddress && }\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutShippingAddressView;\r\n","/*---------------------------------------------------------------------------------------------\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 { createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\r\nimport { AsyncResult, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\n/**\r\n * GetSearchByCriteria Input Action\r\n */\r\n\r\nexport class GetSearchByCriteriaInput implements IActionInput {\r\n public productIds?: number[];\r\n public pageType?: string;\r\n public context?: IActionContext;\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 constructor(productIds?: number[], context?: IActionContext, pageType?: string) {\r\n // super({ shouldCacheOutput: true, cacheObjectType: 'postCodeRestriction', cacheKey: 'postCodeRestriction' });\r\n this.productIds = productIds;\r\n this.context = context;\r\n this.pageType = pageType;\r\n }\r\n\r\n public getCacheKey = () => `postCodeRestriction`;\r\n public getCacheObjectType = () => 'postCodeRestriction';\r\n public dataCacheType = () => {\r\n if (this.pageType !== 'checkout') {\r\n return 'request';\r\n } else {\r\n return 'application';\r\n }\r\n };\r\n}\r\n\r\n// Response of the action\r\nexport interface IGetSearchByCriteria {\r\n productsSearchResult: AsyncResult;\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: ICreateActionContext): IActionInput => {\r\n return new GetSearchByCriteriaInput();\r\n};\r\n/**\r\n * Action function to fetch products complete details along with attributes\r\n */\r\nexport async function getSearchByCriteriaAsync(input: GetSearchByCriteriaInput, ctx: IActionContext): Promise {\r\n let productSearchResults: ProductSearchResult[];\r\n let promise: AsyncResult;\r\n const searchCriteriaInput: ProductSearchCriteria = {};\r\n searchCriteriaInput.Context = {\r\n ChannelId: ctx.requestContext.apiSettings.channelId,\r\n CatalogId: ctx.requestContext.apiSettings.catalogId\r\n };\r\n\r\n searchCriteriaInput.Ids = input.productIds;\r\n searchCriteriaInput.IncludeAttributes = true;\r\n\r\n promise = searchByCriteriaAsync(\r\n {\r\n callerContext: ctx,\r\n queryResultSettings: {}\r\n },\r\n searchCriteriaInput\r\n );\r\n\r\n productSearchResults = await promise;\r\n return productSearchResults;\r\n}\r\n\r\nexport default createObservableDataAction({\r\n action: >getSearchByCriteriaAsync,\r\n input: createInput\r\n});\r\n","import { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nvar axios = require('axios');\r\n\r\nexport const getRestrictedProducts = async (productsData: ProductSearchResult[], attributesBaseUrl?: string): Promise => {\r\n const restrictedProducts: number[] = [];\r\n for (const product of productsData) {\r\n const attributes = await _getRestrictedPostCodes(product.RecordId, attributesBaseUrl);\r\n attributes &&\r\n attributes.map((attr: any) => {\r\n if (attr?.Name && attr.Name === 'RestrictedPostCode' && attr.TextValue) {\r\n // @ts-ignore\r\n const postcodesTemp = JSON.parse(attr?.TextValue).RestrictedPostCode;\r\n if (postcodesTemp.length > 0) {\r\n restrictedProducts.push(product.RecordId);\r\n }\r\n }\r\n });\r\n }\r\n\r\n return restrictedProducts;\r\n};\r\n\r\nexport const _getRestrictedPostCodes = async (productId: number, attributesBaseUrl?: string): Promise => {\r\n let url = attributesBaseUrl ? `${attributesBaseUrl}Commerce/Products(${productId})/GetAttributeValues(channelId=5637147577,catalogId=0)?$top=1000&api-version=7.3`: `https://scu40oznal298244666-rs.su.retail.dynamics.com/Commerce/Products(${productId})/GetAttributeValues(channelId=5637147577,catalogId=0)?$top=1000&api-version=7.3`;\r\n var config = {\r\n method: 'get',\r\n url: url,\r\n headers: {\r\n authority: attributesBaseUrl ? attributesBaseUrl.split('://')[1] : 'scu40oznal298244666-rs.su.retail.dynamics.com',\r\n accept: 'application/json',\r\n 'accept-language': 'en-GB',\r\n appsessionid: 'OtVVxv4TZOd4WbCSDTkvYH',\r\n 'cache-control': 'no-cache',\r\n 'content-type': 'application/json',\r\n contenttype: 'application/json',\r\n 'from-keystone': 'true',\r\n 'odata-maxversion': '4.0',\r\n 'odata-version': '4.0',\r\n oun: 'Y100',\r\n pragma: 'no-cache',\r\n prefer: 'return=representation',\r\n requestid: 'e42018722d257bb82e53ad56d5d963fc/2',\r\n usersessionid: 'ADCehL+M8YWP9iwro4TOSA'\r\n }\r\n };\r\n\r\n try {\r\n const response = await axios(config);\r\n return response.data.value;\r\n } catch (error) {\r\n console.log('err', error);\r\n throw error; // rethrow the error if needed\r\n }\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\n\r\n// import { ICheckoutState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n IAddressAddItem,\r\n IAddressAddUpdateProps\r\n} from '../../../modules/dobbies-checkout-shipping-address/./common/components/address-add';\r\nimport {\r\n IAddressSelectItem,\r\n IAddressSelectProps\r\n} from '../../../modules/dobbies-checkout-shipping-address/./common/components/address-select';\r\nimport { IAddressShowItem, IAddressShowProps } from '../../../modules/dobbies-checkout-shipping-address/./common/components/address-show';\r\nimport { ICheckoutShippingAddressViewProps } from '../../../modules/dobbies-checkout-shipping-address/./dobbies-checkout-shipping-address';\r\nimport { IDobbiesCheckoutShippingAddressProps } from '../definition-extensions/dobbies-checkout-shipping-address.ext.props.autogenerated';\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 AddressSelect: React.FC = ({\r\n SelectAddress,\r\n addButton,\r\n items,\r\n isShowSaveButton,\r\n saveButton,\r\n isShowCancelButton,\r\n cancelButton\r\n}) => {\r\n return (\r\n \r\n {addButton}\r\n {items &&\r\n items.map((item: IAddressSelectItem) => {\r\n const SelectItem = item.SelectItem;\r\n return (\r\n \r\n {item.input}\r\n \r\n \r\n );\r\n })}\r\n {isShowSaveButton && saveButton}\r\n {isShowCancelButton && cancelButton}\r\n \r\n );\r\n};\r\n\r\nconst 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 renderInputWithButton\r\n}) => {\r\n return (\r\n \r\n {heading}\r\n {/* VSI-Customization -- START Render input field for postcode and button */}\r\n {renderInputWithButton}\r\n {/* VSI-Customization -- END */}\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 CheckoutShippingAddressView: React.FC> = props => {\r\n const { CheckoutShippingAddress, viewState, showAddress, showAddressSelect, showAddOrUpdateAddress } = props;\r\n\r\n React.useEffect(() => {\r\n if (viewState.isShowAddress !== false) {\r\n const checkoutState = props.data.checkout.result?.checkoutCart!;\r\n const updateCartDeliverySpecificationInput = {\r\n deliveryModeId: props.config.modeOfDeliveryId!,\r\n shippingAddress: viewState.isShowAddress\r\n };\r\n const updateAndProceedFromDeliveryOptions = async () => {\r\n if (viewState.isShowAddress !== undefined) {\r\n await checkoutState\r\n .updateCartDeliverySpecification(updateCartDeliverySpecificationInput)\r\n .then(response => {\r\n if (response.status === 'FAILED') {\r\n console.log('delivery options selection failed or doesnt exist.');\r\n } else {\r\n console.log('Delivery option call has been completed');\r\n }\r\n })\r\n .catch(() => {\r\n console.log(`Couldn't updated delivery options`);\r\n });\r\n }\r\n };\r\n const updateEmail = async () => {\r\n let emailAddress = (await props.data.customerInformation).Email;\r\n emailAddress = emailAddress && emailAddress.toString();\r\n if (emailAddress) {\r\n (await props.data.checkout) &&\r\n props.data.checkout.result &&\r\n props.data.checkout.result.updateGuestCheckoutEmail({ newGuestCheckoutEmail: emailAddress });\r\n }\r\n };\r\n // tslint:disable-next-line: no-floating-promises\r\n updateAndProceedFromDeliveryOptions();\r\n updateEmail();\r\n }\r\n }, [viewState.isShowAddress]);\r\n\r\n return (\r\n \r\n {viewState.isShowAddress && }\r\n {viewState.isShowAddresList && }\r\n {viewState.isShowAddOrUpdateAddress && }\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutShippingAddressView;\r\n","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-checkout-shipping-address'] = {\n c: () => require('partner/modules/dobbies-checkout-shipping-address/dobbies-checkout-shipping-address.tsx'),\n $type: 'contentModule',\n da: [{name:'address', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-address', runOn: 0},{name:'addressPurposes', path:'modules/dobbies-checkout-shipping-address/actions/get-address-purposes', runOn: 0},{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 0},{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'checkout', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action', runOn: 1},{name:'checkoutModulesSharedState', path:'actions/checkout-modules-state-share', runOn: 0},{name:'countryRegions', path:'modules/dobbies-checkout-shipping-address/actions/get-country-regions', runOn: 0},{name:'countryStates', path:'modules/dobbies-checkout-shipping-address/actions/get-country-state', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1}],\n \n iNM: false,\n ns: '__local__',\n n: 'dobbies-checkout-shipping-address',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/dobbies-checkout-shipping-address'\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 = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/checkout-modules-state-share';\n let dataAction = require('partner/actions/checkout-modules-state-share');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/dobbies-checkout-shipping-address/actions/get-address-purposes';\n let dataAction = require('partner/modules/dobbies-checkout-shipping-address/actions/get-address-purposes');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/dobbies-checkout-shipping-address/actions/get-country-regions';\n let dataAction = require('partner/modules/dobbies-checkout-shipping-address/actions/get-country-regions');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/dobbies-checkout-shipping-address/actions/get-country-state';\n let dataAction = require('partner/modules/dobbies-checkout-shipping-address/actions/get-country-state');\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-checkout-shipping-address|dobbies-checkout-shipping-address'] = {\n c: () => require('partner/modules/dobbies-checkout-shipping-address/dobbies-checkout-shipping-address.view.tsx'),\n cn: '__local__-__local__-dobbies-checkout-shipping-address'\n };\nviewDictionary['__local__|__local__|themes|dobbiesclub|views|dobbies-checkout-shipping-address'] = {\n c: () => require('partner/themes/dobbiesclub/views/dobbies-checkout-shipping-address.view.tsx'),\n cn: '__local__-__local__-dobbies-checkout-shipping-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 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","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { CheckoutState } from './checkout-state';\n\n/**\n * CheckoutState - action input.\n */\nexport class CheckoutStateInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('CheckoutState', this.apiSettings);\n\n public getCacheObjectType = () => 'CheckoutState';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CheckoutState - action.\n * @param input\n * @param ctx\n */\nexport async function checkoutStateAction(input: CheckoutStateInput, ctx: IActionContext): Promise {\n return new CheckoutState();\n}\n\n/**\n * CheckoutState - create new input for create action.\n * @param inputData\n */\nconst createInput = (inputData: ICreateActionContext>): IActionInput => {\n return new CheckoutStateInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * CheckoutState - create action.\n */\nexport const checkoutStateActionDataAction = createObservableDataAction({\n action: >checkoutStateAction,\n input: createInput\n});\n\nexport default checkoutStateActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Address, GiftCard, Note, TenderLine, TokenizedPaymentCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { action, computed, observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a checkout.\n */\nexport class CheckoutState {\n @observable private _tokenizedPaymentCard: TokenizedPaymentCard | undefined;\n\n @computed public get tokenizedPaymentCard(): Readonly | undefined {\n return this._tokenizedPaymentCard;\n }\n\n @observable private _tenderLine: TenderLine | undefined;\n\n @computed public get tenderLine(): Readonly | undefined {\n return this._tenderLine;\n }\n\n @observable private _billingAddress: Address | undefined;\n\n @computed public get billingAddress(): Readonly
| undefined {\n return this._billingAddress;\n }\n\n @observable private _shippingAddress: Address | undefined;\n\n @computed public get shippingAddress(): Readonly
| undefined {\n return this._shippingAddress;\n }\n\n @observable private _cardPrefix: string | undefined;\n\n @computed public get cardPrefix(): Readonly | undefined {\n return this._cardPrefix;\n }\n\n @observable private _giftCards: GiftCard[] = [];\n\n @computed public get giftCards(): readonly GiftCard[] {\n return this._giftCards;\n }\n\n @observable private _giftCardExtends: IGiftCardExtend[] = [];\n\n @computed public get giftCardExtends(): readonly IGiftCardExtend[] {\n return this._giftCardExtends;\n }\n\n @observable private _loyaltyCardNumber?: string;\n\n @computed public get loyaltyCardNumber(): Readonly | undefined {\n return this._loyaltyCardNumber;\n }\n\n @observable private _loyaltyAmount: number = 0;\n\n @computed public get loyaltyAmount(): Readonly | number {\n return this._loyaltyAmount;\n }\n\n @observable private _guestCheckoutEmail: string = '';\n @observable private _customerReference: string = '';\n @observable private _customerRequisition: string = '';\n @observable private _note: Note = {};\n\n @computed public get guestCheckoutEmail(): Readonly | string {\n return this._guestCheckoutEmail;\n }\n\n @computed public get customerReference(): Readonly | string {\n return this._customerReference;\n }\n\n @computed public get customerRequisition(): Readonly | string {\n return this._customerRequisition;\n }\n\n @computed public get note(): Readonly | Note[] {\n return this._note;\n }\n\n @observable private _isTermsAndConditionAccepted: boolean = false;\n\n @computed public get isTermsAndConditionAccepted(): Readonly | boolean {\n return this._isTermsAndConditionAccepted;\n }\n\n @observable private _customerAccountAmount: number = 0;\n\n @computed public get customerAccountAmount(): Readonly | number {\n return this._customerAccountAmount;\n }\n\n @action\n public updateTokenizedPaymentCard(newTokenizedPaymentCard: TokenizedPaymentCard): void {\n this._tokenizedPaymentCard = newTokenizedPaymentCard;\n }\n\n @action\n public updateTenderLine(newTenderLine: TenderLine | undefined): void {\n this._tenderLine = newTenderLine;\n }\n\n @action\n public updateShippingAddress(newShippingAddress: Address): void {\n this._shippingAddress = newShippingAddress;\n }\n\n @action\n public updateBillingAddress(newBillingAddress: Address): void {\n this._billingAddress = newBillingAddress;\n }\n\n @action\n public updateCardPrefix(newCardPrefix: string): void {\n this._cardPrefix = newCardPrefix;\n }\n\n @action\n public removeGiftCard(giftCardNumber: string): void {\n this._giftCards = this._giftCards.filter(giftCard => giftCard.Id !== giftCardNumber);\n }\n\n @action\n public removeGiftCardExtend(giftCardNumber: string): void {\n this._giftCardExtends = this._giftCardExtends.filter(giftCard => giftCard.Id !== giftCardNumber);\n }\n\n @action\n public addGiftCard(giftCard: GiftCard): void {\n this._giftCards = [giftCard, ...this._giftCards];\n }\n\n @action\n public addGiftCardExtend(giftCard: IGiftCardExtend): void {\n this._giftCardExtends = [giftCard, ...this._giftCards];\n }\n\n @action\n public updateLoyaltyCardNumber(newLoyaltyCardNumber: string): void {\n this._loyaltyCardNumber = newLoyaltyCardNumber;\n }\n\n @action\n public updateLoyaltyAmount(newAmount: number): void {\n this._loyaltyAmount = newAmount;\n }\n\n @action\n public updateGuestCheckoutEmail(\n newGuestCheckoutEmail: string,\n customerReference: string,\n customerRequisition: string,\n note: Note\n ): void {\n this._guestCheckoutEmail = newGuestCheckoutEmail;\n this._customerReference = customerReference;\n this._customerRequisition = customerRequisition;\n this._note = note;\n }\n\n @action\n public updateTermsAndConditionsAcceptance(newIsTermsAndConditionAccepted: boolean): void {\n this._isTermsAndConditionAccepted = newIsTermsAndConditionAccepted;\n }\n\n @action\n public updateCustomerAccountAmount(newAmount: number): void {\n this._customerAccountAmount = newAmount;\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\n/**\n * EnabledPaymentsForOBO enum.\n */\n export enum EnabledPaymentsForOBO {\n OnCustomerAccount = 1,\n ExpressPayment = 0,\n Loyalty = 0,\n GiftCard = 0,\n PaymentInstrument = 0,\n ApplePay = 0\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CacheType, IActionContext, IActionInput } from '@msdyn365-commerce/core';\n\nimport { IModuleStates } from './module-state.data';\n\n/**\n * GetModulesInput.\n */\nexport class ModuleStatesCacheKey implements IActionInput {\n public getCacheKey = () => 'ModuleState';\n\n public getCacheObjectType = () => 'ModuleState';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport function getModuleStates(ctx: IActionContext): IModuleStates {\n const cacheKey = new ModuleStatesCacheKey();\n\n let moduleStates = ctx.get(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n if (moduleStates) {\n return moduleStates;\n }\n ctx.update(cacheKey, {});\n moduleStates = ctx.get(cacheKey.getCacheObjectType(), cacheKey.getCacheKey());\n return moduleStates;\n}\n\nexport function updateModuleStates(value: IModuleStates, ctx: IActionContext): void {\n const cacheKey = new ModuleStatesCacheKey();\n ctx.update(cacheKey, value);\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModule } from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport isMatch from 'lodash/isMatch';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { getModuleStates, updateModuleStates } from './module-state';\nimport { IModuleState, IModuleStateManager, IModuleStateProps, IModuleStates } from './module-state.data';\n\nexport interface IProps extends IModule, IModuleStateProps {\n enableControl?: boolean;\n}\n\nconst sectionContainerModuleId = 'section-container';\nconst paymentInstrumentModuleId = 'payment-instrument';\n\nconst withModuleState =

(WrappedComponent: React.ComponentType

): React.ComponentType

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

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

{\n constructor(props: P) {\n super(props);\n this.initializeState();\n }\n\n public shouldComponentUpdate(nextProps: IModuleStateProps): boolean {\n if (this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { id } = this.props;\n return ;\n }\n\n private readonly initializeState = (): void => {\n const { id, typeName, context } = this.props;\n const states = getModuleStates(context.actionContext);\n if (!states) {\n this.props.telemetry.error('withModuleState initializeState() - states not found');\n return;\n }\n\n if (states[id]) {\n // State has been initialized\n return;\n }\n\n updateModuleStates(\n {\n ...states,\n [id]: {\n id,\n typeName,\n hasInitialized: false,\n hasError: false,\n isRequired: true,\n isCancellable: true,\n isSubmitContainer: false,\n status: undefined,\n childIds: []\n }\n },\n context.actionContext\n );\n };\n\n /**\n * GetModuleStateManager\n * Get module state manager by id.\n * @param id\n */\n private readonly getModuleStateManager = (id: string): IModuleStateManager => {\n const moduleState = this.get()[id];\n return {\n ...moduleState!,\n hasInitialized: this.validate(id, { hasInitialized: true }, true), // All has initialized is initialized\n hasError: this.validate(id, { hasError: true }), // Partial has error is error\n isReady: this.validate(id, { status: 'ready' }, true, true), // All ready is ready (exclued disabled and skipped)\n isUpdating: this.validate(id, { status: 'updating' }), // Partial updating is updating\n isPending: this.validate(id, { status: 'pending' }), // Partial pending is pending\n isSkipped: this.validate(id, { status: 'skipped' }, true, true), // All skipped is skipped (exclued disabled)\n isDisabled: this.validate(id, { status: 'disabled' }, true), // All disabled is disabled\n isCancelAllowed: this.validate(id, { isCancellable: true }, true, true), // Partial not allowed is not allowed\n shouldSubmitContainer: this.validate(id, { isSubmitContainer: true }), // Partial submit is submit.\n hasExternalSubmitGroup: this.hasExternalSubmitGroup(),\n hasModuleState: this.hasModuleState(id),\n setIsRequired: (value: boolean): void => {\n this.update(id, { isRequired: value });\n },\n setIsCancellable: (value: boolean): void => {\n this.update(id, { isCancellable: value });\n },\n setIsSubmitContainer: (value: boolean): void => {\n this.update(id, { isSubmitContainer: value });\n },\n setHasError: (value: boolean): void => {\n this.update(id, { hasError: value });\n },\n onReady: (): void => {\n this.update(id, { status: 'ready' });\n },\n onUpdating: (): void => {\n this.update(id, { status: 'updating' });\n },\n onPending: (): void => {\n this.update(id, { status: 'pending' });\n },\n onSkip: (): void => {\n this.update(id, { status: 'skipped' });\n },\n onDisable: (): void => {\n this.update(id, { status: 'disabled' });\n },\n getModule: (moduleId: string): IModuleStateManager => this.getModuleStateManager(moduleId),\n getModuleByTypeName: (typeName: string): IModuleStateManager => this.getModuleStateManagerByTypeName(typeName),\n init: (options?: Partial): void => {\n if (moduleState?.hasInitialized) {\n // State has been initialized\n return;\n }\n this.update(id, {\n hasInitialized: true,\n ...options\n });\n }\n };\n };\n\n /**\n * GetModuleStateManagerByTypeName\n * Get module state manager by type name.\n * @param typeName\n */\n private readonly getModuleStateManagerByTypeName = (typeName: string): IModuleStateManager => {\n const moduleStates = getModuleStates(this.props.context.actionContext);\n const moduleState = Object.values(moduleStates).find(_moduleState => _moduleState?.typeName === typeName);\n return this.getModuleStateManager((moduleState && moduleState.id) || '');\n };\n\n /**\n * Get\n * Get all module states.\n */\n private readonly get = (): IModuleStates => {\n return getModuleStates(this.props.context.actionContext);\n };\n\n /**\n * Update\n * Update module state.\n * @param id\n * @param value\n */\n private readonly update = (id: string, value: Partial): void => {\n // Console.log('withModuleState - update', id, value);\n const modules = this.get();\n if (!modules[id]) {\n this.props.telemetry.error(`withModuleState update() - Module state with id ${id} is not found.`);\n return;\n }\n modules[id] = {\n ...modules[id]!,\n ...value\n };\n };\n\n private readonly _validateLeaf = (id: string, source: Partial): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n return isMatch(module, source);\n };\n\n private readonly _validateContainer = (\n id: string,\n source: Partial,\n allMatched?: boolean,\n skipSkippableItem?: boolean\n ): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n // Module doesn't has module state\n return !!allMatched;\n }\n\n if (skipSkippableItem && (module.status === 'disabled' || module.status === 'skipped')) {\n // Skip disabled or skipped modules\n return !!allMatched;\n }\n\n // It is leaf module\n if (!module.childIds || module.childIds.length === 0) {\n return this._validateLeaf(id, source);\n }\n\n let childIds = module.childIds;\n\n if (this.props.context.app.config.shouldEnableSinglePaymentAuthorizationCheckout) {\n // For new checkout flow, we bypass the isReady check for payment section container to enable the place order button.\n childIds = childIds.filter(childId => !this._isPaymentSectionContainer(childId));\n }\n\n // It is container module\n const method = allMatched ? 'every' : 'some';\n return childIds[method](childId => this._validateContainer(childId, source, allMatched, skipSkippableItem));\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\n if (!moduleId.includes(sectionContainerModuleId)) {\n return false;\n }\n\n const modules = this.get();\n const module = modules[moduleId];\n\n if (module && ArrayExtensions.hasElements(module.childIds.filter(childId => childId.includes(paymentInstrumentModuleId)))) {\n return true;\n }\n\n return false;\n };\n\n /**\n * Validate\n * Validate current module and all its child module match the provided condition.\n * @param id\n * @param source\n * @param allMatched\n * @param skipSkippableItem\n */\n private readonly validate = (\n id: string,\n source: Partial,\n allMatched?: boolean,\n skipSkippableItem?: boolean\n ): boolean => {\n const modules = this.get();\n const module = modules[id];\n if (!module) {\n return false;\n }\n\n // It is leaf module\n if (!module.childIds || module.childIds.length === 0) {\n return this._validateLeaf(id, source);\n }\n\n // It is container module\n return this._validateContainer(id, source, allMatched, skipSkippableItem);\n };\n\n /**\n * HasExternalSubmitGroup\n * Module will use external submit group.\n */\n private readonly hasExternalSubmitGroup = (): boolean => {\n return !!this.props.enableControl;\n };\n\n /**\n * HasModuleState\n * Module is using module state manager.\n * @param id\n */\n private readonly hasModuleState = (id: string): boolean => {\n const modules = this.get();\n const module = modules[id];\n return !!module;\n };\n }\n\n return ModuleState;\n};\n\nexport default withModuleState;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["CheckoutModulesStateShareInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","async","sampleStateAction","input","ctx","invalidAddressForCartProducts","undefined","notBtPostCode","isFirstAddress","loggedInUserNewAddress","createObservableDataAction","action","inputData","VSIRestAPIHandlerExtensionClass","odataObject","this","Id","result","ExtensionProperties","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","GetAddressPurposesInput","apiSettings","buildCacheKey","getAddressPurposesAction","getAddressPurposesAsync","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","getAddressPurposesActionDataAction","requestContext","GetCountryRegionsInput","locale","getCountryRegionsAction","getCountryRegionsByLanguageIdAsync","getCountryRegionsActionDataAction","Error","GetCountryStateInput","getCountryStateAction","countryInput","countryRegionsInfo","channelConfiguration","channel","marketISOCode","ChannelCountryRegionISOCode","currentCountryRegion","find","countryRegion","ISOCode","countryRegionId","CountryRegionId","stateInput","GetStateProvincesInput","getStateProvinceAction","getCountryStateActionDataAction","getStateProvincesAsync","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","storeSelectorStateManager","loadMapApi","lang","market","AddressItemDisplayType","AddressValidationRuleType","AddressItemType","AddressOperation","AddressType","AddressCommon","resources","getDefaultCountryRegionId","countryRegions","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","AddressFormat","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","Description","set","validationRules","message","toLowerCase","addressDisplayItem","AddressFormatLines","AddressTypeItem","_extendAddressDisplayFormat","push","nameDisplayItem","Name","formatLine","AddressComponentNameValue","addressItem","getItemFormat","isNewLine","NewLine","phoneDisplayItem","Phone","isPrimaryDisplayItem","IsPrimary","type","AddressMetaData","excluded","required","metaData","requiredFieldRegEx","resourcesPrefix","maxLength","excludedTypes","requiredFields","_init","item","_addItem","Input","PhoneRegex","defaultRegex","County","Dropdown","StreetNumber","BuildingCompliment","Postbox","House_RU","Flat_RU","CountryOKSMCode_RU","Checkbox","displayType","format","includes","nameKey","replace","_validationRules","isRequired","some","rule","Required","optionalString","label","ruleType","Object","keys","itemType","_validationRule","Format","props","React","role","text","ariaLabel","disabled","isDisabled","telemetryContent","onClick","payLoad","getPayloadObject","attributes","getTelemetryAttributes","assign","itemId","isChecked","additionalAddributes","autoFocus","shouldBeAutoFocused","onChange","checked","_ref","displayData","getDropdownItem","selectedValue","isSelected","title","shouldUseAutoFocus","isPhone","patternAttribute","pattern","htmlFor","getRequriedAttribute","getAddessItems","selectedAddress","addressFormat","addressType","dropdownDisplayData","defaultCountryRegionId","defaultAddressType","postalOptions","onInputChange","onDropdownChange","shouldAutoFocus","index","elementId","addr","classname","AddressInputComponent","AdressCheckboxComponent","AdressDropdownComponent","AddressItem","AddressLabelComponent","alert","AddressAlertComponent","isShowLabel","labelText","mainClass","AddressShow","AddressDetail","items","addressTypeValue","toString","description","AddressDetailItemComponent","getInput","onAddressOptionChange","ichecked","additionalAttributes","addressChangeCheckboxAriaLabel","getAddressSelectItems","SelectItem","showItems","axios","require","CheckoutShippingAddress","_data$featureState$re","super","addressListSelectedAddress","multiplePickupStoreSwitchName","retailMultiplePickUpOptionEnabled","handleAddressOption","option","e","addressOptions","addressOption","x","onAddressAddUpdate","town","postCode","line_1","line_2","code","postCodeInputRef","current","setState","_renderAddressOptions","Node","dps","_renderEmptyPostCodeErrorMessage","postCodeEmptyErrorMessage","findAddress","currentTarget","_this$postCodeInputRe","postcode","sort","res","JSON","stringify","responseResult","parse","error_msg","validPostCodeErrorText","mapPostCodeOptions","findPostalAddress","data","delivery_points","obj","_renderInputWithButton","_this$state$addressOp","ref","placeholder","enterPostCodePlaceholderText","_renderAddOrUpdateAddress","onSaveHandler","onCancelHandler","currentOperation","Add","addressCommon","editAddressHeading","addAddressHeading","hasError","onCancel","onSave","hasExternalSubmitGroup","isUpdating","addressActionResponse","heading","AddressForm","Heading","isShowSaveButton","saveButton","AddressButtonComponent","addressSaveButtonText","addressSaveButtonAriaLabel","isShowCancelButton","cancelButton","addressCancelButtonText","addressCancelButtonAriaLabel","AddressError","AddressErrorTitleComponent","AddressErrorMessageComponent","AddressAddUpdate","Shipping","addUpdateAddress","addressStateDefaultSelectionText","_onAddressAddUpdateInputChange","_onAddressAddUpdateDropdownChange","moduleState","onSubmit","onCancelButtonHandler","_resetView","_renderSelectAddress","onAddAddressHandler","onAddAddress","SelectAddress","addButton","addressAddButtonText","addressAddButtonAriaLabel","AddressSelect","_onAddressOptionChange","_goToAddAddress","_onSelectAddress","_attachMapAutoSuggest","_this$autoSuggest","isMapApiLoaded","autoSuggest","_onSuggestionSelected","_clearAddressFields","_this$autoSuggest2","_clearValidation","event","_this$props$data$chec","addressRecordId","isOtherPostcode","_isRestrictedPostCode","isNotBtPostCode","_updateCheckoutSharedState","checkoutModulesSharedState","target","_onCountryChange","_onAddressAddUpdateSubmit","isOtherPostCode","Update","_this$props$data$chec2","_updateModuleState","then","_onAddOrUpdateSuccess","_this$autoSuggest3","twoLetterISORegionName","_getAddressFormatExcludeList","config","addressFormatExcludeList","showAddressType","_getStateProvinces","_getDefaultAddress","_initModuleState","_isPostCodeRestricted","init","status","_canShip","onEdit","defaultAddress","_getShippingAddressFromCartLines","_updateCurrentOperation","Show","_setShippingAddress","List","information","shippingAddress","channelDeliveryOptionConfig","pickupDeliveryModeCode","PickupDeliveryModeCode","emailDeliveryModeCode","EmailDeliveryModeCode","cartLines","checkout","checkoutCart","cart","CartLines","filter","cartLine","_channelDeliveryOptio","DeliveryMode","PickupDeliveryModeCodes","deliveryMode","ShippingAddress","_checkout$result$chec","_checkout$result$chec2","hasInvoiceLine","_channelDeliveryOptio2","_checkout$checkoutCar","productIds","ProductId","actionInput","postCodeRestrictions","getSearchByCriteriaAsync","val","productsSearchResult","_getRestrictedPostCodes","baseUrl","attr","TextValue","RestrictedPostCode","productsRestrictedPostcodes","Set","getRestrictedProducts","hasPlantsProducts","catch","trace","_address$ZipCode","zipCode","restrictedRegions","startsWith","productId","attributesBaseUrl","method","url","headers","authority","split","accept","appsessionid","contenttype","oun","pragma","prefer","requestid","usersessionid","console","log","isInvalidAddress","update","_setDefaultCountryRegionId","newShippingAddress","TwoLetterISORegionName","updateShippingAddress","operation","onReady","onPending","onUpdating","countryStates","featureState","feature","IsEnabled","getTelemetryObject","telemetryPageName","friendlyName","isShowAddresList","isShowAddress","isShowAddOrUpdateAddress","autoSuggestionEnabled","reaction","BingMapsEnabled","_this$autoSuggest4","DefaultLanguageId","_this$props$data$stor","_this$autoSuggest5","_this$props$data$stor2","_this$props$data$stor3","_this$autoSuggest6","render","ignoreCanShip","renderView","renderInputWithButton","viewState","moduleProps","classnames","showAddress","_renderShowAddress","showAddressSelect","showAddOrUpdateAddress","_request$channel","_this$props$data$chec3","__decorate","observable","computed","withModuleState","observer","_ref2","_ref3","Module","GetSearchByCriteriaInput","pageType","productSearchResults","promise","searchCriteriaInput","Context","ChannelId","channelId","CatalogId","catalogId","Ids","IncludeAttributes","searchByCriteriaAsync","args","productsData","restrictedProducts","product","_props$data$checkout$","checkoutState","updateCartDeliverySpecificationInput","deliveryModeId","modeOfDeliveryId","updateEmail","emailAddress","customerInformation","Email","updateGuestCheckoutEmail","newGuestCheckoutEmail","updateCartDeliverySpecification","updateAndProceedFromDeliveryOptions","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","$type","da","path","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","viewDictionary","cn","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","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","reject","_document2","_document3","defer","src","addEventListener","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","getGenericAction","CheckoutStateInput","_this","CheckoutState","_giftCards","_giftCardExtends","_loyaltyAmount","_guestCheckoutEmail","_customerReference","_customerRequisition","_note","_isTermsAndConditionAccepted","_customerAccountAmount","defineProperty","_tokenizedPaymentCard","_tenderLine","_billingAddress","_shippingAddress","_cardPrefix","_loyaltyCardNumber","updateTokenizedPaymentCard","newTokenizedPaymentCard","updateTenderLine","newTenderLine","updateBillingAddress","newBillingAddress","updateCardPrefix","newCardPrefix","removeGiftCard","giftCardNumber","giftCard","removeGiftCardExtend","addGiftCard","__spreadArrays","addGiftCardExtend","updateLoyaltyCardNumber","newLoyaltyCardNumber","updateLoyaltyAmount","newAmount","customerReference","customerRequisition","note","updateTermsAndConditionsAcceptance","newIsTermsAndConditionAccepted","updateCustomerAccountAmount","EnabledPaymentsForOBO","ModuleStatesCacheKey","getModuleStates","cacheKey","moduleStates","updateModuleStates","WrappedComponent","_super","ModuleState","call","initializeState","_b","typeName","states","__assign","_a","hasInitialized","isCancellable","isSubmitContainer","childIds","getModuleStateManager","validate","isReady","isPending","isSkipped","isCancelAllowed","shouldSubmitContainer","hasModuleState","setIsRequired","setIsCancellable","setIsSubmitContainer","setHasError","onSkip","onDisable","getModule","moduleId","getModuleByTypeName","getModuleStateManagerByTypeName","values","_moduleState","_validateLeaf","source","module","isMatch","_validateContainer","allMatched","skipSkippableItem","shouldEnableSinglePaymentAuthorizationCheckout","childId","_isPaymentSectionContainer","ArrayExtensions","hasElements","enableControl","__extends","shouldComponentUpdate","nextProps","exports","ReactDOM"],"sourceRoot":""}