{"version":3,"file":"static/js/cb4768d4975830cad47a.bundle.js","mappings":"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","sources":["webpack://@msdyn365-commerce-partners/fabrikam/./src/connectors/msdyn365-geoLookup/msdyn365-geoLookup.provider.ts?3d63","webpack://@msdyn365-commerce-partners/fabrikam/./src/connectors/msdyn365-seg-test-1/msdyn365-seg-test-1.provider.ts?3902","webpack://@msdyn365-commerce-partners/fabrikam/./lib/component-registration.js?266e","webpack://@msdyn365-commerce-partners/fabrikam/./lib/connector-registration.js?87e5","webpack://@msdyn365-commerce-partners/fabrikam/./lib/module-registration.js?44dd","webpack://@msdyn365-commerce-partners/fabrikam/./lib/module-registration.local.js?540f","webpack://@msdyn365-commerce-partners/fabrikam/./lib/view-registration.js?92f2","webpack://@msdyn365-commerce-partners/fabrikam/./src/data-actions/accordion-state-data-action.ts?eaf1","webpack://@msdyn365-commerce-partners/fabrikam/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://@msdyn365-commerce-partners/fabrikam/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://@msdyn365-commerce-partners/fabrikam/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/category-page-summary/category-page-summary.action.ts?c40c","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/default-page-summary/default-page-summary.action.ts?5b44","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/list-page-summary/list-page-summary.action.ts?a1a8","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/product-page-summary/product-page-summary.action.ts?9992","webpack://@msdyn365-commerce-partners/fabrikam/./src/dataActions/get-attributes-for-selected-variant.ts?e4b6","webpack://@msdyn365-commerce-partners/fabrikam/../../src/add-address.ts?fb17","webpack://@msdyn365-commerce-partners/fabrikam/../../src/add-item-to-product-list.ts?580e","webpack://@msdyn365-commerce-partners/fabrikam/../../src/add-organization-user.ts?ed86","webpack://@msdyn365-commerce-partners/fabrikam/../../src/checkout.ts?57e0","webpack://@msdyn365-commerce-partners/fabrikam/../../src/create-product-list.ts?7367","webpack://@msdyn365-commerce-partners/fabrikam/../../src/delete-address.ts?f9a3","webpack://@msdyn365-commerce-partners/fabrikam/../../src/delete-organization-user.ts?7f5d","webpack://@msdyn365-commerce-partners/fabrikam/../../src/edit-organization-user.ts?d2ac","webpack://@msdyn365-commerce-partners/fabrikam/../../src/generic-data-action.ts?f887","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-address.ts?20a3","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-attribute-definitions.ts?cc6b","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-availabilities-cartlines.ts?b8e8","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-business-partner-operation-requests.ts?bece","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-catalogs.ts?7332","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-categories-hierarchy.ts?acde","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-categories.ts?8dc6","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-category-paths.ts?b007","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-channel-delivery-option-configuration.ts?a716","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-checkout-cart.ts?79bc","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-current-business-partner-user.ts?1479","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-current-category-hierarchy.ts?d48e","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-current-category.ts?354d","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-customer-balance.ts?d165","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-customer-loyalty-cards.ts?2466","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-customer.ts?8319","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-delivery-options-for-cartlines.ts?4dfe","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-delivery-options-for-selected-variant.ts?3f6c","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-dimension-availabilities-for-product-search-result.ts?5259","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-dimension-availabilities-for-products.ts?f656","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-dimensions-for-selected-variant.ts?6bf4","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-feature-state.ts?1a1d","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-full-available-inventory-nearby.ts?20be","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/utilities/quick-order-templates.ts?0ea6","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-full-product-list.ts?ccfb","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-full-products-by-refine-search-category.ts?30ab","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-full-products-by-refine-search-text.ts?2ad7","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/utilities/refiner-utils.ts?1e61","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-full-products.ts?ba9a","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-items-in-wishlist.ts?0d27","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-list.ts?4fd5","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-loyalty-card.ts?7213","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-loyalty-transaction-estimation.ts?e254","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-media-locations-by-id.ts?8462","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-media-locations-for-selected-variant.ts?fd54","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-order-history.ts?76fd","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-org-unit-configuration.ts?4793","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-organization-users-count.ts?b5f7","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-organization-users.ts?b72e","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-organization-wide-order-history.ts?92b8","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-price-for-product-search-result.ts?36f8","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-price-for-selected-variant.ts?9e79","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-product-availabilities-for-selected-variant.ts?0abd","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-product-dimensions-with-availabilities.ts?347b","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/utilities/quick-order-template-line.ts?56d5","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-product-list-lines.ts?ae74","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-product-list.ts?ef13","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-products-by-category.ts?accf","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-products-in-active-cart.ts?3376","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-promotion-options-for-cartlines.ts?1a35","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-ratings-summary-input.ts?3ccb","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-ratings-summary.ts?49bc","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-refiners-by-category.ts?6d4e","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-refiners-by-text.ts?c52a","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-related-products.ts?6f93","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-scan-results.ts?6b44","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-search-configuration.ts?acd1","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-selected-variant.ts?f0c0","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-simple-products.ts?fed7","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-store-location-information.ts?1df0","webpack://@msdyn365-commerce-partners/fabrikam/../../src/get-wishlist-by-customer-id.ts?e873","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/invoices/get-invoice-details.ts?66a9","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/invoices/get-invoice.ts?479e","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/invoices/get-invoices.ts?22cb","webpack://@msdyn365-commerce-partners/fabrikam/../../src/issue-loyalty.ts?f8fa","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/order-templates/add-item-to-order-template.ts?fff3","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/order-templates/add-order-template-to-cart.ts?6ee4","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/order-templates/create-order-template.ts?03c1","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/order-templates/get-full-order-template.ts?72c6","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/order-templates/get-full-order-templates.ts?b553","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/order-templates/get-order-templates-preview.ts?b8c3","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/order-templates/get-order-templates.ts?a3b1","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/order-templates/get-paginated-order-template-lines.ts?9b12","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/order-templates/update-order-template-header.ts?1f77","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/order-templates/update-order-template-line.ts?527b","webpack://@msdyn365-commerce-partners/fabrikam/../../src/refine-search-by-category.ts?3e65","webpack://@msdyn365-commerce-partners/fabrikam/../../src/search-by-text.ts?ebe1","webpack://@msdyn365-commerce-partners/fabrikam/../../src/search-org-unit-locations.ts?d18d","webpack://@msdyn365-commerce-partners/fabrikam/../../src/update-address.ts?3e4d","webpack://@msdyn365-commerce-partners/fabrikam/../../src/update-customer-attributes.ts?8d49","webpack://@msdyn365-commerce-partners/fabrikam/../../src/update-customer-personalization.ts?4aa9","webpack://@msdyn365-commerce-partners/fabrikam/../../src/update-primary-address.ts?83fa","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/utilities/QueryResultSettingsProxy.ts?5e44","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/Url-builder/parameterize.ts?f5a5","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/Url-builder/category-url-builder.ts?e564","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/Url-builder/invoice-url-builder.ts?d542","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/Url-builder/product-url-builder.ts?baf1","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/data-structures/dictionary.ts?bab3","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/events/event.ts?15a9","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/extensions/object-extensions.ts?6388","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/extensions/array-extensions.ts?1a2a","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/extensions/enum-extensions.ts?cf51","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/extensions/string-extensions.ts?ab9f","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/utilities/getRnrKeys.ts?700f","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/utilities/input-data-parser.ts?027a","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/utilities/order-templates.ts?d593","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/utilities/product-inventory-information.ts?0ec6","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/utilities/product-inventory-utils.ts?58b5","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/promise-queue/finite-promise-queue.ts?77bf","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/promise-queue/promise-queue.ts?e362","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/retail-actions/node_modules/uuid/dist/esm-browser/rng.js?b47d","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/retail-actions/node_modules/uuid/dist/esm-browser/regex.js?08ba","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/retail-actions/node_modules/uuid/dist/esm-browser/validate.js?acea","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/retail-actions/node_modules/uuid/dist/esm-browser/stringify.js?6cb1","webpack://@msdyn365-commerce-partners/fabrikam/./node_modules/@msdyn365-commerce-modules/retail-actions/node_modules/uuid/dist/esm-browser/v4.js?0101","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/random/guid.ts?1947","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/random/index.ts?1f9d","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/regex/email-regex.ts?6a6a","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/regex/password-regex.ts?456d","webpack://@msdyn365-commerce-partners/fabrikam/../../../../src/utilities/regex/phone-regex.ts?9ada","webpack://@msdyn365-commerce-partners/fabrikam/../../../src/utilities/utils.ts?fbc0","webpack://@msdyn365-commerce-partners/fabrikam/./src/data-actions/tab-state-data-action.ts?09b4","webpack://@msdyn365-commerce-partners/fabrikam/external var \"React\"?0d3b","webpack://@msdyn365-commerce-partners/fabrikam/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IGeoLocation, IRequestContext } from '@msdyn365-commerce/core';\r\nimport axios from 'axios';\r\n/**\r\n * A basic implementation of the ExperimentationProvider interface used for testing\r\n */\r\nclass MsDyn365GeoLookupTestConnector {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private geoEndpoint: string = '';\r\n public initialize(config: any): Promise {\r\n console.log(`MsDyn365 geoLookup Test Connector called with config: ${JSON.stringify(config)}`);\r\n this.geoEndpoint = config.geoEndpoint;\r\n return Promise.resolve(true);\r\n }\r\n\r\n public async getGeoInformation(ip: string, requestContext: IRequestContext, userId?: string): Promise {\r\n let geoInformation: IGeoLocation | undefined;\r\n let geoMockService;\r\n if (!this.geoEndpoint) {\r\n return geoInformation;\r\n }\r\n const result = (await axios.get(this.geoEndpoint)).data;\r\n if (result) {\r\n for (const service of result.service) {\r\n if (service.name === 'MockGeo') {\r\n geoMockService = service.mock;\r\n }\r\n }\r\n }\r\n\r\n if (geoMockService) {\r\n for (const mock of geoMockService) {\r\n if (mock.input?.ip === ip) {\r\n geoInformation = {};\r\n geoInformation.city = mock.response?.city;\r\n geoInformation.country = mock.response?.country;\r\n geoInformation.region = mock.response?.region;\r\n geoInformation.postalCode = mock.response && mock.response['postal code'];\r\n }\r\n }\r\n }\r\n\r\n return Promise.resolve(geoInformation);\r\n }\r\n}\r\n\r\nconst connector = new MsDyn365GeoLookupTestConnector();\r\nexport default connector;\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 { ISegmentationProvider, ISementations } from '@msdyn365-commerce/core';\r\n/**\r\n * A basic implementation of the ExperimentationProvider interface used for testing\r\n */\r\nclass MsDyn365GeoLookupTestConnector implements ISegmentationProvider {\r\n private testSegments = {\r\n '101': '25',\r\n '102': 'female',\r\n '103': 'house'\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n public initialize(config: any): Promise {\r\n console.log(`MsDyn365 Segmentation Test Connector called with config: ${JSON.stringify(config)}`);\r\n return Promise.resolve(true);\r\n }\r\n\r\n public async getSegmentations(userId: string, segmentationIds: string[]): Promise {\r\n console.log(`MsDyn365 Segmentation Test Connector will resolve segments - ${segmentationIds} for ${userId}`);\r\n const testResult: ISementations = {};\r\n if (segmentationIds) {\r\n segmentationIds.forEach(segmentId => {\r\n testResult[segmentId] = this.testSegments[segmentId];\r\n });\r\n }\r\n\r\n return Promise.resolve(testResult);\r\n }\r\n}\r\n\r\nconst connector = new MsDyn365GeoLookupTestConnector();\r\nexport default connector;\r\n","/**\n* Copyright (c) 2018 Microsoft Corporation\n* Modules Registration\n* THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\n*/\n\nexport const componentDictionary = {};\n\ncomponentDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|components|cartlineitem'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-fabrikam-design-kit-cartlineitem' */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/components/cartlineitem.component.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-cartlineitem'\n };\ncomponentDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|components|promocode'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-fabrikam-design-kit-promocode' */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/components/promocode.component.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-promocode'\n };","/**\n* Copyright (c) 2018 Microsoft Corporation\n* Modules Registration\n* THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\n*/\nconst { log, error } = console;\nconst detailedWebpackError = (msg, errorObject) => { error(msg); error(errorObject); process.env.NODE_ENV !== 'development' && error('Run in dev mode to see full list of errors'); process.exit(50); }\nconst handleError = (modPath, errObject) => {\n detailedWebpackError('Error with path: ' + modPath, errObject);\n}\n\nconst handleMissingImplementationDetails = (functionName, connectorName, connectorType) => {\n error('----ERROR: CONNECTOR MISSING IMPLEMENTATION DETAILS-----');\n error('Missing function ' + functionName + ' from ' + connectorType + ' implementation for experimentation connector ' + connectorName);\n throw new Error('Connector missing implementation details');\n}\n\nconst verifySegmentationRegistration = (connectorName) => {\n const segmentationProvider = connectorDictionary[connectorName].provider;\n try {\n if (!segmentationProvider.__proto__.initialize) {\n handleMissingImplementationDetails('initialize', connectorName, 'provider');\n }\n if (!segmentationProvider.__proto__.getSegmentations) {\n handleMissingImplementationDetails('getSegmentations', connectorName, 'provider');\n }\n } catch (e) {\n // Connector has not implemented all the required methods, setting registration as undefined\n connectorDictionary[connectorName] = undefined;\n throw e;\n }\n}\n\nconst isServer = ()=>{\n return ! (typeof window != 'undefined' && window.document);\n}\n\nconst verifyGeoLookupRegistration = (connectorName) => {\n const geoLookupProvider = connectorDictionary[connectorName].provider;\n try {\n if (!geoLookupProvider.__proto__.initialize) {\n handleMissingImplementationDetails('initialize', connectorName, 'provider');\n }\n if (!geoLookupProvider.__proto__.getGeoInformation) {\n handleMissingImplementationDetails('getGeoInformation', connectorName, 'provider');\n }\n } catch (e) {\n // Connector has not implemented all the required methods, setting registration as undefined\n connectorDictionary[connectorName] = undefined;\n throw e;\n }\n}\n\nconst verifyExperimentationReigstration = (connectorName) => {\n const connectorImpl = connectorDictionary[connectorName].provider;\n const connectorListenerImpl = connectorDictionary[connectorName].listener;\n try {\n if (!connectorImpl.__proto__.initialize) {\n handleMissingImplementationDetails('initialize', connectorName, 'provider');\n }\n if (!connectorImpl.__proto__.getConfigForClientSideInit) {\n handleMissingImplementationDetails('getConfigForClientSideInit', connectorName, 'provider');\n }\n if (!connectorImpl.__proto__.initializeClientSide) {\n handleMissingImplementationDetails('initializeClientSide', connectorName, 'provider');\n }\n if (!connectorImpl.__proto__.getExperiments) {\n handleMissingImplementationDetails('getExperiments', connectorName, 'provider');\n }\n if (!connectorImpl.__proto__.getVariantsForUser) {\n handleMissingImplementationDetails('getVariantsForUser', connectorName, 'provider');\n }\n if (!connectorImpl.__proto__.activateExperiment) {\n handleMissingImplementationDetails('activateExperiment', connectorName, 'provider');\n }\n if (!connectorListenerImpl.__proto__.initializeClientSide) {\n handleMissingImplementationDetails('initializeClientSide', connectorName, 'listener');\n }\n if (!connectorListenerImpl.__proto__.logEvent) {\n handleMissingImplementationDetails('logEvent', connectorName, 'listener');\n }\n } catch (e) {\n // Connector has not implemented all the required methods, setting registration as undefined\n connectorDictionary[connectorName] = undefined;\n throw e;\n }\n}\n\nexport const connectorDictionary = {};\n\n\n {\n const connectorName = '100';\n \n let connectorProviderImpl = require('partner/connectors/msdyn365-seg-test-1/msdyn365-seg-test-1.provider');\n if (!connectorProviderImpl.default) {\n throw new Error('segmentation Connector provider 100 does not have a default export. Check the provider file of the connector for a default export.');\n }\n connectorDictionary[connectorName] = {provider: connectorProviderImpl.default};\n }\n\n {\n const connectorName = 'Optimizely';\n \n let connectorProviderImpl = require('@msdyn365-commerce-thirdpartyconnectors/exp-connector-optimizely/dist/lib/connectors/optimizely-connector/optimizely-connector.provider');\n let connectorListenerImpl = require('@msdyn365-commerce-thirdpartyconnectors/exp-connector-optimizely/dist/lib/connectors/optimizely-connector/optimizely-connector.listener');\n let connectorDomainsList = '';\n if (!connectorProviderImpl.default) {\n throw new Error('Exp Connector provider Optimizely does not have a default export. Check the provider file of the connector for a default export.');\n }\n if (!connectorListenerImpl.default) {\n throw new Error('Exp Connector listener Optimizely does not have a default export. Check the listener file of the connector for a default export.');\n }\n connectorDictionary[connectorName] = {provider: connectorProviderImpl.default, listener: connectorListenerImpl.default, connectorDomains: connectorDomainsList};\n }\n\n {\n const connectorName = 'msdyn365-geoLookup';\n \n if (isServer()) {\n let connectorProviderImpl = require('partner/connectors/msdyn365-geoLookup/msdyn365-geoLookup.provider');\n if (!connectorProviderImpl.default) {\n throw new Error('Geo Lookup Connector provider msdyn365-geoLookup does not have a default export. Check the provider file of the connector for a default export.');\n }\n connectorDictionary[connectorName] = {provider: connectorProviderImpl.default};\n }\n }\n\nexport const validateConnectorRegistration = () => {\n \n verifySegmentationRegistration('100');\n\n verifyExperimentationReigstration('Optimizely');\n\n if (isServer()) {\n verifyGeoLookupRegistration('msdyn365-geoLookup');}\n};","\n/**\n * Copyright (c) 2018 Microsoft Corporation\n * Modules Registration\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\n */\n\n/**\n * Register all available modules\n */\nexport const registerAllModules = (requiredModules) => {\n let binding = { modules: {}, dataActions: {} };\n const { log, error } = console;\n const detailedWebpackError = (msg, errorObject) => { error(msg); error(errorObject); process.env.NODE_ENV !== 'development' && error('Run in dev mode to see full list of errors'); process.exit(50); }\n const handleError = (modPath, errObject) => {\n detailedWebpackError('Error with path: ' + modPath, errObject);\n }\n if (requiredModules) {\n requiredModules = requiredModules.map((module) => module.toLowerCase());\n }\n const isNotRegistered = (moduleName) => {\n return !requiredModules || requiredModules.length <= 0 || requiredModules.findIndex((module) => module === moduleName) !== -1;\n };\n\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 }\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 try {\n\n\n isNotRegistered('aad-generic') && (binding.modules['aad-generic'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-aad-generic' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/aad-generic/aad-generic'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'aad-generic',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/aad-generic'\n });\n \n\n isNotRegistered('accordion') && (binding.modules['accordion'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-accordion-accordion' */\n '@msdyn365-commerce-modules/accordion/dist/lib/modules/accordion/accordion'),\n $type: 'moduleDefinition',\n da: [{name:'accordionExpandedState', path:'@msdyn365-commerce-modules/accordion/dist/lib/data-actions/accordion-state-data-action', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'accordion',\n p: 'accordion',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/accordion/dist/lib/modules/accordion'\n });\n \n\n isNotRegistered('accordion-item') && (binding.modules['accordion-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-accordion-accordion-item' */\n '@msdyn365-commerce-modules/accordion/dist/lib/modules/accordion-item/accordion-item'),\n $type: 'moduleDefinition',\n da: [{name:'accordionExpandedState', path:'@msdyn365-commerce-modules/accordion/dist/lib/data-actions/accordion-state-data-action', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'accordion-item',\n p: 'accordion',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/accordion/dist/lib/modules/accordion-item'\n });\n \n\n isNotRegistered('account-address-tile') && (binding.modules['account-address-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-address-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-address-tile/account-address-tile'),\n $type: 'contentModule',\n da: [{name:'address', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-address', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'account-address-tile',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-address-tile'\n });\n \n\n isNotRegistered('account-customer-balance') && (binding.modules['account-customer-balance'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-customer-balance' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-customer-balance/account-customer-balance'),\n $type: 'contentModule',\n da: [{name:'b2bUserInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-business-partner-user', runOn: 0},{name:'balance', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'account-customer-balance',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-customer-balance'\n });\n \n\n isNotRegistered('account-customer-balance-tile') && (binding.modules['account-customer-balance-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-customer-balance-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-customer-balance-tile/account-customer-balance-tile'),\n $type: 'contentModule',\n da: [{name:'balance', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'account-customer-balance-tile',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-customer-balance-tile'\n });\n \n\n isNotRegistered('account-generic-tile') && (binding.modules['account-generic-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-generic-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-generic-tile/account-generic-tile'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'account-generic-tile',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-generic-tile'\n });\n \n\n isNotRegistered('account-invoice-tile') && (binding.modules['account-invoice-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-invoice-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-invoice-tile/account-invoice-tile'),\n $type: 'contentModule',\n da: [{name:'customerBalance', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance', runOn: 0},{name:'invoices', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoices', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'account-invoice-tile',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-invoice-tile'\n });\n \n\n isNotRegistered('account-loyalty') && (binding.modules['account-loyalty'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-loyalty' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-loyalty/account-loyalty'),\n $type: 'contentModule',\n da: [{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'account-loyalty',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-loyalty'\n });\n \n\n isNotRegistered('account-loyalty-tile') && (binding.modules['account-loyalty-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-loyalty-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-loyalty-tile/account-loyalty-tile'),\n $type: 'contentModule',\n da: [{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'account-loyalty-tile',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-loyalty-tile'\n });\n \n\n isNotRegistered('account-management-address') && (binding.modules['account-management-address'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-address-account-management-address' */\n '@msdyn365-commerce-modules/address/dist/lib/modules/account-management-address/account-management-address'),\n $type: 'contentModule',\n da: [{name:'address', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-address', runOn: 0},{name:'addressPurposes', path:'@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes', runOn: 0},{name:'countryRegions', path:'@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions', runOn: 0},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'account-management-address',\n p: 'address',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/address/dist/lib/modules/account-management-address'\n });\n \n\n isNotRegistered('account-order-templates-tile') && (binding.modules['account-order-templates-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-order-templates-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-order-templates-tile/account-order-templates-tile'),\n $type: 'contentModule',\n da: [{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:'orderTemplates', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'account-order-templates-tile',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-order-templates-tile'\n });\n \n\n isNotRegistered('account-profile') && (binding.modules['account-profile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-profile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-profile/account-profile'),\n $type: 'contentModule',\n da: [{name:'attributeDefinitions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-attribute-definitions', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'account-profile',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-profile'\n });\n \n\n isNotRegistered('account-profile-edit') && (binding.modules['account-profile-edit'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-profile-edit' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-profile-edit/account-profile-edit'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'account-profile-edit',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-profile-edit'\n });\n \n\n isNotRegistered('account-welcome-tile') && (binding.modules['account-welcome-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-welcome-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-welcome-tile/account-welcome-tile'),\n $type: 'contentModule',\n da: [{name:'accountInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'account-welcome-tile',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-welcome-tile'\n });\n \n\n isNotRegistered('account-wishlist-tile') && (binding.modules['account-wishlist-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-wishlist-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-wishlist-tile/account-wishlist-tile'),\n $type: 'contentModule',\n da: [{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'account-wishlist-tile',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-wishlist-tile'\n });\n \n\n isNotRegistered('active-image') && (binding.modules['active-image'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-active-image-active-image' */\n '@msdyn365-commerce-modules/active-image/dist/lib/modules/active-image/active-image'),\n $type: 'contentModule',\n da: [{name:'products', path:'@msdyn365-commerce-modules/active-image/dist/lib/modules/actions/get-active-image-products', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'active-image',\n p: 'active-image',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/active-image/dist/lib/modules/active-image'\n });\n \n\n isNotRegistered('b2b-requests-status') && (binding.modules['b2b-requests-status'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-b2b-requests-status' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/b2b-requests-status/b2b-requests-status'),\n $type: 'contentModule',\n da: [{name:'b2bUserInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-business-partner-user', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'operationRequests', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-business-partner-operation-requests', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'b2b-requests-status',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/b2b-requests-status'\n });\n \n\n isNotRegistered('b2b-requests-tile') && (binding.modules['b2b-requests-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-b2b-requests-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/b2b-requests-tile/b2b-requests-tile'),\n $type: 'contentModule',\n da: [{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'b2b-requests-tile',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/b2b-requests-tile'\n });\n \n\n isNotRegistered('back-top-footer') && (binding.modules['back-top-footer'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-footer-back-top-footer' */\n '@msdyn365-commerce-modules/footer/dist/lib/modules/back-top-footer/back-top-footer'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'back-top-footer',\n p: 'footer',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/footer/dist/lib/modules/back-top-footer'\n });\n \n\n isNotRegistered('breadcrumb') && (binding.modules['breadcrumb'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-breadcrumb-breadcrumb' */\n '@msdyn365-commerce-modules/breadcrumb/dist/lib/modules/breadcrumb/breadcrumb'),\n $type: 'contentModule',\n da: [{name:'categoryHierarchy', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy', runOn: 0},{name:'categoryPaths', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-category-paths', runOn: 0},{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'breadcrumb',\n p: 'breadcrumb',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/breadcrumb/dist/lib/modules/breadcrumb'\n });\n \n\n isNotRegistered('bulk-purchase') && (binding.modules['bulk-purchase'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-bulk-purchase-bulk-purchase' */\n '@msdyn365-commerce-modules/bulk-purchase/dist/lib/modules/bulk-purchase/bulk-purchase'),\n $type: 'contentModule',\n da: [{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 1},{name:'orderTemplates', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview', runOn: 1},{name:'productDimensions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-dimensions-with-availabilities', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'bulk-purchase',\n p: 'bulk-purchase',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/bulk-purchase/dist/lib/modules/bulk-purchase'\n });\n \n\n isNotRegistered('business-account-address') && (binding.modules['business-account-address'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-address-business-account-address' */\n '@msdyn365-commerce-modules/address/dist/lib/modules/business-account-address/business-account-address'),\n $type: 'contentModule',\n da: [{name:'address', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-address', runOn: 0},{name:'addressPurposes', path:'@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes', runOn: 0},{name:'countryRegions', path:'@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions', runOn: 0},{name:'countryStates', path:'@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'business-account-address',\n p: 'address',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/address/dist/lib/modules/business-account-address'\n });\n \n\n isNotRegistered('business-organization-list') && (binding.modules['business-organization-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-business-organization-list-business-organization-list' */\n '@msdyn365-commerce-modules/business-organization-list/dist/lib/modules/business-organization-list/business-organization-list'),\n $type: 'contentModule',\n da: [{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'users', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-organization-users', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'business-organization-list',\n p: 'business-organization-list',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/business-organization-list/dist/lib/modules/business-organization-list'\n });\n \n\n isNotRegistered('business-sign-up') && (binding.modules['business-sign-up'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-business-account-management-business-sign-up' */\n '@msdyn365-commerce-modules/business-account-management/dist/lib/modules/business-sign-up/business-sign-up'),\n $type: 'containerModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'business-sign-up',\n p: 'business-account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/business-account-management/dist/lib/modules/business-sign-up'\n });\n \n\n isNotRegistered('buybox') && (binding.modules['buybox'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-buybox-buybox' */\n '@msdyn365-commerce-modules/buybox/dist/lib/modules/buybox/buybox'),\n $type: 'containerModule',\n da: [{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:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'deliveryOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-selected-variant', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'orderTemplates', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview', runOn: 1},{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'productAvailableQuantity', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-availabilities-for-selected-variant', runOn: 0},{name:'productDimensions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-dimensions-for-selected-variant', runOn: 0},{name:'productPrice', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-price-for-selected-variant', runOn: 0},{name:'ratingsSummary', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary', runOn: 1},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'buybox',\n p: 'buybox',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/buybox/dist/lib/modules/buybox'\n });\n \n\n isNotRegistered('carousel') && (binding.modules['carousel'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-carousel-carousel' */\n '@msdyn365-commerce-modules/carousel/dist/lib/modules/carousel/carousel'),\n $type: 'containerModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'carousel',\n p: 'carousel',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/carousel/dist/lib/modules/carousel'\n });\n \n\n isNotRegistered('cart') && (binding.modules['cart'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-cart-cart' */\n '@msdyn365-commerce-modules/cart/dist/lib/modules/cart/cart'),\n $type: 'containerModule',\n da: [{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:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'deliveryOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'orderTemplates', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview', runOn: 1},{name:'orgUnitLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations', runOn: 0},{name:'productAvailabilites', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines', runOn: 0},{name:'products', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart', runOn: 0},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1},{name:'wishlistItems', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist', runOn: 1},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'cart',\n p: 'cart',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/cart/dist/lib/modules/cart'\n });\n \n\n isNotRegistered('cart-icon') && (binding.modules['cart-icon'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-cart-cart-icon' */\n '@msdyn365-commerce-modules/cart/dist/lib/modules/cart-icon/cart-icon'),\n $type: 'containerModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action', runOn: 1},{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', 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:'orgUnitLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'cart-icon',\n p: 'cart',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/cart/dist/lib/modules/cart-icon'\n });\n \n\n isNotRegistered('catalog-picker') && (binding.modules['catalog-picker'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-catalog-picker-catalog-picker' */\n '@msdyn365-commerce-modules/catalog-picker/dist/lib/modules/catalog-picker/catalog-picker'),\n $type: 'contentModule',\n da: [{name:'catalogs', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'catalog-picker',\n p: 'catalog-picker',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/catalog-picker/dist/lib/modules/catalog-picker'\n });\n \n\n isNotRegistered('category-page-summary') && (binding.modules['category-page-summary'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-page-summary-category-page-summary' */\n '@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary'),\n $type: 'htmlHeadTagsModule',\n da: [{name:'pageSummary', path:'@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary/category-page-summary.action', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'category-page-summary',\n p: 'page-summary',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary'\n });\n \n\n isNotRegistered('check-in-for-pickup') && (binding.modules['check-in-for-pickup'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-check-in-for-pickup-check-in-for-pickup' */\n '@msdyn365-commerce-modules/check-in-for-pickup/dist/lib/modules/check-in-for-pickup/check-in-for-pickup'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'check-in-for-pickup',\n p: 'check-in-for-pickup',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/check-in-for-pickup/dist/lib/modules/check-in-for-pickup'\n });\n \n\n isNotRegistered('checkout') && (binding.modules['checkout'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout/checkout'),\n $type: 'containerModule',\n da: [{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:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'deliveryOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines', runOn: 1},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'orgUnitLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations', runOn: 1},{name:'products', path:'@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout/actions/get-products-in-active-checkout-cart', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout',\n p: 'checkout',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout'\n });\n \n\n isNotRegistered('checkout-billing-address') && (binding.modules['checkout-billing-address'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-address-checkout-billing-address' */\n '@msdyn365-commerce-modules/address/dist/lib/modules/checkout-billing-address/checkout-billing-address'),\n $type: 'contentModule',\n da: [{name:'addressPurposes', path:'@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes', 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:'countryRegions', path:'@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions', runOn: 0},{name:'countryStates', path:'@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state', 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: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout-billing-address',\n p: 'address',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/address/dist/lib/modules/checkout-billing-address'\n });\n \n\n isNotRegistered('checkout-customer-account-payment') && (binding.modules['checkout-customer-account-payment'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-customer-account-payment' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-customer-account-payment/checkout-customer-account-payment'),\n $type: 'contentModule',\n da: [{name:'checkout', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action', runOn: 1},{name:'creditBalances', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout-customer-account-payment',\n p: 'checkout',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-customer-account-payment'\n });\n \n\n isNotRegistered('checkout-delivery-options') && (binding.modules['checkout-delivery-options'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-delivery-options' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-delivery-options/checkout-delivery-options'),\n $type: 'contentModule',\n da: [{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:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout-delivery-options',\n p: 'checkout',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-delivery-options'\n });\n \n\n isNotRegistered('checkout-express') && (binding.modules['checkout-express'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-express' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-express/checkout-express'),\n $type: 'contentModule',\n da: [{name:'cardPaymentAcceptPoint', path:'@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-express/actions/get-card-payment-accept-point', runOn: 1},{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:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout-express',\n p: 'checkout',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-express'\n });\n \n\n isNotRegistered('checkout-gift-card') && (binding.modules['checkout-gift-card'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-gift-card' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-gift-card/checkout-gift-card'),\n $type: 'contentModule',\n da: [{name:'checkout', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout-gift-card',\n p: 'checkout',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-gift-card'\n });\n \n\n isNotRegistered('checkout-guest-profile') && (binding.modules['checkout-guest-profile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-guest-profile' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-guest-profile/checkout-guest-profile'),\n $type: 'contentModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 1},{name:'checkout', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout-guest-profile',\n p: 'checkout',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-guest-profile'\n });\n \n\n isNotRegistered('checkout-loyalty') && (binding.modules['checkout-loyalty'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-loyalty' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-loyalty/checkout-loyalty'),\n $type: 'contentModule',\n da: [{name:'checkout', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action', runOn: 1},{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 1},{name:'loyaltyTransactionEstimation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-transaction-estimation', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout-loyalty',\n p: 'checkout',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-loyalty'\n });\n \n\n isNotRegistered('checkout-order-confirmation') && (binding.modules['checkout-order-confirmation'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-management-checkout-order-confirmation' */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/checkout-order-confirmation/checkout-order-confirmation'),\n $type: 'contentModule',\n da: [{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:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 1},{name:'tenderTypes', path:'@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout-order-confirmation',\n p: 'order-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/order-management/dist/lib/modules/checkout-order-confirmation'\n });\n \n\n isNotRegistered('checkout-payment-instrument') && (binding.modules['checkout-payment-instrument'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-payment-instrument' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-payment-instrument/checkout-payment-instrument'),\n $type: 'contentModule',\n da: [{name:'cardPaymentAcceptPoint', path:'@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-payment-instrument/actions/get-card-payment-accept-point', runOn: 1},{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:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout-payment-instrument',\n p: 'checkout',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-payment-instrument'\n });\n \n\n isNotRegistered('checkout-pickup') && (binding.modules['checkout-pickup'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-pickup' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-pickup/checkout-pickup'),\n $type: 'contentModule',\n da: [{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:'deliveryOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'orgUnitLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout-pickup',\n p: 'checkout',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-pickup'\n });\n \n\n isNotRegistered('checkout-section-container') && (binding.modules['checkout-section-container'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-section-container' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-section-container/checkout-section-container'),\n $type: 'containerModule',\n da: [{name:'checkout', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout-section-container',\n p: 'checkout',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-section-container'\n });\n \n\n isNotRegistered('checkout-shipping-address') && (binding.modules['checkout-shipping-address'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-address-checkout-shipping-address' */\n '@msdyn365-commerce-modules/address/dist/lib/modules/checkout-shipping-address/checkout-shipping-address'),\n $type: 'contentModule',\n da: [{name:'address', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-address', runOn: 0},{name:'addressPurposes', path:'@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes', runOn: 0},{name:'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:'countryRegions', path:'@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions', runOn: 0},{name:'countryStates', path:'@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state', 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: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout-shipping-address',\n p: 'address',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/address/dist/lib/modules/checkout-shipping-address'\n });\n \n\n isNotRegistered('checkout-terms-and-conditions') && (binding.modules['checkout-terms-and-conditions'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-terms-and-conditions' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-terms-and-conditions/checkout-terms-and-conditions'),\n $type: 'contentModule',\n da: [{name:'checkout', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'checkout-terms-and-conditions',\n p: 'checkout',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-terms-and-conditions'\n });\n \n\n isNotRegistered('content-block') && (binding.modules['content-block'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-content-block-content-block' */\n '@msdyn365-commerce-modules/content-block/dist/lib/modules/content-block/content-block'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'content-block',\n p: 'content-block',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/content-block/dist/lib/modules/content-block'\n });\n \n\n isNotRegistered('cookie-compliance') && (binding.modules['cookie-compliance'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-cookie-compliance-cookie-compliance' */\n '@msdyn365-commerce-modules/cookie-compliance/dist/lib/modules/cookie-compliance/cookie-compliance'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'cookie-compliance',\n p: 'cookie-compliance',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/cookie-compliance/dist/lib/modules/cookie-compliance'\n });\n \n\n isNotRegistered('country-picker') && (binding.modules['country-picker'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-country-picker-country-picker' */\n '@msdyn365-commerce-modules/country-picker/dist/lib/modules/country-picker/country-picker'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'country-picker',\n p: 'country-picker',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/country-picker/dist/lib/modules/country-picker'\n });\n \n\n isNotRegistered('default-container') && (binding.modules['default-container'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-core-components-default-container' */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-container/default-container'),\n $type: 'containerModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'default-container',\n p: 'core-components',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-container'\n });\n \n\n isNotRegistered('default-container-2-slots') && (binding.modules['default-container-2-slots'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-core-components-default-container-2-slots' */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-container-2-slots/default-container-2-slots'),\n $type: 'containerModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'default-container-2-slots',\n p: 'core-components',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-container-2-slots'\n });\n \n\n isNotRegistered('default-container-3-slots') && (binding.modules['default-container-3-slots'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-core-components-default-container-3-slots' */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-container-3-slots/default-container-3-slots'),\n $type: 'containerModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'default-container-3-slots',\n p: 'core-components',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-container-3-slots'\n });\n \n\n isNotRegistered('default-external-script') && (binding.modules['default-external-script'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-core-components-default-external-script' */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-external-script/default-external-script'),\n $type: 'scriptModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'default-external-script',\n p: 'core-components',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-external-script'\n });\n \n\n isNotRegistered('default-inline-script') && (binding.modules['default-inline-script'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-core-components-default-inline-script' */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-inline-script/default-inline-script'),\n $type: 'scriptModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'default-inline-script',\n p: 'core-components',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-inline-script'\n });\n \n\n isNotRegistered('default-metatags') && (binding.modules['default-metatags'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-core-components-default-metatags' */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-metatags/default-metatags'),\n $type: 'htmlHeadTagsModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'default-metatags',\n p: 'core-components',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-metatags'\n });\n \n\n isNotRegistered('default-page') && (binding.modules['default-page'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-core-components-default-page' */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-page/default-page'),\n $type: 'pageModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'default-page',\n p: 'core-components',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-page'\n });\n \n\n isNotRegistered('default-page-summary') && (binding.modules['default-page-summary'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-page-summary-default-page-summary' */\n '@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary'),\n $type: 'htmlHeadTagsModule',\n da: [{name:'pageSummary', path:'@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary.action', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'default-page-summary',\n p: 'page-summary',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary'\n });\n \n\n isNotRegistered('fabrikam') && (binding.modules['fabrikam'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-fabrikam-design-kit-fabrikam' */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/fabrikam'),\n $type: 'themeModule',\n da: [],\n definitionExtensions: ['buybox','content-block','media-gallery','navigation-menu','promo-banner','text-block'],\n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'fabrikam',\n p: 'fabrikam-design-kit',\n \n pdp: '',\n \n themeSettings: 'fabrikam.theme.settings.json',\n md: 'node_modules/@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam'\n });\n \n\n isNotRegistered('footer-category') && (binding.modules['footer-category'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-footer-footer-category' */\n '@msdyn365-commerce-modules/footer/dist/lib/modules/footer-category/footer-category'),\n $type: 'containerModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'footer-category',\n p: 'footer',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/footer/dist/lib/modules/footer-category'\n });\n \n\n isNotRegistered('footer-item') && (binding.modules['footer-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-footer-footer-item' */\n '@msdyn365-commerce-modules/footer/dist/lib/modules/footer-item/footer-item'),\n $type: 'moduleDefinition',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'footer-item',\n p: 'footer',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/footer/dist/lib/modules/footer-item'\n });\n \n\n isNotRegistered('gift-card-balance-check') && (binding.modules['gift-card-balance-check'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-gift-card-balance-check' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/gift-card-balance-check/gift-card-balance-check'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'gift-card-balance-check',\n p: 'checkout',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/gift-card-balance-check'\n });\n \n\n isNotRegistered('header') && (binding.modules['header'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-header-header' */\n '@msdyn365-commerce-modules/header/dist/lib/modules/header/header'),\n $type: 'containerModule',\n da: [{name:'accountInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action', runOn: 1},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'header',\n p: 'header',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/header/dist/lib/modules/header'\n });\n \n\n isNotRegistered('iframe') && (binding.modules['iframe'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-iframe-iframe' */\n '@msdyn365-commerce-modules/iframe/dist/lib/modules/iframe/iframe'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'iframe',\n p: 'iframe',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/iframe/dist/lib/modules/iframe'\n });\n \n\n isNotRegistered('image-list') && (binding.modules['image-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-image-list-image-list' */\n '@msdyn365-commerce-modules/image-list/dist/lib/modules/image-list/image-list'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'image-list',\n p: 'image-list',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/image-list/dist/lib/modules/image-list'\n });\n \n\n isNotRegistered('interactive-feature-collection') && (binding.modules['interactive-feature-collection'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-interactive-feature-collection-interactive-feature-collection' */\n '@msdyn365-commerce-modules/interactive-feature-collection/dist/lib/modules/interactive-feature-collection/interactive-feature-collection'),\n $type: 'containerModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'interactive-feature-collection',\n p: 'interactive-feature-collection',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/interactive-feature-collection/dist/lib/modules/interactive-feature-collection'\n });\n \n\n isNotRegistered('interactive-feature-item') && (binding.modules['interactive-feature-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-interactive-feature-collection-interactive-feature-item' */\n '@msdyn365-commerce-modules/interactive-feature-collection/dist/lib/modules/interactive-feature-item/interactive-feature-item'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'interactive-feature-item',\n p: 'interactive-feature-collection',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/interactive-feature-collection/dist/lib/modules/interactive-feature-item'\n });\n \n\n isNotRegistered('invoice-details') && (binding.modules['invoice-details'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-invoice-details-invoice-details' */\n '@msdyn365-commerce-modules/invoice-details/dist/lib/modules/invoice-details/invoice-details'),\n $type: 'contentModule',\n da: [{name:'invoice', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoice', runOn: 0},{name:'invoiceDetails', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoice-details', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'invoice-details',\n p: 'invoice-details',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/invoice-details/dist/lib/modules/invoice-details'\n });\n \n\n isNotRegistered('invoices-list') && (binding.modules['invoices-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-invoice-invoices-list' */\n '@msdyn365-commerce-modules/invoice/dist/lib/modules/invoices-list/invoices-list'),\n $type: 'contentModule',\n da: [{name:'b2bUserInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-business-partner-user', runOn: 0},{name:'customer', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'customerBalance', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance', runOn: 0},{name:'invoices', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoices', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'invoices-list',\n p: 'invoice',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/invoice/dist/lib/modules/invoices-list'\n });\n \n\n isNotRegistered('list-page-summary') && (binding.modules['list-page-summary'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-page-summary-list-page-summary' */\n '@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary'),\n $type: 'htmlHeadTagsModule',\n da: [{name:'pageSummary', path:'@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary/list-page-summary.action', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'list-page-summary',\n p: 'page-summary',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary'\n });\n \n\n isNotRegistered('loyalty-sign-up') && (binding.modules['loyalty-sign-up'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-loyalty-sign-up' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-sign-up/loyalty-sign-up'),\n $type: 'contentModule',\n da: [{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'loyalty-sign-up',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-sign-up'\n });\n \n\n isNotRegistered('loyalty-terms') && (binding.modules['loyalty-terms'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-loyalty-terms' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-terms/loyalty-terms'),\n $type: 'containerModule',\n da: [{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'loyalty-terms',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-terms'\n });\n \n\n isNotRegistered('map') && (binding.modules['map'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-map-map' */\n '@msdyn365-commerce-modules/map/dist/lib/modules/map/map'),\n $type: 'contentModule',\n da: [{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: true,\n ns: '@msdyn365-commerce-modules',\n n: 'map',\n p: 'map',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/map/dist/lib/modules/map'\n });\n \n\n isNotRegistered('media-gallery') && (binding.modules['media-gallery'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-media-gallery-media-gallery' */\n '@msdyn365-commerce-modules/media-gallery/dist/lib/modules/media-gallery/media-gallery'),\n $type: 'contentModule',\n da: [{name:'mediaLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id', runOn: 0},{name:'mediaLocationsForSelectedVariant', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-for-selected-variant', runOn: 0},{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'media-gallery',\n p: 'media-gallery',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/media-gallery/dist/lib/modules/media-gallery'\n });\n \n\n isNotRegistered('navigation-menu') && (binding.modules['navigation-menu'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-navigation-menu-navigation-menu' */\n '@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu'),\n $type: 'contentModule',\n da: [{name:'categories', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'navigation-menu',\n p: 'navigation-menu',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu'\n });\n \n\n isNotRegistered('notifications-list') && (binding.modules['notifications-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-notifications-lists-notifications-list' */\n '@msdyn365-commerce-modules/notifications-lists/dist/lib/modules/notifications-list/notifications-list'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'notifications-list',\n p: 'notifications-lists',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/notifications-lists/dist/lib/modules/notifications-list'\n });\n \n\n isNotRegistered('order-confirmation') && (binding.modules['order-confirmation'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-management-order-confirmation' */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-confirmation/order-confirmation'),\n $type: 'contentModule',\n da: [{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 1},{name:'orderHydration', path:'@msdyn365-commerce-modules/order-management/dist/lib/actions/get-sales-order-confirmation-with-hydrations', runOn: 0},{name:'tenderTypes', path:'@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'order-confirmation',\n p: 'order-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/order-management/dist/lib/modules/order-confirmation'\n });\n \n\n isNotRegistered('order-details') && (binding.modules['order-details'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-management-order-details' */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-details/order-details'),\n $type: 'contentModule',\n da: [{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'channels', path:'@msdyn365-commerce-modules/order-management/dist/lib/actions/get-channels', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 1},{name:'orderHydration', path:'@msdyn365-commerce-modules/order-management/dist/lib/actions/get-sales-order-with-hydrations', runOn: 0},{name:'orgUnitLocations', path:'@msdyn365-commerce-modules/order-management/dist/lib/actions/get-org-unit-locations', runOn: 0},{name:'tenderTypes', path:'@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'order-details',\n p: 'order-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/order-management/dist/lib/modules/order-details'\n });\n \n\n isNotRegistered('order-history') && (binding.modules['order-history'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-management-order-history' */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-history/order-history'),\n $type: 'contentModule',\n da: [{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'channels', path:'@msdyn365-commerce-modules/order-management/dist/lib/actions/get-channels', 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:'orgUnitLocations', path:'@msdyn365-commerce-modules/order-management/dist/lib/actions/get-org-unit-locations', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'order-history',\n p: 'order-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/order-management/dist/lib/modules/order-history'\n });\n \n\n isNotRegistered('order-lookup') && (binding.modules['order-lookup'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-management-order-lookup' */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-lookup/order-lookup'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'order-lookup',\n p: 'order-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/order-management/dist/lib/modules/order-lookup'\n });\n \n\n isNotRegistered('order-template') && (binding.modules['order-template'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-template-order-template' */\n '@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template/order-template'),\n $type: 'contentModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 0},{name:'orderTemplate', path:'@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template/actions/get-order-template', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'order-template',\n p: 'order-template',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template'\n });\n \n\n isNotRegistered('order-template-list') && (binding.modules['order-template-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-template-order-template-list' */\n '@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template-list/order-template-list'),\n $type: 'contentModule',\n da: [{name:'orderTemplates', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'order-template-list',\n p: 'order-template',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template-list'\n });\n \n\n isNotRegistered('organization-users-tile') && (binding.modules['organization-users-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-organization-users-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/organization-users-tile/organization-users-tile'),\n $type: 'contentModule',\n da: [{name:'users', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-organization-users-count', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'organization-users-tile',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/organization-users-tile'\n });\n \n\n isNotRegistered('password-reset') && (binding.modules['password-reset'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-password-reset' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/password-reset/password-reset'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'password-reset',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/password-reset'\n });\n \n\n isNotRegistered('password-reset-verification') && (binding.modules['password-reset-verification'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-password-reset-verification' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/password-reset-verification/password-reset-verification'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'password-reset-verification',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/password-reset-verification'\n });\n \n\n isNotRegistered('place-holder-for-container-preview') && (binding.modules['place-holder-for-container-preview'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-core-components-place-holder-for-container-preview' */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/place-holder-for-container-preview/place-holder-for-container-preview'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'place-holder-for-container-preview',\n p: 'core-components',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/place-holder-for-container-preview'\n });\n \n\n isNotRegistered('product-collection') && (binding.modules['product-collection'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-product-collection-product-collection' */\n '@msdyn365-commerce-modules/product-collection/dist/lib/modules/product-collection/product-collection'),\n $type: 'containerModule',\n da: [{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'product-collection',\n p: 'product-collection',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/product-collection/dist/lib/modules/product-collection'\n });\n \n\n isNotRegistered('product-page-summary') && (binding.modules['product-page-summary'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-page-summary-product-page-summary' */\n '@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary'),\n $type: 'htmlHeadTagsModule',\n da: [{name:'productPageSummary', path:'@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary.action', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'product-page-summary',\n p: 'page-summary',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary'\n });\n \n\n isNotRegistered('product-specification') && (binding.modules['product-specification'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-product-specification-product-specification' */\n '@msdyn365-commerce-modules/product-specification/dist/lib/modules/product-specification/product-specification'),\n $type: 'contentModule',\n da: [{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'productSpecificationData', path:'@msdyn365-commerce-modules/product-specification/dist/lib/dataActions/get-attributes-for-selected-variant', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'product-specification',\n p: 'product-specification',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/product-specification/dist/lib/modules/product-specification'\n });\n \n\n isNotRegistered('promo-banner') && (binding.modules['promo-banner'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-promo-banner-promo-banner' */\n '@msdyn365-commerce-modules/promo-banner/dist/lib/modules/promo-banner/promo-banner'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'promo-banner',\n p: 'promo-banner',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/promo-banner/dist/lib/modules/promo-banner'\n });\n \n\n isNotRegistered('quick-order') && (binding.modules['quick-order'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-quick-order-quick-order' */\n '@msdyn365-commerce-modules/quick-order/dist/lib/modules/quick-order/quick-order'),\n $type: 'contentModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 1},{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}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'quick-order',\n p: 'quick-order',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/quick-order/dist/lib/modules/quick-order'\n });\n \n\n isNotRegistered('quick-order-grid') && (binding.modules['quick-order-grid'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-quick-order-grid-quick-order-grid' */\n '@msdyn365-commerce-modules/quick-order-grid/dist/lib/modules/quick-order-grid/quick-order-grid'),\n $type: 'containerModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 1},{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:'quickOrderTemplate', path:'@msdyn365-commerce-modules/quick-order-grid/dist/lib/modules/quick-order-grid/actions/get-product-list', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'quick-order-grid',\n p: 'quick-order-grid',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/quick-order-grid/dist/lib/modules/quick-order-grid'\n });\n \n\n isNotRegistered('quickview') && (binding.modules['quickview'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-buybox-quickview' */\n '@msdyn365-commerce-modules/buybox/dist/lib/modules/quickview/quickview'),\n $type: 'containerModule',\n da: [{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:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'quickview',\n p: 'buybox',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/buybox/dist/lib/modules/quickview'\n });\n \n\n isNotRegistered('ratings-histogram') && (binding.modules['ratings-histogram'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-ratings-reviews-ratings-histogram' */\n '@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/ratings-histogram/ratings-histogram'),\n $type: 'contentModule',\n da: [{name:'ratingsReviewsState', path:'@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/ratings-reviews-state-data-action', runOn: 1},{name:'ratingsSummary', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'ratings-histogram',\n p: 'ratings-reviews',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/ratings-histogram'\n });\n \n\n isNotRegistered('reviews-list') && (binding.modules['reviews-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-ratings-reviews-reviews-list' */\n '@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/reviews-list/reviews-list'),\n $type: 'contentModule',\n da: [{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'ratingsReviewsState', path:'@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/ratings-reviews-state-data-action', runOn: 1},{name:'ratingsSummary', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary', runOn: 0},{name:'reviewsList', path:'@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-product-reviews', runOn: 0},{name:'userReview', path:'@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-user-review', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'reviews-list',\n p: 'ratings-reviews',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/reviews-list'\n });\n \n\n isNotRegistered('script-injector') && (binding.modules['script-injector'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-core-components-script-injector' */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/script-injector/script-injector'),\n $type: 'scriptModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'script-injector',\n p: 'core-components',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/script-injector'\n });\n \n\n isNotRegistered('search') && (binding.modules['search'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-search-search' */\n '@msdyn365-commerce-modules/search/dist/lib/modules/search/search'),\n $type: 'contentModule',\n da: [{name:'searchState', path:'@msdyn365-commerce-modules/search-utilities/dist/lib/search-state-data-action', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'search',\n p: 'search',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/search/dist/lib/modules/search'\n });\n \n\n isNotRegistered('search-result-container') && (binding.modules['search-result-container'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-search-result-container-search-result-container' */\n '@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/search-result-container'),\n $type: 'containerModule',\n da: [{name:'category', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category', runOn: 0},{name:'categoryHierarchy', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy', runOn: 0},{name:'featureProduct', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'listPageState', path:'@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/list-page-state', runOn: 0},{name:'products', path:'@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/actions/get-full-products-by-collection', runOn: 0},{name:'refiners', path:'@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/actions/get-refiners-for-collection', runOn: 0},{name:'searchConfiguration', path:'@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/actions/get-mapped-search-configuration', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'search-result-container',\n p: 'search-result-container',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container'\n });\n \n\n isNotRegistered('sign-in') && (binding.modules['sign-in'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-sign-in' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-in/sign-in'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'sign-in',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-in'\n });\n \n\n isNotRegistered('sign-up') && (binding.modules['sign-up'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-sign-up' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-up/sign-up'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'sign-up',\n p: 'account-management',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-up'\n });\n \n\n isNotRegistered('site-picker') && (binding.modules['site-picker'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-site-picker-site-picker' */\n '@msdyn365-commerce-modules/site-picker/dist/lib/modules/site-picker/site-picker'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'site-picker',\n p: 'site-picker',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/site-picker/dist/lib/modules/site-picker'\n });\n \n\n isNotRegistered('social-share') && (binding.modules['social-share'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-social-share-social-share' */\n '@msdyn365-commerce-modules/social-share/dist/lib/modules/social-share/social-share'),\n $type: 'moduleDefinition',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'social-share',\n p: 'social-share',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/social-share/dist/lib/modules/social-share'\n });\n \n\n isNotRegistered('social-share-item') && (binding.modules['social-share-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-social-share-social-share-item' */\n '@msdyn365-commerce-modules/social-share/dist/lib/modules/social-share-item/social-share-item'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'social-share-item',\n p: 'social-share',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/social-share/dist/lib/modules/social-share-item'\n });\n \n\n isNotRegistered('spacer') && (binding.modules['spacer'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-spacer-spacer' */\n '@msdyn365-commerce-modules/spacer/dist/lib/modules/spacer/spacer'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'spacer',\n p: 'spacer',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/spacer/dist/lib/modules/spacer'\n });\n \n\n isNotRegistered('starter') && (binding.modules['starter'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-starter-theme-pack-starter' */\n '@msdyn365-commerce-modules/starter-theme-pack/dist/lib/modules/starter/starter'),\n $type: 'themeModule',\n da: [],\n definitionExtensions: ['content-block','promo-banner','text-block'],\n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'starter',\n p: 'starter-theme-pack',\n \n pdp: '',\n \n themeSettings: 'starter.theme.settings.json',\n md: 'node_modules/@msdyn365-commerce-modules/starter-theme-pack/dist/lib/modules/starter'\n });\n \n\n isNotRegistered('store-selector') && (binding.modules['store-selector'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-store-selector-store-selector' */\n '@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector/store-selector'),\n $type: 'containerModule',\n da: [{name:'availabilitiesWithHours', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby', runOn: 1},{name:'storeLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information', runOn: 1},{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: true,\n ns: '@msdyn365-commerce-modules',\n n: 'store-selector',\n p: 'store-selector',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector'\n });\n \n\n isNotRegistered('subscribe') && (binding.modules['subscribe'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-subscribe-subscribe' */\n '@msdyn365-commerce-modules/subscribe/dist/lib/modules/subscribe/subscribe'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'subscribe',\n p: 'subscribe',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/subscribe/dist/lib/modules/subscribe'\n });\n \n\n isNotRegistered('tab') && (binding.modules['tab'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-tab-tab' */\n '@msdyn365-commerce-modules/tab/dist/lib/modules/tab/tab'),\n $type: 'moduleDefinition',\n da: [{name:'activeTabState', path:'@msdyn365-commerce-modules/tab/dist/lib/data-actions/tab-state-data-action', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'tab',\n p: 'tab',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/tab/dist/lib/modules/tab'\n });\n \n\n isNotRegistered('tab-item') && (binding.modules['tab-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-tab-tab-item' */\n '@msdyn365-commerce-modules/tab/dist/lib/modules/tab-item/tab-item'),\n $type: 'moduleDefinition',\n da: [{name:'activeTabState', path:'@msdyn365-commerce-modules/tab/dist/lib/data-actions/tab-state-data-action', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'tab-item',\n p: 'tab',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/tab/dist/lib/modules/tab-item'\n });\n \n\n isNotRegistered('text-block') && (binding.modules['text-block'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-text-block-text-block' */\n '@msdyn365-commerce-modules/text-block/dist/lib/modules/text-block/text-block'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'text-block',\n p: 'text-block',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/text-block/dist/lib/modules/text-block'\n });\n \n\n isNotRegistered('tile-list') && (binding.modules['tile-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-tile-list-tile-list' */\n '@msdyn365-commerce-modules/tile-list/dist/lib/modules/tile-list/tile-list'),\n $type: 'containerModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'tile-list',\n p: 'tile-list',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/tile-list/dist/lib/modules/tile-list'\n });\n \n\n isNotRegistered('tile-list-item') && (binding.modules['tile-list-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-tile-list-tile-list-item' */\n '@msdyn365-commerce-modules/tile-list/dist/lib/modules/tile-list-item/tile-list-item'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'tile-list-item',\n p: 'tile-list',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/tile-list/dist/lib/modules/tile-list-item'\n });\n \n\n isNotRegistered('video-player') && (binding.modules['video-player'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-video-player-video-player' */\n '@msdyn365-commerce-modules/video-player/dist/lib/modules/video-player/video-player'),\n $type: 'contentModule',\n da: [],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'video-player',\n p: 'video-player',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/video-player/dist/lib/modules/video-player'\n });\n \n\n isNotRegistered('wishlist-items') && (binding.modules['wishlist-items'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-wishlist-wishlist-items' */\n '@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/wishlist-items'),\n $type: 'contentModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', 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:'productAvailability', path:'@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/actions/get-product-availabilities-wishlist-items', runOn: 1},{name:'products', path:'@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/actions/get-items-in-wishlists', runOn: 1},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'wishlist-items',\n p: 'wishlist',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items'\n });\n \n\n isNotRegistered('write-review') && (binding.modules['write-review'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-ratings-reviews-write-review' */\n '@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/write-review/write-review'),\n $type: 'contentModule',\n da: [{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'userReview', path:'@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-user-review', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'write-review',\n p: 'ratings-reviews',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/write-review'\n });\n \n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/addToCart-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/addToCart-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/copyCart-checkOut-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/copyCart-checkOut-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/getById-product-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/getById-product-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/getByIds-product-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/getByIds-product-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/getVariantsByDimensionValues-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/getVariantsByDimensionValues-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/purchase-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/purchase-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/readCart-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/readCart-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/removeFromCart-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/removeFromCart-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/core-components/dist/lib/actions/updateCart-telemetry.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/core-components/dist/lib/actions/updateCart-telemetry.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary/category-page-summary.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary/category-page-summary.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary/list-page-summary.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary/list-page-summary.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary.action';\n binding.dataActions[actionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary.action');\n registerActionId(actionPath);\n }\n\n if (isNotRegistered('accordion')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/accordion/dist/lib/data-actions/accordion-state-data-action';\n let dataAction = require('@msdyn365-commerce-modules/accordion/dist/lib/data-actions/accordion-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('accordion-item')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/accordion/dist/lib/data-actions/accordion-state-data-action';\n let dataAction = require('@msdyn365-commerce-modules/accordion/dist/lib/data-actions/accordion-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('account-address-tile')){\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 if (isNotRegistered('account-address-tile')){\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 if (isNotRegistered('account-customer-balance')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-business-partner-user';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-business-partner-user');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('account-customer-balance')){\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 if (isNotRegistered('account-customer-balance')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('account-customer-balance-tile')){\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 if (isNotRegistered('account-customer-balance-tile')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('account-invoice-tile')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('account-invoice-tile')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoices';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoices');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('account-loyalty')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('account-loyalty-tile')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('account-management-address')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes';\n let dataAction = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('account-management-address')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions';\n let dataAction = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('account-management-address')){\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 if (isNotRegistered('account-management-address')){\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 if (isNotRegistered('account-order-templates-tile')){\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 if (isNotRegistered('account-order-templates-tile')){\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 if (isNotRegistered('account-order-templates-tile')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('account-profile')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-attribute-definitions';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-attribute-definitions');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('account-profile')){\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 if (isNotRegistered('account-welcome-tile')){\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 if (isNotRegistered('account-wishlist-tile')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('active-image')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/active-image/dist/lib/modules/actions/get-active-image-products';\n let dataAction = require('@msdyn365-commerce-modules/active-image/dist/lib/modules/actions/get-active-image-products');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('b2b-requests-status')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-business-partner-operation-requests';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-business-partner-operation-requests');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('b2b-requests-status')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-business-partner-user';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-business-partner-user');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('b2b-requests-status')){\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 if (isNotRegistered('b2b-requests-tile')){\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 if (isNotRegistered('breadcrumb')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-category-paths';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-category-paths');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('breadcrumb')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('breadcrumb')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('bulk-purchase')){\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 if (isNotRegistered('bulk-purchase')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-dimensions-with-availabilities';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-dimensions-with-availabilities');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('bulk-purchase')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('business-account-address')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes';\n let dataAction = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('business-account-address')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions';\n let dataAction = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('business-account-address')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state';\n let dataAction = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('business-account-address')){\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 if (isNotRegistered('business-organization-list')){\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 if (isNotRegistered('business-organization-list')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-organization-users';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-organization-users');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('buybox')){\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 if (isNotRegistered('buybox')){\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 if (isNotRegistered('buybox')){\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 if (isNotRegistered('buybox')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('buybox')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-dimensions-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-dimensions-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('buybox')){\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 if (isNotRegistered('buybox')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-price-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-price-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('buybox')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-availabilities-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-availabilities-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('buybox')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('buybox')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('buybox')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('buybox')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('buybox')){\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 if (isNotRegistered('cart')){\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 if (isNotRegistered('cart')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('cart')){\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 if (isNotRegistered('cart')){\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 if (isNotRegistered('cart')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('cart')){\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 if (isNotRegistered('cart')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('cart')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('cart')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('cart')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('cart')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('cart')){\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 if (isNotRegistered('cart-icon')){\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 if (isNotRegistered('cart-icon')){\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 if (isNotRegistered('cart-icon')){\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 if (isNotRegistered('cart-icon')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('cart-icon')){\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('catalog-picker')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('category-page-summary')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary/category-page-summary.action';\n let dataAction = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary/category-page-summary.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout/actions/get-products-in-active-checkout-cart';\n let dataAction = require('@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout/actions/get-products-in-active-checkout-cart');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout')){\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 if (isNotRegistered('checkout')){\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 if (isNotRegistered('checkout')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout')){\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 if (isNotRegistered('checkout')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout')){\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 if (isNotRegistered('checkout-billing-address')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes';\n let dataAction = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-billing-address')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions';\n let dataAction = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-billing-address')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state';\n let dataAction = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-billing-address')){\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 if (isNotRegistered('checkout-billing-address')){\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 if (isNotRegistered('checkout-billing-address')){\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 if (isNotRegistered('checkout-billing-address')){\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 if (isNotRegistered('checkout-customer-account-payment')){\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 if (isNotRegistered('checkout-customer-account-payment')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-customer-account-payment')){\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 if (isNotRegistered('checkout-delivery-options')){\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 if (isNotRegistered('checkout-delivery-options')){\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 if (isNotRegistered('checkout-delivery-options')){\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 if (isNotRegistered('checkout-express')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-express/actions/get-card-payment-accept-point';\n let dataAction = require('@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-express/actions/get-card-payment-accept-point');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-express')){\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 if (isNotRegistered('checkout-express')){\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 if (isNotRegistered('checkout-express')){\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 if (isNotRegistered('checkout-gift-card')){\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 if (isNotRegistered('checkout-guest-profile')){\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 if (isNotRegistered('checkout-guest-profile')){\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 if (isNotRegistered('checkout-loyalty')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-loyalty')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-transaction-estimation';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-transaction-estimation');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-loyalty')){\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 if (isNotRegistered('checkout-order-confirmation')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types';\n let dataAction = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-order-confirmation')){\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 if (isNotRegistered('checkout-order-confirmation')){\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 if (isNotRegistered('checkout-order-confirmation')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-order-confirmation')){\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 if (isNotRegistered('checkout-payment-instrument')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-payment-instrument/actions/get-card-payment-accept-point';\n let dataAction = require('@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-payment-instrument/actions/get-card-payment-accept-point');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-payment-instrument')){\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 if (isNotRegistered('checkout-payment-instrument')){\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 if (isNotRegistered('checkout-payment-instrument')){\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 if (isNotRegistered('checkout-pickup')){\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 if (isNotRegistered('checkout-pickup')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-pickup')){\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 if (isNotRegistered('checkout-pickup')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-pickup')){\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 if (isNotRegistered('checkout-section-container')){\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 if (isNotRegistered('checkout-shipping-address')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes';\n let dataAction = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-shipping-address')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions';\n let dataAction = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-shipping-address')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state';\n let dataAction = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('checkout-shipping-address')){\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 if (isNotRegistered('checkout-shipping-address')){\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 if (isNotRegistered('checkout-shipping-address')){\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 if (isNotRegistered('checkout-shipping-address')){\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 if (isNotRegistered('checkout-shipping-address')){\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 if (isNotRegistered('checkout-terms-and-conditions')){\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 if (isNotRegistered('default-page-summary')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary.action';\n let dataAction = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('header')){\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 if (isNotRegistered('header')){\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 if (isNotRegistered('header')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('header')){\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('invoice-details')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoice';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoice');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('invoice-details')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoice-details';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoice-details');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('invoices-list')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-business-partner-user';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-business-partner-user');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('invoices-list')){\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 if (isNotRegistered('invoices-list')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('invoices-list')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoices';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoices');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('list-page-summary')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary/list-page-summary.action';\n let dataAction = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary/list-page-summary.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('loyalty-sign-up')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('loyalty-terms')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('map')){\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 if (isNotRegistered('media-gallery')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('media-gallery')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('media-gallery')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('navigation-menu')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('order-confirmation')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-sales-order-confirmation-with-hydrations';\n let dataAction = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-sales-order-confirmation-with-hydrations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('order-confirmation')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types';\n let dataAction = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('order-confirmation')){\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 if (isNotRegistered('order-confirmation')){\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 if (isNotRegistered('order-confirmation')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('order-details')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-channels';\n let dataAction = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-channels');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('order-details')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-org-unit-locations';\n let dataAction = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-org-unit-locations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('order-details')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-sales-order-with-hydrations';\n let dataAction = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-sales-order-with-hydrations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('order-details')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types';\n let dataAction = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('order-details')){\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 if (isNotRegistered('order-details')){\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 if (isNotRegistered('order-details')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('order-history')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-channels';\n let dataAction = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-channels');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('order-history')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-org-unit-locations';\n let dataAction = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-org-unit-locations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('order-history')){\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 if (isNotRegistered('order-history')){\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 if (isNotRegistered('order-history')){\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 if (isNotRegistered('order-template')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template/actions/get-order-template';\n let dataAction = require('@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template/actions/get-order-template');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('order-template')){\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 if (isNotRegistered('order-template-list')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('organization-users-tile')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-organization-users-count';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-organization-users-count');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('product-collection')){\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 if (isNotRegistered('product-page-summary')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary.action';\n let dataAction = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('product-specification')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/product-specification/dist/lib/dataActions/get-attributes-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/product-specification/dist/lib/dataActions/get-attributes-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('product-specification')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('quick-order')){\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 if (isNotRegistered('quick-order')){\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 if (isNotRegistered('quick-order')){\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 if (isNotRegistered('quick-order-grid')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/quick-order-grid/dist/lib/modules/quick-order-grid/actions/get-product-list';\n let dataAction = require('@msdyn365-commerce-modules/quick-order-grid/dist/lib/modules/quick-order-grid/actions/get-product-list');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('quick-order-grid')){\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 if (isNotRegistered('quick-order-grid')){\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 if (isNotRegistered('quick-order-grid')){\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 if (isNotRegistered('quickview')){\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 if (isNotRegistered('quickview')){\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 if (isNotRegistered('quickview')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('ratings-histogram')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/ratings-reviews-state-data-action';\n let dataAction = require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/ratings-reviews-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('ratings-histogram')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('reviews-list')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-product-reviews';\n let dataAction = require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-product-reviews');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('reviews-list')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-user-review';\n let dataAction = require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-user-review');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('reviews-list')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/ratings-reviews-state-data-action';\n let dataAction = require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/ratings-reviews-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('reviews-list')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('reviews-list')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('search')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/search-utilities/dist/lib/search-state-data-action';\n let dataAction = require('@msdyn365-commerce-modules/search-utilities/dist/lib/search-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('search-result-container')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('search-result-container')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('search-result-container')){\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 if (isNotRegistered('search-result-container')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('search-result-container')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/actions/get-full-products-by-collection';\n let dataAction = require('@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/actions/get-full-products-by-collection');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('search-result-container')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/actions/get-mapped-search-configuration';\n let dataAction = require('@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/actions/get-mapped-search-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('search-result-container')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/actions/get-refiners-for-collection';\n let dataAction = require('@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/actions/get-refiners-for-collection');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('search-result-container')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/list-page-state';\n let dataAction = require('@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/list-page-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('store-selector')){\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 if (isNotRegistered('store-selector')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('store-selector')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('tab')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/tab/dist/lib/data-actions/tab-state-data-action';\n let dataAction = require('@msdyn365-commerce-modules/tab/dist/lib/data-actions/tab-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('tab-item')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/tab/dist/lib/data-actions/tab-state-data-action';\n let dataAction = require('@msdyn365-commerce-modules/tab/dist/lib/data-actions/tab-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('wishlist-items')){\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 if (isNotRegistered('wishlist-items')){\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 if (isNotRegistered('wishlist-items')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('wishlist-items')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/actions/get-items-in-wishlists';\n let dataAction = require('@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/actions/get-items-in-wishlists');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('wishlist-items')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/actions/get-product-availabilities-wishlist-items';\n let dataAction = require('@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/actions/get-product-availabilities-wishlist-items');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('wishlist-items')){\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 if (isNotRegistered('write-review')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-user-review';\n let dataAction = require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-user-review');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('write-review')){\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n } catch (e) {\n handleError('-', e);\n }\n \n return binding;\n};","\n/**\n * Copyright (c) 2018 Microsoft Corporation\n * Modules Registration\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\n */\n\n/**\n * Register all available modules\n */\nexport const registerAllModules = (requiredModules) => {\n let binding = { modules: {}, dataActions: {} };\n const { log, error } = console;\n const detailedWebpackError = (msg, errorObject) => { error(msg); error(errorObject); process.env.NODE_ENV !== 'development' && error('Run in dev mode to see full list of errors'); process.exit(50); }\n const handleError = (modPath, errObject) => {\n detailedWebpackError('Error with path: ' + modPath, errObject);\n }\n if (requiredModules) {\n requiredModules = requiredModules.map((module) => module.toLowerCase());\n }\n const isNotRegistered = (moduleName) => {\n return !requiredModules || requiredModules.length <= 0 || requiredModules.findIndex((module) => module === moduleName) !== -1;\n };\n\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 }\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 try {\n\n\n \n } catch (e) {\n handleError('-', e);\n }\n \n return binding;\n};","/**\n* Copyright (c) 2018 Microsoft Corporation\n* Modules Registration\n* THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\n*/\n\nexport const viewDictionary = {};\n\nviewDictionary['@msdyn365-commerce-modules|accordion|modules|accordion-item|accordion-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-accordion-accordion-item' */\n '@msdyn365-commerce-modules/accordion/dist/lib/modules/accordion-item/accordion-item.view.js'),\n cn: '@msdyn365-commerce-modules-accordion-accordion-item'\n };\nviewDictionary['@msdyn365-commerce-modules|accordion|modules|accordion|accordion'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-accordion-accordion' */\n '@msdyn365-commerce-modules/accordion/dist/lib/modules/accordion/accordion.view.js'),\n cn: '@msdyn365-commerce-modules-accordion-accordion'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|aad-generic|aad-generic'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-aad-generic' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/aad-generic/aad-generic.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-aad-generic'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-address-tile|account-address-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-address-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-address-tile/account-address-tile.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-account-address-tile'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-customer-balance-tile|account-customer-balance-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-customer-balance-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-customer-balance-tile/account-customer-balance-tile.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-account-customer-balance-tile'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-customer-balance|account-customer-balance'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-customer-balance' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-customer-balance/account-customer-balance.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-account-customer-balance'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-generic-tile|account-generic-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-generic-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-generic-tile/account-generic-tile.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-account-generic-tile'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-invoice-tile|account-invoice-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-invoice-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-invoice-tile/account-invoice-tile.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-account-invoice-tile'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-loyalty-tile|account-loyalty-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-loyalty-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-loyalty-tile/account-loyalty-tile.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-account-loyalty-tile'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-loyalty|account-loyalty'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-loyalty' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-loyalty/account-loyalty.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-account-loyalty'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-order-templates-tile|account-order-templates-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-order-templates-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-order-templates-tile/account-order-templates-tile.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-account-order-templates-tile'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-profile-edit|account-profile-edit'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-profile-edit' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-profile-edit/account-profile-edit.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-account-profile-edit'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-profile|account-profile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-profile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-profile/account-profile.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-account-profile'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-welcome-tile|account-welcome-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-welcome-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-welcome-tile/account-welcome-tile.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-account-welcome-tile'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-wishlist-tile|account-wishlist-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-account-wishlist-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-wishlist-tile/account-wishlist-tile.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-account-wishlist-tile'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|b2b-requests-status|b2b-requests-status'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-b2b-requests-status' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/b2b-requests-status/b2b-requests-status.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-b2b-requests-status'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|b2b-requests-tile|b2b-requests-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-b2b-requests-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/b2b-requests-tile/b2b-requests-tile.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-b2b-requests-tile'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|loyalty-sign-up|loyalty-sign-up'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-loyalty-sign-up' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-sign-up/loyalty-sign-up.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-loyalty-sign-up'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|loyalty-terms|loyalty-terms'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-loyalty-terms' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-terms/loyalty-terms.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-loyalty-terms'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|organization-users-tile|organization-users-tile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-organization-users-tile' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/organization-users-tile/organization-users-tile.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-organization-users-tile'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|password-reset-verification|password-reset-verification'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-password-reset-verification' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/password-reset-verification/password-reset-verification.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-password-reset-verification'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|password-reset|password-reset'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-password-reset' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/password-reset/password-reset.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-password-reset'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|sign-in|sign-in'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-sign-in' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-in/sign-in.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-sign-in'\n };\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|sign-up|sign-up'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-account-management-sign-up' */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-up/sign-up.view.js'),\n cn: '@msdyn365-commerce-modules-account-management-sign-up'\n };\nviewDictionary['@msdyn365-commerce-modules|active-image|modules|active-image|active-image'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-active-image-active-image' */\n '@msdyn365-commerce-modules/active-image/dist/lib/modules/active-image/active-image.view.js'),\n cn: '@msdyn365-commerce-modules-active-image-active-image'\n };\nviewDictionary['@msdyn365-commerce-modules|address|modules|account-management-address|account-management-address'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-address-account-management-address' */\n '@msdyn365-commerce-modules/address/dist/lib/modules/account-management-address/account-management-address.view.js'),\n cn: '@msdyn365-commerce-modules-address-account-management-address'\n };\nviewDictionary['@msdyn365-commerce-modules|address|modules|business-account-address|business-account-address'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-address-business-account-address' */\n '@msdyn365-commerce-modules/address/dist/lib/modules/business-account-address/business-account-address.view.js'),\n cn: '@msdyn365-commerce-modules-address-business-account-address'\n };\nviewDictionary['@msdyn365-commerce-modules|address|modules|checkout-billing-address|checkout-billing-address'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-address-checkout-billing-address' */\n '@msdyn365-commerce-modules/address/dist/lib/modules/checkout-billing-address/checkout-billing-address.view.js'),\n cn: '@msdyn365-commerce-modules-address-checkout-billing-address'\n };\nviewDictionary['@msdyn365-commerce-modules|address|modules|checkout-shipping-address|checkout-shipping-address'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-address-checkout-shipping-address' */\n '@msdyn365-commerce-modules/address/dist/lib/modules/checkout-shipping-address/checkout-shipping-address.view.js'),\n cn: '@msdyn365-commerce-modules-address-checkout-shipping-address'\n };\nviewDictionary['@msdyn365-commerce-modules|breadcrumb|modules|breadcrumb|breadcrumb'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-breadcrumb-breadcrumb' */\n '@msdyn365-commerce-modules/breadcrumb/dist/lib/modules/breadcrumb/breadcrumb.view.js'),\n cn: '@msdyn365-commerce-modules-breadcrumb-breadcrumb'\n };\nviewDictionary['@msdyn365-commerce-modules|bulk-purchase|modules|bulk-purchase|bulk-purchase'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-bulk-purchase-bulk-purchase' */\n '@msdyn365-commerce-modules/bulk-purchase/dist/lib/modules/bulk-purchase/bulk-purchase.view.js'),\n cn: '@msdyn365-commerce-modules-bulk-purchase-bulk-purchase'\n };\nviewDictionary['@msdyn365-commerce-modules|business-account-management|modules|business-sign-up|business-sign-up'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-business-account-management-business-sign-up' */\n '@msdyn365-commerce-modules/business-account-management/dist/lib/modules/business-sign-up/business-sign-up.view.js'),\n cn: '@msdyn365-commerce-modules-business-account-management-business-sign-up'\n };\nviewDictionary['@msdyn365-commerce-modules|business-organization-list|modules|business-organization-list|business-organization-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-business-organization-list-business-organization-list' */\n '@msdyn365-commerce-modules/business-organization-list/dist/lib/modules/business-organization-list/business-organization-list.view.js'),\n cn: '@msdyn365-commerce-modules-business-organization-list-business-organization-list'\n };\nviewDictionary['@msdyn365-commerce-modules|buybox|modules|buybox|buybox'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-buybox-buybox' */\n '@msdyn365-commerce-modules/buybox/dist/lib/modules/buybox/buybox.view.js'),\n cn: '@msdyn365-commerce-modules-buybox-buybox'\n };\nviewDictionary['@msdyn365-commerce-modules|buybox|modules|quickview|quickview'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-buybox-quickview' */\n '@msdyn365-commerce-modules/buybox/dist/lib/modules/quickview/quickview.view.js'),\n cn: '@msdyn365-commerce-modules-buybox-quickview'\n };\nviewDictionary['@msdyn365-commerce-modules|carousel|modules|carousel|carousel'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-carousel-carousel' */\n '@msdyn365-commerce-modules/carousel/dist/lib/modules/carousel/carousel.view.js'),\n cn: '@msdyn365-commerce-modules-carousel-carousel'\n };\nviewDictionary['@msdyn365-commerce-modules|cart|modules|cart-icon|cart-icon'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-cart-cart-icon' */\n '@msdyn365-commerce-modules/cart/dist/lib/modules/cart-icon/cart-icon.view.js'),\n cn: '@msdyn365-commerce-modules-cart-cart-icon'\n };\nviewDictionary['@msdyn365-commerce-modules|cart|modules|cart|cart'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-cart-cart' */\n '@msdyn365-commerce-modules/cart/dist/lib/modules/cart/cart.view.js'),\n cn: '@msdyn365-commerce-modules-cart-cart'\n };\nviewDictionary['@msdyn365-commerce-modules|catalog-picker|modules|catalog-picker|catalog-picker'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-catalog-picker-catalog-picker' */\n '@msdyn365-commerce-modules/catalog-picker/dist/lib/modules/catalog-picker/catalog-picker.view.js'),\n cn: '@msdyn365-commerce-modules-catalog-picker-catalog-picker'\n };\nviewDictionary['@msdyn365-commerce-modules|check-in-for-pickup|modules|check-in-for-pickup|check-in-for-pickup'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-check-in-for-pickup-check-in-for-pickup' */\n '@msdyn365-commerce-modules/check-in-for-pickup/dist/lib/modules/check-in-for-pickup/check-in-for-pickup.view.js'),\n cn: '@msdyn365-commerce-modules-check-in-for-pickup-check-in-for-pickup'\n };\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-customer-account-payment|checkout-customer-account-payment'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-customer-account-payment' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-customer-account-payment/checkout-customer-account-payment.view.js'),\n cn: '@msdyn365-commerce-modules-checkout-checkout-customer-account-payment'\n };\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-delivery-options|checkout-delivery-options'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-delivery-options' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-delivery-options/checkout-delivery-options.view.js'),\n cn: '@msdyn365-commerce-modules-checkout-checkout-delivery-options'\n };\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-express|checkout-express'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-express' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-express/checkout-express.view.js'),\n cn: '@msdyn365-commerce-modules-checkout-checkout-express'\n };\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-gift-card|checkout-gift-card'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-gift-card' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-gift-card/checkout-gift-card.view.js'),\n cn: '@msdyn365-commerce-modules-checkout-checkout-gift-card'\n };\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-guest-profile|checkout-guest-profile'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-guest-profile' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-guest-profile/checkout-guest-profile.view.js'),\n cn: '@msdyn365-commerce-modules-checkout-checkout-guest-profile'\n };\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-loyalty|checkout-loyalty'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-loyalty' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-loyalty/checkout-loyalty.view.js'),\n cn: '@msdyn365-commerce-modules-checkout-checkout-loyalty'\n };\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-payment-instrument|checkout-payment-instrument'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-payment-instrument' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-payment-instrument/checkout-payment-instrument.view.js'),\n cn: '@msdyn365-commerce-modules-checkout-checkout-payment-instrument'\n };\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-pickup|checkout-pickup'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-pickup' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-pickup/checkout-pickup.view.js'),\n cn: '@msdyn365-commerce-modules-checkout-checkout-pickup'\n };\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-section-container|checkout-section-container'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-section-container' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-section-container/checkout-section-container.view.js'),\n cn: '@msdyn365-commerce-modules-checkout-checkout-section-container'\n };\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-terms-and-conditions|checkout-terms-and-conditions'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout-terms-and-conditions' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-terms-and-conditions/checkout-terms-and-conditions.view.js'),\n cn: '@msdyn365-commerce-modules-checkout-checkout-terms-and-conditions'\n };\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout|checkout'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-checkout' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout/checkout.view.js'),\n cn: '@msdyn365-commerce-modules-checkout-checkout'\n };\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|gift-card-balance-check|gift-card-balance-check'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-checkout-gift-card-balance-check' */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/gift-card-balance-check/gift-card-balance-check.view.js'),\n cn: '@msdyn365-commerce-modules-checkout-gift-card-balance-check'\n };\nviewDictionary['@msdyn365-commerce-modules|content-block|modules|content-block|content-block'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-content-block-content-block' */\n '@msdyn365-commerce-modules/content-block/dist/lib/modules/content-block/content-block.view.js'),\n cn: '@msdyn365-commerce-modules-content-block-content-block'\n };\nviewDictionary['@msdyn365-commerce-modules|cookie-compliance|modules|cookie-compliance|cookie-compliance'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-cookie-compliance-cookie-compliance' */\n '@msdyn365-commerce-modules/cookie-compliance/dist/lib/modules/cookie-compliance/cookie-compliance.view.js'),\n cn: '@msdyn365-commerce-modules-cookie-compliance-cookie-compliance'\n };\nviewDictionary['@msdyn365-commerce-modules|country-picker|modules|country-picker|country-picker'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-country-picker-country-picker' */\n '@msdyn365-commerce-modules/country-picker/dist/lib/modules/country-picker/country-picker.view.js'),\n cn: '@msdyn365-commerce-modules-country-picker-country-picker'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|buybox'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-fabrikam-design-kit-buybox' */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/buybox.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-buybox'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|cart'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-fabrikam-design-kit-cart' */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/cart.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-cart'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|header'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-fabrikam-design-kit-header' */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/header.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-header'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|navigation-menu'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-fabrikam-design-kit-navigation-menu' */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|order-details'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-fabrikam-design-kit-order-details' */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/order-details.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-order-details'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|order-history'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-fabrikam-design-kit-order-history' */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/order-history.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-order-history'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|ratings-histogram'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-fabrikam-design-kit-ratings-histogram' */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/ratings-histogram.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-ratings-histogram'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|reviews-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-fabrikam-design-kit-reviews-list' */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/reviews-list.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-reviews-list'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|search-result-container'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-fabrikam-design-kit-search-result-container' */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/search-result-container.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-search-result-container'\n };\nviewDictionary['@msdyn365-commerce-modules|footer|modules|footer-category|footer-category'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-footer-footer-category' */\n '@msdyn365-commerce-modules/footer/dist/lib/modules/footer-category/footer-category.view.js'),\n cn: '@msdyn365-commerce-modules-footer-footer-category'\n };\nviewDictionary['@msdyn365-commerce-modules|footer|modules|footer-item|footer-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-footer-footer-item' */\n '@msdyn365-commerce-modules/footer/dist/lib/modules/footer-item/footer-item.view.js'),\n cn: '@msdyn365-commerce-modules-footer-footer-item'\n };\nviewDictionary['@msdyn365-commerce-modules|header|modules|header|header'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-header-header' */\n '@msdyn365-commerce-modules/header/dist/lib/modules/header/header.view.js'),\n cn: '@msdyn365-commerce-modules-header-header'\n };\nviewDictionary['@msdyn365-commerce-modules|iframe|modules|iframe|iframe'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-iframe-iframe' */\n '@msdyn365-commerce-modules/iframe/dist/lib/modules/iframe/iframe.view.js'),\n cn: '@msdyn365-commerce-modules-iframe-iframe'\n };\nviewDictionary['@msdyn365-commerce-modules|image-list|modules|image-list|image-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-image-list-image-list' */\n '@msdyn365-commerce-modules/image-list/dist/lib/modules/image-list/image-list.view.js'),\n cn: '@msdyn365-commerce-modules-image-list-image-list'\n };\nviewDictionary['@msdyn365-commerce-modules|interactive-feature-collection|modules|interactive-feature-collection|interactive-feature-collection'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-interactive-feature-collection-interactive-feature-collection' */\n '@msdyn365-commerce-modules/interactive-feature-collection/dist/lib/modules/interactive-feature-collection/interactive-feature-collection.view.js'),\n cn: '@msdyn365-commerce-modules-interactive-feature-collection-interactive-feature-collection'\n };\nviewDictionary['@msdyn365-commerce-modules|interactive-feature-collection|modules|interactive-feature-item|interactive-feature-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-interactive-feature-collection-interactive-feature-item' */\n '@msdyn365-commerce-modules/interactive-feature-collection/dist/lib/modules/interactive-feature-item/interactive-feature-item.view.js'),\n cn: '@msdyn365-commerce-modules-interactive-feature-collection-interactive-feature-item'\n };\nviewDictionary['@msdyn365-commerce-modules|invoice-details|modules|invoice-details|invoice-details'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-invoice-details-invoice-details' */\n '@msdyn365-commerce-modules/invoice-details/dist/lib/modules/invoice-details/invoice-details.view.js'),\n cn: '@msdyn365-commerce-modules-invoice-details-invoice-details'\n };\nviewDictionary['@msdyn365-commerce-modules|invoice|modules|invoices-list|invoices-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-invoice-invoices-list' */\n '@msdyn365-commerce-modules/invoice/dist/lib/modules/invoices-list/invoices-list.view.js'),\n cn: '@msdyn365-commerce-modules-invoice-invoices-list'\n };\nviewDictionary['@msdyn365-commerce-modules|map|modules|map|map'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-map-map' */\n '@msdyn365-commerce-modules/map/dist/lib/modules/map/map.view.js'),\n cn: '@msdyn365-commerce-modules-map-map'\n };\nviewDictionary['@msdyn365-commerce-modules|media-gallery|modules|media-gallery|media-gallery'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-media-gallery-media-gallery' */\n '@msdyn365-commerce-modules/media-gallery/dist/lib/modules/media-gallery/media-gallery.view.js'),\n cn: '@msdyn365-commerce-modules-media-gallery-media-gallery'\n };\nviewDictionary['@msdyn365-commerce-modules|navigation-menu|modules|navigation-menu|navigation-menu'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-navigation-menu-navigation-menu' */\n '@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-navigation-menu-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|notifications-lists|modules|notifications-list|notifications-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-notifications-lists-notifications-list' */\n '@msdyn365-commerce-modules/notifications-lists/dist/lib/modules/notifications-list/notifications-list.view.js'),\n cn: '@msdyn365-commerce-modules-notifications-lists-notifications-list'\n };\nviewDictionary['@msdyn365-commerce-modules|order-management|modules|checkout-order-confirmation|checkout-order-confirmation'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-management-checkout-order-confirmation' */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/checkout-order-confirmation/checkout-order-confirmation.view.js'),\n cn: '@msdyn365-commerce-modules-order-management-checkout-order-confirmation'\n };\nviewDictionary['@msdyn365-commerce-modules|order-management|modules|order-confirmation|order-confirmation'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-management-order-confirmation' */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-confirmation/order-confirmation.view.js'),\n cn: '@msdyn365-commerce-modules-order-management-order-confirmation'\n };\nviewDictionary['@msdyn365-commerce-modules|order-management|modules|order-details|order-details'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-management-order-details' */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-details/order-details.view.js'),\n cn: '@msdyn365-commerce-modules-order-management-order-details'\n };\nviewDictionary['@msdyn365-commerce-modules|order-management|modules|order-history|order-history'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-management-order-history' */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-history/order-history.view.js'),\n cn: '@msdyn365-commerce-modules-order-management-order-history'\n };\nviewDictionary['@msdyn365-commerce-modules|order-management|modules|order-lookup|order-lookup'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-management-order-lookup' */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-lookup/order-lookup.view.js'),\n cn: '@msdyn365-commerce-modules-order-management-order-lookup'\n };\nviewDictionary['@msdyn365-commerce-modules|order-template|modules|order-template-list|order-template-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-template-order-template-list' */\n '@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template-list/order-template-list.view.js'),\n cn: '@msdyn365-commerce-modules-order-template-order-template-list'\n };\nviewDictionary['@msdyn365-commerce-modules|order-template|modules|order-template|order-template'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-order-template-order-template' */\n '@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template/order-template.view.js'),\n cn: '@msdyn365-commerce-modules-order-template-order-template'\n };\nviewDictionary['@msdyn365-commerce-modules|product-collection|modules|product-collection|product-collection'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-product-collection-product-collection' */\n '@msdyn365-commerce-modules/product-collection/dist/lib/modules/product-collection/product-collection.view.js'),\n cn: '@msdyn365-commerce-modules-product-collection-product-collection'\n };\nviewDictionary['@msdyn365-commerce-modules|product-specification|modules|product-specification|product-specification'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-product-specification-product-specification' */\n '@msdyn365-commerce-modules/product-specification/dist/lib/modules/product-specification/product-specification.view.js'),\n cn: '@msdyn365-commerce-modules-product-specification-product-specification'\n };\nviewDictionary['@msdyn365-commerce-modules|promo-banner|modules|promo-banner|promo-banner'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-promo-banner-promo-banner' */\n '@msdyn365-commerce-modules/promo-banner/dist/lib/modules/promo-banner/promo-banner.view.js'),\n cn: '@msdyn365-commerce-modules-promo-banner-promo-banner'\n };\nviewDictionary['@msdyn365-commerce-modules|quick-order-grid|modules|quick-order-grid|quick-order-grid'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-quick-order-grid-quick-order-grid' */\n '@msdyn365-commerce-modules/quick-order-grid/dist/lib/modules/quick-order-grid/quick-order-grid.view.js'),\n cn: '@msdyn365-commerce-modules-quick-order-grid-quick-order-grid'\n };\nviewDictionary['@msdyn365-commerce-modules|quick-order|modules|quick-order|quick-order'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-quick-order-quick-order' */\n '@msdyn365-commerce-modules/quick-order/dist/lib/modules/quick-order/quick-order.view.js'),\n cn: '@msdyn365-commerce-modules-quick-order-quick-order'\n };\nviewDictionary['@msdyn365-commerce-modules|ratings-reviews|modules|ratings-histogram|ratings-histogram'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-ratings-reviews-ratings-histogram' */\n '@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/ratings-histogram/ratings-histogram.view.js'),\n cn: '@msdyn365-commerce-modules-ratings-reviews-ratings-histogram'\n };\nviewDictionary['@msdyn365-commerce-modules|ratings-reviews|modules|reviews-list|reviews-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-ratings-reviews-reviews-list' */\n '@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/reviews-list/reviews-list.view.js'),\n cn: '@msdyn365-commerce-modules-ratings-reviews-reviews-list'\n };\nviewDictionary['@msdyn365-commerce-modules|ratings-reviews|modules|write-review|write-review'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-ratings-reviews-write-review' */\n '@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/write-review/write-review.view.js'),\n cn: '@msdyn365-commerce-modules-ratings-reviews-write-review'\n };\nviewDictionary['@msdyn365-commerce-modules|search-result-container|modules|search-result-container|search-result-container'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-search-result-container-search-result-container' */\n '@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/search-result-container.view.js'),\n cn: '@msdyn365-commerce-modules-search-result-container-search-result-container'\n };\nviewDictionary['@msdyn365-commerce-modules|search|modules|search|search'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-search-search' */\n '@msdyn365-commerce-modules/search/dist/lib/modules/search/search.view.js'),\n cn: '@msdyn365-commerce-modules-search-search'\n };\nviewDictionary['@msdyn365-commerce-modules|site-picker|modules|site-picker|site-picker'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-site-picker-site-picker' */\n '@msdyn365-commerce-modules/site-picker/dist/lib/modules/site-picker/site-picker.view.js'),\n cn: '@msdyn365-commerce-modules-site-picker-site-picker'\n };\nviewDictionary['@msdyn365-commerce-modules|social-share|modules|social-share-item|social-share-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-social-share-social-share-item' */\n '@msdyn365-commerce-modules/social-share/dist/lib/modules/social-share-item/social-share-item.view.js'),\n cn: '@msdyn365-commerce-modules-social-share-social-share-item'\n };\nviewDictionary['@msdyn365-commerce-modules|social-share|modules|social-share|social-share'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-social-share-social-share' */\n '@msdyn365-commerce-modules/social-share/dist/lib/modules/social-share/social-share.view.js'),\n cn: '@msdyn365-commerce-modules-social-share-social-share'\n };\nviewDictionary['@msdyn365-commerce-modules|spacer|modules|spacer|spacer'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-spacer-spacer' */\n '@msdyn365-commerce-modules/spacer/dist/lib/modules/spacer/spacer.view.js'),\n cn: '@msdyn365-commerce-modules-spacer-spacer'\n };\nviewDictionary['@msdyn365-commerce-modules|store-selector|modules|store-selector|store-selector'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-store-selector-store-selector' */\n '@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector/store-selector.view.js'),\n cn: '@msdyn365-commerce-modules-store-selector-store-selector'\n };\nviewDictionary['@msdyn365-commerce-modules|subscribe|modules|subscribe|subscribe'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-subscribe-subscribe' */\n '@msdyn365-commerce-modules/subscribe/dist/lib/modules/subscribe/subscribe.view.js'),\n cn: '@msdyn365-commerce-modules-subscribe-subscribe'\n };\nviewDictionary['@msdyn365-commerce-modules|tab|modules|tab-item|tab-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-tab-tab-item' */\n '@msdyn365-commerce-modules/tab/dist/lib/modules/tab-item/tab-item.view.js'),\n cn: '@msdyn365-commerce-modules-tab-tab-item'\n };\nviewDictionary['@msdyn365-commerce-modules|tab|modules|tab|tab'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-tab-tab' */\n '@msdyn365-commerce-modules/tab/dist/lib/modules/tab/tab.view.js'),\n cn: '@msdyn365-commerce-modules-tab-tab'\n };\nviewDictionary['@msdyn365-commerce-modules|text-block|modules|text-block|text-block'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-text-block-text-block' */\n '@msdyn365-commerce-modules/text-block/dist/lib/modules/text-block/text-block.view.js'),\n cn: '@msdyn365-commerce-modules-text-block-text-block'\n };\nviewDictionary['@msdyn365-commerce-modules|tile-list|modules|tile-list-item|tile-list-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-tile-list-tile-list-item' */\n '@msdyn365-commerce-modules/tile-list/dist/lib/modules/tile-list-item/tile-list-item.view.js'),\n cn: '@msdyn365-commerce-modules-tile-list-tile-list-item'\n };\nviewDictionary['@msdyn365-commerce-modules|tile-list|modules|tile-list|tile-list'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-tile-list-tile-list' */\n '@msdyn365-commerce-modules/tile-list/dist/lib/modules/tile-list/tile-list.view.js'),\n cn: '@msdyn365-commerce-modules-tile-list-tile-list'\n };\nviewDictionary['@msdyn365-commerce-modules|video-player|modules|video-player|video-player'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-video-player-video-player' */\n '@msdyn365-commerce-modules/video-player/dist/lib/modules/video-player/video-player.view.js'),\n cn: '@msdyn365-commerce-modules-video-player-video-player'\n };\nviewDictionary['@msdyn365-commerce-modules|wishlist|modules|wishlist-items|wishlist-items'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '@msdyn365-commerce-modules-wishlist-wishlist-items' */\n '@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/wishlist-items.view.js'),\n cn: '@msdyn365-commerce-modules-wishlist-wishlist-items'\n };","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IAccordionExpandedState } from './accordion-state';\n\nexport function createAccordionStateInput(result: IAccordionExpandedState): GenericInput {\n return new GenericInput('accordionExpandedState', result, 'IAccordionExpandedState');\n}\n\nconst createAccordionStateInputInternal = (): IActionInput => {\n return createAccordionStateInput({});\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createAccordionStateInputInternal\n});\n\nexport default getGenericActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\nimport { action, computed, observable } from 'mobx';\n\nimport { IListMapViewState, ILoadMapApiInput, IStoreInfo, IStoreSelectionStateContext, IStoreSelectorLocation, IStoreSelectorStateManager } 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\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\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(storeId?: string, storeName?: string | undefined, writeToCookie: boolean = false, latitude?: number, longitude?: number): 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. All rights reserved.\n * See License.txt 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 (!searchTerm ||\n !actionContext.requestContext.channel ||\n !actionContext.requestContext.channel.BingMapsApiKey ||\n !actionContext.requestContext.channel.BingMapsEnabled) {\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 = actionContext.requestContext.app && actionContext.requestContext.app.config && actionContext.requestContext.app.config.geolocationApiUrl;\n const requestUrl = `${geolocationApiUrl ? geolocationApiUrl : this.SERVICE_ENDPOINT}/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\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 // 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}` : ''}${input.market ? `&setMkt=${input.market}` : ''}`;\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","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType,\n createObservableDataAction,\n getFriendlyName,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { buildCacheKeyWithUrlTokens, CurrentCategoryInput, getCategoryUrl, getCurrentCategory } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IDefaultPageSummaryConfig } from '../default-page-summary/default-page-summary.props.autogenerated';\nimport { IPageSummaryData } from '../IPageSummaryData';\n\n/**\n * Category Page Summary Input\n */\nexport class CategoryPageSummaryInput implements IActionInput {\n public requestContext: IRequestContext;\n\n public config: IDefaultPageSummaryConfig;\n\n constructor(config: IDefaultPageSummaryConfig, requestContext: IRequestContext) {\n this.config = config || {};\n this.requestContext = requestContext;\n }\n\n public getCacheObjectType = (): string => 'CategoryPageSummary';\n\n public getCacheKey = (): string => buildCacheKeyWithUrlTokens('CategoryPageSummary', this.requestContext);\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nconst createGetCurrentCategoryInput = (inputData: IActionContext): CurrentCategoryInput => {\n if (inputData && inputData.requestContext) {\n return new CurrentCategoryInput(inputData.requestContext);\n }\n\n throw new Error('Please specify categoryId query string in request.');\n};\n\nconst action = async (input: CategoryPageSummaryInput, context: IActionContext): Promise => {\n const { config } = input;\n let currentCategoryResult;\n try {\n currentCategoryResult = await getCurrentCategory(createGetCurrentCategoryInput(context), context);\n } catch {\n // Do nothing, if the action fails fallback to values defined in data\n }\n if (currentCategoryResult) {\n const currentCategory = { ...currentCategoryResult };\n let categoryUrl: string | undefined;\n try {\n // Reset category's name neutralizedName\n const localName = getFriendlyName(context.requestContext.locale, currentCategory.NameTranslations);\n const neutralizedName = currentCategory.NeutralizedName || currentCategory.Name;\n currentCategory.Name = localName;\n currentCategory.NeutralizedName = neutralizedName;\n categoryUrl = getCategoryUrl(currentCategory);\n\n const canonicalDomain = context.requestContext.canonicalDomain;\n if (categoryUrl && canonicalDomain) {\n categoryUrl = `https://${canonicalDomain}${categoryUrl}`.toLocaleLowerCase();\n } else {\n categoryUrl = undefined;\n }\n } catch {\n categoryUrl = undefined;\n }\n return {\n title: currentCategory.Name,\n sharingImageUrl: currentCategory.OfflineImage,\n canonicalUrl: categoryUrl,\n faviconUrl: config && config.faviconUrl\n };\n\n // If the action fails fallback to values defined from data\n } else if (config) {\n return {\n title: config.title,\n sharingImageUrl: config.sharingImage && config.sharingImage.src,\n faviconUrl: config && config.faviconUrl\n };\n }\n return {};\n\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/page-summary/category-page-summary',\n action: >action,\n input: (args: ICreateActionContext) => {\n return new CategoryPageSummaryInput(args.config, args.requestContext);\n }\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { buildCacheKeyWithUrlTokens } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IDefaultPageSummaryConfig } from './default-page-summary.props.autogenerated';\n\nexport interface IPageSummaryData {\n title?: string;\n description?: string;\n keywords?: string;\n sharingImageUrl?: string;\n canonicalUrl?: string;\n faviconUrl?: string;\n}\n\n/**\n * Page Summary Input\n */\nexport class PageSummaryInput implements IActionInput {\n public requestContext: IRequestContext;\n\n public config: IDefaultPageSummaryConfig;\n\n constructor(config: IDefaultPageSummaryConfig, requestContext: IRequestContext) {\n this.config = config || {};\n this.requestContext = requestContext;\n }\n\n public getCacheObjectType = (): string => 'PageSummary';\n\n public getCacheKey = (): string => `${buildCacheKeyWithUrlTokens('PageSummary', this.requestContext)}-${this.config.title}`;\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nconst action = async (input: PageSummaryInput, context: IActionContext): Promise => {\n const { config } = input;\n return {\n title: config && config.title,\n description: config && config.description,\n keywords: config && config.keywords,\n sharingImageUrl: config && config.sharingImage && config.sharingImage.src,\n canonicalUrl: context.requestContext && context.requestContext.canonicalUrl ? context.requestContext.canonicalUrl.toLocaleLowerCase() : undefined,\n faviconUrl: config && config.faviconUrl\n };\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/page-summary/default-page-summary',\n action: >action,\n input: (args: ICreateActionContext) => {\n return new PageSummaryInput(args.config, args.requestContext);\n }\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICreateActionContext,\n IGeneric,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { Image, ISubList } from '@msdyn365-commerce-modules/data-types';\nimport { buildCacheKeyWithUrlTokens, getList, ListInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { IProductItem } from '@msdyn365-commerce-modules/retail-actions/dist/types/get-list';\n\nimport { IDefaultPageSummaryConfig } from '../default-page-summary/default-page-summary.props.autogenerated';\nimport { IPageSummaryData } from '../IPageSummaryData';\n\n/**\n * List Page Summary Input\n */\nexport class ListPageSummaryInput implements IActionInput {\n public requestContext: IRequestContext;\n\n public config: IDefaultPageSummaryConfig;\n\n constructor(config: IDefaultPageSummaryConfig, requestContext: IRequestContext) {\n this.config = config || {};\n this.requestContext = requestContext;\n }\n\n public getCacheObjectType = (): string => 'ListPageSummary';\n\n public getCacheKey = (): string => buildCacheKeyWithUrlTokens('ListPageSummary', this.requestContext);\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * List item type enum.\n */\nenum ListItemType {\n list = 'list',\n product = 'product'\n}\n\n/**\n * Get the url of sub list.\n * @param listName\n * @param sitePath\n */\nfunction getSubListUrl(listName: string, sitePath: string): string {\n if (!listName) {\n return '';\n }\n\n if (!sitePath) {\n return `/${listName}.l`;\n }\n\n // SitePath has a leading '/'\n return `${sitePath}/${listName}.l`;\n}\n\n/**\n * Get sub list item.\n * @param item\n * @param sitePathOfRequest\n */\nfunction getSubListItem(item: IGeneric, sitePathOfRequest: string): ISubList {\n const imageList: Image[] = getImages(item.fields.content.images);\n\n const sublistHref = getSubListUrl(item.fields._name, sitePathOfRequest);\n return {\n Title: item.fields.content.title,\n Description: item.fields.content.description,\n ShortDescription: item.fields.content.shortDescription,\n BackgroundColor: item.fields.content.backgroundColor,\n ForegroundColor: item.fields.content.foregroundColor,\n Href: sublistHref,\n Images: imageList\n };\n}\n\n/**\n * Get site path.\n * @param inputData\n */\nfunction getSitePath(inputData: ICreateActionContext, IGeneric>): string {\n return inputData && inputData.requestContext && inputData.requestContext.sitePath ? inputData.requestContext.sitePath : '';\n}\n\n/**\n * Get items per page.\n * @param inputData\n */\nfunction getItemsPerPage(inputData: ICreateActionContext, IGeneric>): number {\n if (!inputData || !inputData.config || !inputData.config.itemsPerPage) {\n return 50;\n }\n\n const result = Number(inputData.config.itemsPerPage);\n if (isNaN(result)) {\n return 50;\n }\n\n return result;\n}\n\n/**\n * Get skip count.\n * @param inputData\n */\nfunction getSkipCount(inputData: ICreateActionContext, IGeneric>): number {\n return inputData && inputData.requestContext && inputData.requestContext.query && inputData.requestContext.query.skipCount ? Number(inputData.requestContext.query.skipCount) : 0;\n}\n\n/**\n * Get images.\n * @param images\n */\nfunction getImages(images: IGeneric[]): Image[] {\n const resultImageList: Image[] = [];\n\n if (!images) {\n return resultImageList;\n }\n\n images.forEach(item => {\n if (item && item.image && item.image.href) {\n // Add image item\n const imageItem: Image = {\n href: item.image.href,\n altText: item.image.altText,\n title: item.image.title,\n width: item.image.width,\n height: item.image.height\n };\n\n resultImageList.push(imageItem);\n }\n });\n\n return resultImageList;\n}\n\n/**\n * Get input list data.\n * @param inputData\n */\nfunction getInputListData(inputData: ICreateActionContext, IGeneric>): IGeneric {\n let listData =\n !inputData || !inputData.requestContext || !inputData.requestContext.pageData ? null : inputData.requestContext.pageData.list;\n if (\n !inputData ||\n !inputData.requestContext ||\n !inputData.requestContext.pageData ||\n !inputData.requestContext.pageData.list ||\n !inputData.requestContext.pageData.list.content ||\n !inputData.requestContext.pageData.list.content.items ||\n !inputData.requestContext.pageData.list.content.title ||\n !inputData.requestContext.pageData.list._id\n ) {\n if (\n !inputData ||\n !inputData.data ||\n !inputData.data.list ||\n !inputData.data.list.content ||\n !inputData.data.list.content.items ||\n !inputData.data.list.content.title ||\n !inputData.data.list._id\n ) {\n console.error('data is not well defined for list action input');\n throw new Error('data is not well defined for list action input');\n }\n\n listData = inputData.data.list;\n }\n return listData;\n}\n\nconst createGetListInput = (inputData: IActionContext): ListInput => {\n const listData: IGeneric = getInputListData(inputData);\n const listItems: (IProductItem[] | ISubList)[] = [];\n let productList: IProductItem[] = [];\n\n const parentImageList: Image[] = getImages(listData.content.images);\n\n const itemsPerPage = getItemsPerPage(inputData);\n const skipCount = getSkipCount(inputData);\n\n // This is the list contains all product and will be used to call getSimpleProducts data action.\n const productItems: IProductItem[] = [];\n const sum = skipCount + itemsPerPage;\n for (let index = skipCount; index < listData.content.items.length && index < sum; index++) {\n const item = listData.content.items[index];\n if (item.type === ListItemType.list) {\n if (!item.fields || !item.fields.content || !item.fields.content.title) {\n console.error(`sublist item fields, content or title missing in list ${listData._id}`);\n continue;\n }\n\n // If any elements in product list, then copy it and add to list items\n if (productList.length > 0) {\n const clonedList = [...productList];\n listItems.push(clonedList);\n productList = [];\n }\n\n // Build and add sublist item\n listItems.push(getSubListItem(item, getSitePath(inputData)));\n }\n\n if (item.type === ListItemType.product) {\n if (!item.fields || !item.fields.recordId) {\n console.error(`product item missing recordId in list ${listData._id}`);\n continue;\n }\n\n // Add product item\n const productItem: IProductItem = {\n RecordId: item.fields.recordId,\n CatalogId: item.fields.catalogId || '0'\n };\n\n productList.push(productItem);\n productItems.push(productItem);\n }\n }\n\n // Save the last portion of product items.\n if (productList.length > 0) {\n listItems.push(productList);\n }\n\n return new ListInput(\n listData._id,\n listData.content.title,\n listData.content.description,\n listData.content.shortDescription,\n listData.content.backgroundColor,\n listData.content.foregroundColor,\n parentImageList,\n listItems,\n productItems,\n listData.content.items.length,\n itemsPerPage,\n skipCount\n );\n};\n\nconst action = async (input: ListPageSummaryInput, context: IActionContext): Promise => {\n const { config } = input;\n let listData;\n try {\n listData = await getList(createGetListInput(context), context);\n } catch {\n // Do nothing, if there's an error running the action fall back to values defined from data\n }\n if (listData && listData.Title) {\n return {\n title: listData.Title,\n description: listData.Description\n };\n\n // If the action fails fallback to values defined from data\n } else if (config) {\n return {\n title: config.title,\n description: config.description\n };\n }\n return {};\n\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/page-summary/list-page-summary',\n action: >action,\n input: (args: ICreateActionContext) => {\n return new ListPageSummaryInput(args.config, args.requestContext);\n }\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICommerceApiSettings, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { getAttributeValuesAsync, getByIdAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { buildCacheKey, generateImageUrl, getProductUrlSync, getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IPageSummaryData } from '../IPageSummaryData';\nimport { IProductPageSummaryConfig } from './product-page-summary.props.autogenerated';\n\n/**\n * Product Page Summary Input\n */\nexport class ProductPageSummaryInput implements IActionInput {\n public apiSettings: ICommerceApiSettings;\n\n public config: IProductPageSummaryConfig;\n\n public productId: number;\n\n constructor(config: IProductPageSummaryConfig, apiSettings: ICommerceApiSettings, productId: number) {\n this.config = config || {};\n this.apiSettings = apiSettings;\n this.productId = productId;\n }\n\n public getCacheObjectType = (): string => 'ProductPageSummary';\n\n public getCacheKey = (): string => `${buildCacheKey('ProductPageSummary', this.apiSettings)}-${this.config.title}-${this.productId}`;\n\n public dataCacheType = (): CacheType => 'application';\n}\n\nexport interface IProductPageSummary extends IPageSummaryData {\n price?: number;\n productId?: number;\n productBrand?: string;\n}\n\nconst createInput = (args: ICreateActionContext) => {\n const productId = getSelectedProductIdFromActionInput(args);\n\n if (productId) {\n return new ProductPageSummaryInput(args.config, args.requestContext.apiSettings, +productId);\n }\n throw new Error('Unable to create ProductPageSummaryAction input, no productId found on module config or query');\n\n};\n\n// Checks product attributes for the presence of brand attribute to extract the brand name for product metadata\nconst getProductBrand = async (context: IActionContext, recordId: number, channelId: number, catalogId: number): Promise => {\n const productAttributes = await getAttributeValuesAsync({ callerContext: context, queryResultSettings: {} }, recordId, channelId, catalogId);\n for (const productAttribute of productAttributes) {\n if (productAttribute.Name === 'Brand') {\n return productAttribute.TextValue;\n }\n }\n return;\n};\n\nconst action = async (input: ProductPageSummaryInput, context: IActionContext): Promise => {\n const { config, productId, apiSettings } = input;\n let simpleProductData;\n try {\n simpleProductData = await getByIdAsync({ callerContext: context }, productId, apiSettings.channelId);\n } catch {\n // Do nothing, if there's an error we fall back to values defined from config\n }\n if (simpleProductData) {\n let productUrl: string | undefined;\n try {\n productUrl = getProductUrlSync(simpleProductData, context);\n const canonicalDomain = context.requestContext.canonicalDomain;\n if (productUrl && canonicalDomain) {\n productUrl = `https://${canonicalDomain}${productUrl}`.toLocaleLowerCase();\n } else {\n productUrl = undefined;\n }\n } catch {\n productUrl = undefined;\n }\n let productBrand: string | undefined;\n try {\n productBrand = await getProductBrand(context, productId, apiSettings.channelId, apiSettings.catalogId);\n } catch {\n productBrand = undefined;\n }\n return {\n title: simpleProductData.Name,\n description: simpleProductData.Description,\n sharingImageUrl: generateImageUrl(simpleProductData.PrimaryImageUrl, apiSettings),\n canonicalUrl: productUrl,\n faviconUrl: config && config.faviconUrl,\n productId: simpleProductData.RecordId,\n price: simpleProductData.AdjustedPrice,\n productBrand\n };\n\n // If the action fails fallback to values defined from config\n } else if (config) {\n return {\n title: config.title,\n description: config.description,\n sharingImageUrl: config.sharingImage && config.sharingImage.src,\n faviconUrl: config && config.faviconUrl\n };\n }\n return {};\n\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/page-summary/product-page-summary',\n action: >action,\n input: createInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { AttributeValue, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getAttributeValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Chains getting the SelectedVariant with GetActivePrice.\n */\nexport class AttributesForSelectedVariantInput implements IActionInput {\n public productId: number;\n\n public channelId: number;\n\n public catalogId: number;\n\n public selectedProduct: SimpleProduct | undefined;\n\n constructor(productId: number, channelId: number, selectedProduct?: SimpleProduct, catalogId?: number) {\n this.productId = productId;\n this.channelId = channelId;\n this.selectedProduct = selectedProduct;\n this.catalogId = catalogId || 0;\n }\n\n public getCacheKey = () => 'AttributesForSelectedVariant';\n\n public getCacheObjectType = () => 'ProductAttributeValue';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport const createAttributesForSelectedVariantInput = (inputData: ICreateActionContext>): AttributesForSelectedVariantInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n\n if (productId) {\n return new AttributesForSelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId);\n }\n throw new Error('Unable to create PriceForSelectedVariantInput, no productId found on module config or query');\n\n};\n\n/**\n * Calls the Retail API a get a list of dimension values for a given product.\n * @param input\n * @param ctx\n */\nexport async function getAttributesForSelectedVariantAction(\n input: AttributesForSelectedVariantInput,\n ctx: IActionContext\n): Promise {\n return Promise.resolve().then(() => {\n const activeProduct: SimpleProduct | undefined = input.selectedProduct;\n\n if (!activeProduct) {\n const selectedVariantInput = new SelectedVariantInput(input.productId, input.channelId);\n\n return getSelectedVariant(selectedVariantInput, ctx);\n }\n\n return activeProduct;\n }).then((productResult: SimpleProduct | null) => {\n const activeProduct: SimpleProduct | undefined = productResult;\n\n if (activeProduct) {\n return getAttributeValuesAsync({ callerContext: ctx, queryResultSettings: {} }, activeProduct.RecordId, input.channelId, input.catalogId);\n }\n\n return null;\n }).then((attributeValues: AttributeValue[] | null) => {\n const resultArray = attributeValues;\n if (resultArray) {\n return resultArray;\n }\n\n return [];\n }).catch((error: Error) => {\n ctx.trace(error.message);\n throw new Error('[getPriceForSelectedVariantAction]Error executing action');\n });\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/product-info/get-attributes-for-selected-variant',\n action: >getAttributesForSelectedVariantAction,\n input: createAttributesForSelectedVariantInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny,\n ICreateActionContext, IGeneric\n} from '@msdyn365-commerce/core';\nimport { Address, Customer } from '@msdyn365-commerce/retail-proxy';\nimport {\n createReadAsync, updateAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g';\n\nimport getCustomer, { GetCustomerInput } from './get-customer';\n\nexport interface IAddressManagementData {\n address: Address;\n}\nexport interface IAddressManagementInput extends IActionInput {\n address: Address;\n userAccountNumber?: string;\n}\n\n/**\n * The input class for the addAddress data action.\n */\nexport class AddressManagementInput implements IAddressManagementInput {\n public address: Address;\n\n public userAccountNumber?: string;\n\n constructor(address: Address, userAccountNumber?: string) {\n this.userAccountNumber = userAccountNumber;\n this.address = address;\n }\n\n public getCacheKey = () => 'AddAddress';\n\n public getCacheObjectType = () => 'AddAddress';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * The createInput method for the addAddress data action.\n * @param inputData The input data passed to the createInput method.\n */\nexport const createAddressManagementInput = (\n inputData: ICreateActionContext, IAddressManagementData>\n): IAddressManagementInput => {\n if (inputData.requestContext.user.isAuthenticated) {\n throw new Error('User is not authenticated. Cannot call UpdateAddress API');\n }\n\n const { address } = inputData.data || { address: undefined };\n\n if (!address) {\n throw new Error('address is not provided. Cannot call UpdateAddress API');\n }\n\n return new AddressManagementInput(address);\n};\n\nexport async function doAddressManagementOperation(\n input: IAddressManagementInput,\n ctx: IActionContext,\n operationHandler: (customer: Customer, address: Address) => Customer\n): Promise {\n const { userAccountNumber, address } = input;\n const customerInput = new GetCustomerInput(ctx.requestContext.apiSettings, userAccountNumber, 'none');\n const customer = await getCustomer(customerInput, ctx);\n\n if (!customer) {\n throw new Error('Not able to create customer');\n }\n\n const newCustomer = operationHandler({ ...customer }, address);\n const updatedCustomer = await updateAsync({ callerContext: ctx }, newCustomer);\n\n if (!updatedCustomer) {\n throw new Error('Not able to update customer');\n }\n\n ctx.update(createReadAsync(updatedCustomer.AccountNumber), updatedCustomer);\n\n return updatedCustomer.Addresses || [];\n}\n\nexport function addAddressHandler(customer: Customer, address: Address): Customer {\n customer.Addresses = [...(customer.Addresses || [])];\n customer.Addresses.push(address);\n return customer;\n}\n\nexport async function addAddressAction(input: IAddressManagementInput, ctx: IActionContext): Promise {\n return doAddressManagementOperation(input, ctx, addAddressHandler);\n}\n\n/**\n * The addAddress data action\n * Calls the read RetailServer API to get information about a customer\n * Adds the passed address information to the retireved customer, and\n * then updates that customer via the update RetailServer API.\n */\nexport const addAddressActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/add-address',\n action: >addAddressAction,\n input: <(args: ICreateActionContext) => IActionInput>(createAddressManagementInput),\n isBatched: false\n});\n\nexport default addAddressActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductListsDataActions } from '@msdyn365-commerce/retail-proxy';\n\nimport { ArrayExtensions } from './utilities';\n\n/**\n * Input class for the AddItemToProductList data action.\n */\nexport class AddItemToProductListInput implements IActionInput {\n public readonly productListId: string;\n\n public readonly productId: number;\n\n public readonly quantity: number;\n\n public readonly unitOfMeasure: string;\n\n public constructor(productListId: string, productId: number, quantity: number, unitOfMeasure: string) {\n this.productListId = productListId;\n this.productId = productId;\n this.quantity = quantity;\n this.unitOfMeasure = unitOfMeasure || 'ea';\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => 'AddItemToProductListInput';\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'AddItemToProductListInput';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the AddItemToProductList method.\n * @param inputData - The input data passed to the createInput method.\n * @param productListId - The id of product list to update.\n * @param productId - The id of a product to add.\n * @param quantity - How many items of this product to add.\n * @param unitOfMeasure - Product measuring unit.\n * @returns - Input data for productlist add api.\n */\nexport const addItemToProductListInput = (\n inputData: ICreateActionContext, productListId: string, productId: number, quantity: number, unitOfMeasure: string): AddItemToProductListInput => {\n\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to create product list. User is not authenticated.');\n }\n return new AddItemToProductListInput(productListId, productId, quantity, unitOfMeasure);\n};\n\n/**\n * The action method for the AddItemToProductList data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - ProductList.\n */\nexport async function addItemToProductListAction(input: AddItemToProductListInput, context: IActionContext): Promise {\n try {\n const productListLineToAdd: ProductListLine = {\n ProductListId: input.productListId,\n ProductId: input.productId,\n Quantity: input.quantity,\n UnitOfMeasure: input.unitOfMeasure\n };\n\n const productListLine: ProductListLine[] = await ProductListsDataActions.addProductListLinesAsync({\n callerContext: context\n }, input.productListId, [productListLineToAdd]);\n\n if (ArrayExtensions.hasElements(productListLine) && productListLine[0].ProductListId) {\n return productListLine[0];\n }\n context.telemetry.error('Product list line was not returned when adding it to quick order bag');\n throw new Error('Product list line was not returned when adding it to quick order bag');\n\n } catch (error) {\n context.telemetry.error('Not able to add an item to quick order bag', error);\n throw error;\n }\n}\n\n/**\n * The AddItemToOrderTemplate Data Action.\n * Returns product list line that was added to the order template.\n */\nexport const addItemToProductListActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/add-item-to-product-list',\n action: addItemToProductListAction as IAction,\n input: addItemToProductListInput\n});\n\nexport default addItemToProductListActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { BusinessPartner, BusinessPartnerUser } from '@msdyn365-commerce/retail-proxy';\nimport { getCurrentAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnersDataActions.g';\nimport { createBusinessPartnerUserAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnerUsersDataActions.g';\n\n/**\n * Input class for addOrganizationUser data action.\n */\nexport class AddOrganizationUserInput implements IActionInput {\n public user: BusinessPartnerUser;\n\n constructor(newUser: BusinessPartnerUser) {\n this.user = newUser;\n }\n\n public getCacheKey = () => 'AddOrganizationUser';\n\n public getCacheObjectType = () => 'AddOrganizationUser';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Input class for addOrganizationUser data action.\n * @param inputData\n * @param newUser\n */\nexport const createAddOrganizationUserInput = (inputData: ICreateActionContext>, newUser: BusinessPartnerUser): IActionInput => {\n const { requestContext } = inputData;\n\n // Check if the user is authenticated.\n if (!requestContext.user.isAuthenticated) {\n throw new Error('User is not logged in.');\n }\n\n return new AddOrganizationUserInput(newUser);\n};\n\n/**\n * The addOrganizationUser data action\n * Calls getCurrent() to get a businessPartnerId from the user requesting the action.\n * It then maps the newUsers' businessPartnerId to the same as the above user.\n * Calls the createBusinessPartner to then create a new entitiy in the database with the\n * information passed into through newUser.\n * @param input\n * @param ctx\n */\nexport async function addOrganizationUser(input: AddOrganizationUserInput, ctx: IActionContext): Promise {\n const { user } = input;\n\n return getCurrentAsync({ callerContext: ctx })\n .then((businessPartner: BusinessPartner) => {\n // Set the new accounts businessPartnerId from the admin account\n user.BusinessPartnerId = businessPartner.BusinessPartnerId;\n\n return createBusinessPartnerUserAsync({ callerContext: ctx }, user)\n .then(newUser => {\n return newUser;\n })\n .catch(() => {\n ctx.telemetry.debug('[add-organization-user] Unable to create BusinessPartnerUser account');\n throw new Error('[add-organization-user] Unable to create BusinessPartnerUser account');\n });\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[add-organization-user] Unable to get BusinessPartner Admin account');\n throw new Error('[add-organization-user] Unable to get BusinessPartner Admin account');\n });\n}\n\n/**\n * The addOrganizationUser data action\n * Calls the read RetailServer API to get the BusinessPartnerId from the admin\n * account and adds that businessPartner to the recieved input (new User)/\n * We then send this new User through the RetailServer API so that the database\n * is updated.\n */\nexport const addOrganizationUserDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/add-organization-user',\n action: >addOrganizationUser,\n input: <(args: ICreateActionContext) => IActionInput>(createAddOrganizationUserInput)\n});\n\nexport default addOrganizationUserDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IHTTPRequestOptions,\n IHTTPResponse,\n sendCommerceRequest\n} from '@msdyn365-commerce/core';\nimport { Address, CartTenderLine, SalesOrder } from '@msdyn365-commerce/retail-proxy';\n\n/**\n * Check Out action Input.\n */\nexport class CheckOutInput implements IActionInput {\n public cartId: string;\n\n public cartVersion: number;\n\n public receiptEmail?: string;\n\n public cartTenderLines?: CartTenderLine[];\n\n public billingAddress?: Address;\n\n constructor(cartId: string, cartVersion: number, receiptEmail?: string, cartTenderLines?: CartTenderLine[], billingAddress?: Address) {\n this.cartId = cartId;\n this.cartVersion = cartVersion;\n this.receiptEmail = receiptEmail;\n this.cartTenderLines = cartTenderLines;\n this.billingAddress = billingAddress;\n }\n\n public getCacheKey = () => `${this.cartId}-${this.cartVersion}`;\n\n public getCacheObjectType = () => 'CheckOut';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Calls the Retail API to check out and returns sales order.\n * @param input\n * @param ctx\n */\nexport async function checkOutAction(input: CheckOutInput, ctx: IActionContext): Promise {\n const { apiSettings } = ctx.requestContext;\n const requestUrl = `${apiSettings.baseUrl}Commerce/Carts('${input.cartId}')/Checkout?api-version=7.3`;\n const requestOptions: IHTTPRequestOptions = {\n headers: {\n oun: apiSettings.oun,\n 'Content-Type': 'application/json'\n }\n };\n\n if (requestOptions.headers && ctx.requestContext.user.token) {\n requestOptions.headers.Authorization = `id_token ${ctx.requestContext.user.token}`;\n }\n\n if (input.cartTenderLines && input.cartTenderLines.length > 0) {\n input.cartTenderLines = input.cartTenderLines.map((cartTenderLineItem: CartTenderLine) => {\n // @ts-expect-error\n cartTenderLineItem['@odata.type'] = '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine';\n\n // @ts-expect-error\n cartTenderLineItem['Amount@odata.type'] = '#Decimal';\n\n if (cartTenderLineItem.TokenizedPaymentCard) {\n // @ts-expect-error\n cartTenderLineItem.TokenizedPaymentCard['@odata.type'] =\n '#Microsoft.Dynamics.Commerce.Runtime.DataModel.TokenizedPaymentCard';\n\n // Force the House prop to be set, so that call succeeds\n if (!cartTenderLineItem.TokenizedPaymentCard.House) {\n cartTenderLineItem.TokenizedPaymentCard.House = 'N/A';\n }\n\n if (cartTenderLineItem.TokenizedPaymentCard.CardTokenInfo) {\n // @ts-expect-error\n cartTenderLineItem.TokenizedPaymentCard.CardTokenInfo['@odata.type'] =\n '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CardTokenInfo';\n }\n\n if (input.billingAddress) {\n const { Phone, ThreeLetterISORegionName = '', Street, City, State, ZipCode } = input.billingAddress;\n cartTenderLineItem.TokenizedPaymentCard = {\n ...cartTenderLineItem.TokenizedPaymentCard,\n Phone,\n Country: ThreeLetterISORegionName.toUpperCase(),\n Address1: Street,\n City,\n State,\n Zip: ZipCode\n };\n }\n }\n\n return cartTenderLineItem;\n });\n }\n\n const requestBody = {\n receiptEmail: input.receiptEmail,\n cartVersion: input.cartVersion || null,\n ...(input.cartTenderLines && { cartTenderLines: input.cartTenderLines })\n };\n\n // Perform check-out operation\n return sendCommerceRequest(requestUrl, 'post', requestBody, requestOptions).then((response: IHTTPResponse) => {\n if (response.status >= 200 && response.status < 300 && response.data) {\n return response.data;\n } else if (response.data) {\n throw response.data;\n }\n throw new Error('[checkOutAction] Invalid response recieved from RetailServer');\n });\n}\n\nexport const checkOutActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/checkout',\n action: >checkOutAction\n});\nexport default checkOutActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport { ProductList, ProductListsDataActions } from '@msdyn365-commerce/retail-proxy';\n\n/**\n * Input class for the CreateProductList data action.\n */\nexport class CreateProductListInput implements IActionInput {\n public readonly templateName: string;\n\n public readonly templateType: number;\n\n public constructor(templateName: string, templateType: number) {\n this.templateName = templateName;\n this.templateType = templateType;\n }\n\n /**\n * GetCacheObjectType.\n * @returns - Returns string.\n */\n public getCacheKey = (): string => 'CreateProductListInput';\n\n /**\n * GetCacheKey.\n * @returns - Returns string.\n */\n public getCacheObjectType = (): string => 'CreateProductListInput';\n\n /**\n * DataCacheType.\n * @returns - CacheType string.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the CreateProductList method.\n * @param inputData - The input data passed to the createInput method.\n * @param templateName - The name of template.\n * @param templateType - The type of template.\n * @returns - The Action input.\n */\nexport const createProductListInput = (inputData: ICreateActionContext, templateName: string, templateType: number): CreateProductListInput => {\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to create product list. User is not authenticated.');\n }\n return new CreateProductListInput(templateName, templateType);\n};\n\n/**\n * The action method for the CreateProductList data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - ProductList object.\n */\nexport async function createProductListAction(input: CreateProductListInput, context: IActionContext): Promise {\n try {\n const orderTemplate: ProductList = {\n Id: '',\n Name: input.templateName,\n ProductListTypeValue: input.templateType\n };\n const createdProductList = await ProductListsDataActions.createProductListAsync({\n callerContext: context\n }, orderTemplate);\n if (createdProductList.Id !== '') {\n return createdProductList;\n }\n context.telemetry.error('Created product list was null');\n throw new Error('Created product list was null');\n\n } catch (error) {\n context.telemetry.error('Not able to create product list', error);\n throw error;\n }\n}\n\n/**\n * The CreateProductList Data Action.\n * Returns created Product List.\n */\nexport const createProductListActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/create-product-list',\n action: createProductListAction as IAction,\n input: createProductListInput\n});\n\nexport default createProductListActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { Address, Customer } from '@msdyn365-commerce/retail-proxy';\n\nimport { createAddressManagementInput, doAddressManagementOperation, IAddressManagementInput } from './add-address';\n\nexport function deleteAddressHandler(customer: Customer, address: Address): Customer {\n customer.Addresses = customer.Addresses || [];\n customer.Addresses = [...customer.Addresses.filter(cur => cur.RecordId !== address.RecordId)];\n return customer;\n}\n\nexport async function deleteAddressAction(input: IAddressManagementInput, ctx: IActionContext): Promise {\n return doAddressManagementOperation(input, ctx, deleteAddressHandler);\n}\n\n/**\n * The deleteAddress data action\n * Calls the read RetailServer API to get information about a customer\n * Removes all address information from the retireved customer, and\n * then updates that customer via the update RetailServer API.\n */\nexport const deleteAddressActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/delete-address',\n action: >deleteAddressAction,\n input: <(args: ICreateActionContext) => IActionInput>(createAddressManagementInput),\n isBatched: false\n});\n\nexport default deleteAddressActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { BusinessPartnerUser, NullResult } from '@msdyn365-commerce/retail-proxy';\nimport { deleteAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnerUsersDataActions.g';\n\n/**\n * Input class for DeleteOrganizationUser data action.\n */\nexport class DeleteOrganizationUserInput implements IActionInput {\n public user: BusinessPartnerUser;\n\n constructor(newUser: BusinessPartnerUser) {\n this.user = newUser;\n }\n\n public getCacheKey = () => 'DeleteOrganizationUser';\n\n public getCacheObjectType = () => 'DeleteOrganizationUser';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Input class for DeleteOrganizationUser data action.\n * @param inputData\n * @param newUser\n */\nexport const createDeleteOrganizationUserInput = (inputData: ICreateActionContext>, newUser: BusinessPartnerUser): IActionInput => {\n const { requestContext } = inputData;\n\n // Check if the user is authenticated.\n if (!requestContext.user.isAuthenticated) {\n throw new Error('User is not logged in.');\n }\n\n return new DeleteOrganizationUserInput(newUser);\n};\n\n/**\n * The DeleteOrganizationUser data action\n * Calls getCurrent() to get a businessPartnerId from the user requesting the action.\n * It then maps the newUsers' businessPartnerId to the same as the above user.\n * Calls the createBusinessPartner to then create a new entitiy in the database with the\n * information passed into through newUser.\n * @param input\n * @param ctx\n */\nexport async function deleteOrganizationUser(input: DeleteOrganizationUserInput, ctx: IActionContext): Promise {\n const { user } = input;\n\n return deleteAsync({ callerContext: ctx }, user)\n .catch(error => {\n console.log(error);\n ctx.telemetry.debug('[Delete-organization-user] Unable to delete BusinessPartnerUser account');\n throw new Error('[Delete-organization-user] Unable to delete BusinessPartnerUser account');\n });\n}\n\n/**\n * The DeleteOrganizationUser data action\n * Calls the read RetailServer API to get the BusinessPartnerId from the admin\n * account and Deletes that businessPartner to the recieved input (new User)/\n * We then send this new User through the RetailServer API so that the database\n * is updated.\n */\nexport const deleteOrganizationUserDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/delete-organization-user',\n action: >deleteOrganizationUser,\n input: <(args: ICreateActionContext) => IActionInput>(createDeleteOrganizationUserInput)\n});\n\nexport default deleteOrganizationUserDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { BusinessPartnerUser } from '@msdyn365-commerce/retail-proxy';\nimport { updateAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnerUsersDataActions.g';\n\n/**\n * Input class for edit organization user data action.\n */\nexport class EditOrganizationUserInput implements IActionInput {\n public user: BusinessPartnerUser;\n\n constructor(newUser: BusinessPartnerUser) {\n this.user = newUser;\n }\n\n public getCacheKey = () => 'EditOrganizationUser';\n\n public getCacheObjectType = () => 'EditOrganizationUser';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Input class for edit organization user data action.\n * @param inputData\n * @param newUser\n */\nexport const createEditOrganizationUserInput = (inputData: ICreateActionContext>, newUser: BusinessPartnerUser): IActionInput => {\n const { requestContext } = inputData;\n\n // Check if the user is authenticated.\n if (!requestContext.user.isAuthenticated) {\n throw new Error('User is not logged in.');\n }\n\n return new EditOrganizationUserInput(newUser);\n};\n\nexport async function editOrganizationUser(input: EditOrganizationUserInput, ctx: IActionContext): Promise {\n const { user } = input;\n\n return updateAsync({ callerContext: ctx }, user)\n .then(updatedUser => {\n return updatedUser;\n })\n .catch(() => {\n ctx.telemetry.debug('[Edit-organization-user] Unable to update BusinessPartnerUser account');\n throw new Error('[Edit-organization-user] Unable to update BusinessPartnerUser account');\n });\n}\n\n/**\n * The EditOrganizationUser data action\n * Takes in an instance of a BusinessPartnerUser and updates the\n * same user with the new information.\n */\nexport const editOrganizationUserDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/Edit-organization-user',\n action: >editOrganizationUser,\n input: <(args: ICreateActionContext) => IActionInput>(createEditOrganizationUserInput)\n});\n\nexport default editOrganizationUserDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, IActionContext, IActionInput } from '@msdyn365-commerce/core';\n\n/**\n * Generic input type for use with generic data actions.\n */\nexport class GenericInput implements IActionInput {\n public result: T;\n\n public cacheKey: string;\n\n public cacheObjectType: string;\n\n constructor(cacheKey: string, result: T, cacheObjectType: string) {\n this.cacheKey = cacheKey;\n this.cacheObjectType = cacheObjectType;\n this.result = result;\n }\n\n public getCacheKey = () => `Generic-${this.cacheKey}`;\n\n public getCacheObjectType = () => `${this.cacheObjectType}`;\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Generic data action that is just used for passing data around the app.\n *\n * Note that this doesn't actually expose a data action, its just a base action\n * that others can use to create a data action with their own input.\n * @param input\n * @param ctx\n */\nexport async function getGenericAction(input: GenericInput, ctx: IActionContext): Promise {\n return input.result;\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICommerceApiSettings, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { Address } from '@msdyn365-commerce/retail-proxy';\n\nimport getCustomer, { GetCustomerInput } from './get-customer';\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Input class for the getAddress data action.\n */\nexport class AddressInput implements IActionInput {\n public userAccountNumber?: string;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings, userAccountNumber?: string) {\n this.userAccountNumber = userAccountNumber;\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`GetAddress-${this.userAccountNumber}`, this.apiSettings);\n\n public getCacheObjectType = () => 'GetAddress';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CreateInput method for the getAddress method.\n * @param inputData The input data passed to the createInput method.\n */\nexport const createGetAddressInput = (inputData: ICreateActionContext): IActionInput => {\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to create address input. User is not authenticated.');\n }\n\n return new AddressInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the getAddress data action.\n * @param input The action input.\n * @param ctx The action context.\n */\nexport async function getAddressAction(input: AddressInput, ctx: IActionContext): Promise {\n const customerInput = new GetCustomerInput(ctx.requestContext.apiSettings, input.userAccountNumber);\n const customer = await getCustomer(customerInput, ctx);\n\n if (!customer) {\n throw new Error('Not able to get customer');\n }\n\n return customer.Addresses || [];\n}\n\n/**\n * The getAddress data action\n * Gets a customers information via the read RetailServer API\n * Returns address information associated with the retrieved customer.\n */\nexport const getAddressActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-address',\n action: >getAddressAction,\n input: <(args: ICreateActionContext) => IActionInput>createGetAddressInput\n});\n\nexport default getAddressActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport {\n getAttributeDefinitionsAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { AttributeDefinition, AttributeDefinitionCriteria } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Input class for get attribute definitions data action.\n */\nexport class GetAttributeDefinitionsInput implements IActionInput {\n public attributeDefinitionCriteria?: AttributeDefinitionCriteria;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings, attributeDefinitionCriteria?: AttributeDefinitionCriteria) {\n this.attributeDefinitionCriteria = attributeDefinitionCriteria;\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('AttributeDefinitions', this.apiSettings);\n\n public getCacheObjectType = () => 'CustomerAttribute';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nconst createInput = (inputData: ICreateActionContext>): GetAttributeDefinitionsInput => {\n const { apiSettings, channel } = inputData.requestContext;\n if (!channel || !channel.CustomerAttributeGroupId) {\n throw new Error('[getAttributeDefinitions][createInput]: Customer attribute group id is not found.');\n }\n\n return new GetAttributeDefinitionsInput(apiSettings, { AttributeGroupIdentifier: channel.CustomerAttributeGroupId });\n};\n\nconst getAttributeDefinitionsAction = async (input: GetAttributeDefinitionsInput, ctx: IActionContext): Promise => {\n if (input && ctx.requestContext.channel && ctx.requestContext.channel.CustomerAttributeGroupId) {\n return getAttributeDefinitionsAsync({ callerContext: ctx }, input.attributeDefinitionCriteria || null).then(response => {\n return response;\n });\n }\n\n ctx.trace('[getAttributeDefinitions]Invalid input passed to action');\n return [];\n};\n\nexport const getAttributeDefinitionsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-custom-attributes',\n action: >getAttributeDefinitionsAction,\n input: createInput\n});\n\nexport default getAttributeDefinitionsActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt 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 { getCartState } from '@msdyn365-commerce/global-state';\nimport { CartLine, ChannelDeliveryOptionConfiguration, FeatureState, ProductWarehouse } from '@msdyn365-commerce/retail-proxy';\nimport { getOrgUnitConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\nimport {\n getEstimatedAvailabilityAsync,\n getEstimatedProductWarehouseAvailabilityAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { getChannelDeliveryOptionConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\n\nimport {\n ActiveCartProductsInput,\n ArrayExtensions,\n buildCacheKey,\n createInventoryAvailabilitySearchCriteria,\n getActiveCartProductsAction,\n IProductInventoryInformation,\n mapAggregatedProductInventoryInformation,\n mapProductInventoryInformation\n} from '.';\nimport { FeatureStateInput, getFeatureStateActionDataAction } from './get-feature-state';\n\n/**\n * Input class for availabilities for items in cart.\n */\nexport class ProductAvailabilitiesForCartLineItems implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('ActiveCartLineItemsAvailability', this.apiSettings);\n\n public getCacheObjectType = () => 'ActiveCartLineItemsAvailability';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductAvailabilitiesForCartLineItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * Calls the Retail Feature State API and returns a list of feature with isEnabled flag.\n * @param cartLine\n * @param featureSate\n * @param channelDeliveryOptionConfig\n * @param pickupDeliveryMode\n */\nconst getDeliveryMode = (cartLine: CartLine, featureSate: boolean = false, channelDeliveryOptionConfig: ChannelDeliveryOptionConfiguration, pickupDeliveryMode?: string) => {\n if (!featureSate) {\n return cartLine.DeliveryMode === pickupDeliveryMode;\n }\n return cartLine.DeliveryMode === channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(deliveryMode => deliveryMode === cartLine.DeliveryMode);\n\n};\n\n/**\n * Calls the Retail API to get the product availabilities for items in the cart.\n * @param input\n * @param ctx\n */\nexport async function getAvailabilitiesForCartLineItems(\n input: ProductAvailabilitiesForCartLineItems,\n ctx: IActionContext\n): Promise {\n // If no input is provided fail out\n if (!input) {\n throw new Error('[getAvailabilitiesForCartLineItems]No valid Input was provided, failing');\n }\n\n const shippingItems: CartLine[] = [];\n const bopisItems = [];\n let productAvailabilities: IProductInventoryInformation[] = [];\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n let channelDeliveryOptionConfig: any;\n\n const cartState = await getCartState(ctx);\n const cart = cartState.cart;\n const channelConfiguration = await getOrgUnitConfigurationAsync({ callerContext: ctx });\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx);\n\n /**\n * Calls the Retail Feature State API and returns a list of feature with isEnabled flag.\n * @param context\n */\n async function getFeatureState(context: IActionContext): Promise {\n return getFeatureStateActionDataAction(new FeatureStateInput(), context);\n }\n const featureState = await getFeatureState(ctx);\n const retailMultiplePickUpOptionEnabled = featureState?.find(item => item.Name === multiplePickupStoreSwitchName)?.IsEnabled;\n if (retailMultiplePickUpOptionEnabled) {\n channelDeliveryOptionConfig = await getChannelDeliveryOptionConfigurationAsync({ callerContext: ctx });\n }\n const PickupDeliveryModeCode = channelConfiguration.PickupDeliveryModeCode;\n const EmailDeliveryModeCode = channelConfiguration.EmailDeliveryModeCode;\n\n if (!cart || !channelConfiguration || !products || products.length === 0) {\n ctx.trace('[getAvailabilitiesForCartLineItems] Not able to get cart OR channelConfiguration or no products in cart');\n return [];\n }\n\n if (cart && cart.Id && cart.CartLines && cart.CartLines.length > 0 && channelConfiguration) {\n for (const cartLine of cart.CartLines) {\n if (cartLine.DeliveryMode && cartLine.DeliveryMode !== '' && getDeliveryMode(cartLine, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, PickupDeliveryModeCode)) {\n bopisItems.push(cartLine);\n } else if (cartLine.DeliveryMode !== EmailDeliveryModeCode) {\n shippingItems.push(cartLine);\n }\n }\n }\n\n if (shippingItems && shippingItems.length > 0) {\n let productIds = shippingItems.map(x => x.ProductId!);\n productIds = ArrayExtensions.unique(productIds);\n const searchCriteria = createInventoryAvailabilitySearchCriteria(ctx, productIds, true);\n const shippingProductAvailabilities = await getEstimatedAvailabilityAsync(\n { callerContext: ctx, bypassCache: 'get' },\n searchCriteria\n );\n\n if (shippingProductAvailabilities &&\n shippingProductAvailabilities.ProductWarehouseInventoryAvailabilities &&\n shippingProductAvailabilities.ProductWarehouseInventoryAvailabilities.length > 0) {\n\n productAvailabilities = mapAggregatedProductInventoryInformation(\n ctx,\n shippingProductAvailabilities\n );\n }\n }\n\n if (bopisItems && bopisItems.length > 0) {\n for (const bopisItem of bopisItems) {\n const productWarehouse: ProductWarehouse = {\n ProductId: bopisItem.ProductId,\n InventLocationId: bopisItem.WarehouseId\n };\n\n if (ctx.requestContext.channel && ctx.requestContext.channel.InventLocationDataAreaId) {\n productWarehouse.DataAreaId = ctx.requestContext.channel.InventLocationDataAreaId;\n }\n const quantityUnitTypeSales: number = 2;\n const getProductWarehouseAvail = await getEstimatedProductWarehouseAvailabilityAsync(\n { callerContext: ctx, bypassCache: 'get', queryResultSettings: {} },\n [productWarehouse],\n quantityUnitTypeSales\n );\n\n if (getProductWarehouseAvail &&\n getProductWarehouseAvail.ProductWarehouseInventoryAvailabilities &&\n getProductWarehouseAvail.ProductWarehouseInventoryAvailabilities.length > 0) {\n const productWarehouseMapping = mapProductInventoryInformation(\n ctx,\n getProductWarehouseAvail?.ProductWarehouseInventoryAvailabilities\n );\n if (productWarehouseMapping && productWarehouseMapping.length > 0) {\n for (const item of productWarehouseMapping) {\n productAvailabilities.push(item);\n }\n }\n }\n }\n }\n\n if (productAvailabilities && productAvailabilities.length > 0) {\n return productAvailabilities;\n }\n\n ctx.trace('[getAvailabilitiesForCartLineItems] unable to get availabilities for product');\n return [];\n}\n\nexport const getAvailabilitiesForCartLineItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-availabilities-cartlines',\n action: >getAvailabilitiesForCartLineItems,\n input: createInput\n});\n\nexport default getAvailabilitiesForCartLineItemsDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { BusinessPartnerOperationRequest, BusinessPartnerUser } from '@msdyn365-commerce/retail-proxy';\nimport { getOperationRequestsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnerUsersDataActions.g';\n\nimport { getCurrentBusinessPartnerUser, GetCurrentBusinessPartnerUserInput } from './get-current-business-partner-user';\nimport { StringExtensions } from './utilities';\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Input class for get customer data action.\n */\nexport class GetBusinessPartnerOperationRequestsInput implements IActionInput {\n public fromDate: Date;\n\n public toDate: Date;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings, fromDate: Date, toDate: Date) {\n this.apiSettings = apiSettings;\n this.fromDate = fromDate;\n this.toDate = toDate;\n }\n\n public getCacheKey = () => buildCacheKey('BusinessPartnerOperationRequests-cacheKey', this.apiSettings);\n\n public getCacheObjectType = () => 'BusinessPartnerOperationRequest[]';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nconst createInput = (inputData: ICreateActionContext>): GetBusinessPartnerOperationRequestsInput => {\n const fromDate = new Date(Date.now() - (86_400_000 * 3)); // 3 days ago.\n\n const toDate: Date = new Date(Date.now());\n return new GetBusinessPartnerOperationRequestsInput(inputData.requestContext.apiSettings, fromDate, toDate);\n};\n\nexport async function getBusinessPartnerOperationRequestsAction(input: GetBusinessPartnerOperationRequestsInput, ctx: IActionContext): Promise {\n if (input) {\n const userInput = new GetCurrentBusinessPartnerUserInput(ctx.requestContext.apiSettings);\n const user: BusinessPartnerUser | undefined = await getCurrentBusinessPartnerUser(userInput, ctx);\n\n if (user && !StringExtensions.isNullOrEmpty(user.B2BUserId)) {\n return getOperationRequestsAsync({ callerContext: ctx }, user.B2BUserId, input.fromDate, input.toDate);\n }\n\n return [];\n }\n\n ctx.trace('[getBusinessPartnerOperationRequest]Invalid input passed to action');\n return [];\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-business-partner-operation-requests',\n action: >getBusinessPartnerOperationRequestsAction,\n input: createInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\n IAny, ICommerceApiSettings, ICreateActionContext, IGeneric, IRequestContext } from '@msdyn365-commerce/core';\nimport { CatalogsDataActions, ProductCatalog } from '@msdyn365-commerce/retail-proxy';\n\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Input for get-catalogs data action.\n */\nexport class CatalogsInput implements IActionInput {\n\n public readonly channelId: number;\n\n public readonly customerAccountNumber?: string;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n private readonly locale?: string;\n\n public constructor(context: IRequestContext, customerAccountNumber?: string) {\n this.channelId = context.apiSettings.channelId ? Number(context.apiSettings.channelId) : 0;\n this.customerAccountNumber = customerAccountNumber ? customerAccountNumber : context.user.customerAccountNumber;\n this.apiSettings = context.apiSettings;\n this.locale = context.locale || '';\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions -- customer account number can be undefined.\n public getCacheKey = (): string => buildCacheKey(`${this.channelId}|${this.customerAccountNumber}`, this.apiSettings, this.locale);\n\n /**\n * Get Cache object type.\n * @returns - Cache object type.\n */\n public getCacheObjectType = (): string => 'productCatalogs';\n\n /**\n * Get data cache type.\n * @returns - Cache type enum.\n */\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData - The input data passed to the createInput method.\n * @param customerAccountNumber - Customer account number.\n * @returns - Catalogs input.\n */\nexport const createCatalogsInput = (inputData: ICreateActionContext>, customerAccountNumber?: string): IActionInput => {\n if (!inputData.requestContext.user.isAuthenticated) {\n throw new Error('Unable to get product catalog. User is not authenticated.');\n }\n return new CatalogsInput(inputData.requestContext, customerAccountNumber);\n};\n\n/**\n * Calls the Retail API and returns the product catalog for an user.\n * @param input - Catalogs Input.\n * @param context - Current context.\n * @returns - Product catalog for the user.\n */\nexport async function getCatalogAction(input: CatalogsInput, context: IActionContext): Promise {\n const productCatalogs = await CatalogsDataActions.getCatalogsAsync({ callerContext: context }, input.channelId, true);\n return productCatalogs;\n}\n\n/**\n * The GetProductCatalogs Data Action\n * Returns product catalogs.\n */\nexport const getCatalogActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-catalogs',\n action: getCatalogAction as IAction,\n input: createCatalogsInput\n});\n\nexport default getCatalogActionDataAction;\n\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, getCatalogId, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric, IRequestContext } from '@msdyn365-commerce/core';\nimport { Category, TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\n\nimport getCategoryAction, { CategoriesInput as RawCategoriesInput } from './get-categories';\nimport { getCategoryUrl } from './utilities/Url-builder';\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Input for get-categories data action.\n */\nexport class CategoriesInput implements IActionInput {\n public readonly maxItems: number;\n\n public readonly channelId: number;\n\n private readonly catalogId: number;\n\n private readonly sitePath: string;\n\n private readonly _mappedToHierarchy: boolean;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n private readonly locale?: string;\n\n public constructor(context: IRequestContext, mappedToHierarchy: boolean, maxItems?: number) {\n this._mappedToHierarchy = mappedToHierarchy;\n this.maxItems = maxItems || 250;\n this.channelId = context && context.apiSettings && context.apiSettings.channelId ? +context.apiSettings.channelId : 0;\n this.sitePath = context && context.sitePath || '';\n this.apiSettings = context.apiSettings;\n this.locale = context.locale || '';\n this.catalogId = getCatalogId(context);\n }\n\n public getCacheKey = () => buildCacheKey(`${this.channelId}|${this.sitePath}|top-${this.maxItems || 250} | ${this.catalogId}`,\n this.apiSettings, this.locale);\n\n public getCacheObjectType = () => (this._mappedToHierarchy ? 'CategoryHierarchy' : 'Category');\n\n public dataCacheType = (): CacheType => 'request';\n\n public getLocale = (): string => this.locale || '';\n}\n\nconst getFriendlyName = (locale?: string, nameTranslations?: TextValueTranslation[]): string | undefined => {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && nameTranslations.length > 0) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation && nameTranslation.Text;\n};\n\nexport interface ICategoryMap {\n [RecordId: number]: CategoryHierarchy;\n}\n\n/**\n * Creates a hierarchy of categories based on the ParentCategory property.\n * @param categoryList Categories that will be converted into a hierarchy.\n * @param ctx\n * @param locale\n * @returns Hierarchy of categories in array.\n */\nexport const mapCategoryToHierarchy = (categoryList: Category[], ctx: IActionContext, locale?: string): CategoryHierarchy[] => {\n if (!categoryList || categoryList.length === 0) {\n return [];\n }\n\n const categoryMap: ICategoryMap = categoryList.reduce((memo: ICategoryMap, category: Category) => {\n const localName = getFriendlyName(locale, category.NameTranslations);\n const categoryHierarchy = { ...category };\n categoryHierarchy.NeutralizedName = category.Name;\n categoryHierarchy.Name = localName || categoryHierarchy.NeutralizedName;\n memo[category.RecordId] = categoryHierarchy;\n return memo;\n }, {});\n\n let zeroCategory = categoryMap[0];\n\n Object.keys(categoryMap).forEach((id: string) => {\n const element = categoryMap[+id];\n const parentId = element.ParentCategory;\n element.Url = getCategoryUrl(element, ctx, categoryMap);\n if (parentId === 0) {\n zeroCategory = element;\n return;\n }\n\n const parent = parentId && categoryMap[parentId];\n if (parent) {\n parent.Children = parent.Children || [];\n parent.Children.push(element);\n }\n });\n\n return (zeroCategory && zeroCategory.Children) || [];\n};\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nexport const createCategoriesHierarchyInput = (inputData: ICreateActionContext>): IActionInput => {\n const topItems = inputData.config && inputData.config.topCategories && Number.parseInt(inputData.config.topCategories, 10);\n return new CategoriesInput(inputData.requestContext, true, topItems);\n};\n\n/**\n * Calls the Retail API and returns all the categories as a hierarchy.\n * @param input\n * @param ctx\n */\nexport async function getCategoryHierarchyAction(input: CategoriesInput, ctx: IActionContext): Promise {\n const categories = await getCategoryAction(\n new RawCategoriesInput(ctx.requestContext, false, input.maxItems),\n ctx\n );\n return mapCategoryToHierarchy(categories, ctx, input.getLocale());\n}\n\nexport const getCategoryHierarchyActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-categories-hierarchy',\n action: >getCategoryHierarchyAction,\n input: createCategoriesHierarchyInput\n});\n\nexport default getCategoryHierarchyActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, getCatalogId, IAction, IActionContext,\n IActionInput, IAny, ICreateActionContext, IGeneric, IRequestContext } from '@msdyn365-commerce/core';\nimport { getCategoriesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CategoriesDataActions.g';\n\n/**\n * Input for get-categories data action.\n */\nexport class CategoriesInput implements IActionInput {\n public readonly maxItems: number;\n\n public readonly channelId: number;\n\n public readonly catalogId: number;\n\n private readonly _mappedToHierarchy: boolean;\n\n public constructor(context: IRequestContext, mappedToHierarchy: boolean, maxItems?: number) {\n this._mappedToHierarchy = mappedToHierarchy;\n this.maxItems = maxItems || 250;\n this.channelId = context && context.apiSettings && context.apiSettings.channelId ? Number(context.apiSettings.channelId) : 0;\n this.catalogId = getCatalogId(context);\n }\n\n public getCacheKey = () => `${this.channelId}|top-${this.maxItems || 250}|${this.catalogId}`;\n\n public getCacheObjectType = () => (this._mappedToHierarchy ? 'CategoryHierarchy' : 'Category');\n\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nexport const createCategoriesInput = (inputData: ICreateActionContext>): IActionInput => {\n const topItems = inputData.config && inputData.config.topCategories && Number.parseInt(inputData.config.topCategories, 10);\n return new CategoriesInput(inputData.requestContext, false, topItems);\n};\n\n/**\n * Calls the Retail API and returns all the categories as a flat list.\n * @param input\n * @param ctx\n */\nexport async function getCategoryAction(input: CategoriesInput, ctx: IActionContext): Promise {\n return (getCategoriesAsync({ callerContext: ctx }, input.channelId, input.catalogId));\n}\n\nexport const getCategoryActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-categories',\n action: >getCategoryAction,\n input: createCategoriesInput\n});\n\nexport default getCategoryActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, getCategoriesUrlSync, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric, IRequestContext } from '@msdyn365-commerce/core';\nimport { ICategoryPath, ICategoryUrl } from '@msdyn365-commerce/core-internal/dist/types/interfaces/ICategoryPathInterfaces';\nimport { getCategoryPathsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { CategoryPathLookup } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { buildCacheKey, getSelectedProductIdFromActionInput } from './utilities/utils';\n\n/**\n * Category path input.\n */\nexport class GetCategoryPathsInput implements IActionInput {\n public readonly ChannelId: number;\n\n public readonly CatalogId: number;\n\n public readonly categoryPathLooksups: CategoryPathLookup[];\n\n public readonly apiSettings: ICommerceApiSettings;\n\n private constructedCacheKey: string;\n\n constructor(context: IRequestContext, categoryPathLooksups: CategoryPathLookup[]) {\n this.ChannelId = context.apiSettings.channelId;\n this.CatalogId = context.apiSettings.catalogId || 0;\n this.categoryPathLooksups = categoryPathLooksups;\n this.apiSettings = context.apiSettings;\n this.constructedCacheKey = '';\n categoryPathLooksups.forEach(categoryPath => {\n this.constructedCacheKey += `${categoryPath.ProductId && categoryPath.ProductId.toString()}|`;\n });\n this.constructedCacheKey += `${this.ChannelId.toString()}|`;\n this.constructedCacheKey += `${this.CatalogId.toString()}|`;\n }\n\n public getCacheKey = () => buildCacheKey(this.constructedCacheKey, this.apiSettings);\n\n public getCacheObjectType = () => 'CategoryPath';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the getCategoryPath retail api call.\n * @param inputData\n */\nexport const createGetCategoryPathsInput = (inputData: ICreateActionContext>): IActionInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n if (productId) {\n return new GetCategoryPathsInput(inputData.requestContext, [{ ProductId: +productId }]);\n }\n throw new Error('Unable to create SelectedVariantInput, no productId found on module config or query');\n\n};\n\n/**\n * Calls the Retail API and returns the category path for a product.\n * @param input\n * @param ctx\n */\nexport async function getCategoryPathsAction(input: GetCategoryPathsInput, ctx: IActionContext): Promise {\n const categoryPathResults = await getCategoryPathsAsync({ callerContext: ctx }, input.ChannelId, input.CatalogId, input.categoryPathLooksups);\n const categoryPath = categoryPathResults[0].CategoryPath && categoryPathResults[0].CategoryPath[0];\n const categoryUrl = getCategoriesUrlSync(categoryPath, ctx);\n if (categoryUrl) {\n /* Do not return the root category of the product*/\n return categoryUrl.slice(1);\n }\n return [];\n}\n\nexport const getCategoryPathsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-category-paths',\n action: >getCategoryPathsAction,\n input: createGetCategoryPathsInput\n});\n\nexport default getCategoryPathsActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\nimport { getChannelDeliveryOptionConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\n\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Input class for get channel delivery option configuration data action.\n */\nexport class GetChannelDeliveryConfigurationInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings, accountNumber?: string) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('ChannelDeliveryConfiguration', this.apiSettings);\n\n public getCacheObjectType = () => 'ChannelDeliveryConfiguration';\n\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nconst createInput = (inputData: ICreateActionContext>): GetChannelDeliveryConfigurationInput => {\n const { apiSettings } = inputData.requestContext;\n if (!apiSettings) {\n throw new Error('[getChannelDeliveryOptionConfiguration][createInput]: API setting not available.');\n }\n\n return new GetChannelDeliveryConfigurationInput(apiSettings);\n};\n\nconst getChannelDeliveryOptionConfigurationAction = async (input: GetChannelDeliveryConfigurationInput, ctx: IActionContext): Promise => {\n if (input) {\n return getChannelDeliveryOptionConfigurationAsync({ callerContext: ctx }).then(response => {\n return response;\n });\n }\n\n ctx.trace('[get-channel-delivery-option-configuration]Invalid input passed to action');\n return {};\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-channel-delivery-option-configuration',\n action: >getChannelDeliveryOptionConfigurationAction,\n input: createInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICommerceApiSettings, ICreateActionContext, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\nimport { copyAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport Cookie from 'js-cookie';\n\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Input class for getCheckoutCart data action.\n */\nexport class GetCheckoutCartInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('ActiveCheckoutCart', this.apiSettings);\n\n public getCacheObjectType = () => 'ActiveCheckoutCart';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new GetCheckoutCartInput(inputData.requestContext.apiSettings);\n};\n\nconst CartCookieName: string = msdyn365Commerce.CartCookie || 'cart';\n\n/**\n * Data action to copy the cart for checkout actions.\n * @param input\n * @param ctx\n */\nexport async function getCheckoutCart(input: GetCheckoutCartInput, ctx: IActionContext): Promise {\n const cartId = Cookie.get(CartCookieName) || '';\n if (cartId) {\n const currentCartState = await getCartState(ctx);\n const activeCart = currentCartState.cart;\n\n // Check if there is an active cart and it isn't empty\n if (activeCart && Object.keys(activeCart).length > 0) {\n const checkoutCart = await copyAsync({ callerContext: ctx }, activeCart.Id, 2);\n\n if (checkoutCart) {\n return Array.isArray(checkoutCart) ? checkoutCart[0] : checkoutCart;\n }\n } else {\n ctx.trace('[get-checkout-cart] Can\\'t create a checkout cart since active cart is empty');\n }\n }\n\n return {};\n}\n\nexport const getCheckoutCartDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-checkout-cart',\n action: >getCheckoutCart,\n input: createInput\n});\n\nexport default getCheckoutCartDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICommerceApiSettings, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { BusinessPartnerUser, Customer } from '@msdyn365-commerce/retail-proxy';\nimport { getCurrentAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnerUsersDataActions.g';\n\nimport getCustomer, { GetCustomerInput } from './get-customer';\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Input class for get current business partner user data action.\n */\nexport class GetCurrentBusinessPartnerUserInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('CurrentBusinessPartnerUser', this.apiSettings);\n\n public getCacheObjectType = () => 'BusinessPartner';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nexport const createGetCurrentBusinessPartnerUserInput = (inputData: ICreateActionContext): IActionInput => {\n const { requestContext } = inputData;\n\n // Check if the user is authenticated.\n if (!requestContext.user.isAuthenticated) {\n throw new Error('User is not logged in.');\n }\n\n return new GetCurrentBusinessPartnerUserInput(requestContext.apiSettings);\n};\n\nexport async function getCurrentBusinessPartnerUser(input: GetCurrentBusinessPartnerUserInput, ctx: IActionContext): Promise {\n const customerInput = new GetCustomerInput(ctx.requestContext.apiSettings);\n const customer: Customer = await getCustomer(customerInput, ctx);\n\n if (customer?.IsB2b) {\n return getCurrentAsync({ callerContext: ctx });\n }\n return undefined;\n\n}\n\nexport default createObservableDataAction({\n id: 'get-current-business-partner-user',\n action: >getCurrentBusinessPartnerUser,\n input: createGetCurrentBusinessPartnerUserInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport {\n createObservableDataAction, IAction, IActionContext,\n IActionInput, IAny, ICreateActionContext, IGeneric, IRequestContext\n} from '@msdyn365-commerce/core';\n\nimport getCategoriesHierarchy, { CategoriesInput } from './get-categories-hierarchy';\nimport { ArrayExtensions } from './utilities';\n\n/**\n * Action Input Class for get-current-category-hierarchy.\n */\nexport class CurrentCategoryHierarchyInput extends CategoriesInput {\n public activeCategoryId: number;\n\n public constructor(context: IRequestContext, mappedToHierarchy: boolean, maxItems?: number, activeCategoryId?: number) {\n super(context, mappedToHierarchy, maxItems);\n const defaultActiveCategoryId = 0;\n this.activeCategoryId = activeCategoryId ?? defaultActiveCategoryId;\n }\n\n // @ts-expect-error: Overriding cache object type\n public getCacheObjectType = () => 'CurrentCategoryHierarchy';\n\n public getCacheKey = () => `${this.activeCategoryId}-${this.channelId}`;\n}\n\n/**\n * Creates the input required for the data action.\n * @param inputData\n */\nexport const createCategoriesHierarchyInput = (inputData: ICreateActionContext>): IActionInput => {\n const topItems = inputData.config?.topCategories && Number.parseInt(inputData.config.topCategories, 10);\n let activeCategoryId = inputData.requestContext.urlTokens.pageType === 'Category' ? inputData.requestContext.urlTokens.itemId : undefined;\n activeCategoryId = activeCategoryId ?? inputData.requestContext.query?.categoryId;\n const activeCategoryParsedId = activeCategoryId ? Number.parseInt(activeCategoryId, 10) : undefined;\n\n return new CurrentCategoryHierarchyInput(inputData.requestContext, true, topItems, activeCategoryParsedId);\n};\n\n/**\n * Finds the given category in the list of categories and returns an array with the info on where it's located.\n * @param categories - Categories list to search from.\n * @param categoryId - The category id to find.\n * @returns A list of categories starting from the given category id, ending up the root parent.\n */\nconst findCategoryHierarchy = (categories: CategoryHierarchy[], categoryId: number): CategoryHierarchy[] | null => {\n for (const category of categories) {\n if (category.RecordId === categoryId) {\n return [category];\n }\n\n if (ArrayExtensions.hasElements(category.Children)) {\n const innerCategoryHierarchy = findCategoryHierarchy(category.Children, categoryId);\n if (ArrayExtensions.hasElements(innerCategoryHierarchy)) {\n innerCategoryHierarchy.push(category);\n return innerCategoryHierarchy;\n }\n }\n }\n\n return null;\n};\n\n/**\n * Get the hierarchy of categories that are currently active as a parent -> child array.\n * Return will be as follows: [ParentCategory, Child, SubChild, SubSubChild].\n * @param input\n * @param ctx\n */\nexport async function getCurrentCategoryHierarchyAction(input: CurrentCategoryHierarchyInput, ctx: IActionContext): Promise {\n const fullCategoryHierarchy = await getCategoriesHierarchy(new CategoriesInput(ctx.requestContext, true, input.maxItems), ctx);\n const categoryArray = findCategoryHierarchy(fullCategoryHierarchy, input.activeCategoryId) ?? [];\n const sortedCategoryArray = categoryArray.reverse();\n return sortedCategoryArray;\n}\n\nexport const getCurrentCategoryHierarchyActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-current-category-hierarchy',\n action: getCurrentCategoryHierarchyAction as IAction,\n input: createCategoriesHierarchyInput\n});\n\nexport default getCurrentCategoryHierarchyActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, getParameterizeFeatureFlags, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric, IParameterizeFeatureFlags, IRequestContext } from '@msdyn365-commerce/core';\n\nimport { buildCacheKey } from '.';\nimport getCategoryHierarchy, { CategoriesInput } from './get-categories-hierarchy';\nimport { parameterize } from './utilities/Url-builder';\n\n/**\n * Input class for GetCurrentCategory data action.\n */\nexport class CurrentCategoryInput implements IActionInput {\n public categoryId?: number;\n\n public categorySlug?: string;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n private readonly locale?: string;\n\n constructor(context: IRequestContext) {\n let categoryId;\n let categorySlug;\n if (context.query && context.query.categoryId) {\n categoryId = Number(context.query.categoryId);\n\n if (Number.isNaN(categoryId)) {\n throw new Error('Failed to cast category id into a number.');\n }\n } else if (context.urlTokens && context.urlTokens.recordId) {\n categoryId = Number(context.urlTokens.recordId);\n if (Number.isNaN(categoryId)) {\n throw new Error('Failed to cast category id into a number.');\n }\n } else if (context.urlTokens && context.urlTokens.categories && context.urlTokens.categories.length > 0) {\n const categories: string[] = (context.urlTokens.categories);\n\n if (categories.length === 0) {\n throw new Error('Failed to get category name from urlTokens');\n }\n\n // TODO: fix getParameterizeFeatureFlags to take requestContext as input.\n const tempActionContext = {\n requestContext: context\n };\n categorySlug = `/${categories\n .map(category => {\n // @ts-expect-error TODO: fix getParameterizeFeatureFlags to take requestContext as an input\n const parameterizeFeatureFlags: IParameterizeFeatureFlags = getParameterizeFeatureFlags(tempActionContext);\n return parameterize(category, undefined, parameterizeFeatureFlags);\n })\n .join('/')}`;\n }\n this.categoryId = categoryId;\n this.categorySlug = categorySlug;\n this.apiSettings = context.apiSettings;\n this.locale = context.locale || '';\n }\n\n public getCacheKey = () => buildCacheKey(`${this.categoryId || this.categorySlug}`, this.apiSettings, this.locale);\n\n public getCacheObjectType = () => 'Current-Category';\n\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Creates a current category input from an ICreateActionContext.\n * @param inputData\n */\nexport const createGetCurrentCategoryInput = (inputData: ICreateActionContext>): IActionInput => {\n if (inputData && inputData.requestContext) {\n return new CurrentCategoryInput(inputData.requestContext);\n }\n\n throw new Error('Please specify categoryId query string in request.');\n};\n\n/**\n * Rescrusive Search Method to find a given category amongts a complete CategoryHierarcy.\n * @param categories The current Category Hierarchy.\n * @param categorySlug The category slug being searched for.\n * @param categoryId The category Id being search for.\n */\nexport function searchCategory(categories: CategoryHierarchy[], categorySlug?: string, categoryId?: number): CategoryHierarchy | undefined {\n let foundCategory;\n categories.forEach((cat: CategoryHierarchy) => {\n if ((categoryId && cat.RecordId === categoryId) || (categorySlug && cat.Slug === categorySlug)) {\n return (foundCategory = cat);\n } else if (cat.Children && cat.Children.length > 0) {\n const matchingChild = searchCategory(cat.Children, categorySlug, categoryId);\n if (matchingChild) {\n foundCategory = matchingChild;\n }\n }\n });\n return foundCategory;\n}\n\n/**\n * Action method for the getCurrentCategory Data Action.\n * @param input The action input class.\n * @param ctx The action context.\n */\nexport async function getCurrentCategoryAction(input: CurrentCategoryInput, ctx: IActionContext): Promise {\n if (input.categorySlug || input.categoryId) {\n const categoryInput = new CategoriesInput(ctx.requestContext, true);\n const categories = await getCategoryHierarchy(categoryInput, ctx);\n if (!categories) {\n ctx.trace('[getCurrentCategory] Unable to get categories from server');\n return;\n }\n\n const category = searchCategory(categories, input.categorySlug, input.categoryId);\n if (!category) {\n ctx.trace('[getCurrentCategory] Unable to find category');\n return;\n }\n return category;\n }\n}\n\n/**\n * The getCurrentCategory data action\n * First makes a call to the getCategories RetailServer API\n * to get a list of every available category, then returns a CategoryHierarchy\n * based on the categoryId query param set in the URL of the request.\n */\nexport const getCurrentCategoryActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-current-category',\n action: >getCurrentCategoryAction,\n input: createGetCurrentCategoryInput\n});\n\nexport default getCurrentCategoryActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\n ICommerceApiSettings, ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport { CustomerBalances } from '@msdyn365-commerce/retail-proxy';\nimport {\n getCustomerBalanceAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\n\nimport { buildCacheKey } from '.';\nimport getCustomer, { GetCustomerInput } from './get-customer';\n\n/**\n * Input class for the GetCustomerBalance data action.\n */\nexport class GetCustomerBalanceInput implements IActionInput {\n public customerAccountNumber?: string;\n\n public apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings, customerAccountNumber?: string) {\n this.customerAccountNumber = customerAccountNumber;\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`CustomerBalance-${this.customerAccountNumber}`, this.apiSettings);\n\n public getCacheObjectType = () => 'GetCustomerBalance';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CreateInput method for the GetCustomerBalance method.\n * @param inputData The input data passed to the createInput method.\n */\n\nexport const createGetCustomerBalanceInput = (inputData: ICreateActionContext): GetCustomerBalanceInput => {\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to create get customer balance input. User is not authenticated.');\n }\n\n return new GetCustomerBalanceInput(requestContext.apiSettings);\n};\n\n/**\n * The action method for the GetCustomerBalance data action.\n * @param input The action input.\n * @param ctx The action context.\n */\nexport async function getCustomerBalanceAction(input: GetCustomerBalanceInput, ctx: IActionContext): Promise {\n const customerInput = new GetCustomerInput(input.apiSettings, input.customerAccountNumber);\n const customer = await getCustomer(customerInput, ctx);\n\n if (!customer) {\n ctx.telemetry.error('Not able to get customer', new Error('Not able to get customer'));\n }\n\n return getCustomerBalanceAsync(\n {\n callerContext: ctx,\n queryResultSettings: {}\n },\n customer.AccountNumber,\n customer.InvoiceAccount\n );\n}\n\n/**\n * The GetCustomerBalance data action\n * Returns the customer's balance.\n */\nexport const getCustomerBalanceActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-customer-balance',\n action: >getCustomerBalanceAction,\n input: <(args: ICreateActionContext) => IActionInput>createGetCustomerBalanceInput\n});\n\nexport default getCustomerBalanceActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { LoyaltyCard, retailAction } from '@msdyn365-commerce/retail-proxy';\nimport { createGetCustomerLoyaltyCardsInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nconst createCustomerLoyaltyCardsInput = (inputData: ICreateActionContext>): IActionInput => {\n if (\n inputData.requestContext &&\n inputData.requestContext.user &&\n inputData.requestContext.user.isAuthenticated\n ) {\n return createGetCustomerLoyaltyCardsInput({}, null);\n }\n\n throw new Error('Unable to create order history input. User is not authenticated.');\n};\n\nexport const retailActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-customer-loyalty-cards',\n action: >retailAction,\n input: createCustomerLoyaltyCardsInput\n});\n\nexport default retailActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny,\n ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { Customer, CustomersDataActions } from '@msdyn365-commerce/retail-proxy';\n\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Input class for get customer data action.\n */\nexport class GetCustomerInput implements IActionInput {\n public customerAccountNumber?: string;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n private readonly cacheType?: CacheType;\n\n public constructor(apiSettings: ICommerceApiSettings, accountNumber?: string, cacheType?: CacheType) {\n this.customerAccountNumber = accountNumber;\n this.apiSettings = apiSettings;\n this.cacheType = cacheType;\n }\n\n /**\n * GetCacheKey.\n * @returns - Returns string.\n */\n public getCacheKey = (): string => buildCacheKey(`Customer-${this.customerAccountNumber}`, this.apiSettings);\n\n /**\n * GetCacheObjectType.\n * @returns - Cache Object Type string.\n */\n public getCacheObjectType = (): string => 'Customer';\n\n /**\n * DataCacheType.\n * @returns - CacheType string.\n */\n public dataCacheType = (): CacheType => {\n return this.cacheType ? this.cacheType : 'request';\n };\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData -- The input data passed to the createInput method.\n * @returns - ProductAvailabilitiesForSelectedVariant or error.\n */\nconst createInput = (inputData: ICreateActionContext>): GetCustomerInput => {\n const { user, apiSettings } = inputData.requestContext;\n if (!user.token || !user.isAuthenticated) {\n throw new Error('[getCustomer][createInput]: User is not Authenticated.');\n }\n\n return new GetCustomerInput(apiSettings);\n};\n\n/**\n * GetCustomerAction.\n * @param input - GetCustomerInput.\n * @param ctx - Action Context.\n * @returns - Customer information.\n */\nconst getCustomerAction = async (input: GetCustomerInput, ctx: IActionContext): Promise => {\n if (input && ctx.requestContext.user.isAuthenticated) {\n // TO-DO- Need to clean up this code once SDK releases new proxy that handles null.\n return CustomersDataActions.readAsync({ callerContext: ctx, bypassCache: 'get' }, input.customerAccountNumber || '').then(response => {\n return Array.isArray(response) ? response[0] : response;\n });\n }\n\n ctx.trace('[getCustomer]Invalid input passed to action');\n return {};\n};\n\n/**\n * The customer data action.\n */\nexport const getCustomerActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-customer',\n action: >getCustomerAction,\n input: createInput\n});\n\nexport default getCustomerActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { ProductAvailableQuantity, ProductDeliveryOptions } from '@msdyn365-commerce/retail-proxy';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\nimport { ActiveCartProductsInput, buildCacheKey, getActiveCartProductsAction } from '.';\n\n/**\n * Input class for delivery options for items in cart.\n */\nexport class ProductDeliveryOptionsForCartLineItems implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('ActiveCartLineItemsDeliveryOptions', this.apiSettings);\n\n public getCacheObjectType = () => 'ActiveCartLineItemsDeliveryOptions';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductDeliveryOptionsForCartLineItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * Calls the Retail API to get the delivery options for items in the cart.\n * @param input\n * @param ctx\n */\nexport async function getDeliveryOptionsForCartLineItems(input: ProductDeliveryOptionsForCartLineItems, ctx: IActionContext): Promise {\n // If no input is provided fail out\n if (!input) {\n throw new Error('[getDeliveryOptionsForCartLineItems]No valid Input was provided, failing');\n }\n const cartState = await getCartState(ctx);\n const cart = cartState.cart;\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx);\n\n if (!cart || !products || products.length === 0) {\n ctx.trace('[getDeliveryOptionsForCartLineItems] Not able to get cart OR channelConfiguration or no products in cart');\n return [];\n }\n\n return getDeliveryOptionsAsync({ callerContext: ctx, queryResultSettings: {} }, products.map(x => x.RecordId), {}, null)\n .then(result => {\n return result;\n }).catch((error: Error) => {\n ctx.trace(error.message);\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[getDeliveryOptionsForCartLineItems]Error executing action');\n throw new Error('[getDeliveryOptionsForCartLineItems]Error executing action');\n });\n}\n\nexport const getDeliveryOptionsForCartLineItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-delivery-options-for-cartlines',\n action: >getDeliveryOptionsForCartLineItems,\n input: createInput\n});\n\nexport default getDeliveryOptionsForCartLineItemsDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { FeatureState } from '@msdyn365-commerce/retail-proxy';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { FilterDeliveryModeOption, ProductDeliveryOptions, ReleasedProductType, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput } from '.';\nimport { FeatureStateInput, getFeatureStateActionDataAction } from './get-feature-state';\n\n/**\n * Input class for the GetDeliveryOptionsForSelectedVariant Data Action.\n */\nexport class GetDeliveryOptionsForSelectedVariantInput implements IActionInput {\n public productId: number;\n\n public channelId: number;\n\n public selectedProduct: SimpleProduct | undefined;\n\n public customerId: string;\n\n public featureState?: boolean;\n\n constructor(productId: number, channelId: number, selectedProduct?: SimpleProduct, customerId?: string, featureState?: boolean) {\n this.productId = productId;\n this.channelId = channelId;\n this.selectedProduct = selectedProduct;\n this.customerId = customerId || '';\n this.featureState = featureState;\n }\n\n public getCacheKey = () => 'DeliveryOptionsForSelectedVariant';\n\n public getCacheObjectType = () => 'DeliveryOptions';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Calls the Retail Feature State API and returns a list of feature with isEnabled flag.\n * @param context\n */\nexport async function getFeatureState(context: IActionContext): Promise {\n return getFeatureStateActionDataAction(new FeatureStateInput(), context);\n}\n\n/**\n * The createInput method for the GetDeliveryOptionsForSelectedVariant Data Action.\n * @param inputData The input data for the createInput method.\n */\nexport const createDeliveryOptionsForSelectedVariantInput = (inputData: ICreateActionContext>): GetDeliveryOptionsForSelectedVariantInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n\n if (productId) {\n return new GetDeliveryOptionsForSelectedVariantInput(\n +productId,\n +inputData.requestContext.apiSettings.channelId,\n undefined,\n undefined\n );\n }\n throw new Error('Unable to create PriceForSelectedVariantInput, no productId found on module config or query');\n\n};\n\n/**\n * The Action Method for the GetDeliveryOptionsForSelectedVariant Data Action\n * Pulls the currently selected variant from the cache using the getSelectedVariant data action, and gets it's supported delivery options\n * via the getDeliveryOptionsAsync RetailServer API.\n * @param input\n * @param ctx\n */\nexport async function getDeliveryOptionsForSelectedVariantAction(\n input: GetDeliveryOptionsForSelectedVariantInput,\n ctx: IActionContext\n): Promise {\n if (input.featureState === undefined) {\n const featureState = await getFeatureState(ctx);\n input.featureState = featureState?.find(item => item.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature')?.IsEnabled;\n }\n\n return Promise.resolve()\n .then(() => {\n const activeProduct: SimpleProduct | undefined = input.selectedProduct;\n\n if (!activeProduct) {\n const selectedVariantInput = new SelectedVariantInput(input.productId, input.channelId);\n\n return getSelectedVariant(selectedVariantInput, ctx);\n }\n\n return activeProduct;\n })\n .then((productResult: SimpleProduct | null) => {\n const activeProduct: SimpleProduct | undefined = productResult;\n\n if (activeProduct) {\n return getDeliveryOptionsAsync(\n { callerContext: ctx, queryResultSettings: {} },\n [activeProduct.RecordId],\n {},\n\n // For service item, should not apply the filter, otherwise there will be no electronic delivery mode\n (input.featureState && productResult?.ItemTypeValue !== ReleasedProductType.Service) ? FilterDeliveryModeOption.FilterOutNonPickupDeliveryMode : null\n ).then(response => {\n if (response && response.length > 0) {\n return response[0];\n }\n\n return undefined;\n });\n }\n\n return undefined;\n })\n .catch((error: Error) => {\n ctx.trace(error.message);\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[getDeliveryOptionsForSelectedVariantAction]Error executing action');\n throw new Error('[getDeliveryOptionsForSelectedVariantAction]Error executing action');\n });\n}\n\nexport const getDeliveryOptionsForSelectedVariantActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-delivery-options-for-selected-variant',\n action: >getDeliveryOptionsForSelectedVariantAction,\n input: createDeliveryOptionsForSelectedVariantInput\n});\n\nexport default getDeliveryOptionsForSelectedVariantActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductDimensionType, ProductDimensionValueInventoryAvailability, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\n\nimport { getDimensionAvailabilitiesForProductsAction, ProductsDimensionAvailabilitiesInput } from './get-dimension-availabilities-for-products';\nimport { ArrayExtensions, checkIfShouldDisplayAsSwatch, DimensionTypes, getInventoryLevelCodeFromDimensionValue,\n IDimensionsApp, InventoryLevelValues } from './utilities';\n\n/**\n * Input class for the GetDimensionAvailabilitiesForProductSearchResult Data Action.\n */\nexport class DimensionAvailabilitiesForProductSearchResultInput implements IActionInput {\n public products: ProductSearchResult[];\n\n public dimensionContext: ICoreContext;\n\n public constructor(products: ProductSearchResult[], dimensionContext: ICoreContext) {\n this.products = products;\n this.dimensionContext = dimensionContext;\n }\n\n /**\n * Get the cache key.\n * @returns The cache key.\n */\n public getCacheKey = (): string => 'DimensionAvailabilitiesForProductSearchResult';\n\n /**\n * Get the cache object type.\n * @returns The cache object type.\n */\n public getCacheObjectType = (): string => 'ProductDimensionValueInventoryAvailability';\n\n /**\n * Define the data cache type.\n * @returns The cache type.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * The createInput method for the GetDimensionAvailabilitiesForProductSearchResultDataAction.\n * @param products -- The product search result.\n * @param dimensionContext -- The dimension app context.\n * @returns The input.\n */\nexport const createDimensionAvailabilitiesForProductSearchResultInput = (\n products: ProductSearchResult[],\n dimensionContext: ICoreContext): DimensionAvailabilitiesForProductSearchResultInput => {\n\n return new DimensionAvailabilitiesForProductSearchResultInput(products, dimensionContext);\n};\n\n/**\n * The Action Method for the GetDimensionAvailabilitiesForProductSearchResultInput Data Action\n * Gets the active price for product search result via the getDimensionAvailabilitiesForProduct API.\n * @param input -- The data input.\n * @param context -- The core context.\n * @returns The ProductsDimensionsAvailabilities.\n */\nexport async function getDimensionAvailabilitiesForProductSearchResultAction(\n input: DimensionAvailabilitiesForProductSearchResultInput,\n context: IActionContext\n): Promise {\n const products = input.products;\n const productsDimensionInputs: ProductsDimensionAvailabilitiesInput[] = [];\n const inventoryLevel = input.dimensionContext.app.config.inventoryLevel;\n\n for (const product of products) {\n const filteredProductAttributes = product.AttributeValues?.filter(attributeValue => {\n return checkIfShouldDisplayAsSwatch(\n (attributeValue.Name?.toLocaleLowerCase() ?? '') as DimensionTypes, input.dimensionContext);\n });\n\n if (ArrayExtensions.hasElements(filteredProductAttributes)) {\n for (const attributeValue of filteredProductAttributes) {\n if (attributeValue.Name) {\n const productionDimensionType: ProductDimensionType = ProductDimensionType[attributeValue.Name as keyof typeof ProductDimensionType];\n\n productsDimensionInputs.push(new ProductsDimensionAvailabilitiesInput(\n // eslint-disable-next-line inclusive-language/use-inclusive-words -- existing property.\n product.MasterProductId ?? product.RecordId,\n productionDimensionType));\n }\n }\n }\n }\n\n if (!ArrayExtensions.hasElements(productsDimensionInputs)) {\n return Promise.resolve([]);\n }\n\n try {\n const dimensionForProducts: ProductDimensionValueInventoryAvailability[][] = await getDimensionAvailabilitiesForProductsAction(\n productsDimensionInputs, context);\n const productsDimensionAvailabilities = productsDimensionInputs.map((dimensionInput, index) => {\n return dimensionForProducts[index].map(dimensionValuesWithInventory => {\n const inventoryLevelCode = getInventoryLevelCodeFromDimensionValue(dimensionValuesWithInventory, inventoryLevel);\n const dimensionValue = dimensionValuesWithInventory.DimensionValue!;\n return {\n value: dimensionValue.Value ?? '',\n isDisabled: inventoryLevelCode === InventoryLevelValues.outOfStock,\n // eslint-disable-next-line inclusive-language/use-inclusive-words, woke/all -- existing property.\n masterProductId: dimensionInput.masterProductId\n };\n });\n });\n\n if (!ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n context.telemetry.warning('ProductsDimensionAvailabilities is empty');\n return Promise.resolve([]);\n }\n\n return Promise.resolve(productsDimensionAvailabilities);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- existing error.\n context.telemetry.warning(error);\n }\n\n return Promise.resolve([]);\n}\n\n/**\n * The GetDimensionAvailabilitiesForProductSearchResult data action.\n */\nexport const getDimensionAvailabilitiesForProductSearchResultDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-dimension-availabilities-for-product-search-result',\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- existing pattern.\n action: >getDimensionAvailabilitiesForProductSearchResultAction,\n input: createDimensionAvailabilitiesForProductSearchResultInput\n});\n\nexport default getDimensionAvailabilitiesForProductSearchResultDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductDimensionAvailabilitySearchCriteria, ProductDimensionType, ProductDimensionValueInventoryAvailability, ProductsDataActions\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ArrayExtensions } from './utilities';\nimport { createInventoryAvailabilitySearchCriteria } from './utilities/product-inventory-utils';\n\n/* eslint-disable inclusive-language/use-inclusive-words -- disabling inclusive words for this file. */\n\n/**\n * Interface for IProductDimension.\n */\nexport interface IProductDimension {\n masterProductId: number;\n requestDimensionType: ProductDimensionType;\n}\n\n/**\n * Product Input.\n */\nexport class ProductsDimensionAvailabilitiesInput implements IActionInput {\n\n public masterProductId: number;\n\n public requestDimensionType: ProductDimensionType;\n\n public constructor(masterProductId: number, requestDimensionType: ProductDimensionType) {\n this.masterProductId = masterProductId;\n this.requestDimensionType = requestDimensionType;\n\n }\n\n /**\n * Cache key.\n * @returns String.\n */\n public getCacheKey: () => string = () => `MasterProductId-${this.masterProductId.toString()}-DimensionType-${this.requestDimensionType}-Availabilities`;\n\n /**\n * Cache object type.\n * @returns String.\n */\n public getCacheObjectType = (): string => 'MasterProductDimensionAvailabilities';\n\n /**\n * Cache type.\n * @returns String.\n */\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Create input method for the getDimensionsForSelectedVariant data action.\n * @param inputData - The input data passed to the createInput method.\n * @returns - The input for the data action.\n */\nexport const createProductsDimensionAvailabilitiesInput = (inputData: ICreateActionContext>): ProductsDimensionAvailabilitiesInput[] => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- ignore type of config.\n const productsDimensions: IProductDimension[] = inputData.config?.productsDimensions;\n\n return productsDimensions.map((productDimension: IProductDimension) => {\n return new ProductsDimensionAvailabilitiesInput(productDimension.masterProductId, productDimension.requestDimensionType);\n });\n};\n\n/**\n * Action Method for the getDimensionsForSelectedVariant Data Action.\n * @param inputs - Input for the data action.\n * @param context - Action context.\n * @returns Master product dimensions with availabilities.\n */\nexport async function getDimensionAvailabilitiesForProductsAction(\n inputs: ProductsDimensionAvailabilitiesInput[],\n context: IActionContext\n): Promise {\n if (!Array.isArray(inputs) || !ArrayExtensions.hasElements(inputs)) {\n context.trace('[getDimensionAvailabilitiesForProductsAction] Invalid or empty inputs passed.');\n return [];\n }\n\n const promise = inputs.map(input => {\n // As per default PDP loads shipping inventory policies, so making swatch to pick the same configuration\n const shippingInventoryConfiguration = createInventoryAvailabilitySearchCriteria(context, [input.masterProductId], true, undefined, undefined);\n\n const searchCriteria: ProductDimensionAvailabilitySearchCriteria =\n {\n RequestedDimensionTypeValue: input.requestDimensionType,\n MatchingDimensionValues: undefined,\n DefaultWarehouseOnly: shippingInventoryConfiguration.DefaultWarehouseOnly,\n FilterByChannelFulfillmentGroup: shippingInventoryConfiguration.FilterByChannelFulfillmentGroup,\n DeliveryModeTypeFilterValue: shippingInventoryConfiguration.DeliveryModeTypeFilterValue\n };\n\n const dimensionValuesPromise = ProductsDataActions.getDimensionValuesWithEstimatedAvailabilitiesAsync(\n { callerContext: context, queryResultSettings: {} },\n input.masterProductId,\n searchCriteria\n );\n\n return dimensionValuesPromise;\n\n });\n\n return await Promise.all(promise);\n}\n\n/**\n * The GetDimensionAvailabilitiesForProductsAction\n * Gets the available product dimensions for the master product via the getDimensionValues RetailServer API.\n */\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-dimension-availabilities-for-products',\n action: getDimensionAvailabilitiesForProductsAction as IAction,\n input: createProductsDimensionAvailabilitiesInput,\n isBatched: true\n});\n/* eslint-enable inclusive-language/use-inclusive-words -- enabling it back. */\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IProductDimensionsWithAvailabilitiesFull, ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport {\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\n IAny, ICreateActionContext, IGeneric\n} from '@msdyn365-commerce/core';\nimport {\n ProductDimension, ProductDimensionAvailabilitySearchCriteria,\n ProductDimensionValue, ProductDimensionValueInventoryAvailability, ProductsDataActions\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ArrayExtensions } from './utilities';\nimport { createInventoryAvailabilitySearchCriteria } from './utilities/product-inventory-utils';\nimport { getDimensionValuesFromQuery, getSelectedProductIdFromActionInput } from './utilities/utils';\n\n/* eslint-disable inclusive-language/use-inclusive-words -- disabling inclusive words for this file. */\n\n/**\n * Defines the dimension value type for get dimensions for selected variant data action.\n * Includes old API format for backward compatibility and new API info for availabilities for new logic.\n */\nexport interface IDimensionValueForSelectedVariant extends ProductDimensionValueInventoryAvailability, ProductDimensionValue {}\n\n/**\n * Defines the returned type for get dimensions for selected variant data action.\n * Includes old API format for backward compatibility and new API info for availabilities for new logic.\n */\nexport interface IDimensionForSelectedVariant extends ProductDimensionFull, IProductDimensionsWithAvailabilitiesFull {}\n\n/**\n * Input class for the getDimensionsForSelectedVariant data action.\n */\nexport class GetDimensionsForSelectedVariantInput implements IActionInput {\n public productId: number;\n\n public channelId: number;\n\n public matchingDimensionValues: ProductDimension[];\n\n public constructor(productId: number, channelId: number, matchingDimensionValues?: ProductDimension[]) {\n this.productId = productId;\n this.channelId = channelId;\n this.matchingDimensionValues = matchingDimensionValues || [];\n }\n\n /**\n * Cache key.\n * @returns String.\n */\n public getCacheKey: () => string = () => `DimensionsForSelectedVariantInput-${this.productId}-${this.channelId}`;\n\n /**\n * Cache object type.\n * @returns String.\n */\n public getCacheObjectType: () => string = () => 'DimensionsForSelectedVariantInput';\n\n /**\n * Cache type.\n * @returns String.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Create input method for the getDimensionsForSelectedVariant data action.\n * @param inputData - The input data passed to the createInput method.\n * @returns - The input for the data action.\n */\nconst createDimensionsForSelectedVariantInput = (inputData: ICreateActionContext>): GetDimensionsForSelectedVariantInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n\n if (productId) {\n return new GetDimensionsForSelectedVariantInput(\n +productId,\n +inputData.requestContext.apiSettings.channelId,\n getDimensionValuesFromQuery(inputData.requestContext.url.requestUrl));\n }\n throw new Error('Unable to create DimensionsForSelectedVariantInput, no productId found on module config or query');\n};\n\n/**\n * Converts new API type with availabilities to old API type to preserve backward compatibility.\n * @param dimensions - Dimensions to convert.\n * @returns Dimensions in old API format.\n */\nconst prepareDimensionsDataResult = (dimensions: IProductDimensionsWithAvailabilitiesFull[]): IDimensionForSelectedVariant[] => {\n return dimensions.map(newDimension => {\n const oldDimension: IDimensionForSelectedVariant = { ...newDimension };\n oldDimension.DimensionValues = ArrayExtensions.validValues(newDimension.dimensionValuesWithInventory?.map(value => value.DimensionValue));\n return oldDimension;\n });\n};\n\n/**\n * Action Method for the getDimensionsForSelectedVariant Data Action.\n * @param input - Input for the data action.\n * @param context - Action context.\n * @returns Product dimensions with availability.\n */\nexport async function getDimensionsForSelectedVariantAction(\n input: GetDimensionsForSelectedVariantInput,\n context: IActionContext\n): Promise {\n const activeProduct = await ProductsDataActions.getByIdAsync({ callerContext: context }, input.productId, input.channelId);\n\n if (!ArrayExtensions.hasElements(activeProduct.Dimensions)) {\n return [];\n }\n\n const promises = activeProduct.Dimensions.map(dimension => {\n const shippingInventoryConfiguration = createInventoryAvailabilitySearchCriteria(context, [], true, undefined, undefined);\n\n const searchCriteria: ProductDimensionAvailabilitySearchCriteria =\n {\n RequestedDimensionTypeValue: dimension.DimensionTypeValue,\n MatchingDimensionValues: input.matchingDimensionValues.filter(item => item.DimensionTypeValue !== dimension.DimensionTypeValue),\n DefaultWarehouseOnly: shippingInventoryConfiguration.DefaultWarehouseOnly,\n FilterByChannelFulfillmentGroup: shippingInventoryConfiguration.FilterByChannelFulfillmentGroup,\n DeliveryModeTypeFilterValue: shippingInventoryConfiguration.DeliveryModeTypeFilterValue\n };\n\n const dimensionValuesPromise = ProductsDataActions.getDimensionValuesWithEstimatedAvailabilitiesAsync(\n { callerContext: context, queryResultSettings: {} },\n activeProduct.MasterProductId ? activeProduct.MasterProductId : activeProduct.RecordId,\n searchCriteria\n );\n const fullDimensionPromise = dimensionValuesPromise.then(dimensionValues => {\n const fullDimension: IProductDimensionsWithAvailabilitiesFull = {\n ...dimension,\n dimensionValuesWithInventory: dimensionValues\n };\n return fullDimension;\n });\n\n return fullDimensionPromise;\n });\n\n const dimensionValuesResults = await Promise.all(promises);\n\n return prepareDimensionsDataResult(dimensionValuesResults);\n}\n\n/**\n * The GetDimensionsForSelectedVariantDataAction\n * Get the currently selected Variant via the getSelectedVariant data action, and the gets the\n * available product dimensions for the variant via the getDimensionValues RetailServer API.\n */\nexport const getDimensionsForSelectedVariantActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-dimensions/for-selected-variant',\n action: getDimensionsForSelectedVariantAction as IAction,\n input: createDimensionsForSelectedVariantInput\n});\n\nexport default getDimensionsForSelectedVariantActionDataAction;\n/* eslint-enable inclusive-language/use-inclusive-words -- enabling it back. */\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { FeatureState } from '@msdyn365-commerce/retail-proxy';\nimport { getFeatureStatesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\n\n/**\n * Input class for the getFeatureState data action.\n * The life time of the data action is 'application'.\n */\nexport class FeatureStateInput implements IActionInput {\n // Any additional feature names that needs to be checked in the code for enablement needs to be appended here:\n public readonly featureNames: string[] = [\n 'Dynamics.AX.Application.RetailB2BEcommerceFeature',\n 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature',\n 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature',\n 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n ];\n\n public getCacheKey = () => 'FeatureState';\n\n public getCacheObjectType = () => 'FeatureState';\n\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * CreateInput method for the getFeatureState method.\n * @param inputData The input data passed to the createInput method.\n */\nexport const createGetFeatureStateInput = (inputData: ICreateActionContext>): IActionInput => {\n return new FeatureStateInput();\n};\n\n/**\n * The action method for the getFeatureState data action.\n * @param input The action input.\n * @param ctx The action context.\n */\nexport async function getFeatureStateAction(input: FeatureStateInput, ctx: IActionContext): Promise {\n const featureState = await getFeatureStatesAsync({ callerContext: ctx }, input.featureNames);\n return featureState;\n}\n\n/**\n * The getFeatureState data action\n * Gets the feature state via the read RetailServer API\n * Returns address information associated with the retrieved customer.\n */\nexport const getFeatureStateActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-feature-state',\n action: >getFeatureStateAction,\n input: createGetFeatureStateInput\n});\n\nexport default getFeatureStateActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport {\n ChannelDeliveryOption,\n DeliveryModeTypeFilter,\n FeatureState,\n ItemAvailability,\n OrgUnitAvailability,\n OrgUnitLocation,\n ProductWarehouseInventoryInformation,\n SearchArea,\n StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport {\n getChannelDeliveryOptionsAsync,\n getOrgUnitLocationsByAreaAsync,\n getStoreHoursAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\nimport { getEstimatedAvailabilityAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\nimport { FeatureStateInput, getFeatureStateActionDataAction } from './get-feature-state';\nimport { IFullOrgUnitAvailability } from './utilities/full-org-unit-availability';\nimport { DeliveryMode, IProductInventoryInformation } from './utilities/product-inventory-information';\nimport { createInventoryAvailabilitySearchCriteria, mapProductInventoryInformation } from './utilities/product-inventory-utils';\n\n/**\n * Get selected variant action input class.\n */\nexport class GetFullAvailableInventoryNearbyInput implements IActionInput {\n public latitude?: number;\n\n public longitude?: number;\n\n public radius?: number;\n\n public productId?: number;\n\n public DistanceUnitValue?: number;\n\n public IgnoreLocation?: boolean;\n\n constructor(_productId?: number, _latitude?: number, _longitude?: number, _radius?: number, _DistanceUnitValue?: number, _IgnoreLocation?: boolean) {\n this.productId = _productId;\n this.latitude = _latitude;\n this.longitude = _longitude;\n this.radius = _radius;\n this.DistanceUnitValue = _DistanceUnitValue;\n this.IgnoreLocation = _IgnoreLocation;\n }\n\n public getCacheKey = () => 'GetFullAvailableInventoryNearbyInputCache';\n\n public getCacheObjectType = () => 'GetFullAvailableInventoryNearbyInput';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the getSelectedVariant data action.\n * @param inputData - The input data passed to the createInput method.\n * @returns GetFullAvailableInventoryNearbyInput - The action input.\n */\nexport const createGetFullAvailableInventoryNearbyInput = (inputData: ICreateActionContext>): GetFullAvailableInventoryNearbyInput => {\n return new GetFullAvailableInventoryNearbyInput();\n};\n\n/**\n * Calls the Retail Feature State API and returns a list of feature with isEnabled flag.\n * @param context - The context.\n * @returns FeatureState - The feature state.\n */\nexport async function getFeatureState(context: IActionContext): Promise {\n return getFeatureStateActionDataAction(new FeatureStateInput(), context);\n}\n\n/**\n * Action method for the getSelectedVariant data aciton.\n * @param input - The action input class.\n * @param ctx - The action context.\n * @returns IFullOrgUnitAvailability - The full org unit availability.\n */\nexport async function getFullAvailableInventoryNearbyAction(\n input: GetFullAvailableInventoryNearbyInput,\n ctx: IActionContext\n): Promise {\n // No valid product we want to return undefined so module knows there are no results yet\n if (!input.productId) {\n return undefined;\n }\n\n if (((!input.radius && input.radius !== 0) || !input.latitude || !input.longitude) && !input.IgnoreLocation) {\n // No valid location we want to return empty array so module can show no locations message\n return [];\n }\n\n const searchArea: SearchArea = {\n Latitude: input.latitude,\n Longitude: input.longitude,\n Radius: input.radius,\n DistanceUnitValue: input.DistanceUnitValue || 0 // 0 is miles\n };\n\n const featureState = await getFeatureState(ctx);\n const retailMulitplePickupMFeatureState = featureState?.find(item => item.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature')?.IsEnabled;\n const searchCriteria = createInventoryAvailabilitySearchCriteria(ctx, [input.productId], false, true, searchArea, DeliveryMode.pickup);\n return getEstimatedAvailabilityAsync(\n { callerContext: ctx }, searchCriteria)\n .then(async (productWarehouseInformation: ProductWarehouseInventoryInformation) => {\n // For store selector, inventory should always come from an individual store\n const productInventoryInformation = mapProductInventoryInformation(ctx, productWarehouseInformation.ProductWarehouseInventoryAvailabilities);\n return getOrgUnitLocationsByAreaAsync({ callerContext: ctx }, searchArea, DeliveryModeTypeFilter.Pickup)\n .then(async (stores: OrgUnitLocation[]) => {\n // Constructing a store mapping based on the InventoryId.\n const storeMap = new Map();\n stores.forEach(store => {\n if (store.InventoryLocationId) {\n storeMap.set(store.InventoryLocationId, store);\n }\n });\n\n let locationDeliveryOptions: ChannelDeliveryOption[] | undefined = [];\n\n // If multiple pickup mode is enable then call getchanneldeliveryoption\n if (retailMulitplePickupMFeatureState) {\n const orgUnitChannel = stores.map(store => store.ChannelId);\n locationDeliveryOptions = await _getLocationPickUpDeliveryModes(orgUnitChannel, ctx);\n }\n\n const availabilityPromiseList = stores.map(store => {\n const locationDeliveryOption = locationDeliveryOptions?.find(_channeldeliveryoption => _channeldeliveryoption.ChannelId === store.ChannelId);\n return _getAvailabilityWithHours(store, productInventoryInformation, storeMap, ctx, locationDeliveryOption);\n });\n\n return Promise.all(availabilityPromiseList);\n })\n .catch((error: Error) => {\n ctx.trace('[GetFullAvailableInventoryNearby] error getting Available Inventory Nearby');\n ctx.trace(error.message);\n ctx.telemetry.error(error.message);\n ctx.telemetry.debug('[GetFullAvailableInventoryNearby] error getting Available Inventory Nearby');\n return [];\n });\n })\n .catch((error: Error) => {\n ctx.trace('[GetFullAvailableInventoryNearby][getEstimatedAvailabilityAsync] error getting availability product warehouse information.');\n ctx.trace(error.message);\n ctx.telemetry.error(error.message);\n ctx.telemetry.debug('[GetFullAvailableInventoryNearby][getEstimatedAvailabilityAsync] error getting availability product warehouse information.');\n return [];\n });\n}\n\n/**\n * Action method that obtains the store information along with store hours and product availability.\n * @param orgUnitLocation - The org unit location.\n * @param productInventoryInformation - The product inventory information.\n * @param storeMap - A map that contains store information group by the inventory location id.\n * @param ctx The action context.\n * @param channelDeleiveryOptions - The channel delivery options.\n * @returns IFullOrgUnitAvailability - The full org unit availability.\n */\nasync function _getAvailabilityWithHours(\n orgUnitLocation: OrgUnitLocation,\n productInventoryInformation: IProductInventoryInformation[],\n storeMap: Map,\n ctx: IActionContext, channelDeleiveryOptions: ChannelDeliveryOption | undefined): Promise {\n if (!orgUnitLocation || !orgUnitLocation.OrgUnitNumber) {\n return { OrgUnitAvailability: undefined };\n }\n\n return getStoreHoursAsync({ callerContext: ctx }, orgUnitLocation.OrgUnitNumber)\n .then((hours: StoreHours) => {\n const itemAvailabilities: ItemAvailability[] = [];\n if (productInventoryInformation &&\n storeMap) {\n productInventoryInformation.forEach(element => {\n if (element.InventLocationId && storeMap.has(element.InventLocationId) &&\n element.InventLocationId === orgUnitLocation.InventoryLocationId) {\n itemAvailabilities.push({ AvailableQuantity: element.ProductAvailableQuantity?.AvailableQuantity });\n }\n });\n }\n\n const availability: OrgUnitAvailability = {\n OrgUnitLocation: orgUnitLocation,\n ItemAvailabilities: itemAvailabilities\n };\n\n if (hours && !(hours instanceof Error)) {\n return {\n OrgUnitAvailability: availability,\n StoreHours: hours,\n ProductInventoryInformation: productInventoryInformation,\n OrgUnitPickUpDeliveryModes: channelDeleiveryOptions };\n }\n\n return {\n OrgUnitAvailability: availability,\n ProductInventoryInformation: productInventoryInformation,\n OrgUnitPickUpDeliveryModes: channelDeleiveryOptions };\n })\n .catch((error: Error) => {\n ctx.trace('[GetFullAvailableInventoryNearby] error getting availability with hours');\n ctx.trace(error.message);\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[GetFullAvailableInventoryNearby] error getting availability with hours');\n return { OrgUnitAvailability: {} };\n });\n}\n\n/**\n * Action method that obtains the channel delivery option information.\n * @param channelCollection - The org unit channel Id list.\n * @param ctx - The action context.\n * @returns ChannelDeliveryOption - The channel delivery option collection.\n */\nasync function _getLocationPickUpDeliveryModes(\n channelCollection: (number | undefined)[],\n ctx: IActionContext): Promise {\n if (channelCollection?.length === 0 || channelCollection === undefined) {\n return undefined;\n }\n\n const channelIdList: number[] = [];\n channelCollection?.map(id => {\n if (id !== undefined) {\n return channelIdList.push(id);\n }\n });\n\n // To get all channel pickup delivery mode filterOption should be 4\n return getChannelDeliveryOptionsAsync({ callerContext: ctx }, channelIdList, 4)\n .then((channelDeliveryOptions: ChannelDeliveryOption[]) => {\n\n if (channelDeliveryOptions && !(channelDeliveryOptions instanceof Error)) {\n return channelDeliveryOptions;\n }\n\n return undefined;\n })\n .catch((error: Error) => {\n ctx.trace('[GetFullAvailableInventoryNearby][getChannelDeliveryOptionsAsync] error getting availability with channel delivery options');\n ctx.trace(error.message);\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[GetFullAvailableInventoryNearby] [getChannelDeliveryOptionsAsync] error getting availability with channel delivery options');\n return [];\n });\n}\n\n/**\n * The complete getFullAvailableInventoryNearby data action.\n */\nexport const getFullAvailableInventoryNearbyActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-full-available-inventory-nearby',\n action: >getFullAvailableInventoryNearbyAction,\n input: createGetFullAvailableInventoryNearbyInput\n});\n\nexport default getFullAvailableInventoryNearbyActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { ProductList } from '@msdyn365-commerce/retail-proxy';\n\nimport { QuickOrderTemplateLine } from './quick-order-template-line';\n\n/**\n * Quick Order template class.\n */\nexport class QuickOrderTemplate {\n public productList: ProductList;\n\n public quickOrderTemplateLines: QuickOrderTemplateLine[];\n\n public totalLines: number;\n\n public constructor(productList: ProductList, quickOrderTemplateLines: QuickOrderTemplateLine[], totalLines: number) {\n this.productList = productList;\n this.quickOrderTemplateLines = quickOrderTemplateLines;\n this.totalLines = totalLines;\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext } from '@msdyn365-commerce/core';\n\nimport getProductList, { GetProductListInput } from './get-product-list';\nimport getProductListLines, { GetProductListLinesInput } from './get-product-list-lines';\nimport { QuickOrderTemplate } from './utilities/quick-order-templates';\n\n/**\n * Input class for the GetProductList data action.\n */\nexport class GetFullProductListInput implements IActionInput {\n public productListId: string | undefined;\n\n public constructor(productListId?: string) {\n this.productListId = productListId;\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => 'GetFullProductList';\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'GetFullProductList';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetProductList method.\n * @param inputData - The input data passed to the createInput method.\n * @param productListId - ProductListId.\n * @returns - Input for data action.\n */\nexport const createGetFullProductListInput = (inputData: ICreateActionContext, productListId?: string): GetFullProductListInput => {\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to get full product list. User is not authenticated.');\n }\n\n return new GetFullProductListInput(productListId);\n};\n\n/**\n * The action method for the GetFullProductList data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - Quick Order Template object.\n */\nexport async function getFullProductListAction(input: GetFullProductListInput, context: IActionContext): Promise {\n if (!context.requestContext.user.isAuthenticated) {\n throw new Error('Unable to get full quick order template. User is not authenticated.');\n }\n\n const inputParameters = new GetProductListInput(input.productListId);\n const quickorderTemplate = await getProductList(inputParameters, context)\n .then(productLists => {\n const inputLines = new GetProductListLinesInput(productLists[0].Id);\n // eslint-disable-next-line promise/no-nesting -- existing code.\n return getProductListLines(inputLines, context)\n .then(linesState => {\n return new QuickOrderTemplate(productLists[0], linesState.lines, linesState.totalCount);\n });\n });\n return quickorderTemplate;\n}\n\n/**\n * The GetFullProductList Data Action\n * Returns order templates.\n */\nexport const getFullProductListActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-full-product-list',\n action: getFullProductListAction as IAction,\n input: createGetFullProductListInput\n});\n\nexport default getFullProductListActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { FullProduct, IRefineFullProductSearchOutput } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductRefinerValue, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { refineSearchByCategoryAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\nimport getFullProducts, { FullProductInput, ProductDetailsCriteria } from './get-full-products';\nimport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\nimport { getProductDetailsCriteriaFromActionInput } from './utilities/utils';\n\n/**\n * Refine search for full products input.\n */\nexport class FullProductsRefineSearchByCategoryInput implements IActionInput {\n public readonly categoryId?: number;\n\n public readonly channelId?: number;\n\n public readonly refinementCriteria: ProductRefinerValue[];\n\n public readonly catalogId: number;\n\n public ProductDetailsCriteria?: ProductDetailsCriteria;\n\n public readonly queryResultSettingsProxy: QueryResultSettingsProxy;\n\n constructor(\n queryResultSettingsProxy: QueryResultSettingsProxy,\n categoryId?: number,\n channelId?: number,\n refinementCriteria?: ProductRefinerValue[],\n catalogId?: number,\n criteria?: ProductDetailsCriteria\n\n ) {\n this.queryResultSettingsProxy = queryResultSettingsProxy;\n this.categoryId = categoryId;\n this.channelId = channelId;\n this.refinementCriteria = refinementCriteria || [];\n this.catalogId = catalogId || 0;\n this.ProductDetailsCriteria = criteria;\n }\n\n public getCacheKey = () => 'FullProductsRefineSearchByCategoryInputCache';\n\n public getCacheObjectType = () => 'FullProductsRefineSearchByCategoryInput';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Creates the input required to make the core action calls.\n * @param inputData\n */\nexport const createFullProductsRefineSearchByCategoryInput = (inputData: ICreateActionContext>): IActionInput => {\n const refinementCriteria = inputData.config && inputData.config.refinementCriteria;\n const queryResultSettingsProxy = QueryResultSettingsProxy.fromInputData(inputData);\n if (!Array.isArray(refinementCriteria)) {\n return new FullProductsRefineSearchByCategoryInput(queryResultSettingsProxy);\n }\n\n if (inputData && inputData.requestContext && inputData.requestContext.query && inputData.requestContext.query.categoryId) {\n const categoryId = Number(inputData.requestContext.query.categoryId);\n const channelId = inputData.requestContext.apiSettings.channelId;\n const catalogId = inputData.requestContext.apiSettings.catalogId;\n const productDetailsCriteria = getProductDetailsCriteriaFromActionInput(inputData);\n return new FullProductsRefineSearchByCategoryInput(\n queryResultSettingsProxy,\n categoryId,\n +channelId,\n refinementCriteria,\n catalogId,\n productDetailsCriteria\n );\n }\n\n throw new Error('Please specify categoryId, refinerId, and refinerSourceValue query string in request.');\n};\n\n/**\n * Calls the refine-search-by-category action.\n * Based on search result calls get-full-products to get all the product details.\n * @param input\n * @param ctx\n */\nexport async function getFullProductsByRefineSearchCategoryAction(\n input: FullProductsRefineSearchByCategoryInput,\n ctx: IActionContext\n): Promise {\n if (!input || !input.refinementCriteria) {\n ctx.trace('[getFullProductsByRefineSearchCategoryAction] Invalid input.');\n return {};\n }\n\n const hasSortingColumn = input.queryResultSettingsProxy.QueryResultSettings &&\n input.queryResultSettingsProxy.QueryResultSettings.Sorting &&\n input.queryResultSettingsProxy.QueryResultSettings.Sorting.Columns &&\n input.queryResultSettingsProxy.QueryResultSettings.Sorting.Columns.length > 0;\n if (input.refinementCriteria.length === 0 && !hasSortingColumn) {\n ctx.telemetry.trace('[getFullProductsByRefineSearchCategoryAction] No refiners or sorting specified.');\n return {};\n }\n const { apiSettings } = ctx.requestContext;\n\n let refinementCriteria: ProductRefinerValue[] = [];\n const fullProductInputs = await refineSearchByCategoryAsync(\n { callerContext: ctx, queryResultSettings: input.queryResultSettingsProxy.QueryResultSettings },\n input.channelId || 0,\n input.catalogId,\n input.categoryId || 0,\n input.refinementCriteria\n ).then(searchResults => {\n refinementCriteria = input.refinementCriteria;\n return searchResults.map(\n (product: ProductSearchResult): FullProductInput => {\n return new FullProductInput(product.RecordId, apiSettings, input.ProductDetailsCriteria || new ProductDetailsCriteria());\n }\n );\n });\n\n if (fullProductInputs.length > 0) {\n const productResult = await >getFullProducts(fullProductInputs, ctx);\n return {\n productSearchResult: productResult,\n refinementCriteria\n };\n }\n return {\n productSearchResult: [],\n refinementCriteria\n };\n\n}\n\nexport const getFullProductsByRefineSearchCategoryActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-full-products-by-refine-search-category',\n action: >getFullProductsByRefineSearchCategoryAction,\n input: createFullProductsRefineSearchByCategoryInput,\n isBatched: false\n});\n\nexport default getFullProductsByRefineSearchCategoryActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IRefineFullProductSearchOutput } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\nimport { refineSearchByTextAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\nimport { ProductDetailsCriteria } from './get-full-products';\nimport { parseSearchData } from './utilities/input-data-parser';\nimport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\nimport { getRefinedFullProducts, IRefinableProductsInput } from './utilities/refiner-utils';\nimport { getProductDetailsCriteriaFromActionInput } from './utilities/utils';\n\n/**\n * Input for refining products returned by the search text.\n */\nexport class FullProductsRefineSearchByTextInput implements IActionInput, IRefinableProductsInput {\n public readonly searchText: string;\n\n public readonly channelId?: number;\n\n public readonly refinementCriteria: ProductRefinerValue[];\n\n public readonly itemsPerPage?: number;\n\n public readonly skipCount?: number;\n\n public readonly catalogId: number;\n\n public productDetailsCriteria?: ProductDetailsCriteria;\n\n public readonly queryResultSettingsProxy: QueryResultSettingsProxy;\n\n constructor(\n queryResultSettingsProxy: QueryResultSettingsProxy,\n searchText?: string,\n channelId?: number,\n refinementCriteria?: ProductRefinerValue[],\n catalogId?: number,\n criteria?: ProductDetailsCriteria\n ) {\n this.queryResultSettingsProxy = queryResultSettingsProxy;\n this.searchText = searchText || '';\n this.channelId = channelId;\n this.refinementCriteria = refinementCriteria || [];\n this.catalogId = catalogId || 0;\n this.productDetailsCriteria = criteria;\n }\n\n public getCacheKey = () => 'FullProductsRefineSearchByTextInputCache';\n\n public getCacheObjectType = () => 'FullProductsRefineSearchByTextInput';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Creates the input required to make the core action calls.\n * @param inputData\n */\nexport const createFullProductsRefineSearchByTextInput = (inputData: ICreateActionContext>): IActionInput => {\n const refinementCriteria = inputData.config && inputData.config.refinementCriteria;\n const queryResultSettingsProxy = QueryResultSettingsProxy.fromInputData(inputData);\n if (!Array.isArray(refinementCriteria)) {\n return new FullProductsRefineSearchByTextInput(queryResultSettingsProxy);\n }\n\n const searchInputData = parseSearchData(inputData);\n const catalogId = inputData.requestContext.apiSettings.catalogId;\n const productDetailsCriteria = getProductDetailsCriteriaFromActionInput(inputData);\n\n return new FullProductsRefineSearchByTextInput(\n queryResultSettingsProxy,\n searchInputData.q,\n searchInputData.channelId,\n refinementCriteria,\n catalogId,\n productDetailsCriteria\n );\n};\n\n/**\n * Calls the refine-search-by-text action.\n * Based on search result calls get-full-products to get all the product details.\n * @param input\n * @param ctx\n */\nexport function getFullProductsByRefineSearchTextAction(\n input: FullProductsRefineSearchByTextInput,\n ctx: IActionContext\n): Promise {\n return getRefinedFullProducts(\n input,\n ctx,\n () => {\n return refineSearchByTextAsync(\n { callerContext: ctx, queryResultSettings: input.queryResultSettingsProxy.QueryResultSettings },\n input.channelId || 0,\n input.catalogId,\n input.searchText,\n input.refinementCriteria);\n }\n );\n}\n\nexport const getFullProductsByRefineSearchTextActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-full-products-by-refine-search-text',\n action: >getFullProductsByRefineSearchTextAction,\n input: createFullProductsRefineSearchByTextInput,\n isBatched: false\n});\n\nexport default getFullProductsByRefineSearchTextActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IRefineFullProductSearchOutput } from '@msdyn365-commerce/commerce-entities';\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ProductRefinerValue, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\n\nimport getFullProducts, { FullProductInput, ProductDetailsCriteria } from '../get-full-products';\n\n/**\n * Common refinable products input includes both product detail criteria and refinement criteria.\n */\nexport interface IRefinableProductsInput {\n refinementCriteria: ProductRefinerValue[];\n productDetailsCriteria?: ProductDetailsCriteria;\n}\n\n/**\n * If refinement criteria is set, then gets refined products.\n * @param input Refinable products input.\n * @param ctx Action context.\n * @param getRefinedProducts Callback function to get a promise (e.g. RefineSearchByCategoryAsync, refineSearchByTextAsync)\n * that is executed to get refined products or full set of products.\n */\nexport async function getRefinedFullProducts(\n input: IRefinableProductsInput,\n ctx: IActionContext,\n getRefinedProducts: () => Promise\n): Promise {\n\n if (!input || !input.refinementCriteria) {\n ctx.trace('[getFullProductsByRefineSearchCategoryAction] Invalid input.');\n return {};\n }\n\n if (input.refinementCriteria.length === 0) {\n ctx.trace('[getFullProductsByRefineSearchCategoryAction] No refiners specified.');\n return {};\n }\n const { apiSettings } = ctx.requestContext;\n\n let fullProductInputs: FullProductInput[] = [];\n\n const searchResults = await getRefinedProducts();\n if (!searchResults) {\n ctx.telemetry.error('[getFullProductsByRefineSearchCategoryAction] no searchResults returned');\n } else {\n fullProductInputs = searchResults.map(\n (product: ProductSearchResult): FullProductInput => {\n return new FullProductInput(product.RecordId, apiSettings, input.productDetailsCriteria || new ProductDetailsCriteria());\n }\n );\n }\n\n if (fullProductInputs.length > 0) {\n const productResult = await getFullProducts(fullProductInputs, ctx);\n return {\n productSearchResult: productResult,\n refinementCriteria: input.refinementCriteria\n };\n }\n return {\n productSearchResult: [],\n refinementCriteria: input.refinementCriteria\n };\n\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { versionLt } from '@msdyn365-commerce/core-internal';\nimport { ProjectionDomain } from '@msdyn365-commerce/retail-proxy';\nimport { getActivePricesAsync, getProductRatingsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\nimport getSimpleProducts, { ProductInput } from './get-simple-products';\nimport { buildCacheKey, generateKey, getProductDetailsCriteriaFromActionInput } from './utilities/utils';\n\n/**\n * Full Product Input.\n */\nexport class FullProductInput implements IActionInput {\n public productId: number;\n\n public channelId: number;\n\n public ProductDetailsCriteria: ProductDetailsCriteria;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(productId: number | string, apiSettings: ICommerceApiSettings, criteria: ProductDetailsCriteria) {\n this.productId = typeof productId === 'string' ? Number.parseInt(productId, 10) : productId;\n this.ProductDetailsCriteria = criteria;\n this.apiSettings = apiSettings;\n this.channelId = apiSettings.channelId;\n }\n\n public getCacheKey = () => {\n const { getPrice, getRating } = this.ProductDetailsCriteria;\n return buildCacheKey(generateKey([this.productId, getPrice, getRating]), this.apiSettings);\n };\n\n public getCacheObjectType = () => 'FullProduct';\n\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Class to define criteria to get full product like price, ratings etc.\n */\nexport class ProductDetailsCriteria {\n public getPrice: boolean;\n\n public getRating: boolean;\n\n constructor(getPrice?: boolean, getRating?: boolean) {\n this.getPrice = getPrice || false;\n this.getRating = getRating || false;\n }\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nexport const createInput = (inputData: ICreateActionContext>): IActionInput[] => {\n let productIds = inputData.config && inputData.config.productIds;\n const productDetailsCriteria = getProductDetailsCriteriaFromActionInput(inputData);\n if (typeof productIds === 'string') {\n productIds = productIds.split(',');\n }\n if (Array.isArray(productIds) && productIds.length > 0) {\n return productIds.map((productId: string) => {\n return new FullProductInput(+productId, inputData.requestContext.apiSettings, productDetailsCriteria);\n });\n }\n return [];\n};\n\n/**\n * Calls the Retail API and returns the product based on the passed ProductInput.\n * @param inputs\n * @param ctx\n */\nexport async function getFullProductsAction(inputs: FullProductInput[], ctx: IActionContext): Promise {\n if (!Array.isArray(inputs) || inputs.length === 0) {\n ctx.trace('[getFullProductsAction] Invalid or empty inputs passed.');\n return {};\n }\n\n const { apiSettings } = ctx.requestContext;\n const productInputs = inputs.map(\n (input: FullProductInput): ProductInput => {\n return new ProductInput(input.productId, apiSettings);\n }\n );\n\n return getSimpleProducts(productInputs, ctx)\n .then(result => {\n return result.map(product => {\n return { ProductDetails: product };\n });\n })\n .then((productCollection: FullProduct[]) => {\n const validProductIds = new Set(productCollection.map(input => input.ProductDetails && input.ProductDetails.RecordId));\n\n const ratingsAndPricePromises = [\n _getActivePrices(inputs, validProductIds, productCollection, ctx),\n _getProductRatings(inputs, validProductIds, productCollection, ctx)\n ];\n return Promise.all(ratingsAndPricePromises).then(() => {\n return productCollection;\n });\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('Unable to get Simple products');\n return [];\n });\n}\n\nasync function _getActivePrices(\n inputs: FullProductInput[],\n validProductIds: Set,\n productCollection: FullProduct[],\n ctx: IActionContext\n): Promise {\n const projectDomain: ProjectionDomain = { ChannelId: +ctx.requestContext.apiSettings.channelId, CatalogId: 0 };\n const validInputs = inputs\n .map(input => {\n if (input.ProductDetailsCriteria.getPrice && validProductIds.has(input.productId)) {\n return input.productId;\n }\n })\n .filter(Boolean);\n\n return getActivePricesAsync(\n { callerContext: ctx, queryResultSettings: {} },\n projectDomain,\n validInputs,\n new Date(),\n null,\n [],\n true\n ).then(result => {\n result.forEach(productPrice => {\n const fullProduct: FullProduct | undefined = productCollection.find(x => {\n return x.ProductDetails && x.ProductDetails.RecordId === productPrice.ProductId;\n });\n if (fullProduct) {\n // If RS Verison < 9.16.0 (aka 10.0.6), customer contextual price won't be\n // included so instead just use AdjustedPrice\n if (versionLt(ctx.requestContext.apiSettings.retailServerProxyVersion, '9.16.0')) {\n productPrice.CustomerContextualPrice = productPrice.AdjustedPrice;\n }\n fullProduct.ProductPrice = productPrice;\n }\n });\n })\n .catch((error: Error) => {\n const telemetry = ctx.telemetry;\n telemetry.debug('[getActivePricesAsync] Unable to get active price.');\n telemetry.exception(error);\n });\n}\n\nasync function _getProductRatings(\n inputs: FullProductInput[],\n validProductIds: Set,\n productCollection: FullProduct[],\n ctx: IActionContext\n): Promise {\n const validInputs = inputs\n .map(input => {\n if (input.ProductDetailsCriteria.getRating && validProductIds.has(input.productId)) {\n return input.productId;\n }\n })\n .filter(Boolean);\n\n return getProductRatingsAsync({ callerContext: ctx, queryResultSettings: {} }, validInputs)\n .then(result => {\n result.forEach(productRating => {\n const fullProduct: FullProduct | undefined = productCollection.find(x => {\n return x.ProductDetails && x.ProductDetails.RecordId === productRating.ProductId;\n });\n if (fullProduct) {\n fullProduct.ProductRating = productRating;\n }\n });\n })\n .catch(error => {\n const telemetry = ctx.telemetry;\n telemetry.debug('[getProductRatingsAsync] Unable to get product ratings.');\n telemetry.exception(error);\n });\n}\n\nexport const getFullProductsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-full-products',\n action: >getFullProductsAction,\n input: createInput,\n isBatched: true\n});\n\nexport default getFullProductsActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { CommerceListLine } from '@msdyn365-commerce/retail-proxy';\nimport { getByCustomerAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CommerceListsDataActions.g';\n\nimport { FullProductInput, getFullProducts, getProductDetailsCriteriaFromActionInput } from '.';\n\n/**\n * Input class for getActiveWishlistItems data action.\n */\nexport class ActiveWishlistInput implements IActionInput {\n public getCacheKey = () => 'ActiveWishlistItems';\n\n public getCacheObjectType = () => 'ActiveWishlistItems';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new ActiveWishlistInput();\n};\n\n/**\n * Calls the Retail API and returns a CommerceList object based on the passed GetCartInput.\n * @param input\n * @param ctx\n */\nexport async function getActiveWishlistItems(input: ActiveWishlistInput, ctx: IActionContext): Promise {\n // If no cart ID is provided in input, we need to create a cart object\n if (!input) {\n throw new Error('[getActiveWishlistItems]No valid Input was provided, failing');\n }\n\n if (ctx.requestContext.user.isAuthenticated) {\n const wishlists = await getByCustomerAsync({ callerContext: ctx, queryResultSettings: {} }, null);\n\n if (wishlists && wishlists.length > 0) {\n const productInputs: FullProductInput[] = [];\n if (wishlists[0].CommerceListLines) {\n wishlists[0].CommerceListLines.forEach((commerceListLine: CommerceListLine) => {\n if (commerceListLine.ProductId) {\n productInputs.push(new FullProductInput(commerceListLine.ProductId, ctx.requestContext.apiSettings, getProductDetailsCriteriaFromActionInput(ctx)));\n }\n });\n }\n\n if (productInputs.length > 0) {\n return getFullProducts(productInputs, ctx)\n .then(products => {\n if (products) {\n return products;\n }\n return [];\n\n })\n .catch(error => {\n ctx.trace(error);\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[getActiveWishlistItems]Unable to hydrate cart with product information');\n throw new Error('[getActiveWishlistItems]Unable to hydrate cart with product information');\n });\n }\n ctx.trace('No productIds found for wishlist');\n\n } else {\n ctx.trace('[getActiveWishlistItems]Not able to get wishlists for the customer');\n return [];\n }\n }\n ctx.trace('[getActiveWishlistItems]User token not found for wishlists');\n return [];\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-items-in-wishlist',\n action: >getActiveWishlistItems,\n input: createInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { Image, ISubList, List } from '@msdyn365-commerce-modules/data-types';\n\nimport GetProducts, { ProductInput } from './get-simple-products';\n\n/**\n * List Input action.\n */\nexport class ListInput implements IActionInput {\n public DocumentId: string;\n\n public Title: string;\n\n public Description: string;\n\n public ShortDescription: string;\n\n public BackgroundColor: string;\n\n public ForegroundColor: string;\n\n public Images: Image[];\n\n public Items: (IProductItem[] | ISubList)[];\n\n public ProductItems: IProductItem[];\n\n public ItemsCount: number;\n\n public ItemsPerPage: number;\n\n public SkipCount: number;\n\n constructor(\n documentId: string,\n title: string,\n description: string,\n shortDescription: string,\n backgroundColor: string,\n foregroundColor: string,\n images: Image[],\n items: (IProductItem[] | ISubList)[],\n productItems: IProductItem[],\n itemsCount: number,\n itemsPerPage: number,\n skipCount: number\n ) {\n this.DocumentId = documentId;\n this.Title = title;\n this.Description = description;\n this.ShortDescription = shortDescription;\n this.BackgroundColor = backgroundColor;\n this.ForegroundColor = foregroundColor;\n this.Images = images;\n this.Items = items;\n this.ProductItems = productItems;\n this.ItemsCount = itemsCount;\n this.ItemsPerPage = itemsPerPage;\n this.SkipCount = skipCount;\n }\n\n public shouldCacheOutput = () => true;\n\n public getCacheObjectType = () => 'LIST';\n\n public getCacheKey = () => `${this.DocumentId}-${this.ItemsCount}-${this.ItemsPerPage}-${this.SkipCount}`;\n}\n\nexport interface IProductItem {\n RecordId: string;\n CatalogId: string;\n}\n\n/**\n * List item type enum.\n */\nenum ListItemType {\n list = 'list',\n product = 'product'\n}\n\n/**\n * Calls to getSimpleProducts to get product array by ID's in list.\n * @param input\n * @param ctx\n */\nexport async function getListData(input: ListInput, ctx: IActionContext): Promise {\n ctx.trace(`List Title: ${input.Title}`);\n\n const { apiSettings } = ctx.requestContext;\n\n const sublists: (SimpleProduct | ISubList)[] = [];\n const result: List = {\n Title: input.Title,\n Description: input.Description,\n ShortDescription: input.ShortDescription,\n BackgroundColor: input.BackgroundColor,\n ForegroundColor: input.ForegroundColor,\n Items: sublists,\n ItemsCount: input.ItemsCount\n };\n\n if (input && input.Items && input.Items.length > 0) {\n // Get all products\n let products: SimpleProduct[] = [];\n if (input.ProductItems && input.ProductItems.length > 0) {\n const inputArray = input.ProductItems.map(item => new ProductInput(+item.RecordId, apiSettings));\n products = await GetProducts(inputArray, ctx);\n }\n\n // Build map from recordId to product, which will be used later when build the output.\n const productMap: { [recordId: string]: SimpleProduct } = {};\n products.forEach(item => {\n if (item) {\n productMap[`${item.RecordId}`] = item;\n }\n });\n\n for (const listitem of input.Items) {\n if (isSublist(listitem)) {\n result.Items.push(listitem);\n } else {\n listitem.forEach(item => {\n if (productMap[item.RecordId]) {\n result.Items.push(productMap[item.RecordId]);\n }\n });\n }\n }\n }\n\n return result;\n}\n\n/**\n * Check if an item is sublist.\n * @param listItem\n */\nfunction isSublist(listItem: IProductItem[] | ISubList): listItem is ISubList {\n return (listItem).Images !== undefined;\n}\n\n/**\n * Get images.\n * @param images\n */\nfunction getImages(images: IGeneric[]): Image[] {\n const resultImageList: Image[] = [];\n\n if (!images) {\n return resultImageList;\n }\n\n images.forEach(item => {\n if (item && item.image && item.image.href) {\n // Add image item\n const imageItem: Image = {\n href: item.image.href,\n altText: item.image.altText,\n title: item.image.title,\n width: item.image.width,\n height: item.image.height\n };\n\n resultImageList.push(imageItem);\n }\n });\n\n return resultImageList;\n}\n\n/**\n * Get the url of sub list.\n * @param listName\n * @param sitePath\n */\nfunction getSubListUrl(listName: string, sitePath: string): string {\n if (!listName) {\n return '';\n }\n\n if (!sitePath) {\n return `/${listName}.l`;\n }\n\n // SitePath has a leading '/'\n return `${sitePath}/${listName}.l`;\n}\n\n/**\n * Get input list data.\n * @param inputData\n */\nfunction getInutListData(inputData: ICreateActionContext, IGeneric>): IGeneric {\n let listData =\n !inputData || !inputData.requestContext || !inputData.requestContext.pageData ? null : inputData.requestContext.pageData.list;\n if (\n !inputData ||\n !inputData.requestContext ||\n !inputData.requestContext.pageData ||\n !inputData.requestContext.pageData.list ||\n !inputData.requestContext.pageData.list.content ||\n !inputData.requestContext.pageData.list.content.items ||\n !inputData.requestContext.pageData.list.content.title ||\n !inputData.requestContext.pageData.list._id\n ) {\n if (\n !inputData ||\n !inputData.data ||\n !inputData.data.list ||\n !inputData.data.list.content ||\n !inputData.data.list.content.items ||\n !inputData.data.list.content.title ||\n !inputData.data.list._id\n ) {\n console.error('data is not well defined for list action input');\n throw new Error('data is not well defined for list action input');\n }\n\n listData = inputData.data.list;\n }\n return listData;\n}\n\n/**\n * Get sub list item.\n * @param item\n * @param sitePathOfRequest\n */\nfunction getSubListItem(item: IGeneric, sitePathOfRequest: string): ISubList {\n const imageList: Image[] = getImages(item.fields.content.images);\n\n const sublistHref = getSubListUrl(item.fields._name, sitePathOfRequest);\n return {\n Title: item.fields.content.title,\n Description: item.fields.content.description,\n ShortDescription: item.fields.content.shortDescription,\n BackgroundColor: item.fields.content.backgroundColor,\n ForegroundColor: item.fields.content.foregroundColor,\n Href: sublistHref,\n Images: imageList\n };\n}\n\n/**\n * Get site path.\n * @param inputData\n */\nfunction getSitePath(inputData: ICreateActionContext, IGeneric>): string {\n return inputData && inputData.requestContext && inputData.requestContext.sitePath ? inputData.requestContext.sitePath : '';\n}\n\n/**\n * Get items per page.\n * @param inputData\n */\nfunction getItemsPerPage(inputData: ICreateActionContext, IGeneric>): number {\n if (!inputData || !inputData.config || !inputData.config.itemsPerPage) {\n return 50;\n }\n\n const result = Number(inputData.config.itemsPerPage);\n if (isNaN(result)) {\n return 50;\n }\n\n return result;\n}\n\n/**\n * Get skip count.\n * @param inputData\n */\nfunction getSkipCount(inputData: ICreateActionContext, IGeneric>): number {\n return inputData && inputData.requestContext && inputData.requestContext.query && inputData.requestContext.query.skipCount ? Number(inputData.requestContext.query.skipCount) : 0;\n}\n\n/**\n * Creates the input required to make the list call to get products.\n * @param inputData\n */\nconst createListInput = (inputData: ICreateActionContext, IGeneric>): IActionInput => {\n const listData: IGeneric = getInutListData(inputData);\n const listItems: (IProductItem[] | ISubList)[] = [];\n let productList: IProductItem[] = [];\n\n const parentImageList: Image[] = getImages(listData.content.images);\n\n const itemsPerPage = getItemsPerPage(inputData);\n const skipCount = getSkipCount(inputData);\n\n // This is the list contains all product and will be used to call getSimpleProducts data action.\n const productItems: IProductItem[] = [];\n const sum = skipCount + itemsPerPage;\n for (let index = skipCount; index < listData.content.items.length && index < sum; index++) {\n const item = listData.content.items[index];\n if (item.type === ListItemType.list) {\n if (!item.fields || !item.fields.content || !item.fields.content.title) {\n console.error(`sublist item fields, content or title missing in list ${listData._id}`);\n continue;\n }\n\n // If any elements in product list, then copy it and add to list items\n if (productList.length > 0) {\n const clonedList = [...productList];\n listItems.push(clonedList);\n productList = [];\n }\n\n // Build and add sublist item\n listItems.push(getSubListItem(item, getSitePath(inputData)));\n }\n\n if (item.type === ListItemType.product) {\n if (!item.fields || !item.fields.recordId) {\n console.error(`product item missing recordId in list ${listData._id}`);\n continue;\n }\n\n // Add product item\n const productItem: IProductItem = {\n RecordId: item.fields.recordId,\n CatalogId: item.fields.catalogId || '0'\n };\n\n productList.push(productItem);\n productItems.push(productItem);\n }\n }\n\n // Save the last portion of product items.\n if (productList.length > 0) {\n listItems.push(productList);\n }\n\n return new ListInput(\n listData._id,\n listData.content.title,\n listData.content.description,\n listData.content.shortDescription,\n listData.content.backgroundColor,\n listData.content.foregroundColor,\n parentImageList,\n listItems,\n productItems,\n listData.content.items.length,\n itemsPerPage,\n skipCount\n );\n};\n\nexport const getListDataDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-list',\n action: >getListData,\n input: createListInput\n});\n\nexport default getListDataDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICommerceApiSettings, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { LoyaltyCard } from '@msdyn365-commerce/retail-proxy';\nimport { getCustomerLoyaltyCardsAsync, getLoyaltyCardAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\n\nimport { buildCacheKey } from '.';\n\n/**\n * Input class for the getLoyaltyCard data action.\n */\nexport class GetLoyaltyCardInput implements IActionInput {\n public userAccountNumber?: string;\n\n public apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings, userAccountNumber?: string) {\n this.userAccountNumber = userAccountNumber;\n this.apiSettings = apiSettings;\n\n }\n\n public getCacheKey = () => buildCacheKey(`GetLoyaltyCard-${this.userAccountNumber}`, this.apiSettings);\n\n public getCacheObjectType = () => 'GetLoyaltyCard';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CreateInput method for the getLoyaltyCard method.\n * @param inputData The input data passed to the createInput method.\n */\nexport const createGetLoyaltyCardInput = (inputData: ICreateActionContext): GetLoyaltyCardInput => {\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to create get loyalty card input. User is not authenticated.');\n }\n\n return new GetLoyaltyCardInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the getLoyaltyCard data action.\n * @param input The action input.\n * @param ctx The action context.\n */\nexport async function getLoyaltyAction(input: GetLoyaltyCardInput, ctx: IActionContext): Promise {\n return getCustomerLoyaltyCardsAsync({ callerContext: ctx, queryResultSettings: {} }, input.userAccountNumber || null)\n .then(cards => {\n if (!cards || cards.length === 0) {\n return {};\n }\n\n const firstCard = cards[0];\n\n return getLoyaltyCardAsync({ callerContext: ctx }, firstCard.CardNumber)\n .then(card => {\n card.LoyaltyEnrollmentDate = firstCard.LoyaltyEnrollmentDate;\n card.LoyaltyEnrollmentDateLocal = firstCard.LoyaltyEnrollmentDateLocal;\n return card;\n })\n\n .catch(error => {\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('Unable to get loyalty card');\n throw new Error('Unable to get loyalty card');\n });\n })\n .catch(error => {\n ctx.telemetry.exception(error.message);\n ctx.telemetry.debug('Unable to get customers loyalty card');\n throw new Error('Unable to get customers loyalty card');\n });\n}\n\n/**\n * The getLoyaltyCard data action\n * Returns the loyalty card belonging to the customer.\n */\nexport const getLoyaltyActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-loyalty-card',\n action: >getLoyaltyAction,\n input: <(args: ICreateActionContext) => IActionInput>createGetLoyaltyCardInput\n});\n\nexport default getLoyaltyActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICommerceApiSettings, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelConfiguration, LoyaltyCard, LoyaltyPointRedemptionEstimate } from '@msdyn365-commerce/retail-proxy';\nimport { getMaxLoyaltyPointsToRedeemForTransactionBalanceAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { getOrgUnitConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\n\nimport { buildCacheKey, getLoyalty, GetLoyaltyCardInput } from '.';\n\n/**\n * Input class for the getLoyaltyCard data action.\n */\nexport class GetLoyaltyTransactionEstimationInput implements IActionInput {\n public userAccountNumber?: string;\n\n public apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings, userAccountNumber?: string) {\n this.userAccountNumber = userAccountNumber;\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`GetLoyaltyCardTransactionEstimation-${this.userAccountNumber}`, this.apiSettings);\n\n public getCacheObjectType = () => 'GetLoyaltyCardTransactionEstimation';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CreateInput method for the getLoyaltyCard method.\n * @param inputData The input data passed to the createInput method.\n */\nexport const createGetLoyaltyTransactionEstimationInput = (inputData: ICreateActionContext): GetLoyaltyTransactionEstimationInput => {\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n return new GetLoyaltyTransactionEstimationInput(inputData.requestContext.apiSettings);\n }\n\n return new GetLoyaltyTransactionEstimationInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the getLoyaltyCard data action.\n * @param input The action input.\n * @param ctx The action context.\n */\nexport async function getLoyaltyTransactionEstimationAction(input: GetLoyaltyTransactionEstimationInput, ctx: IActionContext): Promise {\n\n if (!ctx.requestContext.user.isAuthenticated) {\n return {};\n }\n\n const promises: [Promise, Promise, Promise] = [_getCart(ctx), _getLoyalty(input, ctx), _getOrgUnits(ctx)];\n return Promise.all(promises)\n .then((result) => {\n if (result && result.length >= 2 && result[1].CardNumber) {\n return getMaxLoyaltyPointsToRedeemForTransactionBalanceAsync(\n { callerContext: ctx }, result[0].Id, result[1].CardNumber, result[2].Currency || '')\n .then(points => {\n return points;\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('Error getting Loyalty Point Redemption Estimate');\n throw new Error('Error getting Loyalty Point Redemption Estimate');\n });\n }\n return {};\n })\n .catch(error => {\n return {};\n });\n}\n\nasync function _getCart(ctx: IActionContext): Promise {\n const cartState = await getCartState(ctx);\n\n return cartState.cart;\n}\n\nasync function _getLoyalty(input: GetLoyaltyTransactionEstimationInput, ctx: IActionContext): Promise {\n const loyaltyCardInput = new GetLoyaltyCardInput(input.apiSettings);\n return getLoyalty(loyaltyCardInput, ctx);\n}\n\nasync function _getOrgUnits(ctx: IActionContext): Promise {\n return getOrgUnitConfigurationAsync({ callerContext: ctx, queryResultSettings: {} });\n}\n\n/**\n * The getLoyaltyTransactionEstimation data action\n * Returns the loyalty card belonging to the customer.\n */\nexport const getLoyaltyTransactionEstimationActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-loyalty-transaction-estimation',\n action: >getLoyaltyTransactionEstimationAction,\n input: <(args: ICreateActionContext) => IActionInput>createGetLoyaltyTransactionEstimationInput\n});\n\nexport default getLoyaltyTransactionEstimationActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { getMediaLocationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { MediaLocation } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { buildCacheKey, generateImageUrl } from './utilities/utils';\n\n/**\n * Product Input.\n */\nexport class MediaLocationsByIdInput implements IActionInput {\n public productId?: number;\n\n public channelId: number;\n\n public catalogId: number;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings, productId?: number, catalogId?: number) {\n this.productId = productId;\n this.channelId = +apiSettings.channelId;\n this.catalogId = catalogId || 0;\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`MediaLocationID-${this.productId && this.productId.toString()}`, this.apiSettings);\n\n public getCacheObjectType = () => 'MediaLocations';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nexport const createMediaLocationsByIdInput = (inputData: ICreateActionContext>): MediaLocationsByIdInput => {\n const productId = inputData.config && +inputData.config.productId || undefined;\n return new MediaLocationsByIdInput(inputData.requestContext.apiSettings, productId, undefined);\n};\n\n/**\n * Calls the Retail API and returns the product based on the passed MediaLocationsByIdInput.\n * @param input\n * @param ctx\n */\nexport async function getMediaLocationsByIdAction(input: MediaLocationsByIdInput, ctx: IActionContext): Promise {\n if (input.productId) {\n return getMediaLocationsAsync({ callerContext: ctx, queryResultSettings: {} }, input.productId, input.channelId, input.catalogId).then(response => {\n return response.map(\n (mediaLocation: MediaLocation): MediaLocation => {\n mediaLocation.Uri = generateImageUrl(mediaLocation.Uri, ctx.requestContext.apiSettings);\n mediaLocation.AltText = mediaLocation.AltText ? mediaLocation.AltText : '';\n return mediaLocation;\n }\n );\n });\n }\n return [];\n}\n\nexport const getMediaLocationsByIdActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-media-locations-by-id',\n action: >getMediaLocationsByIdAction,\n input: createMediaLocationsByIdInput\n});\n\nexport default getMediaLocationsByIdActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { AsyncResult, MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getMediaLocationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\nimport getSelectedVariant, { SelectedVariantInput } from './get-selected-variant';\nimport { generateImageUrl, getSelectedProductIdFromActionInput } from './utilities';\n\n/**\n * The action input class for the getMediaLocationsForSelectedVariant data action.\n */\nexport class MediaLocationsForSelectedVariantInput implements IActionInput {\n public productId: number;\n\n public channelId: number;\n\n public catalogId: number;\n\n public selectedProduct: SimpleProduct | undefined;\n\n constructor(productId: number, channelId: number, selectedProduct?: SimpleProduct, catalogId?: number) {\n this.productId = productId;\n this.channelId = channelId;\n this.catalogId = catalogId || 0;\n this.selectedProduct = selectedProduct;\n }\n\n public getCacheKey = () => `${this.productId}-${this.channelId}`;\n\n public getCacheObjectType = () => 'MediaLocations';\n\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * The createInput method for the getMediaLocationsForSelectedVariant data action.\n * @param inputData The input data passed to the createInput method.\n */\nexport const createMediaLocationsForSelectedVariantInput = (\n inputData: ICreateActionContext>\n): MediaLocationsForSelectedVariantInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n\n if (productId) {\n return new MediaLocationsForSelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId);\n }\n throw new Error('Unable to create MediaLocationsForSelectedVariantInput, no productId found on module config or query');\n\n};\n\n/**\n * The action method for the getMediaLocationsForSelectedVariant data action.\n * @param input\n * @param ctx\n */\nexport async function getMediaLocationsForSelectedVariantAction(\n input: MediaLocationsForSelectedVariantInput,\n ctx: IActionContext\n): Promise {\n return AsyncResult.resolve()\n .then(() => {\n const activeProduct: SimpleProduct | undefined = input.selectedProduct;\n\n if (!activeProduct) {\n const selectedVariantInput = new SelectedVariantInput(input.productId, input.channelId);\n return getSelectedVariant(selectedVariantInput, ctx);\n }\n\n return activeProduct;\n }).then(productResult => {\n const activeProduct = productResult?.productVariant ?? productResult;\n\n if (activeProduct) {\n return getMediaLocationsAsync({ callerContext: ctx, queryResultSettings: {} }, activeProduct.RecordId, input.channelId, input.catalogId).then(response => {\n return response.map(\n (mediaLocation: MediaLocation): MediaLocation => {\n mediaLocation.Uri = generateImageUrl(mediaLocation.Uri, ctx.requestContext.apiSettings);\n mediaLocation.AltText = mediaLocation.AltText ? mediaLocation.AltText : activeProduct.Name;\n return mediaLocation;\n }\n );\n });\n }\n\n return [];\n })\n .catch(error => {\n ctx.trace(error);\n ctx.telemetry.error(error.message);\n ctx.telemetry.debug('[getMediaLocationsForSelectedVariantAction]Error executing action');\n throw new Error('[getMediaLocationsForSelectedVariantAction]Error executing action');\n });\n}\n\n/**\n * The getMediaLocationsForSelectedVariant data action\n * Gets the currently selected variant for the page via the getSelectedVariant data action,\n * and then gets the media location information for the variant via the MediaLocations RetailServer API.\n */\nexport const getMediaLocationsForSelectedVariantActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-media-locations-for-selected-variant',\n action: >getMediaLocationsForSelectedVariantAction,\n input: createMediaLocationsForSelectedVariantInput\n});\n\nexport default getMediaLocationsForSelectedVariantActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { IDataServiceRequest, retailAction } from '@msdyn365-commerce/retail-proxy/dist';\nimport { createGetOrderShipmentsHistoryInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g';\nimport { OrderShipments } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nconst createInput = (inputData: ICreateActionContext>): IDataServiceRequest => {\n if (\n inputData.requestContext &&\n inputData.requestContext.user &&\n inputData.requestContext.user.isAuthenticated\n ) {\n return createGetOrderShipmentsHistoryInput({\n Paging: {\n Top: 100,\n Skip: 0\n }\n },\n\n // @ts-expect-error\n null);\n }\n\n throw new Error('Unable to create order history input. User is not authenticated.');\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-order-history',\n action: >retailAction,\n input: createInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction } from '@msdyn365-commerce/core';\nimport { retailAction } from '@msdyn365-commerce/retail-proxy/dist';\nimport { createGetOrgUnitConfigurationInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\n/**\n * Get Org Unit Configuration Data Action.\n */\nexport const retailActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-org-unit-configuration',\n action: >retailAction,\n input: () => {\n return createGetOrgUnitConfigurationInput();\n }\n});\n\nexport default retailActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { getCurrentAsync, getUsersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnersDataActions.g';\n\n/**\n * Input class for get customer data action.\n */\nexport class OrganizationUsersCountInput implements IActionInput {\n public getCacheKey = () => 'OrganizationUsersCount';\n\n public getCacheObjectType = () => 'BusinessPartner';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport const createGetOrganizationUsersCountInput = (inputData: ICreateActionContext): IActionInput => {\n const { requestContext } = inputData;\n\n // Check if the user is authenticated.\n if (!requestContext.user.isAuthenticated) {\n throw new Error('User is not logged in.');\n }\n\n return new OrganizationUsersCountInput();\n};\n\nexport async function getOrganizationUsersCount(input: OrganizationUsersCountInput, ctx: IActionContext): Promise {\n return getCurrentAsync({ callerContext: ctx })\n .then(businessPartner => {\n if (!businessPartner) {\n return 0;\n }\n\n return getUsersAsync({ callerContext: ctx }, businessPartner.BusinessPartnerId)\n .then((users) => {\n return users.length;\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n ctx.trace('[get-organization-users-count] Unable to load users');\n throw new Error('[get-organization-users-count] Unable to load users');\n });\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[get-organization-users-count] Unable to get BusinessPartner');\n throw new Error('[get-organization-users-count] Unable to get BusinessPartner');\n });\n}\nexport default createObservableDataAction({\n id: 'get-organization-users-count',\n action: >getOrganizationUsersCount,\n input: createGetOrganizationUsersCountInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICommerceApiSettings, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { BusinessPartnerUser } from '@msdyn365-commerce/retail-proxy';\nimport { getCurrentAsync, getUsersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnersDataActions.g';\n\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Input class for get customer data action.\n */\nexport class OrganizationUsersInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('OrganizationUsers', this.apiSettings);\n\n public getCacheObjectType = () => 'BusinessPartner';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nexport const createGetOrganizationUsersInput = (inputData: ICreateActionContext): IActionInput => {\n const { requestContext } = inputData;\n\n // Check if the user is authenticated.\n if (!requestContext.user.isAuthenticated) {\n throw new Error('User is not logged in.');\n }\n\n return new OrganizationUsersInput(requestContext.apiSettings);\n};\n\nexport async function getOrganizationUsers(input: OrganizationUsersInput, ctx: IActionContext): Promise {\n return getCurrentAsync({ callerContext: ctx })\n .then(businessPartner => {\n return getUsersAsync({ callerContext: ctx }, businessPartner.BusinessPartnerId)\n .then((users) => {\n return users;\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n ctx.trace('[get-organization-users] Unable to load users');\n throw new Error('[get-organization-users] Unable to load users');\n });\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[get-organization-users] Unable to get BusinessPartner');\n throw new Error('[get-organization-users] Unable to get BusinessPartner');\n });\n}\nexport const getOrganizationUsersDataAction = createObservableDataAction({\n id: 'get-organization-users',\n action: >getOrganizationUsers,\n input: createGetOrganizationUsersInput\n});\n\nexport default getOrganizationUsersDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport { convertToString, IQueryResultSettings } from '@msdyn365-commerce/retail-proxy';\nimport { getCurrentAsync, getOrderHistoryAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnersDataActions.g';\nimport { OrderShipments } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\n\n/**\n * Input class for the GetOrganizationWideOrderHistory data action.\n */\nexport class GetOrganizationWideOrderHistoryInput implements IActionInput {\n public queryResultSettings: IQueryResultSettings;\n\n constructor(queryResultSettings: IQueryResultSettings) {\n this.queryResultSettings = queryResultSettings;\n }\n\n public getCacheKey = () => `GetOrganizationWideOrderHistoryInput|${convertToString(this.queryResultSettings)}`;\n\n public getCacheObjectType = () => 'GetOrganizationWideOrderHistoryInput';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CreateInput method for the GetOrganizationWideOrderHistory method.\n * @param {ICreateActionContext} inputData The input data passed to the createInput method.\n */\nexport const getOrganizationWideOrderHistoryInput = (\n inputData: ICreateActionContext): GetOrganizationWideOrderHistoryInput => {\n\n if (!inputData?.requestContext?.user?.isAuthenticated) {\n throw new Error('Unable to get order history. User is not authenticated.');\n }\n\n const queryResultSettings: IQueryResultSettings = QueryResultSettingsProxy.fromInputData(inputData).QueryResultSettings;\n return new GetOrganizationWideOrderHistoryInput(queryResultSettings);\n};\n\n/**\n * The action method for the GetOrganizationWideOrderHistory data action.\n * @param {GetOrganizationWideOrderHistory} input The action input.\n * @param {IActionContext} ctx The action context.\n * @param context\n */\nexport async function getOrganizationWideOrderHistory(input: GetOrganizationWideOrderHistoryInput, context: IActionContext): Promise {\n if (!context?.requestContext?.user?.isAuthenticated) {\n throw new Error('Unable to get order history. User is not authenticated.');\n }\n\n const businessPartner = await getCurrentAsync({ callerContext: context });\n if (!businessPartner) {\n throw new Error('Unable to get order history. Failed to retrieve business partner id.');\n }\n\n return getOrderHistoryAsync({ callerContext: context, queryResultSettings: input.queryResultSettings }, businessPartner.BusinessPartnerId);\n}\n\nexport const getOrganizationWideOrderHistoryDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-organization-wide-order-history',\n action: >getOrganizationWideOrderHistory,\n input: getOrganizationWideOrderHistoryInput\n});\n\nexport default getOrganizationWideOrderHistoryDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { getCartFromCustomer } from '@msdyn365-commerce/global-state';\nimport { ProductPrice, ProductsDataActions, ProductSearchResult, ProjectionDomain } from '@msdyn365-commerce/retail-proxy';\n\nimport { ArrayExtensions } from './utilities';\n\n/**\n * Input class for the GetPriceForProductSearchResult Data Action.\n */\nexport class PriceForProductSearchResultInput implements IActionInput {\n public products: ProductSearchResult[];\n\n public constructor(products: ProductSearchResult[]) {\n this.products = products;\n }\n\n /**\n * Get the cache key.\n * @returns The cache key.\n */\n public getCacheKey = (): string => 'PriceForProductSearchResult';\n\n /**\n * Get the cache object type.\n * @returns The cache object type.\n */\n public getCacheObjectType = (): string => 'ProductSearchResult';\n\n /**\n * Define the data cache type.\n * @returns The cache type.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * The createInput method for the GetPriceForProductSearchResultDataAction.\n * @param products -- The product search result.\n * @returns The input.\n */\nexport const createActivePriceForProductSearchResultInput = (products: ProductSearchResult[]): PriceForProductSearchResultInput => {\n\n return new PriceForProductSearchResultInput(products);\n};\n\n/**\n * The Action Method for the GetPriceForProductSearchResult Data Action\n * Gets the active price for product search result via the getActivePrice RetailServer API.\n * @param input -- The data input.\n * @param context -- The action context.\n * @returns The product search result updated with price.\n */\nexport async function getPriceForProductSearchResultAction(\n input: PriceForProductSearchResultInput,\n context: IActionContext\n): Promise {\n\n let productRecIds: number[];\n if (ArrayExtensions.hasElements(input.products)) {\n productRecIds = input.products.map(product => product.RecordId);\n } else {\n return Promise.resolve([]);\n }\n\n const projectDomain: ProjectionDomain = { ChannelId: +context.requestContext.apiSettings.channelId,\n CatalogId: +context.requestContext.apiSettings.catalogId };\n const cart = await getCartFromCustomer(context);\n const affiliation = cart?.AffiliationLines;\n const priceZero = 0;\n\n try {\n const productPrices: ProductPrice[] = await ProductsDataActions.getActivePricesAsync(\n { callerContext: context, queryResultSettings: {} },\n projectDomain,\n productRecIds,\n new Date(),\n null,\n affiliation,\n true);\n\n const productResults: ProductSearchResult[] = input.products.map(product => {\n const activePrice = productPrices.find(price => price.ProductId === product.RecordId);\n if (activePrice) {\n product.Price = activePrice.CustomerContextualPrice ?? product.Price;\n product.BasePrice = Math.max(activePrice.BasePrice ?? priceZero,\n activePrice.TradeAgreementPrice ?? priceZero,\n activePrice.AdjustedPrice ?? priceZero);\n }\n return product;\n });\n\n return Promise.resolve(productResults);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- existing error type.\n context.telemetry.exception(error);\n context.telemetry.debug('[getPriceForProductSearchResultAction]Error executing action');\n throw new Error('[getPriceForProductSearchResultAction]Error executing action');\n }\n}\n\n/**\n * The getPriceForProductSearchResult data action.\n */\nexport const getPriceForProductSearchResultDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-price-for-product-search-result',\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- existing pattern.\n action: >getPriceForProductSearchResultAction,\n input: createActivePriceForProductSearchResultInput\n});\n\nexport default getPriceForProductSearchResultDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { getCartFromCustomer } from '@msdyn365-commerce/global-state';\nimport { FeatureState } from '@msdyn365-commerce/retail-proxy';\nimport { getActivePricesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport {\n AffiliationLoyaltyTier,\n ProductPrice,\n ProductType,\n ProjectionDomain,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput } from '.';\nimport { FeatureStateInput, getFeatureStateActionDataAction } from './get-feature-state';\nimport { ArrayExtensions } from './utilities';\n\n/**\n * Input class for the GetPriceForSelectedVariant Data Action.\n */\nexport class PriceForSelectedVariantInput implements IActionInput {\n public productId: number;\n\n public channelId: number;\n\n public selectedProduct: SimpleProduct | undefined;\n\n public customerId?: string;\n\n public constructor(productId: number, channelId: number, selectedProduct?: SimpleProduct, customerId?: string) {\n this.productId = productId;\n this.channelId = channelId;\n this.selectedProduct = selectedProduct;\n this.customerId = customerId ?? '';\n }\n\n public getCacheKey = (): string => 'PriceForSelectedVariant';\n\n public getCacheObjectType = (): string => 'Price';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * The createInput method for the GetPriceForSelectedVariantDataAction.\n * @param inputData - The input data for the createInput method.\n * @returns The PriceForSelectedVariantInput.\n */\nexport const createActivePriceForSelectedVariantInput = (inputData: ICreateActionContext>): PriceForSelectedVariantInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n\n if (productId) {\n return new PriceForSelectedVariantInput(\n +productId,\n +inputData.requestContext.apiSettings.channelId,\n undefined);\n }\n throw new Error('Unable to create PriceForSelectedVariantInput, no productId found on module config or query');\n\n};\n\n/**\n * The Action Method for the GetPriceForSelectedVariant Data Action\n * Pulls the currently selected variant from the cache using the getSelectedVariant data action, and gets it's current contextual price\n * via the getActivePrice RetailServer API.\n * @param input - The input.\n * @param ctx - The ctx.\n * @returns The Promise.\n */\nexport async function getPriceForSelectedVariantAction(\n input: PriceForSelectedVariantInput,\n ctx: IActionContext\n): Promise {\n let affliations: AffiliationLoyaltyTier[] | undefined = [];\n if (ctx.requestContext.user.isAuthenticated) {\n const cart = await getCartFromCustomer(ctx);\n affliations = cart?.AffiliationLines;\n }\n return Promise.resolve()\n .then(() => {\n const activeProduct: SimpleProduct | undefined = input.selectedProduct;\n\n if (!activeProduct) {\n const selectedVariantInput = new SelectedVariantInput(input.productId, input.channelId);\n\n return getSelectedVariant(selectedVariantInput, ctx);\n }\n\n return activeProduct;\n })\n .then(async (productResult: SimpleProduct | null) => {\n const projectDomain: ProjectionDomain = {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: +ctx.requestContext.apiSettings.catalogId\n };\n\n const activeProduct: SimpleProduct | undefined = productResult as SimpleProduct | undefined;\n if (activeProduct) {\n const featureStates: FeatureState[] = await getFeatureStateActionDataAction(new FeatureStateInput(), ctx);\n return getActivePricesAsync(\n { callerContext: ctx, queryResultSettings: {} },\n projectDomain,\n [activeProduct.RecordId],\n new Date(),\n input.customerId,\n affliations,\n true,\n featureStates.find(featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature')?.IsEnabled &&\n // eslint-disable-next-line inclusive-language/use-inclusive-words -- Existing property name.\n (activeProduct.ProductTypeValue === ProductType.Master || activeProduct.ProductTypeValue === ProductType.KitMaster)\n ).then((productPrices: ProductPrice[]) => {\n if (!ArrayExtensions.hasElements(productPrices)) {\n throw new Error('[getPriceForSelectedVariantAction]Invalid response recieved from getActivePricesAsync');\n }\n return productPrices[0];\n });\n }\n\n return null;\n })\n .catch((error: Error) => {\n ctx.trace(error.message);\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[getPriceForSelectedVariantAction]Error executing action');\n throw new Error('[getPriceForSelectedVariantAction]Error executing action');\n });\n}\n\nexport const getPriceForSelectedVariantActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-price-for-selected-variant',\n action: getPriceForSelectedVariantAction as IAction,\n input: createActivePriceForSelectedVariantInput\n});\n\nexport default getPriceForSelectedVariantActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductAvailableQuantity, ProductsDataActions, ProductType,\n ProductWarehouseInventoryAvailability, ReleasedProductType } from '@msdyn365-commerce/retail-proxy';\n\nimport getSelectedVariant, { SelectedVariantInput } from './get-selected-variant';\nimport { ArrayExtensions, getSelectedProductIdFromActionInput } from './utilities';\nimport { DeliveryMode, IProductInventoryInformation } from './utilities/product-inventory-information';\nimport { createInventoryAvailabilitySearchCriteria, mapAggregatedProductInventoryInformation } from './utilities/product-inventory-utils';\n\n/**\n * Input class for the getProductAvailabilitiesForSelectedVariant Data Action.\n */\nexport class ProductAvailabilitiesForSelectedVariantInput implements IActionInput {\n public productId: number;\n\n public channelId: number;\n\n public constructor(productId: number | string, channelId: number) {\n this.productId = typeof productId === 'string' ? +productId : productId;\n this.channelId = channelId;\n }\n\n /**\n * GetCacheKey.\n * @returns - Returns string.\n */\n public getCacheKey = (): string => 'ProductAvailabilitiesForSelectedVariant';\n\n /**\n * GetCacheObjectType.\n * @returns - Cache Object Type string.\n */\n public getCacheObjectType = (): string => 'ProductAvailabilities';\n\n /**\n * DataCacheType.\n * @returns - CacheType string.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the getProductAvailabilitiesForSelectedVariant data action.\n * @param inputData - The input data passed to the createInput method.\n * @returns - ProductAvailabilitiesForSelectedVariant or error.\n */\nexport const createProductAvailabilitiesForSelectedVariantInput = (\n inputData: ICreateActionContext>\n): ProductAvailabilitiesForSelectedVariantInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n\n if (productId) {\n return new ProductAvailabilitiesForSelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId);\n }\n throw new Error('Unable to create ProductAvailabilitiesForSelectedVariantInput, no productId found on module config or query');\n\n};\n\n/**\n * The action method for the getProductAvailabilitiesForSelectedVariant data action.\n * @param input - ProductAvailabilitiesForSelectedVariant.\n * @param ctx - Action Context.\n * @returns - Product inventory information.\n */\nexport async function getProductAvailabilitiesForSelectedVariantAction(\n input: ProductAvailabilitiesForSelectedVariantInput,\n ctx: IActionContext\n): Promise {\n const selectedVariantInput = new SelectedVariantInput(input.productId, input.channelId);\n const productInventoryInformation: IProductInventoryInformation[] = [];\n\n try {\n\n const productResult = await getSelectedVariant(selectedVariantInput, ctx);\n\n // Don't get availability if it is service item && enableStockCheck is disbaled.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Reading config.\n if (ctx.requestContext.app.config.enableStockCheck && productResult && productResult.ItemTypeValue !== ReleasedProductType.Service &&\n productResult.ProductTypeValue !== ProductType.Master) {\n const shippingSearchCriteria = createInventoryAvailabilitySearchCriteria(\n ctx,\n [productResult.RecordId],\n true,\n undefined,\n undefined,\n DeliveryMode.shipping);\n const pickupSearchCriteria = createInventoryAvailabilitySearchCriteria(ctx, [input.productId], false, true, undefined, DeliveryMode.pickup);\n const shippingAvailability = await ProductsDataActions.getEstimatedAvailabilityAsync({ callerContext: ctx }, shippingSearchCriteria);\n if (shippingAvailability.ProductWarehouseInventoryAvailabilities) {\n const shippingInventory = mapAggregatedProductInventoryInformation(ctx, shippingAvailability);\n if (ArrayExtensions.hasElements(shippingInventory)) {\n shippingInventory[0].deliveryType = DeliveryMode.shipping;\n productInventoryInformation.push(shippingInventory[0]);\n }\n }\n const pickupAvailability = await ProductsDataActions.getEstimatedAvailabilityAsync({ callerContext: ctx }, pickupSearchCriteria);\n if (pickupAvailability.ProductWarehouseInventoryAvailabilities) {\n const pickupInventory = mapAggregatedProductInventoryInformation(ctx, pickupAvailability);\n if (ArrayExtensions.hasElements(pickupInventory)) {\n pickupInventory[0].deliveryType = DeliveryMode.pickup;\n productInventoryInformation.push(pickupInventory[0]);\n }\n }\n return productInventoryInformation;\n }\n return undefined;\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- cann't assign type to the error variable.\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[getPriceForSelectedVariantAction]Error executing action');\n return undefined;\n }\n}\n\n/**\n * The function that maps a ProductWareHouse object into a ProductAvailabilityQuantity.\n * @param productsWarehouseInventory - Product warehouse inventory.\n * @returns Product Available quantity.\n */\nexport function mergeProductWarehouseToProductAvailabities(productsWarehouseInventory: ProductWarehouseInventoryAvailability[]): ProductAvailableQuantity[] {\n const productAvailable: ProductAvailableQuantity[] = [];\n if (ArrayExtensions.hasElements(productsWarehouseInventory)) {\n for (const product of productsWarehouseInventory) {\n if (product.TotalAvailable !== undefined && product.ProductId !== undefined) {\n productAvailable.push({ ProductId: product.ProductId, AvailableQuantity: product.TotalAvailable });\n }\n }\n }\n return productAvailable;\n}\n\n/**\n * The complete getProductAvailabilitiesForSelectedVariant data action\n * Get the currently selected variant via the getSelectedVariant data action, and\n * then gets the availabilities for the variant via the getProductAvailabilities RetailServer API.\n */\nexport const getProductAvailabilitiesForSelectedVariantActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-product-availabilities-for-selected-variant',\n action: >getProductAvailabilitiesForSelectedVariantAction,\n input: createProductAvailabilitiesForSelectedVariantInput\n});\n\nexport default getProductAvailabilitiesForSelectedVariantActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductDimensionAvailabilitySearchCriteria, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\n\nimport { ArrayExtensions, getSelectedProductIdFromActionInput } from './utilities';\nimport { createInventoryAvailabilitySearchCriteria } from './utilities/product-inventory-utils';\n\n/**\n * Product dimension with availability Input.\n */\nexport class ProductDimensionsWithAvailabilitiesInput implements IActionInput {\n\n public productId: number;\n\n public channelId: number;\n\n public constructor(productId: number, channelId: number) {\n this.productId = productId;\n this.channelId = channelId;\n }\n\n /**\n * Cache key.\n * @returns String.\n */\n public getCacheKey: () => string = () => 'ProductDimensionsWithAvailabilities';\n\n /**\n * Cache object type.\n * @returns String.\n */\n public getCacheObjectType: () => string = () => 'ProductDimensionsWithAvailabilities';\n\n /**\n * Cache type.\n * @returns String.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Create input method for the get-product-dimension-with-availability data action.\n * @param inputData - The input data passed to the createInput method.\n * @returns - The input for the data action.\n */\nexport const createProductDimensionsWithAvailabilitiesInput = (inputData: ICreateActionContext>): ProductDimensionsWithAvailabilitiesInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n\n if (productId) {\n return new ProductDimensionsWithAvailabilitiesInput(+productId, +inputData.requestContext.apiSettings.channelId);\n }\n throw new Error('Unable to create ProductDimensionsWithAvailabilitiesInput, no productId found on module config or query');\n};\n\n/**\n * Action method for the getProductDimensionsWithAvailabilities Data Action.\n * @param input - Input for the data action.\n * @param context - Action context.\n * @returns Product dimensions with availabilities.\n */\nexport async function getProductDimensionsWithAvailabilitiesAction(\n input: ProductDimensionsWithAvailabilitiesInput,\n context: IActionContext\n): Promise {\n const activeProduct = await ProductsDataActions.getByIdAsync({ callerContext: context }, input.productId, input.channelId);\n\n if (!ArrayExtensions.hasElements(activeProduct.Dimensions)) {\n return [];\n }\n\n const promises = activeProduct.Dimensions.map(dimension => {\n const shippingInventoryConfiguration = createInventoryAvailabilitySearchCriteria(context, [], true, undefined, undefined);\n const searchCriteria: ProductDimensionAvailabilitySearchCriteria =\n {\n RequestedDimensionTypeValue: dimension.DimensionTypeValue,\n MatchingDimensionValues: [],\n DefaultWarehouseOnly: shippingInventoryConfiguration.DefaultWarehouseOnly,\n FilterByChannelFulfillmentGroup: shippingInventoryConfiguration.FilterByChannelFulfillmentGroup,\n DeliveryModeTypeFilterValue: shippingInventoryConfiguration.DeliveryModeTypeFilterValue\n };\n\n const dimensionValuesPromise = ProductsDataActions.getDimensionValuesWithEstimatedAvailabilitiesAsync(\n { callerContext: context, queryResultSettings: {} },\n // eslint-disable-next-line inclusive-language/use-inclusive-words -- notation used in commerce\n activeProduct.MasterProductId ? activeProduct.MasterProductId : activeProduct.RecordId,\n searchCriteria\n );\n // eslint-disable-next-line promise/prefer-await-to-then -- Existing pattern to execute promises\n const fullDimensionPromise = dimensionValuesPromise.then(dimensionValues => {\n const fullDimension: IProductDimensionsWithAvailabilitiesFull = {\n ...dimension,\n dimensionValuesWithInventory: dimensionValues\n };\n return fullDimension;\n });\n\n return fullDimensionPromise;\n });\n\n return await Promise.all(promises);\n}\n\n/**\n * The GetProductDimensionsWithAvailabilitiesAction\n * Gets the available product dimensions for the product via the getDimensionValueswithEstimatedAvailibilities RetailServer API.\n */\nexport const getProductDimensionsWithAvailabilities = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-product-dimensions-with-availabilities',\n action: getProductDimensionsWithAvailabilitiesAction as IAction,\n input: createProductDimensionsWithAvailabilitiesInput\n});\n\nexport default getProductDimensionsWithAvailabilities;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport { ProductListLine } from '@msdyn365-commerce/retail-proxy';\n\n/**\n * QuickOrderTemplateLine state information.\n */\nexport class QuickOrderTemplateLine {\n public productListLine: ProductListLine;\n\n public fullProduct?: FullProduct;\n\n public constructor(productListLine: ProductListLine, fullProduct?: FullProduct) {\n this.productListLine = productListLine;\n this.fullProduct = fullProduct;\n }\n}\n\n/**\n * Quick Order template line state.\n */\nexport interface IQuickOrderTemplateLinesState {\n lines: QuickOrderTemplateLine[];\n totalCount: number;\n}\n\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput } from '@msdyn365-commerce/core';\nimport { ProductListsDataActions } from '@msdyn365-commerce/retail-proxy';\n\nimport getFullProducts, { FullProductInput } from './get-full-products';\nimport { ArrayExtensions } from './utilities';\nimport { IQuickOrderTemplateLinesState, QuickOrderTemplateLine } from './utilities/quick-order-template-line';\nimport { getProductDetailsCriteriaFromActionInput } from './utilities/utils';\n\n/**\n * Input class for the GetProductListLines data action.\n *\n */\nexport class GetProductListLinesInput implements IActionInput {\n public productListId: string;\n\n public searchText: string;\n\n public constructor(productListId: string, searchText?: string) {\n this.productListId = productListId;\n this.searchText = searchText ?? '';\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => `GetProductListLines|${this.productListId}|${this.searchText}`;\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'GetProductListLines';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetProductListLines method.\n * @param productListId - ProductList Id.\n * @param searchText - Search Text.\n * @returns - Input data for getproductlistlines.\n */\nexport const createGetProductListLinesInput = (productListId: string, searchText?: string): GetProductListLinesInput => {\n return new GetProductListLinesInput(productListId, searchText);\n};\n\n/**\n * The action method for the GetProductListLines data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - Product list lines.\n */\nexport async function getProductListLinesAction(input: GetProductListLinesInput, context: IActionContext): Promise {\n if (!context.requestContext.user.isAuthenticated) {\n throw new Error('Unable to get full product list lines. User is not authenticated.');\n }\n\n const quickOrderTemplateLinesState: IQuickOrderTemplateLinesState = {\n lines: [],\n totalCount: 0\n };\n\n const promise = ProductListsDataActions.getProductListLinesAsync({\n callerContext: context\n }, input.productListId, input.searchText);\n\n const productListLines = await promise;\n const productInputs: FullProductInput[] = [];\n\n if (ArrayExtensions.hasElements(productListLines)) {\n // eslint-disable-next-line length-extensions-check -- Need to check length.\n quickOrderTemplateLinesState.totalCount = promise.metadata.count ?? quickOrderTemplateLinesState.lines.length;\n productListLines.map((listLine) => {\n if (listLine.ProductId) {\n quickOrderTemplateLinesState.lines.push(new QuickOrderTemplateLine(listLine));\n productInputs.push(new FullProductInput(listLine.ProductId,\n context.requestContext.apiSettings, getProductDetailsCriteriaFromActionInput(context)));\n }\n return productInputs;\n });\n if (ArrayExtensions.hasElements(productInputs)) {\n const fullProductsInfo = await getFullProducts(productInputs, context)\n .then((products: FullProduct[]) => {\n return products;\n })\n .catch((error: Error) => {\n context.trace(error.message);\n context.telemetry.error('[getProductListLinesAction] Unable to retrieve product info.');\n });\n if (fullProductsInfo) {\n quickOrderTemplateLinesState.lines.map(line => {\n const fullProduct = fullProductsInfo.find(product => product.ProductDetails.RecordId === line.productListLine.ProductId);\n if (!fullProduct) {\n context.telemetry.error('[getProductListLinesAction] Unable to find product info for an product list line.');\n return null;\n }\n line.fullProduct = fullProduct;\n return null;\n });\n }\n return quickOrderTemplateLinesState;\n }\n context.trace(quickOrderTemplateLinesState.lines.length.toString());\n return quickOrderTemplateLinesState;\n }\n return quickOrderTemplateLinesState;\n}\n\n/**\n * The GetProductListLines Data Action\n * Returns order templates.\n */\nexport const getProductListLinesActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-product-list-lines',\n action: getProductListLinesAction as IAction,\n input: createGetProductListLinesInput\n});\n\nexport default getProductListLinesActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext } from '@msdyn365-commerce/core';\nimport { ProductList, ProductListsDataActions, ProductListSearchCriteria, ProductListType, QueryResultSettings } from '@msdyn365-commerce/retail-proxy';\n\n/**\n * Input class for the GetProductList data action.\n */\nexport class GetProductListInput implements IActionInput {\n public readonly productListId: string;\n\n public readonly queryResultSettings?: QueryResultSettings;\n\n public constructor(productListId?: string, queryResultSettings?: QueryResultSettings) {\n this.productListId = productListId ? productListId : '';\n this.queryResultSettings = queryResultSettings;\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => 'ProductList';\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'ProductList';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n\n /**\n * Set Cache output.\n * @returns - Flag for cache output.\n */\n public shouldCacheOutput = (): boolean => false;\n}\n\n/**\n * CreateInput method for the GetProductList method.\n * @param inputData - The input data passed to the createInput method.\n * @param productListId - The product list identifier.\n * @param queryResultSettings - The query result setting required for pagination/ordering.\n * @returns - Product List input.\n */\nexport const createGetProductListInput = (inputData: ICreateActionContext,\n productListId?: string, queryResultSettings?: QueryResultSettings): GetProductListInput => {\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to create get product list. User is not authenticated.');\n }\n\n return new GetProductListInput(productListId ? productListId : '', queryResultSettings);\n};\n\n/**\n * The action method for the GetProductList data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - ProductList array.\n */\nexport async function getProductListAction(input: GetProductListInput, context: IActionContext): Promise {\n const productListType = ProductListType.QuickOrder.toString();\n const productListSearchCriteria: ProductListSearchCriteria = {\n ProductListType: productListType\n };\n const productLists = await ProductListsDataActions.searchAsync(\n {\n callerContext: context,\n queryResultSettings: input.queryResultSettings\n },\n productListSearchCriteria\n ).then(result => {\n return result;\n });\n\n return productLists;\n}\n\n/**\n * The GetProductList Data Action\n * Returns product list.\n */\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-product-list',\n action: getProductListAction as IAction,\n input: createGetProductListInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductSearchResult, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { searchByCategoryAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\nimport getCurrentCategory, { CurrentCategoryInput } from './get-current-category';\nimport getProducts, { ProductInput } from './get-simple-products';\nimport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Product by category ID Input action.\n */\nexport class ProductsByCategoryInput implements IActionInput {\n public categoryId?: number;\n\n public categorySlug?: string;\n\n public categoryName?: string;\n\n public catalogId: number;\n\n public currentCategory: CurrentCategoryInput;\n\n public readonly queryResultSettingsProxy: QueryResultSettingsProxy;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(category: CurrentCategoryInput, apiSettings: ICommerceApiSettings, queryResultSettingsProxy: QueryResultSettingsProxy) {\n this.apiSettings = apiSettings;\n this.currentCategory = category;\n this.queryResultSettingsProxy = queryResultSettingsProxy;\n this.catalogId = apiSettings.catalogId;\n this.categoryId = category.categoryId;\n this.categorySlug = category.categorySlug;\n }\n\n public getCacheKey = () => buildCacheKey(`${this.categoryId || this.categorySlug}|${this.catalogId}|${this.queryResultSettingsProxy.cacheKeyHint}`, this.apiSettings);\n\n public getCacheObjectType = () => 'Products-From-Search';\n\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * CreateInput method for the getProductsByCategory data aciton.\n * @param inputData\n */\nexport const createGetProductsByCategoryInput = (inputData: ICreateActionContext>): IActionInput => {\n if (inputData && inputData.requestContext) {\n const currentCategory = new CurrentCategoryInput(inputData.requestContext);\n const queryResultSettingsProxy = QueryResultSettingsProxy.fromInputData(inputData);\n return new ProductsByCategoryInput(\n currentCategory,\n inputData.requestContext.apiSettings,\n queryResultSettingsProxy\n );\n }\n\n throw new Error('Please specify categoryId query string in request.');\n};\n\n/**\n * Action method for the getProductsByCategory data action.\n * @param input\n * @param ctx\n */\nexport async function getProductsByCategoryAction(input: ProductsByCategoryInput, ctx: IActionContext): Promise {\n const { apiSettings } = ctx.requestContext;\n let categoryId = input.currentCategory.categoryId;\n if (input.currentCategory.categorySlug && !categoryId) {\n const category = await getCurrentCategory(input.currentCategory, ctx);\n if (!category) {\n ctx.trace('[getProductsByCategoryAction] Unable to find category');\n return [];\n }\n categoryId = category.RecordId;\n }\n\n const productInputs = await searchByCategoryAsync(\n { callerContext: ctx, queryResultSettings: input.queryResultSettingsProxy.QueryResultSettings },\n +apiSettings.channelId,\n input.catalogId,\n categoryId || 0\n ).then(productSearchResults => {\n return productSearchResults.map(\n (product: ProductSearchResult): ProductInput => {\n return new ProductInput(product.RecordId, apiSettings);\n }\n );\n });\n\n if (productInputs.length > 0) {\n return await getProducts(productInputs, ctx);\n }\n return [];\n\n}\n\n/**\n * The getProductsByCategory data action\n * Retrieves the current category of the request via the getCurrentCategory data action\n * Then calls the searchByCategory RetailServer API to get a list of products associated with\n * the current category, and finally fully hydrates the data for those prodcuts via the\n * getProducts data action, returning a list of SimpleProducts within the current category.\n */\nexport const getProductsByCategoryActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-products-by-category',\n action: >getProductsByCategoryAction,\n input: createGetProductsByCategoryInput\n});\n\nexport default getProductsByCategoryActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { FeatureState } from '@msdyn365-commerce/retail-proxy';\nimport { Cart, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { createGetFeatureStateInput, getCustomer, GetCustomerInput, getFeatureState, getSimpleProducts, ProductInput } from '.';\nimport { ArrayExtensions } from './utilities';\n\n/**\n * Input class for activeCartWithProducts data action.\n */\nexport class ActiveCartProductsInput implements IActionInput {\n public getCacheKey = () => 'ActiveCartProducts';\n\n public getCacheObjectType = () => 'ActiveCartProducts';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new ActiveCartProductsInput();\n};\n\n/**\n * Calls the Retail API and returns a cart object based on the passed GetCartInput.\n * @param input\n * @param ctx\n */\nexport async function getActiveCartProductsAction(input: ActiveCartProductsInput, ctx: IActionContext): Promise {\n // If no cart ID is provided in input, we need to create a cart object\n if (!input) {\n throw new Error('[getActiveCartWithProducts]No valid Input was provided, failing');\n }\n\n const cartState = await getCartState(ctx);\n const cart = cartState.cart;\n\n const isQuantityLimitsFeatureIsOn: boolean = await isOrderQuantityLimitsFeatureEnabled(ctx);\n\n if (isQuantityLimitsFeatureIsOn) {\n return getActiveCartProductsActionWhenQuantityLimitsFeatureIsOn(cart, ctx);\n }\n\n // If there are cart lines, make call to get products\n if (!cartState.hasInvoiceLine && cart && cart.CartLines && cart.CartLines.length > 0) {\n ctx.trace('Getting cart product information...');\n return getSimpleProducts(\n cart.CartLines.map(cartLine => {\n if (cartLine.ProductId) {\n return new ProductInput(cartLine.ProductId, ctx.requestContext.apiSettings);\n }\n return undefined;\n }).filter(Boolean),\n ctx\n )\n .then((products: SimpleProduct[]) => {\n if (products) {\n return products;\n }\n return [];\n\n })\n .catch((error: Error) => {\n ctx.trace(error.toString());\n ctx.telemetry.error(error.message);\n ctx.telemetry.debug('[getActiveCartWithProducts]Unable to hydrate cart with product information');\n throw new Error('[getActiveCartWithProducts]Unable to hydrate cart with product information');\n });\n }\n\n ctx.trace('[getActiveCartWithProducts]No Products Found in cart');\n return [];\n}\n\nexport const getActiveCartProductsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-products-in-active-cart',\n action: >getActiveCartProductsAction,\n input: createInput\n});\nexport default getActiveCartProductsActionDataAction;\n\nasync function getActiveCartProductsActionWhenQuantityLimitsFeatureIsOn(cart: Cart, ctx: IActionContext): Promise {\n const productIdsByWarehouseId: Map = new Map();\n let resultProducts: SimpleProduct[] = [];\n cart.CartLines?.forEach(cartLine => (\n productIdsByWarehouseId.has(cartLine.WarehouseId!) ? (\n productIdsByWarehouseId.get(cartLine.WarehouseId!)?.push(cartLine.ProductId!)\n ) : productIdsByWarehouseId.set(cartLine.WarehouseId!, [cartLine.ProductId!]))\n );\n return Promise.all([...productIdsByWarehouseId].map(([entryWarehouseId, entryProductIds]) => {\n return getSimpleProducts(\n entryProductIds.map(productId => {\n if (productId) {\n return new ProductInput(productId,\n ctx.requestContext.apiSettings,\n undefined,\n entryWarehouseId);\n }\n return undefined;\n }).filter(Boolean),\n ctx\n )\n .then((products: SimpleProduct[]) => {\n if (products) {\n resultProducts = products.reduce((accum, product) => {\n if (product) {\n accum.push(product);\n }\n return accum;\n }, resultProducts);\n }\n });\n })).then(() => resultProducts);\n}\n\nasync function isOrderQuantityLimitsFeatureEnabled(ctx: IActionContext): Promise {\n const defaultOrderQuantityLimitsFeatureConfig = ctx.requestContext.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return Promise.resolve(false);\n }\n\n const featureStates = await getFeatureState(createGetFeatureStateInput(ctx), ctx);\n let isQuantityLimitsFeatureEnabledInHq = false;\n if (ArrayExtensions.hasElements(featureStates)) {\n isQuantityLimitsFeatureEnabledInHq = featureStates\n .find((featureState: FeatureState) => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature')?.IsEnabled || false;\n }\n\n if (!isQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return Promise.resolve(true);\n }\n\n return getCustomer(new GetCustomerInput(ctx.requestContext.apiSettings), ctx)\n .then(customerInfo => {\n return !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\n }).catch((error: Error) => {\n ctx.telemetry.warning(error.message);\n ctx.telemetry.debug('Unable to get customer info');\n return false;\n });\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { getAvailablePromotionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\n\nimport { ActiveCartProductsInput, buildCacheKey, getActiveCartProductsAction } from '.';\n\n/**\n * Input class for promotion options for items in cart.\n */\nexport class PromotionOptionsForCartLineItems implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('ActiveCartLineItemsPromotionOptions', this.apiSettings);\n\n public getCacheObjectType = () => 'ActiveCartLineItemsPromotionOptions';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext>) => {\n return new PromotionOptionsForCartLineItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * Calls the Retail API to get the promotion options for items in the cart.\n * @param input\n * @param ctx\n */\nexport async function getPromotionOptionsForCartLineItems(input: PromotionOptionsForCartLineItems, ctx: IActionContext): Promise {\n // If no input is provided fail out\n if (!input) {\n throw new Error('[getPromotionOptionsForCartLineItems]No valid Input was provided, failing');\n }\n const cartState = await getCartState(ctx);\n if (cartState.hasInvoiceLine) {\n ctx.trace('[getPromotionOptionsForCartLineItems] cart has invoice line');\n return [];\n }\n const cart = cartState.cart;\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx);\n\n if (!cart || !cart.CartLines || !products || products.length === 0) {\n ctx.trace('[getPromotionOptionsForCartLineItems] Not able to get cart OR channelConfiguration or no products in cart');\n return [];\n }\n\n const cartLineIds = cart.CartLines.map(c => c.LineId || '');\n\n return getAvailablePromotionsAsync({ callerContext: ctx, queryResultSettings: {}, bypassCache: 'get' }, cart.Id, cartLineIds || null)\n .then(result => {\n return result;\n }).catch((error: Error) => {\n ctx.trace(error.message);\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[getPromotionOptionsForCartLineItems]Error executing action');\n throw new Error('[getPromotionOptionsForCartLineItems]Error executing action');\n });\n}\n\nexport const getPromotionOptionsForCartLineItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-promotion-options-for-cartlines',\n action: >getPromotionOptionsForCartLineItems,\n input: createInput\n});\n\nexport default getPromotionOptionsForCartLineItemsDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, IActionInput } from '@msdyn365-commerce/core';\n\n/**\n * ReviewsGetRatingsSummary Input Action.\n */\nexport class GetRatingsSummaryInput implements IActionInput {\n /**\n * The Id representing the product to get the ratings for.\n */\n public productId: string;\n\n /**\n * The ID representing the tenant.\n */\n public tenantId: string;\n\n /**\n * The ratings and reviews service endpoint.\n */\n public serviceEndpoint: string;\n\n constructor(\n productId: string,\n tenantId: string,\n serviceEndpoint: string\n ) {\n this.productId = productId;\n this.tenantId = tenantId;\n this.serviceEndpoint = serviceEndpoint;\n }\n\n // RnR does not use RS endpoint, so shouldn't use buildCacheKey\n public getCacheKey = () => `${this.productId}-${this.tenantId}`;\n\n public getCacheObjectType = () => 'RatingsSummary';\n\n public dataCacheType = (): CacheType => 'application';\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { RatingsSummary } from '@msdyn365-commerce/commerce-entities';\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric, sendRequest } from '@msdyn365-commerce/core';\n\nimport { GetRatingsSummaryInput, getSelectedProductIdFromActionInput } from '.';\nimport { getRnrEndpointId, getRnrPartnerId } from './utilities/getRnrKeys';\n\nexport const createInput = (input: ICreateActionContext>): IActionInput => {\n const productId = getSelectedProductIdFromActionInput(input);\n if (productId) {\n return new GetRatingsSummaryInput(productId, getRnrPartnerId(input), getRnrEndpointId(input));\n }\n throw new Error('[GetRatingsSummary] Not all necessary parameters found while creating Input for getRatingsSummaryApi');\n};\n\n/**\n * This function gets the ratings summary.\n * @param input\n * @param ctx\n */\nasync function getRatingsSummary(input: GetRatingsSummaryInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n ctx.trace('[GetRatingsSummary] Failed to get ratings summary for product');\n return {};\n }\n\n const requestUrl = `${input.serviceEndpoint}/v2.0/ratings/product/${input.productId}/summary?` +\n `tenantId=${input.tenantId}`;\n return sendRequest(requestUrl, 'get').then((response) => {\n return response.data;\n }).catch((error) => {\n ctx.trace('[GetRatingsSummary] Failed to get ratings summary for product');\n throw error;\n });\n}\n\nfunction inputIsValid(input: GetRatingsSummaryInput): boolean {\n return input && input.productId.length > 0 && input.tenantId.length > 0;\n}\n\nexport const getRatingsSummaryDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-ratings-summary',\n action: >getRatingsSummary,\n input: createInput\n});\n\nexport default getRatingsSummaryDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductRefiner } from '@msdyn365-commerce/retail-proxy';\nimport { getRefinersByCategoryAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\nimport getCurrentCategory, { CurrentCategoryInput } from './get-current-category';\nimport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\n\n/**\n * Action Input class for the getRefinersByCategory data action.\n */\nexport class RefinersByCategoryInput implements IActionInput {\n public readonly catalogId: number;\n\n public readonly currentCategory: CurrentCategoryInput;\n\n public readonly queryResultSettingsProxy: QueryResultSettingsProxy;\n\n constructor(category: CurrentCategoryInput, queryResultSettingsProxy: QueryResultSettingsProxy, catalogId?: number) {\n this.queryResultSettingsProxy = queryResultSettingsProxy;\n this.catalogId = catalogId || 0;\n this.currentCategory = category;\n }\n\n public getCacheKey = () => `${this.currentCategory.getCacheKey()}|${this.catalogId}|${this.queryResultSettingsProxy.cacheKeyHint}`;\n\n public getCacheObjectType = () => 'ProductRefiner';\n\n public shouldCacheOutput = () => true;\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nexport const createRefinersByCategoryInput = (inputData: ICreateActionContext>): IActionInput => {\n if (inputData && inputData.requestContext) {\n const catalogId = inputData.config ? Number(inputData.config.catalogId) : 0;\n const currentCategory = new CurrentCategoryInput(inputData.requestContext);\n\n return new RefinersByCategoryInput(\n currentCategory,\n QueryResultSettingsProxy.fromInputData(inputData),\n Number.isNaN(catalogId) ? 0 : catalogId\n );\n }\n\n throw new Error('Please specify categoryId query string in request.');\n};\n\n/**\n * Calls the Retail API and returns all refiners by category.\n * @param input\n * @param ctx\n */\nexport async function getRefinersByCategoryAction(input: RefinersByCategoryInput, ctx: IActionContext): Promise {\n let categoryId = input.currentCategory.categoryId;\n if (input.currentCategory.categorySlug && !categoryId) {\n const category = await getCurrentCategory(input.currentCategory, ctx);\n if (!category) {\n ctx.trace('[getRefinersByCategoryAction] Unable to find category');\n return [];\n }\n categoryId = category.RecordId;\n }\n\n return getRefinersByCategoryAsync(\n { callerContext: ctx, queryResultSettings: input.queryResultSettingsProxy.QueryResultSettings },\n input.catalogId,\n categoryId || 0\n );\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-refiners-by-category',\n action: >getRefinersByCategoryAction,\n input: createRefinersByCategoryInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductRefiner } from '@msdyn365-commerce/retail-proxy';\nimport { getRefinersByTextAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\nimport { parseSearchData } from './utilities/input-data-parser';\nimport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Action Input class for the getRefinersByText data action.\n */\nexport class RefinersByTextInput implements IActionInput {\n public readonly catalogId: number;\n\n public readonly searchText: string;\n\n public readonly queryResultSettingsProxy: QueryResultSettingsProxy;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(\n searchText: string,\n catalogId: number,\n queryResultSettingsProxy: QueryResultSettingsProxy,\n apiSettings: ICommerceApiSettings) {\n this.catalogId = catalogId;\n this.searchText = searchText;\n this.queryResultSettingsProxy = queryResultSettingsProxy;\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`${this.searchText}|${this.catalogId}|${this.queryResultSettingsProxy.cacheKeyHint}`, this.apiSettings);\n\n public getCacheObjectType = () => 'ProductRefiner';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nexport const createRefinersByTextInput = (inputData: ICreateActionContext>): IActionInput => {\n const searchInputData = parseSearchData(inputData);\n const catalogId = inputData.config ? Number(inputData.config.catalogId) : 0;\n\n return new RefinersByTextInput(\n searchInputData.q,\n Number.isNaN(catalogId) ? 0 : catalogId,\n QueryResultSettingsProxy.fromInputData(inputData),\n inputData.requestContext.apiSettings\n );\n};\n\n/**\n * Calls the Retail API and returns all refiners by text.\n * @param input\n * @param ctx\n */\nexport async function getRefinersByTextAction(input: RefinersByTextInput, ctx: IActionContext): Promise {\n return getRefinersByTextAsync(\n { callerContext: ctx, queryResultSettings: input.queryResultSettingsProxy.QueryResultSettings },\n input.catalogId,\n input.searchText);\n}\n\nexport const getRefinersByTextActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-refiners-by-text',\n action: >getRefinersByTextAction,\n input: createRefinersByTextInput\n});\n\nexport default getRefinersByTextActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { getRelatedProductsAsync, getRelationTypesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ProductRelationType, ProductSearchResult } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport getFullProducts, { FullProductInput, ProductDetailsCriteria } from './get-full-products';\nimport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\nimport { getProductDetailsCriteriaFromActionInput } from './utilities/utils';\n\n/**\n * GetRelatedProducts Input Action.\n */\nexport class GetRelatedProductsInput implements IActionInput {\n public readonly productId: number;\n\n public readonly catalogId: number;\n\n public readonly relationType: string;\n\n public ProductDetailsCriteria: ProductDetailsCriteria;\n\n public readonly queryResultSettingsProxy: QueryResultSettingsProxy;\n\n constructor(\n productId: number,\n catalogId: number,\n relationType: string,\n queryResultSettingsProxy: QueryResultSettingsProxy,\n criteria: ProductDetailsCriteria\n ) {\n this.productId = productId;\n this.catalogId = catalogId;\n this.relationType = relationType;\n this.queryResultSettingsProxy = queryResultSettingsProxy;\n this.ProductDetailsCriteria = criteria;\n }\n\n public getCacheKey = () => `${this.productId}|${this.catalogId}|${this.relationType.toLowerCase()}|${this.queryResultSettingsProxy.cacheKeyHint}|${\n this.ProductDetailsCriteria.getPrice\n }`;\n\n public getCacheObjectType = () => 'GetRelatedProducts';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Creates the input required to make GetRelatedProducts retail api call.\n * @param inputData\n */\nexport const createGetRelatedProductsInput = (inputData: ICreateActionContext>): IActionInput => {\n if (inputData && inputData.requestContext && inputData.config) {\n const catalogId = inputData.requestContext.apiSettings.catalogId;\n const relationType = inputData.config.relationType;\n\n let productId = inputData.requestContext.urlTokens ? Number(inputData.requestContext.urlTokens.recordId) : 0;\n const productDetailsCriteria = getProductDetailsCriteriaFromActionInput(inputData);\n if (!relationType) {\n throw new Error('Input relation type is invalid.');\n }\n\n // Query string may override the product id from url\n if (inputData.requestContext.query && inputData.requestContext.query.productId) {\n productId = Number(inputData.requestContext.query.productId);\n }\n\n if (Number.isNaN(productId) || productId <= 0) {\n throw new Error('No valid product id available in url or query string.');\n }\n\n if (Number.isNaN(catalogId)) {\n throw new Error('Failed to cast catalog id into a number.');\n }\n\n const queryResultSettingsProxy = QueryResultSettingsProxy.fromInputData(inputData);\n return new GetRelatedProductsInput(productId, catalogId, relationType, queryResultSettingsProxy, productDetailsCriteria);\n }\n\n throw new Error('Invalid input data or request context');\n};\n\nexport function searchProductRelationType(productRelationTypes: ProductRelationType[], _productRelationType: string): number | undefined {\n let foundProductRelationTypeId;\n _productRelationType = _productRelationType.toLowerCase();\n productRelationTypes.forEach((productRelationType: ProductRelationType) => {\n if (productRelationType.Name && productRelationType.Name.toLowerCase() === _productRelationType) {\n return (foundProductRelationTypeId = productRelationType.RecordId);\n }\n });\n\n return foundProductRelationTypeId;\n}\n\nasync function getRelatedProductsAction(input: GetRelatedProductsInput, ctx: IActionContext): Promise {\n const apiSettings = ctx.requestContext.apiSettings;\n const querySettings = input.queryResultSettingsProxy.QueryResultSettings;\n\n const productRelationTypes = await getRelationTypesAsync(\n { callerContext: ctx, queryResultSettings: querySettings },\n input.productId,\n +apiSettings.channelId,\n input.catalogId\n );\n if (!productRelationTypes) {\n ctx.trace(`[getProductRelationType] Unable to get product relation types for product ${input.productId}`);\n return [];\n }\n const productRelationTypeId = searchProductRelationType(productRelationTypes, input.relationType);\n if (!productRelationTypeId) {\n ctx.trace(`[getRelatedProducts] Unable to find relation type ${input.relationType} for product ${input.productId}`);\n return [];\n }\n\n const productInputs = await getRelatedProductsAsync(\n { callerContext: ctx, queryResultSettings: querySettings },\n input.productId,\n +apiSettings.channelId,\n input.catalogId,\n productRelationTypeId\n )\n .then(response => {\n if (response && response.length > 0) {\n return response.map(\n (product: ProductSearchResult): FullProductInput => {\n return new FullProductInput(product.RecordId, apiSettings, input.ProductDetailsCriteria);\n }\n );\n }\n\n ctx.trace('[getRelatedProductsAction] Invalid response from server');\n return [];\n })\n .catch((error: Error) => {\n ctx.trace(error.message);\n ctx.trace(error.stack || '');\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[getRelatedProductsAction] Unable to Fetch Products.');\n ctx.trace('[getRelatedProductsAction] Unable to Fetch Products.');\n return [];\n });\n\n if (productInputs.length > 0) {\n return getFullProducts(productInputs, ctx);\n }\n return [];\n\n}\n\n/**\n * The getRelatedProducts data action\n * Uses a productId URL Token and finds the relation types for said product\n * using the getRelationTypes RetailServer API, and then finds and retusn all products that\n * share that relation type via the getRelatedProducts RetailServer API.\n */\nexport const getRelatedProductsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-related-products',\n action: >getRelatedProductsAction,\n input: createGetRelatedProductsInput\n});\n\nexport default getRelatedProductsActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICommerceApiSettings, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { readAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ScanResultsDataActions.g';\nimport { ProductDimension } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { getDimensionsForSelectedVariant, GetDimensionsForSelectedVariantInput } from '.';\nimport { IScanResultWithProduct } from './utilities/scan-result-with-product';\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Input class to get product from sku number.\n */\nexport class GetScanResultInput implements IActionInput {\n public skuNumber: string;\n\n public channelId: number;\n\n public matchingDimensionValues: ProductDimension[];\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings, sku: string, channelId: number, matchingDimensionValues?: ProductDimension[]) {\n this.skuNumber = sku;\n this.channelId = channelId;\n this.matchingDimensionValues = matchingDimensionValues || [];\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`Product-${this.skuNumber}`, this.apiSettings);\n\n public getCacheObjectType = () => 'ProductSKU';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CreateInput method for the getSelectedVariant data action.\n * @param inputData The input data passed to the createInput method.\n * @param skuuNumber SkuNumber to send ScanResult API.\n * @param skuNumber\n * @param channelId ChannelId required to get dimension for given product.\n * @param matchingDimensionValues\n */\nconst createInput = (inputData: ICreateActionContext, skuNumber: string, channelId: number, matchingDimensionValues?: ProductDimension[]) => {\n return new GetScanResultInput(inputData.requestContext.apiSettings, skuNumber, channelId, matchingDimensionValues);\n};\n\n/**\n * Action method for the product and dimension from scan result and dimension api.\n * @param input The action input class.\n * @param ctx The action context.\n */\nexport async function getScanResult(input: GetScanResultInput, ctx: IActionContext): Promise {\n return readAsync({ callerContext: ctx }, input.skuNumber)\n .then(scanResults => {\n if (scanResults && scanResults.Product) {\n return getDimensionsForSelectedVariant(new GetDimensionsForSelectedVariantInput(\n scanResults.Product.MasterProductId ? scanResults.Product.MasterProductId : scanResults.Product.RecordId, input.channelId, input.matchingDimensionValues), ctx)\n .then(response => {\n if (response && response.length > 0) {\n return { ScanResult: scanResults, Product: scanResults.Product, ProductDimensionFull: response };\n }\n return { ScanResult: scanResults, Product: scanResults.Product };\n })\n .catch((error: Error) => {\n ctx.trace(error.message);\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[getScanResult, getDimensionsForSelectedVariant]Error executing action');\n throw new Error('[getScanResult, getDimensionsForSelectedVariant]Error executing action');\n });\n }\n\n throw new Error('Unable to get result from scan result data action.');\n })\n .catch((error: Error) => {\n ctx.trace(error.message);\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[getScanResult]Error executing action');\n throw new Error('[getScanResult]Error executing action');\n });\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-scan-results',\n action: >getScanResult,\n input: createInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { SortColumn } from '@msdyn365-commerce/retail-proxy';\nimport { getSearchConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\n\nimport { buildCacheKey } from '.';\n\n// TODO: import from commerce entities when available\ninterface SearchConfiguration {\n ProductSortColumns?: SortColumn[];\n}\n\n/**\n * Action Input class for the getSearchConfiguration data action.\n */\nexport class SearchConfigurationInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('SearchConfig', this.apiSettings);\n\n public getCacheObjectType = () => 'SearchConfiguration';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nexport const createSearchConfigurationInput = (inputData: ICreateActionContext>): IActionInput => {\n return new SearchConfigurationInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * Calls the Retail API.\n * @param input\n * @param ctx\n */\nexport async function getSearchConfigurationAction(input: SearchConfigurationInput, ctx: IActionContext): Promise {\n return getSearchConfigurationAsync({ callerContext: ctx });\n}\n\nexport const getSearchConfigurationActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-search-configurations',\n action: >getSearchConfigurationAction,\n input: createSearchConfigurationInput\n});\n\nexport default getSearchConfigurationActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { BypassCache, ProductDimension, ProductDimensionAvailabilitySearchCriteria, ProductsDataActions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\n\nimport { ArrayExtensions } from './utilities';\nimport { createInventoryAvailabilitySearchCriteria } from './utilities/product-inventory-utils';\nimport { generateProductImageUrl, getDimensionValuesFromQuery, getSelectedProductIdFromActionInput } from './utilities/utils';\n\n/**\n * Stores data about the selected product.\n */\nexport interface ISelectedProduct extends SimpleProduct {\n productVariant?: SimpleProduct;\n}\n\n/**\n * Get selected variant action input class.\n */\nexport class SelectedVariantInput implements IActionInput {\n public productId: number;\n\n public channelId: number;\n\n public matchingDimensionValues?: ProductDimension[];\n\n public bypassCache?: BypassCache;\n\n public constructor(productId: number, channelId: number, matchingDimensionValues?: ProductDimension[], bypassCache?: BypassCache) {\n this.productId = productId;\n this.channelId = channelId;\n this.matchingDimensionValues = matchingDimensionValues;\n this.bypassCache = bypassCache;\n }\n\n /**\n * Cache key.\n * @returns String.\n */\n public getCacheKey: () => string = () => 'SelectedVariant';\n\n /**\n * Cache object type.\n * @returns String.\n */\n public getCacheObjectType: () => string = () => 'SimpleProduct';\n\n /**\n * Cache type.\n * @returns String.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the getSelectedVariant data action.\n * @param inputData - The input data passed to the createInput method.\n * @returns The input for the ata action getSelectedVariantNewAction.\n */\nconst createInput = (inputData: ICreateActionContext>): SelectedVariantInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n\n if (productId) {\n return new SelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId);\n }\n throw new Error('Unable to create SelectedVariantInput, no productId found on module config or query');\n\n};\n\n/**\n * Checks if given product has any unmatched dimensions.\n * Modifies product entity to use matched dimension values.\n * @param product - The product to analyze and modify.\n * @param matchingDimensionValues - Matched dimensions.\n * @returns True if has any unmatched dimension, false if all dimensions are specified.\n */\nconst checkIfHasUnmatchedDimensions = (product: SimpleProduct, matchingDimensionValues: ProductDimension[]): boolean => {\n let hasUnmatchedDimension: boolean = false;\n if (product.Dimensions) {\n product.Dimensions = product.Dimensions.map(dimension => {\n return { ...dimension };\n });\n for (const dimension of product.Dimensions) {\n const matchedTargetDimension = matchingDimensionValues.find(\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue);\n\n if (matchedTargetDimension) {\n dimension.DimensionValue = matchedTargetDimension.DimensionValue;\n } else {\n hasUnmatchedDimension = true;\n }\n }\n }\n return hasUnmatchedDimension;\n};\n\n/**\n * Retrieves product dimensions with availabilities.\n * @param product - Product for which the dimensions need to be retrieved.\n * @param matchingDimensionValues - Selected dimensions - filter criteria for the dimensions API.\n * @param context - Action context.\n * @returns Array of dimensions.\n */\nconst getFullDimensions = async (product: SimpleProduct, matchingDimensionValues: ProductDimension[], context: IActionContext) => {\n let fullDimensions: IProductDimensionsWithAvailabilitiesFull[] = [];\n const fullDimensionPromises = (product.Dimensions ?? []).map(dimension => {\n const shippingInventoryConfiguration = createInventoryAvailabilitySearchCriteria(context, [], true, undefined, undefined);\n const searchCriteria: ProductDimensionAvailabilitySearchCriteria =\n {\n RequestedDimensionTypeValue: dimension.DimensionTypeValue,\n MatchingDimensionValues: matchingDimensionValues,\n DefaultWarehouseOnly: shippingInventoryConfiguration.DefaultWarehouseOnly,\n FilterByChannelFulfillmentGroup: shippingInventoryConfiguration.FilterByChannelFulfillmentGroup,\n DeliveryModeTypeFilterValue: shippingInventoryConfiguration.DeliveryModeTypeFilterValue\n };\n const dimensionValuesPromise = ProductsDataActions.getDimensionValuesWithEstimatedAvailabilitiesAsync(\n { callerContext: context, queryResultSettings: {} },\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n searchCriteria\n );\n\n return dimensionValuesPromise.then(dimensionValues => {\n const fullDimension: IProductDimensionsWithAvailabilitiesFull = {\n ...dimension,\n dimensionValuesWithInventory: dimensionValues\n };\n return fullDimension;\n });\n });\n fullDimensions = await Promise.all(fullDimensionPromises);\n return fullDimensions;\n};\n\n/**\n * Retrieves product variant for the given input or undefined if not found.\n * @param input - Action input.\n * @param context - Action context.\n * @param fullDimensions - Product dimensions with availabilities.\n * @returns A product variant that is available or undefined.\n */\nconst getProductVariant = async (\n input: SelectedVariantInput,\n context: IActionContext,\n fullDimensions: IProductDimensionsWithAvailabilitiesFull[]) => {\n\n let productVariant: SimpleProduct | undefined;\n if (ArrayExtensions.hasElements(fullDimensions) &&\n ArrayExtensions.hasElements(fullDimensions[0].dimensionValuesWithInventory) &&\n ArrayExtensions.hasElements(fullDimensions[0].dimensionValuesWithInventory[0].ProductIds)) {\n const variantProductId = fullDimensions[0].dimensionValuesWithInventory[0].ProductIds[0];\n productVariant = await ProductsDataActions.getByIdAsync(\n { callerContext: context, bypassCache: input.bypassCache }, variantProductId, input.channelId);\n productVariant = { ...productVariant };\n const variantImageUrl = generateProductImageUrl(productVariant, context.requestContext.apiSettings);\n\n if (variantImageUrl) {\n productVariant.PrimaryImageUrl = variantImageUrl;\n }\n }\n\n return productVariant;\n};\n\n/**\n * Action method for the getSelectedVariant data action.\n * @param input - The action input class.\n * @param context - The action context.\n * @returns Simple product.\n */\nasync function getSelectedVariantAction(input: SelectedVariantInput, context: IActionContext): Promise {\n const matchingDimensionValues = input.matchingDimensionValues ?? getDimensionValuesFromQuery(context.requestContext.url.requestUrl);\n\n let product = await ProductsDataActions.getByIdAsync(\n { callerContext: context, bypassCache: input.bypassCache }, input.productId, input.channelId);\n\n // Need to dereference this before editing it. Otherwise we might not\n // properly get the mobx events because if things aren't properly observable\n // they won't fire when you set them, and then if you don't deref the value in\n // the cache will match the value when you try to save it, so it won't detect any\n // changes there either\n product = { ...product };\n const hasUnmatchedDimension = checkIfHasUnmatchedDimensions(product, matchingDimensionValues);\n\n const newImageUrl = generateProductImageUrl(product, context.requestContext.apiSettings);\n\n if (newImageUrl) {\n product.PrimaryImageUrl = newImageUrl;\n }\n\n const fullDimensions: IProductDimensionsWithAvailabilitiesFull[] = await getFullDimensions(product, matchingDimensionValues, context);\n\n // Retrieve product variants only if matching dimensions are provided.\n const productVariant: SimpleProduct | undefined = ArrayExtensions.hasElements(matchingDimensionValues) ? await\n getProductVariant(input, context, fullDimensions) : undefined;\n\n // Update dimension value back to the one that comes from API since the URL query might have a different format for the dimension values.\n if (productVariant?.Dimensions && product.Dimensions) {\n for (const dimension of product.Dimensions) {\n const matchedTargetDimensionFromApi = productVariant.Dimensions.find(\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue);\n const matchedTargetDimensionFromSearch = matchingDimensionValues.find(\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue);\n\n if (matchedTargetDimensionFromSearch && matchedTargetDimensionFromApi) {\n dimension.DimensionValue = matchedTargetDimensionFromApi.DimensionValue;\n }\n }\n }\n\n if (!hasUnmatchedDimension && ArrayExtensions.hasElements(matchingDimensionValues) && productVariant) {\n return productVariant;\n }\n\n const selectedProduct: ISelectedProduct = product;\n selectedProduct.productVariant = productVariant;\n return selectedProduct;\n}\n\n/**\n * The complete getSelectedVariant data action.\n */\nexport const getSelectedVariantActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-selected-variant',\n action: getSelectedVariantAction as IAction,\n input: createInput\n});\n\nexport default getSelectedVariantActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IDictionary, IGeneric } from '@msdyn365-commerce/core';\nimport { getByIdsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\nimport { buildCacheKey, generateProductImageUrl } from './utilities/utils';\n\n/**\n * Product Input.\n */\nexport class ProductInput implements IActionInput {\n public productId: number;\n\n public channelId: number;\n\n public warehouseId?: string;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(productId: number | string, apiSettings: ICommerceApiSettings, channelId?: number, warehouseId?: string) {\n this.apiSettings = apiSettings;\n this.productId = +productId;\n this.channelId = channelId || apiSettings.channelId;\n this.warehouseId = warehouseId;\n }\n\n public getCacheKey = () => buildCacheKey(\n `RecordId-${this.productId.toString()}-ChannelId-${this.channelId.toString()}-WahehouseId-${this.warehouseId ?? ''}`,\n this.apiSettings);\n\n public getCacheObjectType = () => 'SimpleProduct';\n\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nexport const createSimpleProductsInput = (inputData: ICreateActionContext>): IActionInput[] => {\n let productIds = inputData.config && inputData.config.productIds;\n if (!productIds) {\n return [];\n }\n\n productIds = typeof productIds === 'string' ? productIds.split(',') : productIds;\n return !Array.isArray(productIds) ? [] : productIds.map((productId: string) => {\n return new ProductInput(productId, inputData.requestContext.apiSettings);\n });\n};\n\n/**\n * Calls the Retail API and returns the product based on the passed ProductInput.\n * @param inputs\n * @param ctx\n */\nexport async function getSimpleProductsAction(inputs: ProductInput[], ctx: IActionContext): Promise {\n if (!Array.isArray(inputs) || inputs.length === 0) {\n ctx.trace('[getSimpleProductsAction] Invalid or empty inputs passed.');\n return [];\n }\n\n const productIdMapping: IDictionary = {};\n const productIds = inputs.map((input, idx) => {\n productIdMapping[input.productId] = idx;\n return input.productId;\n });\n\n return getByIdsAsync(\n { callerContext: ctx, queryResultSettings: QueryResultSettingsProxy.getDefault().QueryResultSettings },\n inputs[0].channelId,\n productIds,\n inputs[0].warehouseId)\n .then(products => {\n const mappedProducts = products\n .map(product => {\n try {\n const newImageUrl = generateProductImageUrl(product, ctx.requestContext.apiSettings);\n\n if (newImageUrl) {\n product.PrimaryImageUrl = newImageUrl;\n }\n\n return product;\n } catch {\n ctx.trace('[getSimpleProductsAction] Unable to update ImageURL for Product');\n }\n })\n .reduce((memo: SimpleProduct[], product: SimpleProduct | undefined) => {\n if (!product) {\n return memo;\n }\n const idx = productIdMapping[product.RecordId];\n memo[idx] = product;\n return memo;\n }, []);\n\n // NOTE: This is not an ideal fix, but will resolve all current issues\n return inputs.map(input => {\n const foundProduct = mappedProducts.find(product => product && product.RecordId === input.productId);\n return foundProduct || {};\n });\n });\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-simple-products',\n action: >getSimpleProductsAction,\n input: createSimpleProductsInput,\n isBatched: true\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ChannelDeliveryOption, FeatureState, OrgUnitAvailability, OrgUnitLocation, SearchArea, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { getChannelDeliveryOptionsAsync, getOrgUnitLocationsByAreaAsync, getStoreHoursAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\n\nimport { FeatureStateInput, getFeatureStateActionDataAction } from './get-feature-state';\nimport { IFullOrgUnitAvailability } from './utilities/full-org-unit-availability';\n\n/**\n * Get selected variant action input class.\n */\nexport class GetOrgUnitLocationsByAreaInput implements IActionInput {\n public Latitude?: number;\n\n public Longitude?: number;\n\n public Radius?: number;\n\n public DistanceUnitValue?: number;\n\n public IgnoreLocation?: boolean;\n\n constructor(_Latitude?: number, _Longitude?: number, _Radius?: number, _DistanceUnitValue?: number, _IgnoreLocation?: boolean) {\n this.Latitude = _Latitude;\n this.Longitude = _Longitude;\n this.Radius = _Radius;\n this.DistanceUnitValue = _DistanceUnitValue;\n this.IgnoreLocation = _IgnoreLocation;\n }\n\n public getCacheKey = () => 'GetOrgUnitLocationsByAreaInput';\n\n public getCacheObjectType = () => 'GetOrgUnitLocationsByAreaInput';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CreateInput method for the getSelectedVariant data action.\n * @param inputData The input data passed to the createInput method.\n */\nexport const createGetOrgUnitLocationsByAreaInput = (inputData: ICreateActionContext>): GetOrgUnitLocationsByAreaInput => {\n return new GetOrgUnitLocationsByAreaInput();\n};\n\n/**\n * Calls the Retail Feature State API and returns a list of feature with isEnabled flag.\n * @param context\n */\nexport async function getFeatureState(context: IActionContext): Promise {\n return getFeatureStateActionDataAction(new FeatureStateInput(), context);\n}\n\n/**\n * Action method for the getSelectedVariant data action.\n * @param input The action input class.\n * @param ctx The action context.\n */\nexport async function getOrgUnitLocationsByArea(\n input: GetOrgUnitLocationsByAreaInput,\n ctx: IActionContext\n): Promise {\n\n if ((input.Radius === undefined || !input.Latitude || !input.Longitude) && !input.IgnoreLocation) {\n // No valid location we want to return empty array so module can show no locations message\n return [];\n }\n\n const searchArea: SearchArea = {\n Latitude: input.Latitude,\n Longitude: input.Longitude,\n Radius: input.Radius,\n DistanceUnitValue: input.DistanceUnitValue || 0 // 0 is miles\n };\n\n const featureState = await getFeatureState(ctx);\n const retailMulitplePickupMFeatureState = featureState?.find(item => item.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature')?.IsEnabled;\n\n return getOrgUnitLocationsByAreaAsync({ callerContext: ctx }, searchArea)\n .then(async (stores: OrgUnitLocation[]) => {\n let locationDeliveryOptions: ChannelDeliveryOption[] | undefined = [];\n\n // If mulitple pickup mode is enable then call getchanneldeliveryoption\n if (retailMulitplePickupMFeatureState) {\n const orgUnitChannel = stores.map(store => store.ChannelId);\n locationDeliveryOptions = await _getLocationPickUpDeliveryModes(orgUnitChannel, ctx);\n }\n const locationPromiseList = stores.map(store => {\n const locationDeliveryOption = locationDeliveryOptions?.find(_channeldeliveryoption => _channeldeliveryoption.ChannelId === store.ChannelId);\n return _getLocationWithHours(store, locationDeliveryOption, ctx);\n });\n return Promise.all(locationPromiseList);\n })\n .catch((error: Error) => {\n ctx.trace('[GetOrgUnitLocationsByArea] error getting Locations');\n ctx.trace(error.message);\n ctx.telemetry.error(error.message);\n ctx.telemetry.debug('[GetOrgUnitLocationsByArea] error getting Locations');\n return [];\n });\n}\n\n/**\n * Action method that obtains the store information.\n * @param orgUnitLocation The org unit location.\n * @param storeMap A map that contains store information group by the inventory location id.\n * @param channelDeleiveryOptions\n * @param ctx The action context.\n */\nasync function _getLocationWithHours(\n orgUnitLocation: OrgUnitLocation, channelDeleiveryOptions: ChannelDeliveryOption | undefined,\n ctx: IActionContext): Promise {\n if (!orgUnitLocation || !orgUnitLocation.OrgUnitNumber) {\n return { OrgUnitAvailability: undefined };\n }\n\n return getStoreHoursAsync({ callerContext: ctx }, orgUnitLocation.OrgUnitNumber)\n .then((hours: StoreHours) => {\n\n const availability: OrgUnitAvailability = {\n OrgUnitLocation: orgUnitLocation\n };\n\n if (hours && !(hours instanceof Error)) {\n return { OrgUnitAvailability: availability, StoreHours: hours, OrgUnitPickUpDeliveryModes: channelDeleiveryOptions };\n }\n\n return { OrgUnitAvailability: availability, OrgUnitPickUpDeliveryModes: channelDeleiveryOptions };\n })\n .catch((error: Error) => {\n ctx.trace('[GetFullAvailableInventoryNearby] error getting availability with hours');\n ctx.trace(error.message);\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[GetFullAvailableInventoryNearby] error getting availability with hours');\n return { OrgUnitAvailability: {} };\n });\n}\n\n/**\n * Action method that obtains the store information.\n * @param channelCollection The org unit channel Id list.\n * @param ctx The action context.\n */\nasync function _getLocationPickUpDeliveryModes(\n channelCollection: (number | undefined)[],\n ctx: IActionContext): Promise {\n if (channelCollection?.length === 0 || channelCollection === undefined) {\n return undefined;\n }\n\n const channelIdList: number[] = [];\n channelCollection?.map(id => {\n if (id !== undefined) {\n return channelIdList.push(id);\n }\n });\n\n // To get all channel pickup delivery mode filterOption should be 4\n return getChannelDeliveryOptionsAsync({ callerContext: ctx }, channelIdList, 4)\n .then((channelDeliveryOptions: ChannelDeliveryOption[]) => {\n\n if (channelDeliveryOptions && !(channelDeliveryOptions instanceof Error)) {\n return channelDeliveryOptions;\n }\n\n return undefined;\n })\n .catch((error: Error) => {\n ctx.trace('[GetFullAvailableInventoryNearby][getChannelDeliveryOptionsAsync] error getting availability with channel delivery options');\n ctx.trace(error.message);\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[GetFullAvailableInventoryNearby] [getChannelDeliveryOptionsAsync] error getting availability with channel delivery options');\n return [];\n });\n}\n\n/**\n * The complete getOrgUnitLocationsByArea data action.\n */\nexport const getOrgUnitLocationsByAreaDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-store-location-information',\n action: >getOrgUnitLocationsByArea,\n input: createGetOrgUnitLocationsByAreaInput\n});\n\nexport default getOrgUnitLocationsByAreaDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { retailAction } from '@msdyn365-commerce/retail-proxy/dist';\nimport { createGetByCustomerInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CommerceListsDataActions.g';\nimport { CommerceList } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { buildQueryResultSettings } from './utilities/utils';\n\nconst createWishlistInput = (inputData: ICreateActionContext) => {\n if (\n inputData.requestContext &&\n inputData.requestContext.user &&\n inputData.requestContext.user.isAuthenticated\n ) {\n return createGetByCustomerInput(buildQueryResultSettings(inputData), null);\n }\n\n throw new Error('[get-wishlist-by-customer-id] Unable to create input for getWishlists');\n};\n\n/**\n * Get Org Unit Configuration Data Action.\n */\nexport const retailActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-wishlist-by-customer-id',\n action: >retailAction,\n input: createWishlistInput\n});\n\nexport default retailActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { InvoiceDetailsSearchCriteria, SalesInvoice, SalesOrdersDataActions } from '@msdyn365-commerce/retail-proxy';\n\n/**\n * Input class for get invoice details data action.\n */\nexport class GetInvoiceDetailsInput implements IActionInput {\n public invoiceId: string;\n\n constructor(invoiceId: string) {\n this.invoiceId = invoiceId;\n }\n\n public getCacheKey = () => `GetInvoiceDetails|${this.invoiceId}`;\n\n public getCacheObjectType = () => 'SalesInvoice';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nexport const CreateGetInvoiceDetailsInput = (inputData: ICreateActionContext): IActionInput => {\n const { requestContext } = inputData;\n\n // Check if the user is authenticated.\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to get invoice details as User is not logged in.');\n }\n if (!inputData?.requestContext?.query?.invoiceId) {\n throw new Error('Unable to get invoice details as no valid invoice id found.');\n }\n\n return new GetInvoiceDetailsInput(inputData.requestContext.query.invoiceId);\n};\n\nexport async function getInvoiceDetails(input: GetInvoiceDetailsInput, context: IActionContext): Promise {\n if (!context?.requestContext?.user?.isAuthenticated) {\n throw new Error('Unable to get details for the invoice. User is not authenticated.');\n }\n\n if (!input.invoiceId) {\n throw new Error('Unable to get invoice details as no valid invoice id found.');\n }\n\n const invoiceId = input.invoiceId;\n\n const searchCriteria: InvoiceDetailsSearchCriteria = {\n InvoiceId: invoiceId\n };\n\n return SalesOrdersDataActions.getInvoiceDetailsAsync({ callerContext: context }, searchCriteria);\n}\n\nexport const getInvoiceDetailsDataAction = createObservableDataAction({\n id: 'get-invoice-details',\n action: >getInvoiceDetails,\n input: CreateGetInvoiceDetailsInput\n});\n\nexport default getInvoiceDetailsDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { InvoicePaidStatus, InvoiceSearchCriteria, InvoiceType, OrderInvoice, SalesOrdersDataActions } from '@msdyn365-commerce/retail-proxy';\n\n/**\n * Input class for get invoice data action.\n */\nexport class GetInvoiceInput implements IActionInput {\n public invoiceId: string;\n\n constructor(invoiceId: string) {\n this.invoiceId = invoiceId;\n }\n\n public getCacheKey = () => `GetInvoice|${this.invoiceId}`;\n\n public getCacheObjectType = () => 'OrderInvoice';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nexport const CreateGetInvoiceInput = (inputData: ICreateActionContext): IActionInput => {\n const { requestContext } = inputData;\n\n // Check if the user is authenticated.\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to get invoice as User is not logged in.');\n }\n if (!inputData?.requestContext?.query?.invoiceId) {\n throw new Error('Unable to get invoice as no valid invoice id found.');\n }\n\n return new GetInvoiceInput(inputData.requestContext.query.invoiceId);\n};\n\nexport async function getInvoice(input: GetInvoiceInput, context: IActionContext): Promise {\n if (!context?.requestContext?.user?.isAuthenticated) {\n throw new Error('Unable to get invoice. User is not authenticated.');\n }\n\n if (!input.invoiceId) {\n throw new Error('Unable to get invoice as no valid invoice id found.');\n }\n\n const invoiceId = input.invoiceId;\n\n const searchCriteria: InvoiceSearchCriteria = {\n InvoiceIds: [invoiceId],\n InvoiceTypeValues: [InvoiceType.SalesOrderInvoice],\n InvoicePaidStatusValues: [InvoicePaidStatus.None]\n };\n\n const invoices = await SalesOrdersDataActions.getInvoicesAsync({ callerContext: context }, searchCriteria);\n if (!invoices || invoices.length !== 1) {\n throw new Error('Unable to get invoice from the server.');\n }\n\n return invoices[0];\n}\n\nexport default createObservableDataAction({\n id: 'get-invoice',\n action: >getInvoice,\n input: CreateGetInvoiceInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { InvoicePaidStatus, InvoiceSearchCriteria, InvoiceType, IQueryResultSettings, OrderInvoice, SalesOrdersDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { getCurrentAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnersDataActions.g';\n\nimport getCustomer, { GetCustomerInput } from '../get-customer';\nimport { QueryResultSettingsProxy } from '../utilities/QueryResultSettingsProxy';\n\nconst getDefaultSearchCriteria = (): InvoiceSearchCriteria => {\n return {\n InvoicePaidStatusValues: [InvoicePaidStatus.None]\n };\n};\n\n/**\n * Input class for get invoice data action.\n */\nexport class GetInvoicesInput implements IActionInput {\n public readonly searchCriteria: InvoiceSearchCriteria;\n\n public readonly queryResultSettings: IQueryResultSettings;\n\n constructor(searchCriteria: InvoiceSearchCriteria, queryResultSettings: IQueryResultSettings) {\n this.searchCriteria = searchCriteria;\n this.queryResultSettings = queryResultSettings;\n }\n\n public getCacheKey = () => 'BusinessPartnerInvoices';\n\n public getCacheObjectType = () => 'OrderInvoice';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport const CreateGetInvoicesInput = (inputData: ICreateActionContext): IActionInput => {\n const { requestContext } = inputData;\n\n // Check if the user is authenticated.\n if (!requestContext.user.isAuthenticated) {\n throw new Error('User is not logged in.');\n }\n\n const queryResultSettings: IQueryResultSettings = QueryResultSettingsProxy.fromInputData(inputData).QueryResultSettings;\n\n return new GetInvoicesInput(getDefaultSearchCriteria(), queryResultSettings);\n};\n\nexport async function getInvoices(input: GetInvoicesInput, context: IActionContext): Promise {\n if (!context?.requestContext?.user?.isAuthenticated) {\n throw new Error('Unable to get list of invoices. User is not authenticated.');\n }\n\n input.searchCriteria.InvoiceTypeValues = [InvoiceType.SalesOrderInvoice];\n\n const businessPartner = await getCurrentAsync({ callerContext: context });\n input.searchCriteria.BusinessPartnerId = businessPartner.BusinessPartnerId;\n\n const customer = await getCustomer(new GetCustomerInput(context.requestContext.apiSettings), context);\n input.searchCriteria.CustomerId = customer.AccountNumber;\n\n return SalesOrdersDataActions.getInvoicesAsync(\n { callerContext: context, queryResultSettings: input.queryResultSettings },\n input.searchCriteria);\n}\n\nexport const getInvoicesDataAction = createObservableDataAction({\n id: 'get-invoices',\n action: >getInvoices,\n input: CreateGetInvoicesInput\n});\n\nexport default getInvoicesDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICommerceApiSettings, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\nimport { LoyaltyCard } from '@msdyn365-commerce/retail-proxy';\nimport { issueLoyaltyCardAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\n\nimport { buildCacheKey } from '.';\nimport { getLoyaltyAction, GetLoyaltyCardInput } from './get-loyalty-card';\n\n/**\n * Input class for the issueLoyalty data action.\n */\nexport class IssueLoyaltyInput implements IActionInput {\n public userAccountNumber?: string;\n\n public apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings, userAccountNumber?: string) {\n this.userAccountNumber = userAccountNumber;\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`IssueLoyalty-${this.userAccountNumber}`, this.apiSettings);\n\n public getCacheObjectType = () => 'GetIssueLoyalty';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CreateInput method for the issueLoyalty method.\n * @param inputData The input data passed to the createInput method.\n */\nexport const createIssueLoyaltyInput = (inputData: ICreateActionContext): IActionInput => {\n const { requestContext } = inputData;\n\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to create issue loyalty input. User is not authenticated.');\n }\n\n return new IssueLoyaltyInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the issueLoyalty data action.\n * @param input The action input.\n * @param ctx The action context.\n */\nexport async function issueLoyaltyAction(input: IssueLoyaltyInput, ctx: IActionContext): Promise {\n const promises: [Promise, Promise] = [getCartState(ctx), _getLoyalty(input, ctx)];\n return Promise.all(promises)\n .then((result) => {\n const cartState = result[0];\n const card = result[1];\n if (card && card.CardNumber) {\n updateCart(cartState, card);\n return card;\n }\n\n // @ts-expect-error\n // TO-DO: Remove after SDK bug fix https://msdyneng.visualstudio.com/FinOps/_workitems/edit/473891\n return issueLoyaltyCardAsync({ callerContext: ctx }, { CustomerAccount: input.userAccountNumber || null })\n .then((issuedCard: LoyaltyCard) => {\n updateCart(cartState, issuedCard);\n return issuedCard;\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('Issuing loyalty card failed');\n throw new Error('Issuing loyalty card failed');\n });\n })\n .catch((error: Error) => {\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('Unable to issue loyalty card');\n throw new Error('Unable to issue loyalty card');\n });\n}\n\nasync function _getLoyalty(input: IssueLoyaltyInput, ctx: IActionContext): Promise {\n const loyaltyCardInput = new GetLoyaltyCardInput(input.apiSettings);\n return getLoyaltyAction(loyaltyCardInput, ctx);\n}\n\nfunction updateCart(cartState: ICartState, card: LoyaltyCard): void {\n cartState.updateLoyaltyCardId({ loyaltyCardNumber: card.CardNumber });\n}\n\n/**\n * The getLoyaltyCard data action\n * Returns the loyalty card belonging to the customer.\n */\nexport const issueLoyaltyActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/issue-loyalty',\n action: >issueLoyaltyAction,\n input: <(args: ICreateActionContext) => IActionInput>createIssueLoyaltyInput\n});\n\nexport default issueLoyaltyActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext } from '@msdyn365-commerce/core';\nimport { addProductListLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { ProductListLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\n/**\n * Input class for the AddItemToOrderTemplate data action.\n */\nexport class AddItemToOrderTemplateInput implements IActionInput {\n public readonly orderTemplateId: string;\n\n public readonly productId: number;\n\n public readonly quantity: number;\n\n public readonly unitOfMeasure: string;\n\n constructor(orderTemplateId: string, productId: number, quantity: number, unitOfMeasure: string) {\n this.orderTemplateId = orderTemplateId;\n this.productId = productId;\n this.quantity = quantity;\n this.unitOfMeasure = unitOfMeasure || 'ea';\n }\n\n public getCacheKey = () => 'AddItemToOrderTemplateInput';\n\n public getCacheObjectType = () => 'AddItemToOrderTemplateInput';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the AddItemToOrderTemplate method.\n * @param {ICreateActionContext} inputData The input data passed to the createInput method.\n * @param {string} orderTemplateId The id of order template to update.\n * @param {number} productId The id of a product to add.\n * @param {number} quantity How many items of this product to add.\n * @param unitOfMeasure\n */\nexport const addItemToOrderTemplateInput = (\n inputData: ICreateActionContext, orderTemplateId: string, productId: number, quantity: number, unitOfMeasure: string): AddItemToOrderTemplateInput => {\n\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to create order template. User is not authenticated.');\n }\n return new AddItemToOrderTemplateInput(orderTemplateId, productId, quantity, unitOfMeasure);\n};\n\n/**\n * The action method for the AddItemToOrderTemplate data action.\n * @param {AddItemToOrderTemplateInput} input The action input.\n * @param {IActionContext} ctx The action context.\n */\nexport async function addItemToOrderTemplateAction(input: AddItemToOrderTemplateInput, ctx: IActionContext): Promise {\n try {\n const productListLineToAdd: ProductListLine = {\n ProductListId: input.orderTemplateId,\n ProductId: input.productId,\n Quantity: input.quantity,\n UnitOfMeasure: input.unitOfMeasure\n };\n\n const productListLine: ProductListLine[] = await addProductListLinesAsync({\n callerContext: ctx\n }, input.orderTemplateId, [productListLineToAdd]);\n\n if (productListLine && productListLine.length === 1 && productListLine[0] && productListLine[0].ProductListId) {\n return productListLine[0];\n }\n ctx.telemetry.error('Product list line was not returned when adding it to order template');\n throw new Error('Product list line was not returned when adding it to order template');\n\n } catch (error) {\n ctx.telemetry.error('Not able to add an item to order template', error);\n throw error;\n }\n}\n\n/**\n * The AddItemToOrderTemplate Data Action.\n * Returns product list line that was added to the order template.\n */\nexport const addItemToOrderTemplateActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/add-item-to-order-template',\n action: >addItemToOrderTemplateAction,\n input: addItemToOrderTemplateInput\n});\n\nexport default addItemToOrderTemplateActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { CartLine, QueryResultSettings } from '@msdyn365-commerce/retail-proxy';\nimport { addCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\n\nimport { getPaginatedOrderTemplateLinesAction, GetPaginatedOrderTemplateLinesInput } from './get-paginated-order-template-lines';\n\n/**\n * Input class for the AddOrderTemplateToCart data action.\n */\nexport class AddOrderTemplateToCartInput implements IActionInput {\n public readonly orderTemplateId: string;\n\n constructor(orderTemplateId: string) {\n this.orderTemplateId = orderTemplateId;\n }\n\n public getCacheKey = () => 'AddOrderTemplateToCartInput';\n\n public getCacheObjectType = () => 'AddOrderTemplateToCartInput';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the AddOrderTemplateToCart method.\n * @param {ICreateActionContext} inputData The input data passed to the createInput method.\n * @param {string} orderTemplateId The id of template.\n */\nexport const addOrderTemplateToCartInput = (inputData: ICreateActionContext, orderTemplateId: string): AddOrderTemplateToCartInput => {\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to create order template. User is not authenticated.');\n }\n return new AddOrderTemplateToCartInput(orderTemplateId);\n};\n\n/**\n * The action method for the AddOrderTemplateToCart data action.\n * @param {AddOrderTemplateToCartInput} input The action input.\n * @param {IActionContext} ctx The action context.\n * @param context\n */\nexport async function addOrderTemplateToCartAction(input: AddOrderTemplateToCartInput, context: IActionContext): Promise {\n const cartState = await getCartState(context);\n const chunkCount = 1000;\n const queryResultSettings: QueryResultSettings = {\n Paging: {\n Top: chunkCount,\n Skip: 0\n }\n };\n const getPaginatedOrderTemplateLinesInput = new GetPaginatedOrderTemplateLinesInput(input.orderTemplateId, queryResultSettings);\n let orderTemplateLines = await getPaginatedOrderTemplateLinesAction(getPaginatedOrderTemplateLinesInput, context);\n let addedCartLines: CartLine[] = [];\n for (let skip = chunkCount; orderTemplateLines.lines.length > 0; skip += chunkCount) {\n const cartLines: CartLine[] = orderTemplateLines.lines.map(productLine => {\n const cartLine: CartLine = {\n ItemId: productLine.fullProduct?.ProductDetails.ItemId,\n ProductId: productLine.productListLine.ProductId,\n Quantity: productLine.productListLine.Quantity,\n TrackingId: '',\n UnitOfMeasureSymbol: productLine.productListLine.UnitOfMeasure\n };\n return cartLine;\n });\n await addCartLinesAsync({ callerContext: context }, cartState.cart.Id, cartLines, cartState.cart.Version).catch(error => {\n context.telemetry.trace(error);\n context.telemetry.trace('Unable to add order template to cart.');\n throw error;\n });\n addedCartLines = addedCartLines.concat(cartLines);\n getPaginatedOrderTemplateLinesInput.queryResultSettings.Paging!.Skip = skip;\n orderTemplateLines = await getPaginatedOrderTemplateLinesAction(getPaginatedOrderTemplateLinesInput, context);\n }\n await cartState.refreshCart({});\n return addedCartLines;\n}\n\n/**\n * The AddOrderTemplateToCart Data Action.\n * Returns created order template.\n */\nexport const addOrderTemplateToCartActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/add-order-template-to-cart',\n action: >addOrderTemplateToCartAction,\n input: addOrderTemplateToCartInput\n});\nexport default addOrderTemplateToCartActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport { ProductList, ProductListType } from '@msdyn365-commerce/retail-proxy';\nimport { createProductListAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\n\n/**\n * Input class for the CreateOrderTemplate data action.\n */\nexport class CreateOrderTemplateInput implements IActionInput {\n public readonly templateName: string;\n\n constructor(templateName: string) {\n this.templateName = templateName;\n }\n\n public getCacheKey = () => 'CreateOrderTemplateInput';\n\n public getCacheObjectType = () => 'CreateOrderTemplateInput';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the CreateOrderTemplate method.\n * @param {ICreateActionContext} inputData The input data passed to the createInput method.\n * @param {string} templateName The name of template.\n */\nexport const createOrderTemplateInput = (inputData: ICreateActionContext, templateName: string): CreateOrderTemplateInput => {\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to create order template. User is not authenticated.');\n }\n return new CreateOrderTemplateInput(templateName);\n};\n\n/**\n * The action method for the CreateOrderTemplate data action.\n * @param {CreateOrderTemplateInput} input The action input.\n * @param {IActionContext} ctx The action context.\n */\nexport async function createOrderTemplateAction(input: CreateOrderTemplateInput, ctx: IActionContext): Promise {\n try {\n const orderTemplate: ProductList = {\n Id: '',\n Name: input.templateName,\n ProductListTypeValue: ProductListType.OrderTemplate\n };\n const createdProductList = await createProductListAsync({\n callerContext: ctx\n }, orderTemplate);\n if (createdProductList && createdProductList.Id !== '') {\n return createdProductList;\n }\n ctx.telemetry.error('Created product list was null');\n throw new Error('Created product list was null');\n\n } catch (error) {\n ctx.telemetry.error('Not able to create order template', error);\n throw error;\n }\n}\n\n/**\n * The CreateOrderTemplate Data Action.\n * Returns created order template.\n */\nexport const createOrderTemplateActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/create-order-template',\n action: >createOrderTemplateAction,\n input: createOrderTemplateInput\n});\n\nexport default createOrderTemplateActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext } from '@msdyn365-commerce/core';\nimport { IQueryResultSettings } from '@msdyn365-commerce/retail-proxy';\nimport { ProductList } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { getOrderTemplates, GetOrderTemplatesInput, getPaginatedOrderTemplateLinesAction, GetPaginatedOrderTemplateLinesInput, QueryResultSettingsProxy } from '..';\nimport { OrderTemplate } from '../utilities/order-templates';\n\n/**\n * Input class for the GetOrderTemplates data action.\n */\nexport class GetFullOrderTemplateInput implements IActionInput {\n public orderTemplateId: string;\n\n public queryResultSettings: IQueryResultSettings;\n\n constructor(orderTemplateId: string, queryResultSettings: IQueryResultSettings) {\n this.orderTemplateId = orderTemplateId;\n this.queryResultSettings = queryResultSettings;\n }\n\n public getCacheKey = () => `GetFullOrderTemplate|${this.orderTemplateId}`;\n\n public getCacheObjectType = () => 'GetFullOrderTemplate';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetOrderTemplate method.\n * @param inputData The input data passed to the createInput method.\n * @param orderTemplateId\n */\nexport const createGetFullOrderTemplateInput = (inputData: ICreateActionContext, orderTemplateId: string): GetFullOrderTemplateInput => {\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to get full order templates. User is not authenticated.');\n }\n const queryResultSettings: IQueryResultSettings = QueryResultSettingsProxy.fromInputData(inputData).QueryResultSettings;\n queryResultSettings.count = true;\n\n return new GetFullOrderTemplateInput(orderTemplateId, queryResultSettings);\n};\n\n/**\n * The action method for the GetFullOrderTemplate data action.\n * @param input The action input.\n * @param ctx The action context.\n */\nexport async function getFullOrderTemplateAction(input: GetFullOrderTemplateInput, ctx: IActionContext): Promise {\n if (!ctx.requestContext.user.isAuthenticated) {\n throw new Error('Unable to get full order template. User is not authenticated.');\n }\n\n const inputParams = new GetOrderTemplatesInput(input.orderTemplateId);\n const productLists: ProductList[] = await getOrderTemplates(inputParams, ctx);\n\n if (!productLists || productLists.length !== 1) {\n throw new Error('Unable to get full order template. Order template was not found.');\n }\n\n const inputLines = new GetPaginatedOrderTemplateLinesInput(productLists[0].Id, input.queryResultSettings);\n const linesState = await getPaginatedOrderTemplateLinesAction(inputLines, ctx);\n return new OrderTemplate(productLists[0], linesState.lines, linesState.totalCount);\n}\n\n/**\n * The GetFullOrderTemplate Data Action\n * Returns order templates.\n */\nexport const getFullOrderTemplateActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/get-full-order-template',\n action: >getFullOrderTemplateAction,\n input: createGetFullOrderTemplateInput\n});\n\nexport default getFullOrderTemplateActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext } from '@msdyn365-commerce/core';\nimport { IQueryResultSettings } from '@msdyn365-commerce/retail-proxy';\nimport { ProductList } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { getOrderTemplates, GetOrderTemplatesInput, getPaginatedOrderTemplateLinesAction, GetPaginatedOrderTemplateLinesInput, QueryResultSettingsProxy } from '..';\nimport { OrderTemplate } from '../utilities/order-templates';\n\n/**\n * Input class for the GetOrderTemplates data action.\n */\nexport class GetFullOrderTemplatesInput implements IActionInput {\n public queryResultSettings: IQueryResultSettings;\n\n constructor(queryResultSettings: IQueryResultSettings) {\n this.queryResultSettings = queryResultSettings;\n }\n\n public getCacheKey = () => 'GetFullOrderTemplates';\n\n public getCacheObjectType = () => 'GetFullOrderTemplates';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetOrderTemplate method.\n * @param inputData The input data passed to the createInput method.\n */\nexport const createGetFullOrderTemplatesInput = (inputData: ICreateActionContext): GetFullOrderTemplatesInput => {\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to get full order templates. User is not authenticated.');\n }\n const queryResultSettings: IQueryResultSettings = QueryResultSettingsProxy.fromInputData(inputData).QueryResultSettings;\n queryResultSettings.count = true;\n\n return new GetFullOrderTemplatesInput(queryResultSettings);\n};\n\n/**\n * The action method for the GetFullOrderTemplates data action.\n * @param input The action input.\n * @param ctx The action context.\n */\nexport async function getFullOrderTemplatesAction(input: GetFullOrderTemplatesInput, ctx: IActionContext): Promise {\n if (!ctx.requestContext.user.isAuthenticated) {\n throw new Error('Unable to get full order templates. User is not authenticated.');\n }\n\n const orderTemplates: OrderTemplate[] = [];\n\n const inputParams = new GetOrderTemplatesInput();\n const productLists: ProductList[] = await getOrderTemplates(inputParams, ctx);\n\n if (!productLists || productLists.length === 0) {\n return orderTemplates;\n }\n\n for (const list of productLists) {\n const inputLines = new GetPaginatedOrderTemplateLinesInput(list.Id, input.queryResultSettings);\n const linesState = await getPaginatedOrderTemplateLinesAction(inputLines, ctx);\n orderTemplates.push(new OrderTemplate(list, linesState.lines, linesState.totalCount));\n }\n\n ctx.trace(orderTemplates.length.toString());\n return orderTemplates;\n}\n\n/**\n * The GetFullOrderTemplates Data Action\n * Returns order templates.\n */\nexport const getFullOrderTemplatesActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/get-full-order-templates',\n action: >getFullOrderTemplatesAction,\n input: createGetFullOrderTemplatesInput\n});\n\nexport default getFullOrderTemplatesActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext } from '@msdyn365-commerce/core';\nimport { IQueryResultSettings } from '@msdyn365-commerce/retail-proxy';\n\nimport { OrderTemplate } from '../utilities/order-templates';\nimport { QueryResultSettingsProxy } from '../utilities/QueryResultSettingsProxy';\nimport getFullOrderTemplates, { GetFullOrderTemplatesInput } from './get-full-order-templates';\n\n/**\n * Input class for the GetOrderTemplates data action.\n */\nexport class GetOrderTemplatesPreviewInput implements IActionInput {\n public queryResultSettings: IQueryResultSettings;\n\n constructor(queryResultSettings: IQueryResultSettings) {\n this.queryResultSettings = queryResultSettings;\n this.queryResultSettings.count = true;\n this.queryResultSettings.Paging!.Top = 4;\n }\n\n public getCacheKey = () => 'GetOrderTemplatesPreview';\n\n public getCacheObjectType = () => 'GetOrderTemplatesPreview';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetOrderTemplate method.\n * @param inputData The input data passed to the createInput method.\n */\nexport const createGetOrderTemplatesPreviewInput = (inputData: ICreateActionContext): GetOrderTemplatesPreviewInput => {\n const queryResultSettings: IQueryResultSettings = QueryResultSettingsProxy.fromInputData(inputData).QueryResultSettings;\n return new GetOrderTemplatesPreviewInput(queryResultSettings);\n};\n\n/**\n * The action method for the GetOrderTemplatesPreview data action.\n * @param input The action input.\n * @param context The action context.\n */\nexport async function getOrderTemplatesPreview(input: GetOrderTemplatesPreviewInput, context: IActionContext): Promise {\n return getFullOrderTemplates(new GetFullOrderTemplatesInput(input.queryResultSettings), context);\n}\n\n/**\n * The GetOrderTemplatesPreview Data Action\n * Returns order templates.\n */\nexport const getOrderTemplatesPreviewDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/get-order-templates-preview',\n action: >getOrderTemplatesPreview,\n input: createGetOrderTemplatesPreviewInput\n});\n\nexport default getOrderTemplatesPreviewDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext } from '@msdyn365-commerce/core';\nimport { QueryResultSettings } from '@msdyn365-commerce/retail-proxy';\nimport { searchAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { ProductList, ProductListSearchCriteria, ProductListType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\n/**\n * Input class for the GetOrderTemplates data action.\n */\nexport class GetOrderTemplatesInput implements IActionInput {\n public readonly productListId: string;\n\n public readonly queryResultSettings?: QueryResultSettings;\n\n constructor(productListId?: string, queryResultSettings?: QueryResultSettings) {\n this.productListId = productListId || '';\n this.queryResultSettings = queryResultSettings;\n }\n\n public getCacheKey = (): string => `${this.productListId}|${this.queryResultSettings?.Paging?.Top}|${this.queryResultSettings?.Paging?.Skip}`;\n\n public getCacheObjectType = () => 'ProductList';\n\n public dataCacheType = (): CacheType => 'instance';\n\n public shouldCacheOutput = () => false;\n}\n\n/**\n * CreateInput method for the GetOrderTemplate method.\n * @param inputData The input data passed to the createInput method.\n * @param productListId? The product list identifier.\n * @param queryResultSettings? The query result setting required for pagination/ordering.\n * @param productListId\n * @param queryResultSettings\n */\nexport const createGetOrderTemplatesInput = (inputData: ICreateActionContext, productListId?: string, queryResultSettings?: QueryResultSettings): GetOrderTemplatesInput => {\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to create get order template. User is not authenticated.');\n }\n\n return new GetOrderTemplatesInput(productListId || '', queryResultSettings);\n};\n\n/**\n * The action method for the GetOrderTemplates data action.\n * @param input The action input.\n * @param ctx The action context.\n */\nexport async function getOrderTemplatesAction(input: GetOrderTemplatesInput, ctx: IActionContext): Promise {\n try {\n\n const productListSearchCriteria: ProductListSearchCriteria = {\n ProductListId: input.productListId,\n ProductListType: `${ProductListType.OrderTemplate}`\n };\n return await searchAsync(\n {\n callerContext: ctx,\n queryResultSettings: input.queryResultSettings\n },\n productListSearchCriteria\n );\n } catch (error) {\n ctx.telemetry.error('Not able to get order template(s)', error);\n throw error;\n }\n}\n\n/**\n * The GetOrderTemplates Data Action\n * Returns order templates.\n */\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/get-order-templates',\n action: >getOrderTemplatesAction,\n input: createGetOrderTemplatesInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext } from '@msdyn365-commerce/core';\nimport { convertToString, IQueryResultSettings } from '@msdyn365-commerce/retail-proxy';\nimport { getProductListLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\n\nimport { FullProductInput, getFullProducts, getProductDetailsCriteriaFromActionInput, QueryResultSettingsProxy } from '..';\nimport { ArrayExtensions } from '../utilities';\nimport { IOrderTemplateLinesState, OrderTemplateLine } from '../utilities/order-templates';\n\n/**\n * Input class for the GetOrderTemplates data action.\n */\nexport class GetPaginatedOrderTemplateLinesInput implements IActionInput {\n public orderTemplateId: string;\n\n public queryResultSettings: IQueryResultSettings;\n\n public searchText: string;\n\n constructor(orderTemplateId: string, queryResultSettings: IQueryResultSettings, searchText?: string) {\n this.orderTemplateId = orderTemplateId;\n this.queryResultSettings = queryResultSettings;\n this.searchText = searchText || '';\n }\n\n public getCacheKey = () => `GetPaginatedOrderTemplateLines|${this.orderTemplateId}|${convertToString(this.queryResultSettings)}|${this.searchText}`;\n\n public getCacheObjectType = () => 'GetPaginatedOrderTemplateLines';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetOrderTemplate method.\n * @param inputData The input data passed to the createInput method.\n * @param orderTemplateId\n * @param searchText\n */\nexport const createGetPaginatedOrderTemplateLinesInput = (\n inputData: ICreateActionContext, orderTemplateId: string, searchText?: string): GetPaginatedOrderTemplateLinesInput => {\n\n const queryResultSettings: IQueryResultSettings = QueryResultSettingsProxy.fromInputData(inputData).QueryResultSettings;\n queryResultSettings.count = true;\n return new GetPaginatedOrderTemplateLinesInput(orderTemplateId, queryResultSettings, searchText);\n};\n\n/**\n * The action method for the GetPaginatedOrderTemplateLines data action.\n * @param input The action input.\n * @param context The action context.\n */\nexport async function getPaginatedOrderTemplateLinesAction(input: GetPaginatedOrderTemplateLinesInput, context: IActionContext): Promise {\n if (!context.requestContext.user.isAuthenticated) {\n throw new Error('Unable to get full order templates. User is not authenticated.');\n }\n\n const orderTemplateLinesState: IOrderTemplateLinesState = {\n lines: [],\n totalCount: 0\n };\n const promise = getProductListLinesAsync({\n callerContext: context, queryResultSettings: input.queryResultSettings\n }, input.orderTemplateId, input.searchText); const productListLines = await promise;\n const productInputs: FullProductInput[] = [];\n if (ArrayExtensions.hasElements(productListLines)) {\n orderTemplateLinesState.totalCount = promise.metadata.count || productListLines.length;\n productListLines.forEach((listLine) => {\n if (listLine.ProductId) {\n orderTemplateLinesState.lines.push(new OrderTemplateLine(listLine));\n productInputs.push(new FullProductInput(listLine.ProductId,\n context.requestContext.apiSettings, getProductDetailsCriteriaFromActionInput(context)));\n }\n });\n if (ArrayExtensions.hasElements(productInputs)) {\n const fullProductsInfo = await getFullProducts(productInputs, context)\n .then((products: FullProduct[]) => {\n if (products) {\n return products;\n }\n return [];\n\n })\n .catch(error => {\n context.trace(error);\n context.telemetry.error(error.message);\n context.telemetry.error('[getPaginatedOrderTemplateLinesAction] Unable to retrieve product info.');\n });\n if (fullProductsInfo) {\n orderTemplateLinesState.lines.forEach(line => {\n const fullProduct = fullProductsInfo.find(product => product.ProductDetails.RecordId === line.productListLine.ProductId);\n if (!fullProduct) {\n context.telemetry.error('[getPaginatedOrderTemplateLinesAction] Unable to find product info for an order template line.');\n return;\n }\n line.fullProduct = fullProduct;\n });\n }\n return orderTemplateLinesState;\n }\n context.trace(orderTemplateLinesState.lines.length.toString());\n return orderTemplateLinesState;\n }\n return orderTemplateLinesState;\n}\n\n/**\n * The GetPaginatedOrderTemplateLines Data Action\n * Returns order templates.\n */\nexport const getPaginatedOrderTemplateLinesActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/get-paginated-order-template-lines',\n action: getPaginatedOrderTemplateLinesAction as IAction,\n input: createGetPaginatedOrderTemplateLinesInput\n});\n\nexport default getPaginatedOrderTemplateLinesActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext } from '@msdyn365-commerce/core';\nimport { updateAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { ProductList } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\n/**\n * Input class for the UpdateOrderTemplate data action.\n */\nexport class UpdateOrderTemplateHeaderInput implements IActionInput {\n public readonly orderTemplate: ProductList;\n\n constructor(orderTemplate: ProductList) {\n this.orderTemplate = orderTemplate;\n }\n\n public getCacheKey = () => 'UpdateOrderTemplateHeaderInput';\n\n public getCacheObjectType = () => 'UpdateOrderTemplateHeaderInput';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the UpdateOrderTemplateHeader method.\n * @param {ICreateActionContext} inputData The input data passed to the createInput method.\n * @param {ProductList} orderTemplate The template header.\n */\nexport const updateOrderTemplateHeaderInput = (inputData: ICreateActionContext, orderTemplate: ProductList): UpdateOrderTemplateHeaderInput => {\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to update order template. User is not authenticated.');\n }\n return new UpdateOrderTemplateHeaderInput(orderTemplate);\n};\n\n/**\n * The action method for the UpdateOrderTemplate data action.\n * @param {UpdateOrderTemplateHeaderInput} input The action input.\n * @param {IActionContext} ctx The action context.\n */\nexport async function updateOrderTemplateHeaderAction(input: UpdateOrderTemplateHeaderInput, ctx: IActionContext): Promise {\n try {\n const { orderTemplate } = input;\n const updatedProductList = await updateAsync({\n callerContext: ctx\n }, orderTemplate);\n if (updatedProductList) {\n return updatedProductList;\n }\n ctx.telemetry.error(`Updated product list ${orderTemplate.Id} came back as null.`);\n throw new Error('Updated product list was null.');\n\n } catch (error) {\n ctx.telemetry.error('Not able to update order template', error);\n throw error;\n }\n}\n\n/**\n * The UpdateOrderTemplate Data Action.\n * Returns updated order template.\n */\nexport const updateOrderTemplateHeaderActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/update-order-template-header',\n action: >updateOrderTemplateHeaderAction,\n input: updateOrderTemplateHeaderInput\n});\n\nexport default updateOrderTemplateHeaderActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext } from '@msdyn365-commerce/core';\nimport { updateProductListLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { ProductListLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport getPaginatedOrderTemplateLines, { GetPaginatedOrderTemplateLinesInput } from './get-paginated-order-template-lines';\n\n/**\n * Input class for the UpdateOrderTemplate data action.\n */\nexport class UpdateOrderTemplateInput implements IActionInput {\n public readonly orderTemplateId: string;\n\n public readonly productId: number;\n\n public readonly quantity: number;\n\n public readonly unitOfMeasure: string;\n\n constructor(orderTemplateId: string, productId: number, quantity: number, unitOfMeasure: string) {\n this.orderTemplateId = orderTemplateId;\n this.productId = productId;\n this.quantity = quantity;\n this.unitOfMeasure = unitOfMeasure || 'ea';\n }\n\n public getCacheKey = () => 'UpdateOrderTemplateInput';\n\n public getCacheObjectType = () => 'UpdateOrderTemplateInput';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the UpdateOrderTemplate method.\n * @param {ICreateActionContext} inputData The input data passed to the createInput method.\n * @param {string} orderTemplateId The id of order template to update.\n * @param {number} productId The id of a product to add.\n * @param {number} quantity How many items of this product to add.\n * @param unitOfMeasure\n */\nexport const updateOrderTemplateInput = (\n inputData: ICreateActionContext, orderTemplateId: string, productId: number, quantity: number, unitOfMeasure: string): UpdateOrderTemplateInput => {\n\n const { requestContext } = inputData;\n if (!requestContext.user.isAuthenticated) {\n throw new Error('Unable to create order template. User is not authenticated.');\n }\n return new UpdateOrderTemplateInput(orderTemplateId, productId, quantity, unitOfMeasure);\n};\n\n/**\n * The action method for the UpdateOrderTemplate data action.\n * @param {UpdateOrderTemplateInput} input The action input.\n * @param {IActionContext} ctx The action context.\n */\nexport async function updateOrderTemplateAction(input: UpdateOrderTemplateInput, ctx: IActionContext): Promise {\n try {\n if (!ctx.requestContext.user.isAuthenticated) {\n throw new Error('User token was not found when updating the order template');\n }\n const getLinesInput = new GetPaginatedOrderTemplateLinesInput(input.orderTemplateId, {}, input.productId.toString());\n const linesState = await getPaginatedOrderTemplateLines(getLinesInput, ctx);\n if (!linesState) {\n throw new Error('Order template was not found when updating the order template');\n }\n\n const linesToUpdate = linesState.lines.filter(line => line.productListLine.ProductId === input.productId);\n if (linesToUpdate.length !== 1) {\n throw new Error('Unable to find the line to update when updating the order template');\n }\n\n const lineToUpdate = linesToUpdate[0].productListLine;\n\n lineToUpdate.UnitOfMeasure = input.unitOfMeasure;\n lineToUpdate.Quantity = input.quantity;\n\n const updatedLines: ProductListLine[] = await updateProductListLinesAsync({\n callerContext: ctx\n }, input.orderTemplateId, [lineToUpdate]);\n\n if (!updatedLines || updatedLines.length !== 1) {\n throw new Error('Server returned invalid lines when updating order template');\n }\n const updatedLine = updatedLines.filter(line => line.ProductId === input.productId);\n if (updatedLine.length !== 1 || updatedLine[0].Quantity !== input.quantity || updatedLine[0].UnitOfMeasure !== input.unitOfMeasure) {\n throw new Error('Server did not update the line when updating order template');\n }\n return updatedLine[0];\n } catch (error) {\n ctx.telemetry.error('Not able to add an item to order template', error);\n throw error;\n }\n}\n\n/**\n * The UpdateOrderTemplate Data Action.\n * Returns product list line that was added to the order template.\n */\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/update-order-template-line',\n action: >updateOrderTemplateAction,\n input: updateOrderTemplateInput\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CacheType, createObservableDataAction,\n IAction, IActionInput, IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { ProductRefinerValue, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { createRefineSearchByCategoryInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { retailAction } from '@msdyn365-commerce/retail-proxy/dist/retail-action';\n\nimport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Action Input class for the refineSearchByCategory data action.\n */\nexport class RefineSearchByCriteriaInput implements IActionInput {\n public readonly categoryId?: number;\n\n public readonly channelId?: number;\n\n public readonly refinementCriteria: ProductRefinerValue[];\n\n public readonly catalogId: number;\n\n public readonly queryResultSettingsProxy: QueryResultSettingsProxy;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(\n queryResultSettingsProxy: QueryResultSettingsProxy,\n apiSettings: ICommerceApiSettings,\n categoryId?: number,\n channelId?: number,\n refinementCriteria?: ProductRefinerValue[],\n catalogId?: number\n ) {\n this.categoryId = categoryId;\n this.channelId = channelId;\n this.refinementCriteria = refinementCriteria || [];\n this.queryResultSettingsProxy = queryResultSettingsProxy;\n this.catalogId = catalogId || 0;\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('RefineSearchByCriteriaInputCache', this.apiSettings);\n\n public getCacheObjectType = () => 'RefineSearchByCriteriaInput';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * CreateInput method for the refineSearchByCategory data action.\n * @param inputData\n */\nexport const createInput = (inputData: ICreateActionContext>): IActionInput => {\n const refinementCriteria = inputData.config && inputData.config.refinementCriteria;\n\n if (inputData && inputData.requestContext && inputData.requestContext.query && inputData.requestContext.query.categoryId) {\n return createRefineSearchByCategoryInput(\n QueryResultSettingsProxy.fromInputData(inputData).QueryResultSettings,\n +inputData.requestContext.apiSettings.channelId,\n inputData.config ? Number(inputData.config.catalogId) : 0,\n +inputData.requestContext.query.categoryId,\n !Array.isArray(refinementCriteria) ? [] : refinementCriteria.map((refinementCriterion: ProductRefinerValue) => refinementCriterion)\n );\n }\n\n throw new Error('Please specify categoryId, refinerId, and refinerSourceValue query string in request.');\n};\n\n/**\n * The RefineSearchByCategory data action\n * Uses categoryId query string parameter to call the RefinerSearchByCategory\n * RetailServer API to get information about products.\n */\nexport const retailActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/regin-search-by-category',\n action: >retailAction,\n input: createInput\n});\n\nexport default retailActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { IDataServiceRequest, retailAction } from '@msdyn365-commerce/retail-proxy/dist';\nimport { createSearchByTextInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\n\n/**\n * CreateInput method for the searchByText data action.\n * @param inputData\n */\nexport function createSearchByTextInputFunc(inputData: ICreateActionContext, IGeneric>): IDataServiceRequest {\n const { requestContext: { query, apiSettings: { channelId } } } = inputData;\n\n const search = query && query.q;\n\n if (!search) {\n throw new Error('Unable to preform search without search text. Query string ?q={searchText} must be present or should be configued in module data.');\n }\n\n const querySettingsProxy = QueryResultSettingsProxy.fromInputData(inputData);\n return createSearchByTextInput(querySettingsProxy.QueryResultSettings, Number(channelId), 0, search);\n}\n\n/**\n * The searchByText data action\n * Queries RetailServers product searchByText API using a\n * query string parameter and returns a list of ProductSearchResults.\n */\nexport const retailActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/search-by-text',\n action: >retailAction,\n input: createSearchByTextInputFunc\n});\n\nexport default retailActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { IDataServiceRequest, retailAction } from '@msdyn365-commerce/retail-proxy/dist';\nimport { createSearchOrgUnitLocationsInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { buildQueryResultSettings } from './utilities/utils';\n\n/**\n * Search Org Unit Locations action createInput method.\n * @param inputData\n */\nexport function createSearchOrgUnitLocationsInputFunc(inputData: ICreateActionContext, IGeneric>): IDataServiceRequest {\n return createSearchOrgUnitLocationsInput(buildQueryResultSettings(inputData), {});\n}\n\nexport const retailActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/search-org-unit-locations',\n action: >retailAction,\n input: createSearchOrgUnitLocationsInputFunc\n});\n\nexport default retailActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { Address, Customer } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { createAddressManagementInput, doAddressManagementOperation, IAddressManagementInput } from './add-address';\n\n// TODO: Centralize this logic in a common utility area\nexport function updateAddressHandler(customer: Customer, address: Address): Customer {\n customer.Addresses = customer.Addresses || [];\n if (address.IsPrimary) {\n customer.Addresses.forEach(cur => cur.IsPrimary = false);\n }\n customer.Addresses = [...customer.Addresses.filter(cur => cur.RecordId !== address.RecordId), address];\n return customer;\n}\n\nexport async function updateAddressAction(input: IAddressManagementInput, ctx: IActionContext): Promise {\n return doAddressManagementOperation(input, ctx, updateAddressHandler);\n}\n\n/**\n * The updateAddress data action\n * Calls the read RetailServer API to get information about a customer\n * Merge the passed address information with the address information from\n * the retireved customer, and then updates that customer via the update RetailServer API.\n */\nexport const updateAddressActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/update-address',\n action: >updateAddressAction,\n input: <(args: ICreateActionContext) => IActionInput>(createAddressManagementInput)\n});\n\nexport default updateAddressActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\n ICommerceApiSettings\n} from '@msdyn365-commerce/core';\nimport { Customer, CustomerAttribute } from '@msdyn365-commerce/retail-proxy';\nimport {\n readAsync, updateAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g';\n\nimport { buildCacheKey } from '.';\nimport { GetCustomerInput } from './get-customer';\n\nexport interface IUpdateCustomerAttributesInput extends IActionInput {\n phone?: string;\n vatNumber?: string;\n customerAttributes: CustomerAttribute[];\n userAccountNumber: string;\n apiSettings: ICommerceApiSettings;\n}\n\n/**\n * Input class for the updateCustomerAttributes.\n */\nexport class updateCustomerAttributesInput implements IUpdateCustomerAttributesInput {\n public userAccountNumber: string;\n\n public customerAttributes: CustomerAttribute[];\n\n public apiSettings: ICommerceApiSettings;\n\n public phone?: string;\n\n public vatNumber?: string;\n\n constructor(userAccountNumber: string, customerAttributes: CustomerAttribute[], apiSettings: ICommerceApiSettings, phone?: string, vatNumber?: string) {\n this.userAccountNumber = userAccountNumber;\n this.apiSettings = apiSettings;\n this.customerAttributes = customerAttributes;\n this.phone = phone;\n this.vatNumber = vatNumber;\n }\n\n public getCacheKey = (): string => buildCacheKey(`${this.userAccountNumber}`, this.apiSettings);\n\n public getCacheObjectType = () => 'Customer';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * The action method for the updateCustomerAttributes data action.\n * @param input The action input.\n * @param ctx The action context.\n */\nexport async function updateCustomerAttributesAction(input: IUpdateCustomerAttributesInput, ctx: IActionContext): Promise {\n const { customerAttributes, phone, vatNumber, userAccountNumber } = input;\n\n const customer = await readAsync({ callerContext: ctx, bypassCache: 'get' }, userAccountNumber);\n\n if (!customer) {\n ctx.telemetry.debug('[update-customer-attributes] Unable to find customer');\n throw new Error('Unable to find customer');\n }\n\n const newCustomer = { ...customer };\n newCustomer.Phone = phone;\n newCustomer.VatNumber = vatNumber;\n newCustomer.Attributes = customerAttributes;\n\n const updatedCustomer = await updateAsync({ callerContext: ctx }, newCustomer);\n\n if (!updatedCustomer) {\n ctx.telemetry.debug('[update-customer-attributes] Unable to update customer attributes');\n throw new Error('Unable to update customer attributes');\n }\n\n ctx.update(new GetCustomerInput(ctx.requestContext.apiSettings), updatedCustomer);\n\n return updatedCustomer;\n}\n\n/**\n * The updateCustomerAttributes data action\n * Returns the updated customer.\n */\nexport const updateCustomerAttributesActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/update-customer-attributes',\n action: >updateCustomerAttributesAction\n});\n\nexport default updateCustomerAttributesActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\n ICommerceApiSettings\n} from '@msdyn365-commerce/core';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport {\n readAsync, updateAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g';\n\nimport { buildCacheKey } from '.';\nimport { GetCustomerInput } from './get-customer';\n\nexport interface IUpdateCustomerPersonalizationInput extends IActionInput {\n isOptOut: boolean;\n userAccountNumber: string;\n apiSettings: ICommerceApiSettings;\n preferenceType?: string;\n}\n\n/**\n * Input class for the updateCustomerPersonalization.\n */\nexport class updateCustomerPersonalizationInput implements IUpdateCustomerPersonalizationInput {\n public userAccountNumber: string;\n\n public isOptOut: boolean;\n\n public apiSettings: ICommerceApiSettings;\n\n public preferenceType: string | undefined;\n\n constructor(userAccountNumber: string, isOptOut: boolean, apiSettings: ICommerceApiSettings, preferenceType?: string) {\n this.userAccountNumber = userAccountNumber;\n this.apiSettings = apiSettings;\n this.isOptOut = isOptOut;\n this.preferenceType = preferenceType;\n }\n\n public getCacheKey = (): string => buildCacheKey(`${this.userAccountNumber}`, this.apiSettings);\n\n public getCacheObjectType = () => 'Customer';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * The action method for the updateCustomerPersonalization data action.\n * @param input The action input.\n * @param ctx The action context.\n */\nexport async function updateCustomerPersonalizationAction(input: IUpdateCustomerPersonalizationInput, ctx: IActionContext): Promise {\n const { userAccountNumber, isOptOut, preferenceType } = input;\n const customer = await readAsync({ callerContext: ctx, bypassCache: 'get' }, userAccountNumber);\n if (!customer) {\n throw new Error('Unable to find customer');\n }\n\n const newCustomer = { ...customer };\n\n switch (preferenceType) {\n case 'web-tracking':\n newCustomer.OptOutWebActivityTracking = isOptOut;\n break;\n case undefined:\n case 'personalization':\n default:\n newCustomer.OptOutPersonalization = isOptOut;\n }\n\n const updatedCustomer = await updateAsync({ callerContext: ctx }, newCustomer);\n\n if (!updatedCustomer) {\n throw new Error('Unable to update customer');\n }\n\n ctx.update(new GetCustomerInput(ctx.requestContext.apiSettings), updatedCustomer);\n\n return updatedCustomer;\n}\n\n/**\n * The updateCustomerPersonalization data action\n * Returns the updated customer.\n */\nexport const updateCustomerPersonalizationActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/update-customer-personalization',\n action: >updateCustomerPersonalizationAction\n});\n\nexport default updateCustomerPersonalizationActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext } from '@msdyn365-commerce/core';\nimport {\n readAsync, updateAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g';\nimport { Address, Customer } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { createAddressManagementInput, IAddressManagementInput } from './add-address';\nimport { GetCustomerInput } from './get-customer';\n\nexport function updatePrimaryAddressHandler(customer: Customer, address: Address): Customer {\n customer.Addresses = setPrimaryAddress({ ...address }, [...(customer.Addresses || [])]);\n return customer;\n}\n\nexport async function updatePrimaryAddressAction(input: IAddressManagementInput, ctx: IActionContext): Promise {\n const { address } = input;\n\n const customer = await readAsync({ callerContext: ctx, bypassCache: 'get' }, '');\n\n if (!customer) {\n throw new Error('Unable to find customer');\n }\n\n customer.Addresses = setPrimaryAddress({ ...address }, [...(customer.Addresses ?? [])]);\n const updatedCustomer = await updateAsync({ callerContext: ctx }, customer);\n\n if (!updatedCustomer) {\n throw new Error('Unable to update customer');\n }\n\n ctx.update(new GetCustomerInput(ctx.requestContext.apiSettings), updatedCustomer);\n\n return updatedCustomer.Addresses || [];\n}\n\n/**\n * The updatePrimaryAddress data action\n * Calls the read RetailServer API to get information about a customer\n * Merge the passed address information with the address information from\n * the retireved customer, and then updates that customer via the update RetailServer API.\n */\nexport const updatePrimaryAddressActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/update-primary-address',\n action: >updatePrimaryAddressAction,\n input: <(args: ICreateActionContext) => IActionInput>(createAddressManagementInput),\n isBatched: false\n});\nexport default updatePrimaryAddressActionDataAction;\n\nconst setPrimaryAddress = (primaryAddresses: Address, addresses: Address[]): Address[] => {\n return addresses.map(addr => {\n if (addr.RecordId === primaryAddresses.RecordId) {\n addr.IsPrimary = true;\n } else {\n addr.IsPrimary = false;\n }\n return addr;\n });\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IAny, ICreateActionContext, IGeneric, IRequestContext } from '@msdyn365-commerce/core';\nimport { QueryResultSettings, SortColumn } from '@msdyn365-commerce/retail-proxy';\n\nimport { IQueryResultSettingsModuleConfig } from './IQueryResultSettingsModuleConfig';\n\n/**\n * Wrapper for query result settings, which guarantees some properties that are optional in the real subject\n * and includes some common utilities for data actions.\n */\nexport class QueryResultSettingsProxy {\n // Real subject\n private readonly queryResultSettings: QueryResultSettings;\n\n get QueryResultSettings(): QueryResultSettings {\n return this.queryResultSettings;\n }\n\n /**\n * Gets the hints for the cache key based on query result settings.\n */\n get cacheKeyHint(): string {\n // The factory method guarantees values are defined\n const topHint = `top-${this.queryResultSettings.Paging!.Top!}`;\n const skipHint = `skip-${this.queryResultSettings.Paging!.Skip!}`;\n const sortingHintData = (this.queryResultSettings.Sorting!.Columns || []).map((column: SortColumn) => {\n return `${column.ColumnName}--${column.IsDescending && 'desc' || 'asc'}`;\n }).join(',') || undefined;\n const sortingHint = `sortBy-${sortingHintData}`;\n return `${topHint}|${skipHint}|${sortingHint}`;\n }\n\n /**\n * Factory method for data actions.\n * @param inputData Input data.\n */\n public static fromInputData(inputData: ICreateActionContext>): QueryResultSettingsProxy {\n const { requestContext, config } = inputData;\n return QueryResultSettingsProxy.fromModuleData(requestContext, config as IQueryResultSettingsModuleConfig);\n }\n\n /**\n * Factory method for modules.\n * @param requestContext RequestContext.\n * @param config Module config from props.\n */\n public static fromModuleData(requestContext: IRequestContext, config: IQueryResultSettingsModuleConfig): QueryResultSettingsProxy {\n const sortingCriteria = config && config.sortingCriteria || undefined;\n const query = requestContext && requestContext.query;\n const top = query && query.top || undefined;\n const skip = query && query.skip || undefined;\n\n const queryResultSettings = {\n Paging: {\n Skip: (skip && Number(skip) || 0),\n Top: (top && Number(top) || config?.itemsPerPage || 50)\n },\n Sorting: sortingCriteria || {}\n };\n\n return new QueryResultSettingsProxy(queryResultSettings);\n }\n\n /**\n * Factory method.\n */\n public static getDefault(): QueryResultSettingsProxy {\n return new QueryResultSettingsProxy({ Paging: {}, Sorting: {} });\n }\n\n /**\n * Private constructor, expect instances to be created with the factory method.\n * @param queryResultSettings\n */\n private constructor(\n queryResultSettings: QueryResultSettings\n ) {\n this.queryResultSettings = queryResultSettings;\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport msdyn365Commerce, { IParameterizeFeatureFlags } from '@msdyn365-commerce/core';\n\nexport function parameterize(name: string = '', sep = '-', parameterizeFeatureFlags: IParameterizeFeatureFlags = {}, neutralizedName?: string) {\n // If neutralizedName flag enabled, we use neutralizedName to construct string\n const candidateName = (msdyn365Commerce.platformSettings && msdyn365Commerce.platformSettings.enableUrlLocalization || parameterizeFeatureFlags.enableUrlLocalization) ? name : neutralizedName || name;\n\n /*\n 1\t‘ ‘ (space)\t-> (single dash)\n 3\tAny character disallowed in URLs -> URL-encode\n 5\t‘ & ‘ (space ampersand space) -> (single dash)\n 6\t‘ - ‘ (space dash space) -> (single dash)\n 7\t‘ ‘ (2+ spaces) -> (single dash)\n 10\t[A-Z] (capital letters) -> [a-z] (lower-case)\n 12\tAny non-ASCII character outside of the set of disallowed characters -> URL-encode\n */\n if (parameterizeFeatureFlags.enableUrlEncoding || msdyn365Commerce.platformSettings && msdyn365Commerce.platformSettings.enableUrlEncoding) {\n // Replace url reserved characters with dash, and remove front and end dash;\n // &*!() reserved characters that can not be encoded by encodeURIComponent()\n return encodeURIComponent(candidateName.toLowerCase().replace(/[\\s!&'()*]+/g, '-').trim().replace(/-+/g, '-').replace(/^-+|-+$/g, ''));\n }\n return name\n .toLowerCase()\n .replace(/[^\\d_a-z\\-]+/g, ' ')\n .trim()\n .replace(/\\s+/g, sep);\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { getParameterizeFeatureFlags, getUrlSync, IActionContext, IParameterizeFeatureFlags } from '@msdyn365-commerce/core';\n\nimport { parameterize } from './parameterize';\n\ninterface ICategoryMap {\n [RecordId: number]: CategoryHierarchy;\n}\n\n/**\n * Builds slugs for category.\n * @param category\n * @param categoryMap\n * @param parameterizeFeatureFlags\n */\nexport function getCategorySlug(category: CategoryHierarchy, categoryMap: ICategoryMap, parameterizeFeatureFlags?: IParameterizeFeatureFlags): string {\n if (!category || !category.Name) {\n // Invalid category\n return '';\n }\n const categoryName = parameterize(category.Name, undefined, parameterizeFeatureFlags, category.NeutralizedName);\n if (!category.ParentCategory || category.ParentCategory === 0) {\n // Base case assign url\n category.Slug = category.Slug || `/${categoryName}`;\n } else if (category.ParentCategory) {\n category.Slug = category.Slug || `${getCategorySlug(categoryMap[category.ParentCategory], categoryMap, parameterizeFeatureFlags)}/${categoryName}`;\n }\n\n return category.Slug || '';\n}\n\n/**\n * Gets Url for category hierarchy. Returns string and adds url to Url property of category hierarchy.\n * @param category Category to generate URL for.\n * @param ctx\n * @param categoryMap Dictionary of all categories.\n */\nexport function getCategoryUrl(category: CategoryHierarchy, ctx?: IActionContext, categoryMap?: ICategoryMap): string | undefined {\n if (!category.Url && ctx && categoryMap) {\n if (!category.Slug) {\n const parameterizeFeatureFlags: IParameterizeFeatureFlags = ctx.requestContext ? getParameterizeFeatureFlags(ctx) : {};\n category.Slug = getCategorySlug(category, categoryMap, parameterizeFeatureFlags);\n }\n category.Url = getUrlSync('category', ctx, { category });\n }\n return category.Url;\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { getUrlSync, IActionContext } from '@msdyn365-commerce/core';\n\n/**\n * Syncronously creates an invoice detail page url.\n * @param invoiceId Invoice Id.\n * @param ctx\n */\nexport function getInvoiceDetailsPageUrlSync(invoiceId: string, ctx: IActionContext): string {\n let url = getUrlSync('invoice-details', ctx) || '';\n url = url.includes('?') ? url.substr(0, url.indexOf('?')) : url;\n return `${url}?invoiceId=${invoiceId}`;\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { getUrlSync, IActionContext } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\n\n/**\n * Syncronously creates a product url.\n * @param product Simple product to get url from.\n * @param ctx\n * @param category Category to add to product url.\n */\nexport function getProductUrlSync(product: SimpleProduct, ctx: IActionContext, category?: CategoryHierarchy): string {\n const selectedProduct = { ...product, RecordId: product.MasterProductId || product.RecordId };\n\n return getProductPageUrlSync(selectedProduct.Name || '', selectedProduct.RecordId, ctx, category)!;\n}\n\n/**\n * Syncronously creates a product detail page url.\n * @param name Simple product name.\n * @param recordId Record id of product.\n * @param ctx\n * @param category\n */\nexport function getProductPageUrlSync(name: string, recordId: number, ctx: IActionContext, category?: CategoryHierarchy): string {\n return getUrlSync('product', ctx, {\n product: { Name: name || '', RecordId: recordId },\n category\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 * Represents a pair of two fields: key and value.\n * Used to initialize a dictionary.\n */\nexport interface IKeyValuePair {\n readonly key: Key;\n readonly value: Value;\n}\n\n/**\n * Represents a dictionary in memory storage.\n */\nexport class Dictionary {\n /**\n * Values stored in the dictionary.\n */\n private _values: { [eventName: string]: Value };\n\n /**\n * The number of values stored in the dictionary (does not include keys).\n */\n private _length: number;\n\n /**\n * Initializes an empty dictionary or a dictionary with the given key value pairs.\n * @param {IKeyValuePair[]} entries The key value pairs which should be stored in the dictionary initially.\n */\n public constructor(...entries: IKeyValuePair[]) {\n this._values = {};\n this._length = 0;\n entries.forEach(keyValuePair => {\n this.setValue(keyValuePair.key, keyValuePair.value);\n });\n }\n\n /**\n * Removes value from the dictionary for the given key.\n * @param {Key} key The key to retrieve the value.\n * @remark Does nothing in case the key is not present in the dictionary.\n */\n public removeValue(key: Key): void {\n if (!this.hasValue(key)) {\n return;\n }\n\n --this._length;\n delete this._values[key];\n }\n\n /**\n * Retrieves a value from the dictionary or returns undefined in case it's not found.\n * @param {Key} key The key to retrieve the value.\n * @returns {Value | undefined} The value stored in the dictionary or undefined in case it's not found.\n */\n public getValue(key: Key): Value | undefined {\n return this._values[key];\n }\n\n /**\n * Retrieves a value from the dictionary.\n * In case it's not found, adds the default value to the dictionary and returns it.\n * @param {Key} key The key to retrieve the value.\n * @param defaultValue\n * @returns {Value} The value stored in the dictionary or the default value in case it's not found.\n */\n public getValueWithDefaultValue(key: Key, defaultValue: Value): Value {\n if (!this.hasValue(key)) {\n this.setValue(key, defaultValue);\n }\n return this.getValue(key)!;\n }\n\n /**\n * Sets the value to the dictionary for the given key.\n * @remarks In case undefined was passed, removes the value from the dictionary instead.\n * @param {Key} key The key under which the value should be stored.\n * @param {Value} value The value which should be stored in the dictionary.\n */\n public setValue(key: Key, value: Value): void {\n if (value === undefined) {\n this.removeValue(key);\n return;\n }\n\n if (!this.hasValue(key)) {\n ++this._length;\n }\n\n this._values[key] = value;\n }\n\n /**\n * Checks if the dictionary stores some value (except undefined) for the given key.\n * @param {Key} key The key to retrieve the value.\n * @returns {boolean} True in case the value is present, false otherwise or if it's undefined.\n */\n public hasValue(key: Key): boolean {\n return this._values[key] !== undefined;\n }\n\n /**\n * Checks if the dictionary is empty.\n * @returns {boolean} True if the dictionary is empty, false otherwise.\n */\n public isEmpty(): boolean {\n return this.length === 0;\n }\n\n /**\n * Retrieves the number of values stored in the dictionary.\n * @remark Use `isEmpty` to check if the dictionary has any elements.\n * @returns {number} The number of values stored.\n */\n public get length(): number {\n return this._length;\n }\n\n /**\n * Clears the dictionary by removing all elements from the storage.\n */\n public clear(): void {\n this._values = {};\n this._length = 0;\n }\n\n /**\n * Returns all values stored in the dictionary.\n * @returns {Value[]} List of values.\n */\n public getValues(): Value[] {\n return this.getKeys().map(key => this._values[key]);\n }\n\n /**\n * Returns all keys stored in the dictionary.\n * @returns {string[]} List of keys.\n */\n public getKeys(): Key[] {\n return Object.keys(this._values);\n }\n\n /**\n * Returns all key value pairs stored in the dictionary.\n * @returns {IKeyValuePair[]} List of key value pairs.\n */\n public getKeyValuePairs(): IKeyValuePair[] {\n return this.getKeys().map(key => {\n return { key, value: this._values[key] };\n });\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IEventSubscriber } from './event-subscriber';\n\n/**\n * Represents a simple event with subscribers. Notifies the subscribers once the event is triggered.\n */\nexport class Event {\n /**\n * The list of subscribers.\n */\n private _subscribers: IEventSubscriber[];\n\n /**\n * Initializes the event with a empty subscribers list.\n */\n public constructor() {\n this._subscribers = [];\n }\n\n /**\n * Subscribes given instance to the event.\n * @param {IEventSubscriber} instance The info about the subscriber.\n */\n public subscribe(instance: IEventSubscriber): void {\n this._subscribers.push(instance);\n }\n\n /**\n * Removes the subscriber from the list of subscribers watching the event.\n * @param {string} instanceId The unique identifier of the subscriber which was earlier passed in `subscribe` method in `IEventSubscriber`.\n */\n public unsubscribe(instanceId: string): void {\n this._subscribers = this._subscribers.filter(element => element.instanceId !== instanceId);\n }\n\n /**\n * Clears the list of subscriber removing all instances watching the event.\n */\n public unsubscribeAll(): void {\n this._subscribers = [];\n }\n\n /**\n * Triggers the event.\n * Notifies the subscribers that the event is triggered by calling `handler` method.\n */\n public trigger(): void {\n this._subscribers.forEach(subscriber => {\n subscriber.handler();\n });\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\n/**\n * Namespace which extends Object functionality.\n */\nexport namespace ObjectExtensions {\n\n /**\n * @description Verifies whether the value is null or undefined.\n * @param {any} value The value to examine.\n * @returns {boolean} True if the value is null or undefined, false otherwise.\n */\n export function isNullOrUndefined(value: any): value is null | undefined {\n return value === null || value === undefined;\n }\n\n /**\n * @description Verifies whether the value is of type string.\n * @param {any} value The value to examine.\n * @returns {boolean} True if the value is a string, false otherwise.\n */\n export function isString(value: any): value is string {\n return typeof value === 'string';\n }\n\n /**\n * @description Verifies whether the value is of type number.\n * @param {any} value The value to examine.\n * @returns {boolean} True if the value is a number, false otherwise.\n */\n export function isNumber(value: any): value is number {\n return typeof value === 'number';\n }\n\n /**\n * Verifies whether the object is a function.\n * @param {any} object The object.\n * @param value\n * @returns {boolean} True if the object is a function, false otherwise.\n */\n export function isFunction(value: any): boolean {\n return typeof value === 'function';\n }\n\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { ObjectExtensions } from './object-extensions';\n\n/**\n * Represents an array which is defined with at least one value.\n */\nexport type NonEmptyArray = [T, ...T[]];\n\n/**\n * Namespace which extends Array functionality.\n */\nexport namespace ArrayExtensions {\n\n /**\n * Verifies whether the object array has elements.\n * @param value - The array to examine.\n * @returns True if the object has at least one element in the array, false otherwise (if array is not defined or empty).\n */\n export function hasElements(value: NonEmptyArray | T[] | null | undefined): value is NonEmptyArray {\n const emptyArrayLength = 0;\n return !ObjectExtensions.isNullOrUndefined(value) && value.length > emptyArrayLength;\n }\n\n /**\n * Remove duplicate elements in the array.\n * @param value - The array to examine.\n * @returns An array with only unique elements.\n */\n export function unique(value: T[]): T[] {\n if (!hasElements(value)) {\n return [];\n }\n\n return Array.from(new Set(value));\n }\n\n /**\n * Checks if all elements satisfy given condition.\n * @param value - The array to examine.\n * @param predicate - The function which checks an element.\n * @returns True if the array is empty or all the inner elements satisfy given condition,\n * false if at least one element does not pass the condition.\n */\n export function all(value: T[] | null | undefined, predicate: (value: T, index: number, array: T[]) => boolean): boolean {\n if (!hasElements(value)) {\n return true;\n }\n\n return value.filter(predicate).length === value.length;\n }\n\n /**\n * Filters out null and undefined values from the given array.\n * @param value - The array with possibly undefined/null items.\n * @returns All items which are not null or undefined.\n */\n export function validValues(value: (T | undefined | null)[] | undefined | null): T[] {\n if (!hasElements(value)) {\n return [];\n }\n\n return value.filter(item => !ObjectExtensions.isNullOrUndefined(item)) as T[];\n }\n\n /**\n * Merges items from 2-dimensional array into one array with all items.\n * @param value - The 2-dimensional array with the items.\n * @returns All items retrieved from all inner arrays.\n */\n export function flatten(value: ((T | undefined | null)[] | undefined | null)[]): T[] {\n let result: T[] = [];\n\n if (!hasElements(value)) {\n return result;\n }\n\n for (const arrayLine of value) {\n if (!ObjectExtensions.isNullOrUndefined(arrayLine)) {\n result = result.concat(validValues(arrayLine));\n }\n }\n\n return result;\n }\n\n /**\n * Check if two arrays are equal.\n * @param firstArray - The array with the items.\n * @param secondArray - Another array with the items.\n * @param comparator - The comparator which compares the values and returns true if two objects are equal, false otherwise.\n * @returns True if arrays have the same items, false otherwise.\n */\n export function equals(firstArray: T[], secondArray: T[], comparator?: (valueFromFirstArray: T, valueFromSecondArray: T) => boolean): boolean {\n if (firstArray.length !== secondArray.length) {\n return false;\n }\n\n if (comparator === undefined) {\n return JSON.stringify(firstArray) === JSON.stringify(secondArray);\n }\n\n // eslint-disable-next-line unicorn/no-for-loop -- Disable as we need to compare by indices.\n for (let index = 0; index < firstArray.length; ++index) {\n if (!comparator(firstArray[index], secondArray[index])) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Check if two arrays have the same elements irrespective of the order.\n * @param firstArray - The array with the items.\n * @param secondArray - Another array with the items.\n * @param comparator - The comparator which compares the values and returns true if two objects are equal, false otherwise.\n * @returns True if arrays have the same items, false otherwise.\n */\n export function haveSameItems(\n firstArray: T[], secondArray: T[],\n comparator: (valueFromFirstArray: T, valueFromSecondArray: T) => boolean = (\n valueFromFirstArray: T, valueFromSecondArray: T) => valueFromFirstArray === valueFromSecondArray): boolean {\n\n if (firstArray.length !== secondArray.length) {\n return false;\n }\n\n for (const item of firstArray) {\n if (!secondArray.some(otherItem => comparator(item, otherItem))) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Calculates a sum of elements in the given array.\n * @param data - List of items.\n * @returns Sum of elements.\n */\n export function calculateSum(data: NonEmptyArray): number {\n let result = data[0];\n for (let index = 1; index < data.length; ++index) {\n result += data[index];\n }\n\n return result;\n }\n\n /**\n * Reverses the elements in the array without modifying the original one.\n * @param array - The array with the items.\n * @returns A new array with reversed order.\n */\n export function reverse(array: T[]): T[] {\n const newArray: T[] = [];\n\n for (let index = array.length - 1; index >= 0; --index) {\n newArray.push(array[index]);\n }\n\n return newArray;\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { ObjectExtensions } from './object-extensions';\n\n/**\n * Namespace which extends enum functionality.\n */\nexport namespace EnumExtensions {\n\n /**\n * @description Returns a list of numeric values and enum names for the specified enum.\n * @param enumClass\n * @param {any} value The enum to examine.\n * @returns {(number | string)[]} An array of numeric values and enum names.\n */\n export function getValues(enumClass: any): (number | string)[] {\n if (ObjectExtensions.isNullOrUndefined(enumClass)) {\n return [];\n }\n\n return Object.keys(enumClass).map(item => enumClass[item]);\n }\n\n /**\n * @description Returns a list of enum names for the specified enum.\n * @param enumClass\n * @param {any} value The enum to examine.\n * @returns {(number | string)[]} An array of string values.\n */\n export function getNames(enumClass: any): string[] {\n return getValues(enumClass).filter(ObjectExtensions.isString);\n }\n\n /**\n * @description Returns a list of numeric values for the specified enum.\n * @param enumClass\n * @param {any} value The enum to examine.\n * @returns {number[]} An array of numeric values.\n */\n export function getNumericValues(enumClass: any): number[] {\n return getValues(enumClass).filter(ObjectExtensions.isNumber);\n }\n\n /**\n * @description Returns a list of enum values for the specified enum.\n * @param enumClass\n * @param {any} value The enum to examine.\n * @returns {number[]} An array of enum values.\n */\n export function getEnumValues(enumClass: any): T[] {\n return getNumericValues(enumClass).map(value => value);\n }\n\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { ObjectExtensions } from './object-extensions';\n\n/**\n * Namespace which extends string functionality.\n */\nexport namespace StringExtensions {\n\n /**\n * Checks if string is null, undefined, empty, or whitespace.\n * @param {string | null | undefined} value The string to examine.\n * @returns {boolean} True if it's null, undefined, empty, or whitespace; false otherwise.\n */\n export function isNullOrWhitespace(value: string | null | undefined): boolean {\n return isNullOrEmpty(value) || value!.trim() === '';\n }\n\n /**\n * Checks if string is null, undefined, or empty.\n * @param {string | null | undefined} value The string to examine.\n * @returns {boolean} True if it's null, undefined, empty, or whitespace; false otherwise.\n */\n export function isNullOrEmpty(value: string | null | undefined): boolean {\n if (ObjectExtensions.isNullOrUndefined(value)) {\n return true;\n }\n\n if (!ObjectExtensions.isString(value)) {\n throw new Error('StringExtensions has received a non-string input.');\n }\n\n return value === '';\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IActionContext, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\n\nexport const getRnrPartnerId = (args: ICreateActionContext> | IActionContext): string => {\n return args.requestContext.apiSettings.rnr.id || '';\n};\n\nexport const getRnrEndpointId = (args: ICreateActionContext> | IActionContext): string => {\n return args.requestContext.apiSettings.rnr.url || '';\n};\n\nexport const getRnrAuthEndpointId = (args: ICreateActionContext> | IActionContext): string => {\n const endpoint = (\n args.requestContext.apiSettings.rnr.proxyUrl ? args.requestContext.apiSettings.rnr.proxyUrl : args.requestContext.apiSettings.rnr.url || '');\n if (endpoint.length > 0 && endpoint.endsWith('/')) {\n return endpoint.substring(0, endpoint.length - 1);\n }\n return endpoint;\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { QueryResultSettings } from '@msdyn365-commerce/retail-proxy';\n\nimport { QueryResultSettingsProxy } from './QueryResultSettingsProxy';\n\nexport interface ISearchData {\n q: string;\n skip: number;\n top: number;\n itemsPerPage: string;\n maxItems: string;\n channelId: number;\n queryResultSettings: QueryResultSettings;\n}\n\nexport const parseSearchData = (inputData: ICreateActionContext>): ISearchData => {\n // Query is of type 'IDictionary | undefined', so that q and skip are not recognized by tsc\n // @ts-expect-error:2339\n const { requestContext: { query: { q, top, skip }, apiSettings: { channelId } }, config: { maxItems, itemsPerPage } } = inputData;\n const queryResultSettings = QueryResultSettingsProxy.fromInputData(inputData).QueryResultSettings;\n return {\n q,\n skip: (skip && Number(skip) || 0),\n top: (top && Number(top) || 50),\n itemsPerPage, // TODO BUGBUG 21667361\n maxItems, // TODO BUGBUG 21667361\n channelId,\n queryResultSettings\n };\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport { ProductList, ProductListLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\n/**\n * OrderTemplateLine state information.\n */\nexport class OrderTemplateLine {\n public productListLine: ProductListLine;\n\n public fullProduct?: FullProduct;\n\n constructor(productListLine: ProductListLine, fullProduct?: FullProduct) {\n this.productListLine = productListLine;\n this.fullProduct = fullProduct;\n }\n}\n\nexport interface IOrderTemplateLinesState {\n lines: OrderTemplateLine[];\n totalCount: number;\n}\n\n/**\n * Order template class.\n */\nexport class OrderTemplate {\n public productList: ProductList;\n\n public orderTemplateLines: OrderTemplateLine[];\n\n public totalLines: number;\n\n constructor(productList: ProductList, orderTemplateLines: OrderTemplateLine[], totalLines: number) {\n this.productList = productList;\n this.orderTemplateLines = orderTemplateLines;\n this.totalLines = totalLines;\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { ProductAvailableQuantity, ProductDimensionValueInventoryAvailability, ProductInventoryAvailability } from '@msdyn365-commerce/retail-proxy';\n\n/**\n * This setting defines the delivery modes supported.\n */\nexport enum DeliveryMode {\n allWareHouses = 0,\n shipping = 1,\n pickup = 2\n}\n\n/**\n * This setting defines the inventory levels supported.\n */\nexport enum InventoryLevels {\n physicalAvailable = 'physicalAvailable',\n totalAvailable = 'totalAvailable',\n threshold = 'inventoryThreshold'\n}\n\n/**\n * Product inventory information class.\n */\nexport interface IProductInventoryInformation {\n ProductAvailableQuantity: ProductAvailableQuantity;\n StockLevelCode?: string;\n StockLevelLabel?: string;\n IsProductAvailable: boolean;\n InventLocationId?: string;\n deliveryType?: DeliveryMode;\n}\n\n/**\n * This setting defines the inventory level values return by the API.\n */\nexport enum InventoryLevelValues {\n outOfStock = 'OOS',\n available = 'AVAIL'\n}\n\n/**\n * Retrieves inventory level code from the dimension based on the app config setting.\n * @param dimensionValuesWithInventory - The dimension info.\n * @param inventoryLevel - App config setting for inventory level.\n * @returns Inventory level code value.\n */\nexport const getInventoryLevelCodeFromDimensionValue = (\n dimensionValuesWithInventory: ProductDimensionValueInventoryAvailability,\n inventoryLevel?: InventoryLevels | undefined): InventoryLevelValues | undefined => {\n\n if (inventoryLevel === InventoryLevels.totalAvailable) {\n return dimensionValuesWithInventory.TotalAvailableInventoryLevelCode as InventoryLevelValues | undefined;\n }\n if (inventoryLevel === InventoryLevels.physicalAvailable) {\n return dimensionValuesWithInventory.PhysicalAvailableInventoryLevelCode as InventoryLevelValues | undefined;\n }\n return undefined;\n};\n\n/**\n * Retrieves inventory level code from the product availability based on the app config setting.\n * @param productAvailability - The product availability info.\n * @param inventoryLevel - App config setting for inventory level.\n * @returns Inventory level code value.\n */\nexport const getInventoryLevelCodeFromProductAvailability = (\n productAvailability: ProductInventoryAvailability,\n inventoryLevel?: InventoryLevels | undefined): InventoryLevelValues | undefined => {\n\n if (inventoryLevel === InventoryLevels.totalAvailable) {\n return productAvailability.TotalAvailableInventoryLevelCode as InventoryLevelValues | undefined;\n }\n if (inventoryLevel === InventoryLevels.physicalAvailable) {\n return productAvailability.PhysicalAvailableInventoryLevelCode as InventoryLevelValues | undefined;\n }\n return undefined;\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { InventoryAvailabilitySearchCriteria,\n ProductAvailableQuantity,\n ProductWarehouseInventoryAvailability,\n ProductWarehouseInventoryInformation,\n SearchArea } from '@msdyn365-commerce/retail-proxy';\n\nimport { DeliveryMode, InventoryLevels, InventoryLevelValues, IProductInventoryInformation } from './product-inventory-information';\n\n/**\n * The function defines whether the inventory label should be displayed or not.\n * @param context - The action context.\n * @param inventoryCode - The inventory code.\n * @returns Boolean.\n */\nexport function displayLabelEnabled(context: IActionContext, inventoryCode?: string): boolean {\n if (!inventoryCode) {\n return false;\n }\n\n switch (context.requestContext.app.config.inventoryRanges) {\n case 'lowAndOutofStock':\n if (inventoryCode !== InventoryLevelValues.available) {\n return true;\n }\n break;\n case 'outOfStock':\n if (inventoryCode === InventoryLevelValues.outOfStock) {\n return true;\n }\n break;\n case 'all':\n return true;\n }\n return false;\n}\n\n/**\n * The function that maps a ProductWareHouse object into a ProductAvailabilityQuantity.\n * @param context - The action context.\n * @param productsWarehouseInventory - The product warehouse inventory information.\n * @returns IProductInventoryInformation[].\n */\nexport function mapProductInventoryInformation(\n context: IActionContext,\n productsWarehouseInventory?: ProductWarehouseInventoryAvailability[]): IProductInventoryInformation[] {\n const productInventoryInformation: IProductInventoryInformation[] = [];\n\n if (context.requestContext.app.config.enableStockCheck === undefined || context.requestContext.app.config.enableStockCheck === false) {\n return productInventoryInformation;\n }\n\n if (productsWarehouseInventory && productsWarehouseInventory.length > 0) {\n for (const product of productsWarehouseInventory) {\n switch (context.requestContext.app.config.inventoryLevel) {\n case InventoryLevels.physicalAvailable:\n // Inventory level is enabled with Physical inventory\n const physicalProductMap = mapInventoryWithPhysicalBufferEnabled(context, product);\n if (physicalProductMap) {\n productInventoryInformation.push(physicalProductMap);\n }\n break;\n case InventoryLevels.totalAvailable:\n // Inventory level is enabled with Total available inventory\n const totalAvailableProductMap = mapInventoryWithTotalAvailableBufferEnabled(context, product);\n if (totalAvailableProductMap) {\n productInventoryInformation.push(totalAvailableProductMap);\n }\n break;\n default:\n // When inventory level is inventoryThreshold or not defined\n const productMap = mapInventoryWithThresholdEnabled(context, product);\n if (productMap) {\n productInventoryInformation.push(productMap);\n }\n break;\n }\n }\n }\n return productInventoryInformation;\n}\n\n/**\n * The function that maps inventory for when threshold is selected.\n * @param context - The action context.\n * @param productWarehouseInventoryAvailability - The product warehouse inventory information.\n * @returns IProductInventoryInformation.\n */\nexport function mapInventoryWithThresholdEnabled(\n context: IActionContext,\n productWarehouseInventoryAvailability: ProductWarehouseInventoryAvailability): IProductInventoryInformation | null {\n if (productWarehouseInventoryAvailability.ProductId &&\n productWarehouseInventoryAvailability.TotalAvailable !== undefined) {\n const productQty = productWarehouseInventoryAvailability.TotalAvailable - context.requestContext.app.config.outOfStockThreshold;\n const productAvailableQuantity: ProductAvailableQuantity = {\n ProductId: productWarehouseInventoryAvailability.ProductId,\n AvailableQuantity: productQty > 0 ? productQty : 0\n };\n\n return {\n ProductAvailableQuantity: productAvailableQuantity,\n IsProductAvailable: !!(productAvailableQuantity.AvailableQuantity && productAvailableQuantity.AvailableQuantity > 0),\n InventLocationId: productWarehouseInventoryAvailability.InventLocationId\n };\n }\n\n return null;\n}\n\n/**\n * The function that maps inventory for when physical available is selected.\n * @param context - The action context.\n * @param productWarehouseInventoryAvailability - The product warehouse inventory information.\n * @returns IProductInventoryInformation.\n */\nexport function mapInventoryWithPhysicalBufferEnabled(\n context: IActionContext,\n productWarehouseInventoryAvailability: ProductWarehouseInventoryAvailability): IProductInventoryInformation | null {\n const shouldRenderLabel = displayLabelEnabled(context, productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelCode);\n\n if (productWarehouseInventoryAvailability.ProductId &&\n productWarehouseInventoryAvailability.TotalAvailable !== undefined) {\n // As per the new buffer logic from RS,\n // if code is out of stock then we set the available quantity to 0 regardless of the actual value from API\n let productQuantity: number | undefined = 0;\n if (productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelCode !== InventoryLevelValues.outOfStock) {\n productQuantity = productWarehouseInventoryAvailability.PhysicalAvailable;\n }\n\n const productAvailableQuantity: ProductAvailableQuantity = {\n ProductId: productWarehouseInventoryAvailability.ProductId,\n AvailableQuantity: productQuantity\n };\n return {\n ProductAvailableQuantity: productAvailableQuantity,\n StockLevelCode: shouldRenderLabel ? productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelCode : undefined,\n StockLevelLabel: shouldRenderLabel ? productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelLabel : undefined,\n IsProductAvailable: productAvailableQuantity.AvailableQuantity !== undefined && (productAvailableQuantity.AvailableQuantity > 0),\n InventLocationId: productWarehouseInventoryAvailability.InventLocationId\n };\n }\n\n return null;\n}\n\n/**\n * The function that maps inventory for when total available is selected.\n * @param context - The action context.\n * @param productWarehouseInventoryAvailability - The product warehouse inventory information.\n * @returns IProductInventoryInformation.\n */\nexport function mapInventoryWithTotalAvailableBufferEnabled(\n context: IActionContext,\n productWarehouseInventoryAvailability: ProductWarehouseInventoryAvailability): IProductInventoryInformation | null {\n\n const shouldRenderLabel = displayLabelEnabled(context, productWarehouseInventoryAvailability.TotalAvailableInventoryLevelCode);\n if (productWarehouseInventoryAvailability.ProductId && productWarehouseInventoryAvailability.TotalAvailable !== undefined) {\n // As per the new buffer logic from RS,\n // if code is out of stock then we set the available quantity to 0 regardless of the actual value from API\n let productQuantity: number | undefined = 0;\n if (productWarehouseInventoryAvailability.TotalAvailableInventoryLevelCode !== InventoryLevelValues.outOfStock) {\n productQuantity = productWarehouseInventoryAvailability.TotalAvailable;\n }\n\n const productAvailableQuantity: ProductAvailableQuantity = {\n ProductId: productWarehouseInventoryAvailability.ProductId,\n AvailableQuantity: productQuantity\n };\n return {\n ProductAvailableQuantity: productAvailableQuantity,\n StockLevelCode: shouldRenderLabel ? productWarehouseInventoryAvailability.TotalAvailableInventoryLevelCode : undefined,\n StockLevelLabel: shouldRenderLabel ? productWarehouseInventoryAvailability.TotalAvailableInventoryLevelLabel : undefined,\n IsProductAvailable: productAvailableQuantity.AvailableQuantity != undefined && (productAvailableQuantity.AvailableQuantity > 0),\n InventLocationId: productWarehouseInventoryAvailability.InventLocationId\n };\n }\n\n return null;\n}\n\n/**\n * The function created a InventoryAvailabilitySearchCriteria object for getEstimatedAvailability API.\n * @param context - The action context.\n * @returns Boolean.\n */\nexport function isAggregatedInventory(context: IActionContext): boolean {\n // If warehouse aggregated is true then query inventory from multiple warehouses\n // else query from single warehouse\n return (context.requestContext.app.config.inventoryLevel === InventoryLevels.totalAvailable ||\n context.requestContext.app.config.inventoryLevel === InventoryLevels.physicalAvailable) &&\n context.requestContext.app.config.warehouseAggregation === 'multiple';\n}\n\n/**\n * The function created a InventoryAvailabilitySearchCriteria object for getEstimatedAvailability API.\n * @param context - The action context.\n * @param productWarehouseInventoryInformation - The product ware house inventory information.\n * @returns ProductWarehouseInventoryInformation.\n */\nexport function mapAggregatedProductInventoryInformation(\n context: IActionContext,\n productWarehouseInventoryInformation: ProductWarehouseInventoryInformation): IProductInventoryInformation[] {\n if (isAggregatedInventory(context)) {\n const productInventoryMapping: ProductWarehouseInventoryAvailability[] | undefined =\n productWarehouseInventoryInformation.AggregatedProductInventoryAvailabilities?.map(\n product => {\n return {\n DataAreaId: product.DataAreaId,\n ProductId: product.ProductId,\n PhysicalAvailable: product.PhysicalAvailableQuantity,\n PhysicalAvailableInventoryLevelCode: product.PhysicalAvailableInventoryLevelCode,\n PhysicalAvailableInventoryLevelLabel: product.PhysicalAvailableInventoryLevelLabel,\n TotalAvailable: product.TotalAvailableQuantity,\n TotalAvailableInventoryLevelCode: product.TotalAvailableInventoryLevelCode,\n TotalAvailableInventoryLevelLabel: product.TotalAvailableInventoryLevelLabel\n };\n }\n );\n return mapProductInventoryInformation(context, productInventoryMapping);\n }\n\n return mapProductInventoryInformation(context, productWarehouseInventoryInformation.ProductWarehouseInventoryAvailabilities);\n}\n\n/**\n * The function created a InventoryAvailabilitySearchCriteria object for getEstimatedAvailability API.\n * @param context - The action context.\n * @param productIds - The product id collection.\n * @param isDefaultWareHouse - Flag to define whether inventory is from default warehouse or not.\n * @param isFilterByChannelFulfillmentGroup - Filter by fulfillment group.\n * @param searchArea - The search area.\n * @param defaultDeliveryMode - The delivery mode.\n * @returns InventoryAvailabilitySearchCriteria.\n */\nexport function createInventoryAvailabilitySearchCriteria(\n context: IActionContext,\n productIds: number[],\n isDefaultWareHouse?: boolean,\n isFilterByChannelFulfillmentGroup?: boolean,\n searchArea?: SearchArea,\n defaultDeliveryMode?: DeliveryMode\n): InventoryAvailabilitySearchCriteria {\n\n const salesUnitType = 2;\n const deliveryMode = defaultDeliveryMode ? defaultDeliveryMode : DeliveryMode.shipping;\n\n const inventoryAvailabilitySearchCriteria: InventoryAvailabilitySearchCriteria = {\n ProductIds: productIds,\n QuantityUnitTypeValue: salesUnitType,\n SearchArea: searchArea\n };\n\n if (isAggregatedInventory(context)) {\n inventoryAvailabilitySearchCriteria.FilterByChannelFulfillmentGroup = true;\n inventoryAvailabilitySearchCriteria.DeliveryModeTypeFilterValue = deliveryMode;\n } else {\n inventoryAvailabilitySearchCriteria.DefaultWarehouseOnly = isDefaultWareHouse;\n inventoryAvailabilitySearchCriteria.FilterByChannelFulfillmentGroup = isFilterByChannelFulfillmentGroup;\n }\n\n return inventoryAvailabilitySearchCriteria;\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { PromiseBodyWrapper } from './base-promise-queue';\nimport { PromiseQueue } from './promise-queue';\n\nexport enum FinitePromiseQueueError {\n InvalidMaxQueueLengthPassed = 'Invalid maxQueueLength value passed to FinitePromiseQueue. maxQueueLength should be more or equal to 2.',\n ProcessWasDiscardedFromTheQueue = 'The process was discarded from FinitePromiseQueue.'\n}\n\n/**\n * Represents a FIFO queue over promises with a limited number of elements waiting for execution.\n * @remark\n * In case the queue reaches the limit,\n * before adding a new element the queue discards the oldest added element which is waiting to be processed.\n * Does not discard elements which are in progress under execution.\n * The discarded element will not be processed and executed.\n * @author Bohdan Yevchenko \n */\nexport class FinitePromiseQueue extends PromiseQueue {\n /**\n * @see constructor\n */\n private readonly _maxQueueLength: number;\n\n /**\n * Initializes the queue with the given limit.\n * @param {number} maxQueueLength\n * Defines the limit of maximum number of elements in the queue.\n * @remarks Includes both the number of elements waiting for the execution\n * and the element processed by the queue at the moment (in case there is some).\n * Value can't be less than 2.\n */\n public constructor(maxQueueLength: number) {\n if (maxQueueLength < 2) {\n throw new Error(FinitePromiseQueueError.InvalidMaxQueueLengthPassed);\n }\n\n super();\n this._maxQueueLength = maxQueueLength;\n }\n\n /**\n * Adds promise to the queue and automatically starts the queue execution.\n * @remarks In case the queue has reached the limit, also discards the oldest added element.\n * @param {PromiseBodyWrapper} promiseBody\n * The body of a function which contains a call to the promise which has to be executed in the queue.\n */\n public async enqueue(promiseBody: PromiseBodyWrapper): Promise {\n let totalElementsCount = this._queue.length;\n\n // If queue hasn't finished processing an element,\n // consider this element as pending.\n if (this._isBusy) {\n ++totalElementsCount;\n }\n\n // Discards the oldest added element from the queue to meet the given limitations.\n // The very first element in the queue is considered as oldest added.\n // Can't discard the element which is under execution as the promise can't be cancelled.\n if (totalElementsCount === this._maxQueueLength) {\n const element = this._queue.shift();\n if (element) {\n element.reject(FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue);\n }\n }\n\n return super.enqueue(promiseBody);\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IPromiseQueue, PromiseBodyWrapper, PromiseRejectType, PromiseResolveType } from './base-promise-queue';\n\n/**\n * Represents an inner node which is stored in a promise queue.\n * Used internally in the PromiseQueue implementation.\n * @author Bohdan Yevchenko \n */\nclass PromiseQueueElement {\n /**\n * The body of a wrapper-function which contains a call to the promise which has to be executed in the queue.\n */\n public readonly body: PromiseBodyWrapper;\n\n /**\n * Method that resolves the promise after the promise from the body is resolved.\n */\n public readonly resolve: PromiseResolveType;\n\n /**\n * Method that rejects the promise after the promise from the body is rejected.\n */\n public readonly reject: PromiseRejectType;\n\n /**\n * Initializes queue element with the given data.\n * @param {PromiseBodyWrapper} body The body of a wrapper-function which contains a call to the promise which has to be executed in the queue.\n * @param {PromiseResolveType} resolve Method that resolves the promise after the promise from the body is resolved.\n * @param {PromiseRejectType} reject Method that rejects the promise after the promise from the body is rejected.\n */\n public constructor(\n body: PromiseBodyWrapper,\n resolve: PromiseResolveType,\n reject: PromiseRejectType) {\n\n this.body = body;\n this.resolve = resolve;\n this.reject = reject;\n }\n}\n\n/**\n * Represents a FIFO basic queue over promises.\n * @author Bohdan Yevchenko \n */\nexport class PromiseQueue implements IPromiseQueue {\n /**\n * A list of promises waiting for execution.\n */\n protected readonly _queue: PromiseQueueElement[];\n\n /**\n * Defines whether the queue is processing some element.\n */\n protected _isBusy: boolean;\n\n /**\n * Defines whether the queue can start processing new element.\n */\n private get _canProcess(): boolean {\n return !this._isBusy && this._queue.length > 0;\n }\n\n /**\n * Creates a new instance of PromiseQueue.\n */\n public constructor() {\n this._queue = [];\n this._isBusy = false;\n }\n\n /**\n * Adds promise to the queue and automatically starts the queue execution.\n * @param {PromiseBodyWrapper} promiseBody\n * The body of a function which contains a call to the promise which has to be executed in the queue.\n */\n public async enqueue(promiseBody: PromiseBodyWrapper): Promise {\n return new Promise(async (resolve, reject) => {\n this._queue.push(new PromiseQueueElement(promiseBody, resolve, reject));\n await this._dequeue();\n });\n }\n\n /**\n * If the queue is free, starts processing the first element in the queue and waits until all the elements are processed.\n * Otherwise (if busy or has no elements to process), does nothing.\n */\n private async _dequeue(): Promise {\n // Skip if queue is not able to process any elements.\n if (!this._canProcess) {\n return;\n }\n\n // Lock queue to prevent parallel execution.\n this._isBusy = true;\n\n // Retrieve an element from the waiting queue and start processing.\n const element: PromiseQueueElement = this._queue.shift()!;\n await this._processElement(element);\n\n // Continue executing the subsequent queue elements.\n await this._processNext();\n }\n\n /**\n * Executes the given wrapper over the promise and calls initial resolve/reject correspondingly.\n * @param {PromiseQueueElement} element The queue element which should be processed now.\n */\n private async _processElement(element: PromiseQueueElement): Promise {\n try {\n await element.body().then(element.resolve).catch(element.reject);\n } catch (error) {\n element.reject(error);\n }\n }\n\n /**\n * Unlocks the queue and tries to process the next element in the queue.\n */\n private async _processNext(): Promise {\n this._isBusy = false;\n await this._dequeue();\n }\n}\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { v4 as uuidv4 } from 'uuid';\n\n/**\n * Namespace which provides functionality for GUID.\n */\nexport namespace Guid {\n export function generateGuid(): string {\n return uuidv4();\n }\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Guid as _guid } from './guid';\n\nexport namespace Random {\n export import Guid = _guid;\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 * Regular expressions to validate emails.\n */\nexport abstract class EmailRegex {\n /**\n * Represents a HTML5 Validation Regex.\n *\n * A valid email address is a string that matches the email production of the following ABNF, the character set for which is Unicode.\n * This ABNF implements the extensions described in RFC 1123.\n *\n * For more info: https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address.\n */\n public static readonly html5EmailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/; // eslint-disable-line unicorn/better-regex, security/detect-unsafe-regex, require-unicode-regexp, max-len -- HTML 5 Email Validation Regex.\n\n /**\n * Returns a default regex which should be used for most email validation cases.\n *\n * As of now, the default regex is HTML5 email regex standard.\n * @see EmailRegex.html5EmailRegex - The regex which is set to be default right now.\n *\n * @returns Regular expression for email validation.\n */\n public static get defaultRegex(): RegExp {\n return EmailRegex.html5EmailRegex;\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 * Regular expressions to validate passwords.\n */\nexport abstract class PasswordRegex {\n // eslint-disable-next-line max-len, unicorn/better-regex, require-unicode-regexp -- Default regex from the existing implementation.\n public static readonly defaultRegex = /^((?=.*[a-z])(?=.*[A-Z])(?=.*\\d)|(?=.*[a-z])(?=.*[A-Z])(?=.*[^A-Za-z0-9])|(?=.*[a-z])(?=.*\\d)(?=.*[^A-Za-z0-9])|(?=.*[A-Z])(?=.*\\d)(?=.*[^A-Za-z0-9]))([A-Za-z\\d@#$%^&*\\-_+=[\\]{}|\\\\:',?/`~'();!]|\\.(?!@)){8,16}$/;\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 * Regular expressions to validate phone number.\n */\nexport abstract class PhoneRegex {\n\n public static readonly defaultRegex = '^$|^[- +()]*[0-9][- +()0-9]*$';\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { generateImageUrl as generateImageUrlFromSdk, IAny, ICommerceApiSettings, ICoreContext,\n ICreateActionContext, IGeneric, IRequestContext } from '@msdyn365-commerce/core';\nimport {\n AsyncResult, CartLine, CommerceListLine, ProductDimension,\n ProductDimensionType, ProductSearchResult, QueryResultSettings, SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ProductDetailsCriteria } from '../get-full-products';\nimport { ArrayExtensions } from './extensions';\nimport { parseSearchData } from './input-data-parser';\nimport { InventoryLevels } from './product-inventory-information';\n\nexport const wrapInResolvedAsyncResult = (input: T | null | undefined): AsyncResult => {\n return >{\n status: 'SUCCESS',\n result: input,\n metadata: {}\n };\n};\n\nexport const wrapInRejectedAsyncResult = (input: T | null | undefined): AsyncResult => {\n return >{\n status: 'FAILED',\n result: input,\n metadata: {}\n };\n};\n\nexport const buildQueryResultSettings = (inputData: ICreateActionContext, IGeneric>): QueryResultSettings => {\n try {\n const searchInputData = parseSearchData(inputData);\n const search = searchInputData.q;\n if (!search) {\n throw new Error('Query string ?q={searchText} is needed for search actions.');\n }\n const top = (searchInputData.maxItems && Number(searchInputData.maxItems)) || searchInputData.top;\n return { Paging: { Top: top, Skip: searchInputData.skip } };\n } catch {\n return {};\n }\n};\n\n/**\n * Utility function to extract the active productId in the following priority:\n * First query param (productId), then UrlToken (itemId), then module config.\n * @param inputData - The Action Input data.\n * @returns Productid or undefined.\n */\nexport const getSelectedProductIdFromActionInput = (inputData: ICreateActionContext>): string | undefined => {\n const context = inputData.requestContext;\n if (context.query?.productId) {\n return context.query.productId;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Exsiting code.\n } else if (context.urlTokens && inputData.requestContext.urlTokens.itemId && inputData.requestContext.urlTokens.pageType === 'Product') {\n return context.urlTokens.itemId;\n } else if (inputData && inputData.config && inputData.config.productId) {\n return inputData.config.productId;\n }\n return undefined;\n};\n\n/**\n * Generates a Image URL based on data return from retail server.\n * @param imageUrl The image url returned by Retail Server.\n * @param ctx The request context.\n * @param apiSettings\n */\nexport const generateImageUrl = (imageUrl: string | undefined, apiSettings: ICommerceApiSettings): string | undefined => {\n return generateImageUrlFromSdk(apiSettings, imageUrl);\n};\n\n/**\n * Represents app configuration for dimensions.\n */\nexport interface IDimensionsConfig {\n dimensionsAsSwatchType?: DimensionTypes[];\n dimensionsInProductCard?: DimensionTypes[];\n inventoryLevel?: InventoryLevels;\n dimensionToPreSelectInProductCard?: DimensionTypes;\n}\n\n/**\n * Represents app configuration for dimensions.\n */\nexport interface IDimensionsApp {\n config: IDimensionsConfig;\n}\n\n/**\n * Represents product dimension types.\n */\nexport enum DimensionTypes {\n none = 'none',\n color = 'color',\n configuration = 'configuration',\n size = 'size',\n style = 'style'\n}\n\n/**\n * Defines display configuration types.\n */\nexport enum DimensionSwatchDisplayTypes {\n default = 'default',\n productCard = 'productCard'\n}\n\n/**\n * Checks if rendering the particular dimensions is allowed.\n * @param dimensionType - Dimension to be displayed.\n * @param context - Core application context.\n * @param displayType - The swatch location, the component from which it comes from.\n * @returns Updates the state with new product page url.\n */\nexport const checkIfShouldDisplayAsSwatch = (\n dimensionType: DimensionTypes,\n context: ICoreContext,\n displayType: DimensionSwatchDisplayTypes = DimensionSwatchDisplayTypes.default): boolean => {\n\n // Additional checks for the product card since it has a separate config setting.\n if (displayType === DimensionSwatchDisplayTypes.productCard) {\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n if (!ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) ||\n dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) ||\n !dimensionsToDisplayOnProductCard.includes(dimensionType)) {\n return false;\n }\n }\n\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n return ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none) &&\n dimensionsToDisplayAsSwatch.includes(dimensionType);\n};\n\n/**\n * Generates an image URL for a swatch.\n * @param imageUrl - The image url returned by Retail Server.\n * @param apiSettings - The request context.\n * @returns Full image url.\n */\nexport const generateSwatchImageUrl = (imageUrl: string, apiSettings: ICommerceApiSettings): string => {\n if (imageUrl.startsWith('http')) {\n return imageUrl;\n }\n\n return apiSettings.baseImageUrl + encodeURIComponent(imageUrl);\n};\n\n/**\n * Generates a Image URL for a product based on data return from retail server.\n * @param product The Product returned by Retail Server.\n * @param ctx The request context.\n * @param apiSettings\n */\nexport const generateProductImageUrl = (\n product: SimpleProduct | ProductSearchResult,\n apiSettings: ICommerceApiSettings\n): string | undefined => {\n return generateImageUrl(product.PrimaryImageUrl, apiSettings);\n};\n\n/**\n * Creates a CartLine object from the passed data.\n * @param product The product.\n * @param quantity The quantity.\n * @param catalogId The catalog.\n */\nexport const buildCartLine = (product: SimpleProduct, quantity?: number, catalogId?: number): CartLine => {\n return {\n CatalogId: catalogId || 0,\n Description: product.Description,\n\n // TODO: Investigate this value and what it represents\n EntryMethodTypeValue: 3,\n ItemId: product.ItemId,\n ProductId: product.RecordId,\n Quantity: quantity || 1,\n TrackingId: '',\n UnitOfMeasureSymbol: product.DefaultUnitOfMeasure\n };\n};\n\n/**\n * Creates a CommerceListLine (also know as WishlistLine) object from the passed data.\n * @param productId The RecordId of the Product to be added.\n * @param customerId The account number of the customer.\n * @param wishlistId The Id of the commerce list.\n */\nexport const buildWishlistLine = (productId: number, customerId: string, wishlistId: number): CommerceListLine => {\n return {\n CommerceListId: wishlistId,\n ProductId: productId,\n CustomerId: customerId\n };\n};\n\n/**\n * Utility function to prepare the product details criteria before getting full product:\n * @param inputData The Action Input data\n */\nexport const getProductDetailsCriteriaFromActionInput = (inputData: ICreateActionContext>): ProductDetailsCriteria => {\n if (inputData && inputData.config) {\n return {\n getPrice: !inputData.config.hidePrice,\n getRating: !inputData.config.hideRating\n };\n }\n return {\n getPrice: true,\n getRating: true\n };\n};\n\n/**\n * Transforms search text into the expected 'search terms' format, expected by refiner APIs.\n * @param searchText Free-form text used for searching for products or categories of products.\n */\nexport const ensureSearchTextIsFormedProperly = (searchText: string): string => {\n const prefix = searchText.startsWith('\\'') ? '' : '\\'';\n const suffix = searchText.endsWith('\\'') ? '' : '\\'';\n return `${prefix}${searchText}${suffix}`;\n};\n\nexport const ensureSafeSearchText = (searchText: string): string => {\n return searchText.replace(/[^\\d\\sA-Za-z]+/g, '');\n};\n\nexport const buildCacheKey = (base: string, apiSettings: ICommerceApiSettings, locale?: string): string => {\n return `${base}-chanId:${apiSettings.channelId}-catId:${apiSettings.catalogId}${locale ? `-${locale}` : ''}`;\n};\n\nexport const buildCacheKeyWithUrlTokens = (base: string, requestContext: IRequestContext): string => {\n const urlTokens = requestContext.urlTokens;\n const defaultCacheKey = buildCacheKey(base, requestContext.apiSettings, requestContext.locale);\n return urlTokens ? `${defaultCacheKey}-${urlTokens.itemId}-${urlTokens.recordId}-${urlTokens.pageType}` : defaultCacheKey;\n};\n\n/**\n * Generates a key from set of arguments as inputs.\n *\n * @param args Argument list of pivots to generate key from.\n * @param handler Handler function for null/undefined values.\n */\n\ntype TKeyTypes = string | number | boolean | null | undefined;\ninterface IGenerateKeyOptions {\n separator?: string;\n handler?(input: null | undefined): string;\n}\nexport const generateKey = (args: TKeyTypes[], options?: IGenerateKeyOptions): string => {\n const { handler, separator }: IGenerateKeyOptions = { ...{ separator: '-', handler: undefined }, ...(options || {}) };\n return args\n .map(arg => {\n if (arg === null || arg === undefined) {\n if (handler) {\n return handler(arg);\n }\n }\n return arg;\n })\n .join(separator);\n};\n\n/**\n * Gets the fall back image url for a variant image.\n * @param itemId Item id of a product.\n * @param apiSettings Api setting from request context.\n */\nexport const getFallbackImageUrl = (itemId: string | undefined, apiSettings: ICommerceApiSettings): string | undefined => {\n if (!itemId) {\n return '';\n }\n\n const parsedItemId = itemId.trim().split(' ')[0];\n\n const productUrl = `Products/${parsedItemId}_000_001.png`;\n return generateImageUrl(productUrl, apiSettings);\n};\n\n/**\n * Converts retail proxy product dimension type to display dimension type.\n * @param productDimensionType - Product dimension type from retail proxy.\n * @returns Local dimension type.\n */\nexport const convertProductDimensionTypeToDimensionTypes = (productDimensionType: ProductDimensionType): DimensionTypes => {\n switch (productDimensionType) {\n case ProductDimensionType.Color:\n return DimensionTypes.color;\n case ProductDimensionType.Configuration:\n return DimensionTypes.configuration;\n case ProductDimensionType.Size:\n return DimensionTypes.size;\n case ProductDimensionType.Style:\n return DimensionTypes.style;\n default:\n return DimensionTypes.none;\n }\n};\n\n/**\n * Converts display dimension type to retail proxy product dimension type.\n * @param dimensionType - Local dimension type.\n * @returns Product dimension type from retail proxy.\n */\nexport const convertDimensionTypeToProductDimensionType = (dimensionType: DimensionTypes): ProductDimensionType => {\n switch (dimensionType) {\n case DimensionTypes.color:\n return ProductDimensionType.Color;\n case DimensionTypes.configuration:\n return ProductDimensionType.Configuration;\n case DimensionTypes.size:\n return ProductDimensionType.Size;\n case DimensionTypes.style:\n return ProductDimensionType.Style;\n default:\n return ProductDimensionType.None;\n }\n};\n\n/**\n * Sets dimensions to url.\n * @param inputUrl - Url to update.\n * @param productDimensions - Dimensions to set.\n */\nexport const setDimensionValuesToQuery = (inputUrl: URL, productDimensions: ProductDimension[]): void => {\n for (const dimension of productDimensions) {\n inputUrl.searchParams.set(\n convertProductDimensionTypeToDimensionTypes(dimension.DimensionTypeValue), dimension.DimensionValue?.Value ?? '');\n }\n\n window.history.replaceState(window.history.state, '', inputUrl.toString().replace(inputUrl.host, window.location.host));\n};\n\n/**\n * Retrieves dimension value stored in url.\n * @param urlParameters - Url parameters.\n * @param productDimensionType - The dimension type to retrieve.\n * @returns Product dimension item.\n */\nconst parseDimensionFromUrl = (urlParameters: URLSearchParams, productDimensionType: ProductDimensionType): ProductDimension | undefined => {\n const localDimensionType = convertProductDimensionTypeToDimensionTypes(productDimensionType);\n const value = urlParameters.get(localDimensionType);\n if (!value) {\n return undefined;\n }\n return {\n DimensionTypeValue: productDimensionType,\n DimensionValue: {\n RecordId: 0,\n Value: value\n }\n };\n};\n\n/**\n * Retrieves all dimensions from URL.\n * @param urlParameters - Url parameters.\n * @returns Product dimensions stored in url.\n */\nconst parseDimensionsFromUrl = (urlParameters: URLSearchParams): ProductDimension[] => {\n const dimensionsToParse: ProductDimensionType[] = [ProductDimensionType.Color, ProductDimensionType.Size, ProductDimensionType.Style];\n const parsedDimensions = dimensionsToParse.map(dimension => parseDimensionFromUrl(urlParameters, dimension));\n return ArrayExtensions.validValues(parsedDimensions);\n};\n\n/**\n * Utility function to extract the dimension values from input url querystring.\n * @param inputUrl - The request url.\n * @returns The selected dimension values.\n */\nexport const getDimensionValuesFromQuery = (inputUrl: URL): ProductDimension[] => {\n const urlWithIgnoredCase = new URL(inputUrl.toString().toLocaleLowerCase());\n const urlParameters = urlWithIgnoredCase.searchParams;\n const dimensions: ProductDimension[] = parseDimensionsFromUrl(urlParameters);\n return dimensions;\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { createObservableDataAction, IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IActiveTabState } from './tab-state';\n\nexport function createTabStateInput(result: IActiveTabState): GenericInput {\n return new GenericInput('activeTabState', result, 'IActiveTabState');\n}\n\nconst createTabStateInputInternal = (): IActionInput => {\n return createTabStateInput({});\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createTabStateInputInternal\n});\n\nexport default getGenericActionDataAction;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["geoEndpoint","config","console","log","JSON","stringify","this","Promise","resolve","ip","requestContext","userId","geoInformation","geoMockService","result","data","service","name","mock","input","city","response","country","region","postalCode","testSegments","segmentationIds","testResult","forEach","segmentId","componentDictionary","c","async","cn","error","handleMissingImplementationDetails","functionName","connectorName","connectorType","Error","isServer","window","document","connectorDictionary","connectorProviderImpl","require","default","provider","connectorListenerImpl","connectorDomainsList","listener","connectorDomains","validateConnectorRegistration","segmentationProvider","__proto__","initialize","getSegmentations","e","undefined","verifySegmentationRegistration","connectorImpl","getConfigForClientSideInit","initializeClientSide","getExperiments","getVariantsForUser","activateExperiment","logEvent","verifyExperimentationReigstration","geoLookupProvider","getGeoInformation","verifyGeoLookupRegistration","registerAllModules","requiredModules","binding","modules","dataActions","handleError","modPath","errObject","errorObject","process","exit","map","module","toLowerCase","isNotRegistered","moduleName","length","findIndex","registerActionId","actionPath","prototype","id","registerSanitizedActionPath","sanitizedActionPath","dataAction","RegistrationId","$type","da","iNM","ns","n","p","pdp","md","path","runOn","definitionExtensions","themeSettings","viewDictionary","createAccordionStateInput","getGenericActionDataAction","action","BaseStoreSelectorStateManager","listMapViewState","displayList","displayMap","preferredStoreLocalStorageKey","isMapModuleLoaded","value","_readFromToCookie","storeInfo","parse","preferredStore","_context","storeId","selectedStoreLocationId","storeName","writeToCookie","StoreId","StoreName","Latitude","Longitude","_writeToCookie","latitude","longitude","lastInlineShownStoreInfo","_removeCookie","key","localStorage","removeItem","setItem","cookieValue","getItem","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchTerm","actionContext","channel","BingMapsApiKey","BingMapsEnabled","searchContent","jsonp","crypto","getRandomValues","Uint32Array","ChannelCountryRegionISOCode","trim","query","encodeURI","geolocationApiUrl","app","requestUrl","script","createElement","setAttribute","remove","resourceSets","resources","point","coordinates","body","appendChild","StringExtensions","getElementById","url","lang","market","reject","type","defer","src","mapAPIReady","isMapApiLoaded","addEventListener","createStoreSelectorStateInput","inputData","CategoryPageSummaryInput","getCacheObjectType","getCacheKey","buildCacheKeyWithUrlTokens","dataCacheType","context","currentCategoryResult","createGetCurrentCategoryInput","currentCategory","categoryUrl","localName","locale","NameTranslations","neutralizedName","NeutralizedName","Name","getCategoryUrl","canonicalDomain","toLocaleLowerCase","title","sharingImageUrl","OfflineImage","canonicalUrl","faviconUrl","sharingImage","args","PageSummaryInput","description","keywords","ListItemType","ListPageSummaryInput","getSubListItem","item","sitePathOfRequest","imageList","getImages","fields","content","images","sublistHref","listName","_name","sitePath","Title","Description","ShortDescription","shortDescription","BackgroundColor","backgroundColor","ForegroundColor","foregroundColor","Href","Images","getSitePath","resultImageList","image","href","imageItem","altText","width","height","push","createGetListInput","listData","pageData","list","items","_id","getInputListData","listItems","productList","parentImageList","itemsPerPage","Number","isNaN","getItemsPerPage","skipCount","getSkipCount","productItems","sum","index","clonedList","product","recordId","productItem","RecordId","CatalogId","catalogId","ProductPageSummaryInput","apiSettings","productId","buildCacheKey","simpleProductData","getByIdAsync","callerContext","channelId","productUrl","productBrand","getProductUrlSync","productAttributes","getAttributeValuesAsync","queryResultSettings","productAttribute","TextValue","getProductBrand","generateImageUrl","PrimaryImageUrl","price","AdjustedPrice","getSelectedProductIdFromActionInput","AttributesForSelectedVariantInput","selectedProduct","createAttributesForSelectedVariantInput","getAttributesForSelectedVariantAction","ctx","then","activeProduct","selectedVariantInput","productResult","attributeValues","catch","trace","message","AddressManagementInput","address","userAccountNumber","createAddressManagementInput","user","isAuthenticated","doAddressManagementOperation","operationHandler","customerInput","GetCustomerInput","customer","newCustomer","updatedCustomer","updateAsync","update","createReadAsync","AccountNumber","Addresses","addAddressHandler","isBatched","AddItemToProductListInput","productListId","quantity","unitOfMeasure","productListLineToAdd","ProductListId","ProductId","Quantity","UnitOfMeasure","productListLine","ArrayExtensions","telemetry","AddOrganizationUserInput","newUser","businessPartner","BusinessPartnerId","createBusinessPartnerUserAsync","debug","exception","baseUrl","cartId","requestOptions","headers","oun","token","Authorization","cartTenderLines","cartTenderLineItem","TokenizedPaymentCard","House","CardTokenInfo","billingAddress","Phone","ThreeLetterISORegionName","Street","City","State","ZipCode","Country","toUpperCase","Address1","Zip","requestBody","receiptEmail","cartVersion","status","CreateProductListInput","templateName","templateType","orderTemplate","Id","ProductListTypeValue","createdProductList","deleteAddressHandler","filter","cur","DeleteOrganizationUserInput","deleteAsync","EditOrganizationUserInput","updatedUser","GenericInput","cacheKey","cacheObjectType","getGenericAction","AddressInput","createGetAddressInput","getAddressAction","getAddressActionDataAction","GetAttributeDefinitionsInput","attributeDefinitionCriteria","getAttributeDefinitionsActionDataAction","CustomerAttributeGroupId","getAttributeDefinitionsAsync","AttributeGroupIdentifier","ProductAvailabilitiesForCartLineItems","getDeliveryMode","cartLine","featureSate","channelDeliveryOptionConfig","pickupDeliveryMode","DeliveryMode","PickupDeliveryModeCodes","find","deliveryMode","getAvailabilitiesForCartLineItems","shippingItems","bopisItems","productAvailabilities","cart","getCartState","channelConfiguration","products","featureState","getFeatureStateActionDataAction","FeatureStateInput","getFeatureState","retailMultiplePickUpOptionEnabled","IsEnabled","getChannelDeliveryOptionConfigurationAsync","PickupDeliveryModeCode","EmailDeliveryModeCode","CartLines","productIds","x","searchCriteria","shippingProductAvailabilities","getEstimatedAvailabilityAsync","bypassCache","ProductWarehouseInventoryAvailabilities","bopisItem","productWarehouse","InventLocationId","WarehouseId","InventLocationDataAreaId","DataAreaId","quantityUnitTypeSales","getProductWarehouseAvail","getEstimatedProductWarehouseAvailabilityAsync","productWarehouseMapping","getAvailabilitiesForCartLineItemsDataAction","GetBusinessPartnerOperationRequestsInput","fromDate","toDate","getBusinessPartnerOperationRequestsAction","userInput","GetCurrentBusinessPartnerUserInput","getCurrentBusinessPartnerUser","B2BUserId","getOperationRequestsAsync","Date","now","CatalogsInput","customerAccountNumber","createCatalogsInput","getCatalogAction","getCatalogActionDataAction","CategoriesInput","mappedToHierarchy","maxItems","_mappedToHierarchy","getLocale","mapCategoryToHierarchy","categoryList","categoryMap","reduce","memo","category","nameTranslations","nameTranslation","Language","Text","getFriendlyName","categoryHierarchy","zeroCategory","Object","keys","element","parentId","ParentCategory","Url","parent","Children","createCategoriesHierarchyInput","topItems","topCategories","parseInt","getCategoryHierarchyAction","categories","getCategoryHierarchyActionDataAction","GetCategoryPathsInput","categoryPathLooksups","constructedCacheKey","ChannelId","categoryPath","toString","createGetCategoryPathsInput","getCategoryPathsAction","categoryPathResults","getCategoryPathsAsync","CategoryPath","slice","getCategoryPathsActionDataAction","GetChannelDeliveryConfigurationInput","accountNumber","GetCheckoutCartInput","CartCookieName","activeCart","checkoutCart","copyAsync","Array","isArray","createGetCurrentBusinessPartnerUserInput","IsB2b","getCurrentAsync","CurrentCategoryHierarchyInput","activeCategoryId","super","urlTokens","pageType","itemId","categoryId","activeCategoryParsedId","findCategoryHierarchy","innerCategoryHierarchy","getCurrentCategoryHierarchyAction","fullCategoryHierarchy","reverse","getCurrentCategoryHierarchyActionDataAction","CurrentCategoryInput","categorySlug","tempActionContext","parameterizeFeatureFlags","join","searchCategory","foundCategory","cat","Slug","matchingChild","getCurrentCategoryAction","categoryInput","getCurrentCategoryActionDataAction","GetCustomerBalanceInput","createGetCustomerBalanceInput","getCustomerBalanceAction","getCustomerBalanceAsync","InvoiceAccount","getCustomerBalanceActionDataAction","retailAction","createGetCustomerLoyaltyCardsInput","cacheType","getCustomerActionDataAction","ProductDeliveryOptionsForCartLineItems","getDeliveryOptionsForCartLineItems","getDeliveryOptionsAsync","getDeliveryOptionsForCartLineItemsDataAction","GetDeliveryOptionsForSelectedVariantInput","customerId","createDeliveryOptionsForSelectedVariantInput","getDeliveryOptionsForSelectedVariantAction","ItemTypeValue","getDeliveryOptionsForSelectedVariantActionDataAction","DimensionAvailabilitiesForProductSearchResultInput","dimensionContext","productsDimensionInputs","inventoryLevel","filteredProductAttributes","AttributeValues","attributeValue","checkIfShouldDisplayAsSwatch","productionDimensionType","ProductDimensionType","MasterProductId","dimensionForProducts","productsDimensionAvailabilities","dimensionInput","dimensionValuesWithInventory","inventoryLevelCode","getInventoryLevelCodeFromDimensionValue","DimensionValue","Value","isDisabled","InventoryLevelValues","masterProductId","warning","ProductsDimensionAvailabilitiesInput","requestDimensionType","getDimensionAvailabilitiesForProductsAction","inputs","promise","shippingInventoryConfiguration","RequestedDimensionTypeValue","MatchingDimensionValues","DefaultWarehouseOnly","FilterByChannelFulfillmentGroup","DeliveryModeTypeFilterValue","all","productsDimensions","productDimension","GetDimensionsForSelectedVariantInput","matchingDimensionValues","getDimensionsForSelectedVariantAction","Dimensions","promises","dimension","DimensionTypeValue","dimensionValues","dimensionValuesResults","newDimension","oldDimension","DimensionValues","getDimensionsForSelectedVariantActionDataAction","featureNames","createGetFeatureStateInput","getFeatureStateAction","getFeatureStatesAsync","GetFullAvailableInventoryNearbyInput","_productId","_latitude","_longitude","_radius","_DistanceUnitValue","_IgnoreLocation","radius","DistanceUnitValue","IgnoreLocation","createGetFullAvailableInventoryNearbyInput","getFullAvailableInventoryNearbyAction","searchArea","Radius","retailMulitplePickupMFeatureState","productInventoryInformation","productWarehouseInformation","DeliveryModeTypeFilter","storeMap","Map","stores","store","InventoryLocationId","set","locationDeliveryOptions","orgUnitChannel","channelCollection","channelIdList","channelDeliveryOptions","_getLocationPickUpDeliveryModes","availabilityPromiseList","locationDeliveryOption","_channeldeliveryoption","orgUnitLocation","channelDeleiveryOptions","OrgUnitNumber","OrgUnitAvailability","hours","itemAvailabilities","has","AvailableQuantity","ProductAvailableQuantity","availability","OrgUnitLocation","ItemAvailabilities","ProductInventoryInformation","OrgUnitPickUpDeliveryModes","StoreHours","_getAvailabilityWithHours","getFullAvailableInventoryNearbyActionDataAction","QuickOrderTemplate","quickOrderTemplateLines","totalLines","GetFullProductListInput","inputParameters","productLists","inputLines","linesState","lines","totalCount","FullProductsRefineSearchByCategoryInput","queryResultSettingsProxy","refinementCriteria","criteria","ProductDetailsCriteria","hasSortingColumn","QueryResultSettings","Sorting","Columns","fullProductInputs","refineSearchByCategoryAsync","searchResults","productSearchResult","productDetailsCriteria","FullProductsRefineSearchByTextInput","searchText","getRefinedProducts","getRefinedFullProducts","refineSearchByTextAsync","QueryResultSettingsProxy","searchInputData","q","FullProductInput","getPrice","getRating","_getActivePrices","validProductIds","productCollection","projectDomain","validInputs","Boolean","getActivePricesAsync","productPrice","fullProduct","ProductDetails","retailServerProxyVersion","CustomerContextualPrice","ProductPrice","_getProductRatings","getProductRatingsAsync","productRating","ProductRating","productInputs","Set","ratingsAndPricePromises","split","ActiveWishlistInput","getActiveWishlistItems","wishlists","CommerceListLines","commerceListLine","getProductDetailsCriteriaFromActionInput","ListInput","documentId","itemsCount","shouldCacheOutput","DocumentId","ItemsCount","ItemsPerPage","SkipCount","Items","ProductItems","inputArray","productMap","listitem","getInutListData","GetLoyaltyCardInput","createGetLoyaltyCardInput","getLoyaltyAction","getCustomerLoyaltyCardsAsync","cards","firstCard","getLoyaltyCardAsync","CardNumber","card","LoyaltyEnrollmentDate","LoyaltyEnrollmentDateLocal","getLoyaltyActionDataAction","GetLoyaltyTransactionEstimationInput","createGetLoyaltyTransactionEstimationInput","getLoyaltyTransactionEstimationAction","_getCart","_getLoyalty","_getOrgUnits","getMaxLoyaltyPointsToRedeemForTransactionBalanceAsync","Currency","points","loyaltyCardInput","getLoyaltyTransactionEstimationActionDataAction","MediaLocationsByIdInput","createMediaLocationsByIdInput","getMediaLocationsByIdAction","getMediaLocationsAsync","mediaLocation","Uri","AltText","getMediaLocationsByIdActionDataAction","MediaLocationsForSelectedVariantInput","createMediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariantAction","SelectedVariantInput","productVariant","getMediaLocationsForSelectedVariantActionDataAction","createGetOrderShipmentsHistoryInput","Paging","Top","Skip","OrganizationUsersCountInput","createGetOrganizationUsersCountInput","getOrganizationUsersCount","users","OrganizationUsersInput","createGetOrganizationUsersInput","getOrganizationUsers","getOrganizationUsersDataAction","GetOrganizationWideOrderHistoryInput","convertToString","PriceForProductSearchResultInput","productRecIds","getCartFromCustomer","affiliation","AffiliationLines","productPrices","productResults","activePrice","Price","BasePrice","Math","max","TradeAgreementPrice","PriceForSelectedVariantInput","createActivePriceForSelectedVariantInput","getPriceForSelectedVariantAction","affliations","featureStates","ProductTypeValue","getPriceForSelectedVariantActionDataAction","ProductAvailabilitiesForSelectedVariantInput","createProductAvailabilitiesForSelectedVariantInput","getProductAvailabilitiesForSelectedVariantAction","enableStockCheck","ReleasedProductType","ProductType","shippingSearchCriteria","pickupSearchCriteria","shippingAvailability","shippingInventory","deliveryType","pickupAvailability","pickupInventory","mergeProductWarehouseToProductAvailabities","productsWarehouseInventory","productAvailable","TotalAvailable","getProductAvailabilitiesForSelectedVariantActionDataAction","ProductDimensionsWithAvailabilitiesInput","createProductDimensionsWithAvailabilitiesInput","getProductDimensionsWithAvailabilitiesAction","getProductDimensionsWithAvailabilities","QuickOrderTemplateLine","GetProductListLinesInput","quickOrderTemplateLinesState","productListLines","metadata","count","listLine","fullProductsInfo","line","GetProductListInput","productListSearchCriteria","ProductListType","ProductsByCategoryInput","cacheKeyHint","searchByCategoryAsync","productSearchResults","ActiveCartProductsInput","getActiveCartProductsAction","cartState","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","isQuantityLimitsFeatureEnabledInHq","customerInfo","isOrderQuantityLimitsFeatureEnabled","productIdsByWarehouseId","resultProducts","get","entryWarehouseId","entryProductIds","accum","getActiveCartProductsActionWhenQuantityLimitsFeatureIsOn","hasInvoiceLine","getActiveCartProductsActionDataAction","PromotionOptionsForCartLineItems","cartLineIds","LineId","getAvailablePromotionsAsync","GetRatingsSummaryInput","tenantId","serviceEndpoint","createInput","getRatingsSummaryDataAction","inputIsValid","RefinersByCategoryInput","getRefinersByCategoryAsync","RefinersByTextInput","getRefinersByTextAsync","GetRelatedProductsInput","relationType","querySettings","productRelationTypes","getRelationTypesAsync","productRelationTypeId","_productRelationType","foundProductRelationTypeId","productRelationType","searchProductRelationType","getRelatedProductsAsync","stack","GetScanResultInput","sku","skuNumber","scanResults","Product","ScanResult","ProductDimensionFull","SearchConfigurationInput","getSearchConfigurationAsync","getSelectedVariantActionDataAction","hasUnmatchedDimension","matchedTargetDimension","targetDimension","checkIfHasUnmatchedDimensions","newImageUrl","fullDimensions","fullDimensionPromises","getFullDimensions","ProductIds","variantProductId","variantImageUrl","getProductVariant","matchedTargetDimensionFromApi","ProductInput","warehouseId","getSimpleProductsAction","productIdMapping","idx","getByIdsAsync","mappedProducts","GetOrgUnitLocationsByAreaInput","_Latitude","_Longitude","_Radius","createGetOrgUnitLocationsByAreaInput","getOrgUnitLocationsByArea","locationPromiseList","_getLocationWithHours","getOrgUnitLocationsByAreaDataAction","retailActionDataAction","GetInvoiceDetailsInput","invoiceId","CreateGetInvoiceDetailsInput","getInvoiceDetails","InvoiceId","getInvoiceDetailsDataAction","GetInvoiceInput","CreateGetInvoiceInput","getInvoice","InvoiceIds","InvoiceTypeValues","InvoiceType","InvoicePaidStatusValues","InvoicePaidStatus","invoices","GetInvoicesInput","CreateGetInvoicesInput","getInvoices","CustomerId","getInvoicesDataAction","IssueLoyaltyInput","updateCart","updateLoyaltyCardId","loyaltyCardNumber","issueLoyaltyCardAsync","CustomerAccount","issuedCard","AddItemToOrderTemplateInput","orderTemplateId","addProductListLinesAsync","AddOrderTemplateToCartInput","chunkCount","getPaginatedOrderTemplateLinesInput","orderTemplateLines","addedCartLines","skip","cartLines","productLine","ItemId","TrackingId","UnitOfMeasureSymbol","addCartLinesAsync","Version","concat","refreshCart","CreateOrderTemplateInput","createProductListAsync","GetFullOrderTemplateInput","inputParams","GetFullOrderTemplatesInput","orderTemplates","GetOrderTemplatesPreviewInput","createGetOrderTemplatesPreviewInput","getOrderTemplatesPreview","getOrderTemplatesPreviewDataAction","GetOrderTemplatesInput","createGetOrderTemplatesInput","getOrderTemplatesAction","searchAsync","GetPaginatedOrderTemplateLinesInput","getPaginatedOrderTemplateLinesAction","orderTemplateLinesState","getProductListLinesAsync","UpdateOrderTemplateHeaderInput","updatedProductList","UpdateOrderTemplateInput","getLinesInput","linesToUpdate","lineToUpdate","updatedLines","updateProductListLinesAsync","updatedLine","createRefineSearchByCategoryInput","refinementCriterion","search","querySettingsProxy","createSearchByTextInput","createSearchOrgUnitLocationsInputFunc","updateAddressHandler","IsPrimary","updateCustomerAttributesInput","customerAttributes","phone","vatNumber","readAsync","VatNumber","Attributes","updateCustomerPersonalizationInput","isOptOut","preferenceType","OptOutWebActivityTracking","OptOutPersonalization","setPrimaryAddress","primaryAddresses","addresses","addr","topHint","skipHint","sortingHintData","column","ColumnName","IsDescending","sortingHint","fromModuleData","sortingCriteria","top","parameterize","sep","candidateName","enableUrlLocalization","enableUrlEncoding","encodeURIComponent","replace","getCategorySlug","categoryName","getInvoiceDetailsPageUrlSync","includes","substr","indexOf","getProductPageUrlSync","Dictionary","_values","_length","entries","keyValuePair","setValue","hasValue","defaultValue","getValue","removeValue","getKeys","Event","_subscribers","instance","instanceId","subscriber","handler","ObjectExtensions","EnumExtensions","isNullOrUndefined","isString","isNumber","isFunction","hasElements","validValues","unique","from","predicate","flatten","arrayLine","equals","firstArray","secondArray","comparator","haveSameItems","valueFromFirstArray","valueFromSecondArray","some","otherItem","calculateSum","array","newArray","getValues","enumClass","getNumericValues","getNames","getEnumValues","isNullOrEmpty","isNullOrWhitespace","getRnrPartnerId","rnr","getRnrEndpointId","getRnrAuthEndpointId","endpoint","proxyUrl","endsWith","substring","parseSearchData","OrderTemplateLine","OrderTemplate","InventoryLevels","totalAvailable","TotalAvailableInventoryLevelCode","physicalAvailable","PhysicalAvailableInventoryLevelCode","getInventoryLevelCodeFromProductAvailability","productAvailability","displayLabelEnabled","inventoryCode","inventoryRanges","mapProductInventoryInformation","physicalProductMap","mapInventoryWithPhysicalBufferEnabled","totalAvailableProductMap","mapInventoryWithTotalAvailableBufferEnabled","mapInventoryWithThresholdEnabled","productWarehouseInventoryAvailability","productQty","outOfStockThreshold","productAvailableQuantity","IsProductAvailable","shouldRenderLabel","productQuantity","PhysicalAvailable","StockLevelCode","StockLevelLabel","PhysicalAvailableInventoryLevelLabel","TotalAvailableInventoryLevelLabel","isAggregatedInventory","warehouseAggregation","mapAggregatedProductInventoryInformation","productWarehouseInventoryInformation","AggregatedProductInventoryAvailabilities","PhysicalAvailableQuantity","TotalAvailableQuantity","createInventoryAvailabilitySearchCriteria","isDefaultWareHouse","isFilterByChannelFulfillmentGroup","defaultDeliveryMode","inventoryAvailabilitySearchCriteria","QuantityUnitTypeValue","SearchArea","FinitePromiseQueueError","FinitePromiseQueue","maxQueueLength","InvalidMaxQueueLengthPassed","_maxQueueLength","promiseBody","totalElementsCount","_queue","_isBusy","shift","ProcessWasDiscardedFromTheQueue","enqueue","PromiseQueueElement","PromiseQueue","_dequeue","_canProcess","_processElement","_processNext","rnds8","Uint8Array","rng","bind","msCrypto","uuid","REGEX","byteToHex","i","arr","offset","arguments","validate","TypeError","options","buf","rnds","random","Guid","Random","generateGuid","EmailRegex","html5EmailRegex","PasswordRegex","defaultRegex","PhoneRegex","buildQueryResultSettings","imageUrl","DimensionTypes","DimensionSwatchDisplayTypes","dimensionType","displayType","productCard","dimensionsToDisplayOnProductCard","dimensionsInProductCard","none","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","generateSwatchImageUrl","startsWith","baseImageUrl","generateProductImageUrl","buildWishlistLine","wishlistId","CommerceListId","hidePrice","hideRating","base","defaultCacheKey","generateKey","separator","arg","getFallbackImageUrl","parsedItemId","convertProductDimensionTypeToDimensionTypes","productDimensionType","color","configuration","size","style","convertDimensionTypeToProductDimensionType","setDimensionValuesToQuery","inputUrl","productDimensions","searchParams","history","replaceState","state","host","location","parseDimensionsFromUrl","urlParameters","parsedDimensions","localDimensionType","parseDimensionFromUrl","getDimensionValuesFromQuery","URL","createTabStateInput","exports","React","ReactDOM"],"sourceRoot":""}