{"version":3,"sources":["webpack:///../../src/get-product-dimensions-with-availabilities.ts?347b","webpack:///../../../src/utilities/utils.ts?fbc0","webpack:///../../src/get-selected-variant.ts?f0c0","webpack:///../../src/get-wishlist-by-customer-id.ts?e873","webpack:///../../src/delete-address.ts?f9a3","webpack:///../../src/get-attribute-definitions.ts?cc6b","webpack:///./src/actions/product-services/DataActionExtension.g.ts?f6d3","webpack:///../../src/get-org-unit-configuration.ts?4793","webpack:///../../src/get-dimension-availabilities-for-products.ts?f656","webpack:///src/actions/getById-product-telemetry.action.ts?3e17","webpack:///../../../src/order-templates/get-full-order-template.ts?72c6","webpack:///../../src/get-refiners-by-category.ts?6d4e","webpack:///../../src/get-business-partner-operation-requests.ts?bece","webpack:///./src/actions/product-services/index.ts?ab6f","webpack:///../../src/refine-search-by-category.ts?3e65","webpack:///../../../src/order-templates/add-item-to-order-template.ts?fff3","webpack:///src/actions/inputs/get-product-reviews-input.ts?bfba","webpack:///../../src/get-delivery-options-for-selected-variant.ts?3f6c","webpack:///../../src/get-customer.ts?8319","webpack:///../../../../src/utilities/data-structures/dictionary.ts?bab3","webpack:///../../../src/order-templates/add-order-template-to-cart.ts?6ee4","webpack:///../../../src/order-templates/create-order-template.ts?03c1","webpack:///src/modules/actions/get-active-image-products.ts?a551","webpack:///./src/modules/hei-order-confirmation/actions/get-sales-order-confirmation-with-hydrations.ts?c732","webpack:///src/actions/purchase-telemetry.action.ts?c1a6","webpack:///../../src/get-feature-state.ts?1a1d","webpack:///../../../src/order-templates/update-order-template-header.ts?1f77","webpack:///../../src/get-order-history.ts?76fd","webpack:///src/modules/search-result-container/actions/get-mapped-search-configuration.ts?978c","webpack:///../../../../src/utilities/events/event.ts?15a9","webpack:///../../../src/invoices/get-invoices.ts?22cb","webpack:///./src/actions/product-services/DataServiceEntities.g.ts?f170","webpack:///src/connectors/msdyn365-exp-test/msdyn365-exp-test.provider.ts?22ac","webpack:///./src/modules/custom-recently-viewed-products/actions/get-full-products-by-ids.ts?b04c","webpack:///../../src/search-org-unit-locations.ts?d18d","webpack:///src/modules/wishlist-items/actions/get-items-in-wishlists.ts?d05a","webpack:///src/modules/list-page-summary/list-page-summary.action.ts?9732","webpack:///src/actions/getVariantsByDimensionValues-telemetry.action.ts?acda","webpack:///../../src/get-scan-results.ts?6b44","webpack:///../../../../src/utilities/regex/email-regex.ts?6a6a","webpack:///../../../../src/utilities/regex/password-regex.ts?456d","webpack:///../../../../src/utilities/regex/phone-regex.ts?9ada","webpack:///../../../src/utilities/input-data-parser.ts?027a","webpack:///src/dataActions/get-attributes-for-selected-variant.ts?5b72","webpack:///src/actions/get-sales-order-details-by-confirmation-id.ts?11ab","webpack:///src/actions/get-sales-order-with-hydrations.ts?9c2c","webpack:///src/data-actions/tab-state-data-action.ts?8dcc","webpack:///./src/shared-utils/cookie-utilities.ts?4af2","webpack:///../../src/update-customer-personalization.ts?4aa9","webpack:///../../src/checkout.ts?57e0","webpack:///../../src/delete-organization-user.ts?7f5d","webpack:///../../../src/utilities/QueryResultSettingsProxy.ts?5e44","webpack:///../../src/get-categories-hierarchy.ts?acde","webpack:///src/modules/order-template/actions/get-order-template.ts?4d59","webpack:///src/connectors/msdyn365-exp-test/msdyn365-exp-test.listener.ts?3fc6","webpack:///../../src/edit-organization-user.ts?d2ac","webpack:///../../../src/utilities/product-inventory-information.ts?0ec6","webpack:///src/actions/addToCart-telemetry.action.ts?ceef","webpack:///src/store-selector-state-manager/base-store-selector-state-manager.ts?edbe","webpack:///src/store-selector-state-manager/map-store-selector-state-manager.ts?d1f8","webpack:///src/store-selector-state-manager/store-selector-state-manager-data-action.ts?22fb","webpack:///../../src/get-simple-products.ts?fed7","webpack:///src/actions/get-org-unit-locations.ts?3eeb","webpack:///../../../src/order-templates/get-order-templates-preview.ts?b8c3","webpack:///../../src/get-channel-delivery-option-configuration.ts?a716","webpack:///src/actions/get-channels.ts?9c62","webpack:///src/actions/get-tender-types.ts?c899","webpack:///../../src/get-product-list-lines.ts?ae74","webpack:///src/actions/get-sales-order-confirmation-with-hydrations.ts?d18e","webpack:///../../src/get-dimensions-for-selected-variant.ts?6bf4","webpack:///./src/actions/get-product-whatisinbox.ts?e99a","webpack:///../../../../src/utilities/promise-queue/finite-promise-queue.ts?77bf","webpack:///src/actions/ratings-reviews-state-data-action.ts?6daf","webpack:///../../src/get-ratings-summary-input.ts?3ccb","webpack:///./lib/component-registration.js?266e","webpack:///src/actions/removeFromCart-telemetry.action.ts?f9cf","webpack:///../../../src/utilities/index.ts?5407","webpack:///../../src/get-dimension-availabilities-for-product-search-result.ts?5259","webpack:///../../../../src/utilities/extensions/enum-extensions.ts?cf51","webpack:///../../../../src/utilities/extensions/string-extensions.ts?ab9f","webpack:///./src/actions/get-product-promotions.action.ts?9890","webpack:///../../src/get-checkout-cart.ts?79bc","webpack:///src/modules/search-result-container/actions/url-utils.ts?6091","webpack:///../../../src/utilities/quick-order-templates.ts?0ea6","webpack:///./src/actions/get-product-info.ts?ea23","webpack:///../../src/get-current-business-partner-user.ts?1479","webpack:///src/modules/search-result-container/actions/base-collection-action.ts?32fc","webpack:///src/modules/product-page-summary/product-page-summary.action.ts?836c","webpack:///../../src/update-customer-attributes.ts?8d49","webpack:///../../../src/utilities/validate-cartlines-inventory.ts?8b82","webpack:///./lib/module-registration.js?44dd","webpack:///./node_modules/@msdyn365-commerce-modules/retail-actions/node_modules/uuid/dist/esm-browser/rng.js?b47d","webpack:///./node_modules/@msdyn365-commerce-modules/retail-actions/node_modules/uuid/dist/esm-browser/regex.js?08ba","webpack:///./node_modules/@msdyn365-commerce-modules/retail-actions/node_modules/uuid/dist/esm-browser/stringify.js?6cb1","webpack:///./node_modules/@msdyn365-commerce-modules/retail-actions/node_modules/uuid/dist/esm-browser/validate.js?acea","webpack:///./node_modules/@msdyn365-commerce-modules/retail-actions/node_modules/uuid/dist/esm-browser/v4.js?0101","webpack:///../../../../src/utilities/random/guid.ts?1947","webpack:///../../../../src/utilities/random/index.ts?1f9d","webpack:///src/actions/copyCart-checkOut-telemetry.action.ts?b241","webpack:///../../src/get-full-available-inventory-nearby.ts?20be","webpack:///../../src/get-items-in-wishlist.ts?0d27","webpack:///src/modules/checkout-payment-instrument/actions/get-card-payment-accept-point.ts?e5ef","webpack:///../../src/get-price-for-selected-variant.ts?9e79","webpack:///src/actions/telemetry.action.helper.ts?4cd3","webpack:///../../src/get-full-products-by-refine-search-text.ts?2ad7","webpack:///../../../src/utilities/refiner-utils.ts?1e61","webpack:///../../../../src/utilities/Url-builder/parameterize.ts?f5a5","webpack:///../../../../src/utilities/Url-builder/category-url-builder.ts?e564","webpack:///../../../../src/utilities/Url-builder/invoice-url-builder.ts?d542","webpack:///../../../../src/utilities/Url-builder/product-url-builder.ts?baf1","webpack:///../../src/get-loyalty-transaction-estimation.ts?e254","webpack:///../../src/index.ts?0e3e","webpack:///../../src/get-ratings-summary.ts?49bc","webpack:///./lib/module-registration.local.js?540f","webpack:///../../src/get-full-products-by-refine-search-category.ts?30ab","webpack:///./src/modules/hei-product-specification/dataActions/get-attribute-groups-for-selected-variant.ts?c4b5","webpack:///../../src/get-delivery-options-for-cartlines.ts?4dfe","webpack:///src/actions/inputs/get-user-review-input.ts?f98a","webpack:///../../../../src/utilities/promise-queue/promise-queue.ts?e362","webpack:///../../src/get-product-list.ts?ef13","webpack:///../../src/get-address.ts?20a3","webpack:///../../src/get-products-by-category.ts?accf","webpack:///../../../src/utilities/product-inventory-utils.ts?58b5","webpack:///../../src/get-store-location-information.ts?1df0","webpack:///../../src/get-full-products.ts?ba9a","webpack:///../../../../src/utilities/extensions/object-extensions.ts?6388","webpack:///src/actions/getByIds-product-telemetry.action.ts?a77c","webpack:///../../../../src/utilities/promise-queue/index.ts?c43d","webpack:///external \"React\"?c481","webpack:///../../../../src/utilities/extensions/array-extensions.ts?1a2a","webpack:///src/modules/category-page-summary/category-page-summary.action.ts?be94","webpack:///src/actions/get-product-reviews.ts?ca83","webpack:///../../src/get-organization-users-count.ts?b5f7","webpack:///../../../src/order-templates/get-paginated-order-template-lines.ts?9b12","webpack:///../../src/get-full-product-list.ts?ccfb","webpack:///src/modules/search-result-container/actions/get-refiners-for-collection.ts?3c89","webpack:///src/modules/search-result-container/actions/get-product-refiner-hierarchy.ts?bc3c","webpack:///src/modules/quick-order-grid/actions/get-product-list.ts?dfe9","webpack:///../../src/generic-data-action.ts?f887","webpack:///../../../src/invoices/get-invoice-details.ts?66a9","webpack:///../../../src/invoices/get-invoice.ts?479e","webpack:///../../src/get-customer-loyalty-cards.ts?2466","webpack:///external \"ReactDOM\"?4b2d","webpack:///../../../src/utilities/quick-order-template-line.ts?56d5","webpack:///../../src/get-catalogs.ts?7332","webpack:///src/actions/readCart-telemetry.action.ts?562f","webpack:///../../../src/order-templates/get-order-templates.ts?a3b1","webpack:///../../src/get-loyalty-card.ts?7213","webpack:///src/modules/search-result-container/actions/get-full-products-by-collection.ts?5cc2","webpack:///../../src/get-products-in-active-cart.ts?3376","webpack:///./lib/connector-registration.js?87e5","webpack:///../../src/get-related-products.ts?6f93","webpack:///./src/actions/get-mfr-code.action.ts?a229","webpack:///../../src/add-organization-user.ts?ed86","webpack:///../../src/get-current-category-hierarchy.ts?d48e","webpack:///src/actions/get-user-review.ts?1a29","webpack:///../../src/get-current-category.ts?354d","webpack:///../../src/get-media-locations-by-id.ts?8462","webpack:///../../src/create-product-list.ts?7367","webpack:///../../src/get-category-paths.ts?b007","webpack:///../../src/get-refiners-by-text.ts?c52a","webpack:///../../../src/utilities/order-templates.ts?d593","webpack:///./src/actions/DataServiceEntities.g.ts?ced4","webpack:///./src/actions/DataActionExtension.g.ts?6faf","webpack:///../../src/get-organization-users.ts?b72e","webpack:///../../src/get-promotion-options-for-cartlines.ts?1a35","webpack:///../../src/get-price-for-product-search-result.ts?36f8","webpack:///./lib/view-registration.js?92f2","webpack:///src/actions/updateCart-telemetry.action.ts?2995","webpack:///./src/actions/get-all-dimensions-for-product.ts?63fe","webpack:///../../src/issue-loyalty.ts?f8fa","webpack:///../../src/get-customer-balance.ts?d165","webpack:///../../src/get-availabilities-cartlines.ts?b8e8","webpack:///src/actions/get-state-provinces.ts?d329","webpack:///../../../../src/utilities/events/index.ts?d3a5","webpack:///../../src/get-media-locations-for-selected-variant.ts?fd54","webpack:///src/actions/get-address-purposes.ts?30ca","webpack:///../../src/get-list.ts?4fd5","webpack:///src/actions/get-country-state.ts?3926","webpack:///../../src/get-product-availabilities-for-selected-variant.ts?0abd","webpack:///./src/actions/get-all-stores.ts?7d87","webpack:///../../src/get-organization-wide-order-history.ts?92b8","webpack:///../../src/get-categories.ts?8dc6","webpack:///src/search-state-data-action.ts?8823","webpack:///src/actions/get-country-regions.ts?a1d1","webpack:///src/modules/default-page-summary/default-page-summary.action.ts?121d","webpack:///src/modules/wishlist-items/actions/get-product-availabilities-wishlist-items.ts?4a20","webpack:///../../../src/order-templates/update-order-template-line.ts?527b","webpack:///../../src/update-address.ts?3e4d","webpack:///../../src/add-address.ts?fb17","webpack:///../../../src/utilities/getRnrKeys.ts?700f","webpack:///../../src/search-by-text.ts?ebe1","webpack:///../../src/get-search-configuration.ts?acd1","webpack:///src/modules/search-result-container/list-page-state.ts?90c8","webpack:///src/data-actions/accordion-state-data-action.ts?0c51","webpack:///../../../src/order-templates/get-full-order-templates.ts?b553","webpack:///../../src/add-item-to-product-list.ts?580e","webpack:///src/modules/checkout-express/actions/get-card-payment-accept-point.ts?c8f5","webpack:///../../src/update-primary-address.ts?83fa","webpack:///src/modules/checkout/actions/get-products-in-active-checkout-cart.ts?e0ab"],"names":["ProductDimensionsWithAvailabilitiesInput","constructor","productId","channelId","getCacheKey","getCacheObjectType","dataCacheType","this","createProductDimensionsWithAvailabilitiesInput","inputData","getSelectedProductIdFromActionInput","requestContext","apiSettings","Error","async","getProductDimensionsWithAvailabilitiesAction","input","context","activeProduct","ProductsDataActions","getByIdAsync","callerContext","ArrayExtensions","hasElements","Dimensions","promises","map","dimension","searchCriteria","RequestedDimensionTypeValue","DimensionTypeValue","MatchingDimensionValues","DefaultWarehouseOnly","FilterByChannelFulfillmentGroup","DeliveryModeTypeFilterValue","getDimensionValuesWithEstimatedAvailabilitiesAsync","queryResultSettings","MasterProductId","RecordId","then","dimensionValues","dimensionValuesWithInventory","Promise","all","getProductDimensionsWithAvailabilities","createObservableDataAction","id","action","buildQueryResultSettings","searchInputData","parseSearchData","q","Paging","Top","maxItems","Number","top","Skip","skip","query","urlTokens","itemId","pageType","config","generateImageUrl","imageUrl","generateImageUrlFromSdk","DimensionTypes","DimensionSwatchDisplayTypes","checkIfShouldDisplayAsSwatch","dimensionType","displayType","default","productCard","dimensionsToDisplayOnProductCard","app","dimensionsInProductCard","includes","none","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","generateSwatchImageUrl","startsWith","baseImageUrl","encodeURIComponent","generateProductImageUrl","product","PrimaryImageUrl","buildWishlistLine","customerId","wishlistId","CommerceListId","ProductId","CustomerId","getProductDetailsCriteriaFromActionInput","getPrice","hidePrice","getRating","hideRating","buildCacheKey","base","locale","catalogId","buildCacheKeyWithUrlTokens","defaultCacheKey","recordId","generateKey","args","options","handler","separator","undefined","arg","join","getFallbackImageUrl","parsedItemId","trim","split","productUrl","convertProductDimensionTypeToDimensionTypes","productDimensionType","ProductDimensionType","Color","color","Configuration","configuration","Size","size","Style","style","convertDimensionTypeToProductDimensionType","None","setDimensionValuesToQuery","inputUrl","productDimensions","searchParams","set","DimensionValue","Value","window","history","replaceState","state","toString","replace","host","location","parseDimensionsFromUrl","urlParameters","parsedDimensions","localDimensionType","value","get","parseDimensionFromUrl","validValues","getDimensionValuesFromQuery","URL","toLocaleLowerCase","SelectedVariantInput","matchingDimensionValues","bypassCache","getSelectedVariantActionDataAction","url","requestUrl","hasUnmatchedDimension","matchedTargetDimension","find","targetDimension","checkIfHasUnmatchedDimensions","newImageUrl","fullDimensions","fullDimensionPromises","getFullDimensions","productVariant","ProductIds","variantProductId","variantImageUrl","getProductVariant","matchedTargetDimensionFromApi","selectedProduct","retailActionDataAction","retailAction","user","isAuthenticated","createGetByCustomerInput","deleteAddressHandler","customer","address","Addresses","filter","cur","ctx","doAddressManagementOperation","createAddressManagementInput","isBatched","GetAttributeDefinitionsInput","attributeDefinitionCriteria","getAttributeDefinitionsActionDataAction","channel","CustomerAttributeGroupId","getAttributeDefinitionsAsync","response","trace","AttributeGroupIdentifier","getGroupedAttributesInput","DataServiceQuery","resultSettings","createDataServiceRequestForOperation","DataServiceEntities","returnEntity","getGroupedAttributesAsync","request","callActionOrExecute","getProductInfoInput","sku","getWhatisinBoxInput","getProductPromotionsInput","distinctProductVariantId","getProductPromotionsAsync","getPromotionInfoInput","code","getPromotionInfoAsync","createGetOrgUnitConfigurationInput","ProductsDimensionAvailabilitiesInput","masterProductId","requestDimensionType","getDimensionAvailabilitiesForProductsAction","inputs","Array","isArray","promise","shippingInventoryConfiguration","createInventoryAvailabilitySearchCriteria","productsDimensions","productDimension","createDataActionHook","actionId","postReaderHook","_inputs","simpleProduct","actionContext","resolve","productInfo","getProductInfoFromSimpleProduct","telemetryData","productSku","TelemetryEvent","ProductPageView","preReaderHook","GetFullOrderTemplateInput","orderTemplateId","getFullOrderTemplateActionDataAction","inputParams","GetOrderTemplatesInput","productLists","getOrderTemplates","length","inputLines","GetPaginatedOrderTemplateLinesInput","Id","linesState","getPaginatedOrderTemplateLinesAction","OrderTemplate","lines","totalCount","QueryResultSettingsProxy","fromInputData","QueryResultSettings","count","RefinersByCategoryInput","category","queryResultSettingsProxy","currentCategory","cacheKeyHint","shouldCacheOutput","categoryId","categorySlug","getCurrentCategory","getRefinersByCategoryAsync","CurrentCategoryInput","isNaN","GetBusinessPartnerOperationRequestsInput","fromDate","toDate","getBusinessPartnerOperationRequestsAction","userInput","GetCurrentBusinessPartnerUserInput","getCurrentBusinessPartnerUser","StringExtensions","isNullOrEmpty","B2BUserId","getOperationRequestsAsync","Date","now","refinementCriteria","createRefineSearchByCategoryInput","refinementCriterion","AddItemToOrderTemplateInput","quantity","unitOfMeasure","addItemToOrderTemplateActionDataAction","productListLineToAdd","ProductListId","Quantity","UnitOfMeasure","productListLine","addProductListLinesAsync","telemetry","error","GetProductReviewsInput","tenantId","localeListFilter","serviceEndpoint","orderBy","starFilters","skipItems","pageSize","pageToken","dataSources","GetDeliveryOptionsForSelectedVariantInput","featureState","getFeatureState","getFeatureStateActionDataAction","FeatureStateInput","createDeliveryOptionsForSelectedVariantInput","getDeliveryOptionsForSelectedVariantAction","item","Name","IsEnabled","selectedVariantInput","getSelectedVariant","productResult","getDeliveryOptionsAsync","ItemTypeValue","ReleasedProductType","Service","FilterDeliveryModeOption","FilterOutNonPickupDeliveryMode","catch","message","exception","debug","getDeliveryOptionsForSelectedVariantActionDataAction","GetCustomerInput","accountNumber","cacheType","customerAccountNumber","getCustomerActionDataAction","CustomersDataActions","readAsync","token","Dictionary","_values","_length","entries","forEach","keyValuePair","setValue","key","removeValue","hasValue","getValue","getValueWithDefaultValue","defaultValue","isEmpty","clear","getValues","getKeys","Object","keys","getKeyValuePairs","AddOrderTemplateToCartInput","addOrderTemplateToCartActionDataAction","cartState","getCartState","getPaginatedOrderTemplateLinesInput","orderTemplateLines","addedCartLines","cartLines","productLine","ItemId","fullProduct","ProductDetails","TrackingId","UnitOfMeasureSymbol","addCartLinesAsync","cart","Version","concat","refreshCart","CreateOrderTemplateInput","templateName","createOrderTemplateActionDataAction","orderTemplate","ProductListTypeValue","ProductListType","createdProductList","createProductListAsync","ActiveImageInput","_cacheKey","activePoints","activePointData","createInput","getActiveImageproductAction","itemIds","push","searchCriteriaInput","Context","ChannelId","CatalogId","IncludeAttributes","ItemIds","searchByCriteriaAsync","actionDataAction","orderTypes","GetSalesOrderConfirmationWithHydrationsInput","orderType","orderId","getSalesOrderConfirmationWithHydrationsAction","salesOrder","getSalesOrderDetailsBySalesIdAsync","getSalesOrderDetailsByTransactionIdAsync","getSalesOrder","TransactionTypeValue","TransactionType","SalesInvoice","products","SalesLines","productIds","salesLine","productInputs","ProductInput","getSimpleProducts","getProducts","validProducts","ObjectExtensions","isNullOrUndefined","deliveryOptions","result","getSalesOrderConfirmationWithHydrationsActionDataAction","salesId","transactionId","transaction","_msdyn365","salesObject","saleLineProductUnits","getProductInfoFromCartLinesAsync","Purchase","affiliation","revenue","NetAmountWithoutTax","tax","TaxAmount","logEvent","featureNames","createGetFeatureStateInput","getFeatureStateAction","getFeatureStatesAsync","UpdateOrderTemplateHeaderInput","updateOrderTemplateHeaderActionDataAction","updatedProductList","updateAsync","createGetOrderShipmentsHistoryInput","sortOptions","sortByOptionRelevanceDesc","sortByOptionRatingAsc","sortByOptionRatingDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","MappedSearchInput","getMappedSearchConfiguration","getSearchConfigurationAsync","searchConfiguration","ProductSortColumns","sortColumn","ColumnName","toUpperCase","IsDescending","warning","Boolean","getMappedSearchConfigurationDataAction","Event","_subscribers","subscribe","instance","unsubscribe","instanceId","element","unsubscribeAll","trigger","subscriber","GetInvoicesInput","CreateGetInvoicesInput","InvoicePaidStatusValues","InvoicePaidStatus","getInvoices","InvoiceTypeValues","InvoiceType","SalesOrderInvoice","businessPartner","getCurrentAsync","BusinessPartnerId","getCustomer","AccountNumber","SalesOrdersDataActions","getInvoicesAsync","getInvoicesDataAction","FlexitiTransactionsExtensionClass","odataObject","term","transactionStatus","customerName","transactionBalance","transactionDate","CustomerSignatureExtensionClass","Succeed","parseInt","ErrorCode","ExtensionProperties","i","className","substr","lastIndexOf","EntityClasses","SignItemExtensionClass","Description","Price","parseFloat","DemoStoreExtensionClass","Store","StoreLocationId","DefaultCustAccount","ProductAttributeGroupExtensionClass","GroupId","Group","DisplayOrder","Attributes","ProductInfoExtensionClass","ProductInfoId","Sku","WebText","WhatisinBoxExtensionClass","WhatsIntheBox","ProductPromotionExtensionClass","OfferId","DiscountInfo","DiscountInfoExtensionClass","MarketingHtml","MarketingName","CartHtml","Expired","connector","variantSet1","variantId","experimentId","variantSet2","variantSet3","variantSet4","getConfigForClientSideInit","initializeClientSide","console","log","getExperiments","name","experiments","friendlyName","description","type","status","State","Running","link","variations","Active","weight","Draft","createdDate","lastModifiedDate","lastModifiedBy","Paused","Archived","getVariantsForUser","userId","attributes","match","activateExperiment","JSON","stringify","initialize","secretManager","GetFullProductsByIdsInput","maxRecentlyViewedItemsCount","getFullProductsByIds","cookieValue","GetCookie","cookies","x","Ids","mappedProducts","productSearchResult","newproductSearchResult","splitPathName","pathname","lastPathName","indexOf","index","splice","productById","refineProductSearchResults","reverse","metadata","createSearchOrgUnitLocationsInputFunc","createSearchOrgUnitLocationsInput","ActiveWishlistInput","getActiveWishlistItems","wishlists","getByCustomerAsync","currWishlist","CommerceListLines","commerceListLine","FullProductInput","getFullProducts","getActiveWishlistItemsDataAction","ListItemType","ListPageSummaryInput","getSubListItem","sitePathOfRequest","imageList","getImages","fields","content","images","sublistHref","listName","_name","sitePath","Title","title","ShortDescription","shortDescription","BackgroundColor","backgroundColor","ForegroundColor","foregroundColor","Href","Images","getSitePath","resultImageList","image","href","imageItem","altText","width","height","createGetListInput","listData","pageData","list","items","_id","data","getInputListData","listItems","productList","parentImageList","itemsPerPage","getItemsPerPage","skipCount","getSkipCount","productItems","sum","clonedList","productItem","ListInput","getList","simpleProducts","GetScanResultInput","skuNumber","scanResults","Product","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","ScanResult","ProductDimensionFull","EmailRegex","html5EmailRegex","PasswordRegex","PhoneRegex","AttributesForSelectedVariantInput","createAttributesForSelectedVariantInput","getAttributesForSelectedVariantAction","getAttributeValuesAsync","attributeValues","GetSalesOrderDetailsByConfirmationInput","channelReferenceLookupCriteria","confirmationId","ChannelReferenceId","getSalesOrderDetailsByChannelReferenceIdAction","getOrderByChannelReferenceLookupCriteriaAsync","getSalesOrderDetailsByChannelReferenceIdDataAction","getSalesOrderDetailsByLookupCriteria","propertyName","propertyValue","addtionalLookupParameter","queryArray","additionalFieldName","additionalFieldValue","orderStatusLookUpParameterTypeName","orderStatusLookUpParameterValue","getQueryStringParameters","orderLookupExtensibleEnum","StoreOperationsDataActions","getExtensibleEnumerationsAsync","TypeName","ExtensibleEnumerations","channelReferenceAdditionalLookupCriteria","retailProxyValue","retailProxyTypeValue","OrderLookupAdditionalCriteriaTypeValue","OrderLookupAdditionalCriteriaTypeParameterValue","additionalItem","ChannelReferenceAdditionalLookupCriteria","GetSalesOrderWithHydrationsInput","getSalesOrderWithHydrationsAction","signInUrl","assign","SearchLocation","All","getSalesOrderWithHydrationsActionDataAction","createTabStateInput","GenericInput","getGenericActionDataAction","getGenericAction","cookieContext","SetCookie","maxAge","updateCustomerPersonalizationInput","userAccountNumber","isOptOut","preferenceType","updateCustomerPersonalizationActionDataAction","newCustomer","OptOutWebActivityTracking","OptOutPersonalization","updatedCustomer","update","baseUrl","cartId","requestOptions","headers","oun","Authorization","cartTenderLines","cartTenderLineItem","TokenizedPaymentCard","House","CardTokenInfo","billingAddress","Phone","ThreeLetterISORegionName","Street","City","ZipCode","Country","Address1","Zip","requestBody","receiptEmail","cartVersion","sendCommerceRequest","DeleteOrganizationUserInput","newUser","deleteOrganizationUserDataAction","deleteAsync","topHint","skipHint","sortingHintData","Sorting","Columns","column","sortingHint","fromModuleData","sortingCriteria","CategoriesInput","mappedToHierarchy","_mappedToHierarchy","getLocale","getCatalogId","mapCategoryToHierarchy","categoryList","categoryMap","reduce","memo","localName","nameTranslations","nameTranslation","Language","toLowerCase","Text","getFriendlyName","NameTranslations","categoryHierarchy","NeutralizedName","zeroCategory","parentId","ParentCategory","Url","getCategoryUrl","parent","Children","createCategoriesHierarchyInput","topItems","topCategories","getCategoryHierarchyAction","categories","getCategoryAction","RawCategoriesInput","getCategoryHierarchyActionDataAction","ActiveOrderTemplateLinesInput","getActiveOrderTemplateLines","getFullOrderTemplate","getActiveOrderTemplateLinesDataAction","connectorListener","eventName","payload","EditOrganizationUserInput","editOrganizationUserDataAction","updatedUser","DeliveryMode","InventoryLevels","InventoryLevelValues","getInventoryLevelCodeFromDimensionValue","inventoryLevel","totalAvailable","TotalAvailableInventoryLevelCode","physicalAvailable","PhysicalAvailableInventoryLevelCode","getInventoryLevelCodeFromProductAvailability","productAvailability","cartObject","addedProducts","AddToCart","OrderNumber","actionInput","queryParams","addCartLinesParams","e","BaseStoreSelectorStateManager","listMapViewState","displayList","displayMap","preferredStoreLocalStorageKey","isMapModuleLoaded","_readFromToCookie","storeInfo","parse","preferredStore","_context","storeId","selectedStoreLocationId","storeName","writeToCookie","StoreId","StoreName","Latitude","Longitude","_writeToCookie","latitude","longitude","lastInlineShownStoreInfo","_removeCookie","MsDyn365","isBrowser","localStorage","removeItem","setItem","getItem","__decorate","computed","observable","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchTerm","BingMapsApiKey","BingMapsEnabled","searchContent","jsonp","crypto","getRandomValues","Uint32Array","ChannelCountryRegionISOCode","encodeURI","geolocationApiUrl","script","document","createElement","setAttribute","remove","resourceSets","resources","point","coordinates","body","appendChild","getElementById","lang","market","reject","defer","src","mapAPIReady","isMapApiLoaded","addEventListener","createStoreSelectorStateInput","warehouseId","getSimpleProductsAction","productIdMapping","idx","getByIdsAsync","getDefault","searchArea","Radius","Math","max","DistanceUnitValue","GetOrgUnitLocationsInput","getOrgUnitLocationsAction","orgUnitLocations","getOrgUnitLocationsByAreaAsync","getOrgUnitLocations","getOrgUnitLocationsActionDataAction","GetOrderTemplatesPreviewInput","createGetOrderTemplatesPreviewInput","getOrderTemplatesPreview","getFullOrderTemplates","GetFullOrderTemplatesInput","getOrderTemplatesPreviewDataAction","GetChannelDeliveryConfigurationInput","getChannelDeliveryOptionConfigurationAsync","GetChannelIdentitiesInput","getChannelsAction","channels","getChannelsAsync","getChannels","channelIdentities","getChannelsActionDataAction","createGetTenderTypesInput","GetProductListLinesInput","productListId","searchText","getProductListLinesActionDataAction","quickOrderTemplateLinesState","ProductListsDataActions","getProductListLinesAsync","productListLines","listLine","QuickOrderTemplateLine","fullProductsInfo","line","getDimensionsForSelectedVariantAction","dimensionValuesResults","newDimension","oldDimension","DimensionValues","getDimensionsForSelectedVariantActionDataAction","GetWhatisinBoxInput","WhatisinBoxInput","FinitePromiseQueueError","FinitePromiseQueue","PromiseQueue","maxQueueLength","InvalidMaxQueueLengthPassed","super","_maxQueueLength","promiseBody","totalElementsCount","_queue","_isBusy","shift","ProcessWasDiscardedFromTheQueue","enqueue","createRatingsReviewsStateInput","filterKey","GetRatingsSummaryInput","componentDictionary","c","cn","removeCartLineIds","removedCartLineIds","activeCart","productTransaction","removedCartLines","removedProducts","CartLines","cartLine","LineId","some","RemoveFromCart","removeCartLinesParams","cartLineIds","DimensionAvailabilitiesForProductSearchResultInput","dimensionContext","getDimensionAvailabilitiesForProductSearchResultDataAction","productsDimensionInputs","filteredProductAttributes","AttributeValues","attributeValue","productionDimensionType","dimensionForProducts","productsDimensionAvailabilities","dimensionInput","inventoryLevelCode","isDisabled","outOfStock","EnumExtensions","enumClass","getNumericValues","isNumber","isString","GetProductPromotionsInput","Msdyn365","productPromotionsInput","GetCheckoutCartInput","CartCookieName","msdyn365Commerce","CartCookie","Cookie","checkoutCart","copyAsync","compressedRefinerKeys","hydrateRefinersFromUrl","compressedRefinerArray","parseQueryParam","compressedRefiner","parsedRefiner","refinerKey","buildListPageUrl","fullUrl","refiners","sortingColumns","delete","sortedRefiners","sort","first","second","RefinerRecordId","compressedRefiners","refiner","compressRefiners","decodeURIComponent","getCurrentUrl","QuickOrderTemplate","quickOrderTemplateLines","totalLines","GetProductInfoInput","ProductInfoInput","createGetCurrentBusinessPartnerUserInput","customerInput","IsB2b","BaseCollectionInput","includeAttributes","isUpdateRefinerPanel","toJS","LeftValueBoundString","RightValueBoundString","convertToString","createBaseCollectionInput","inputClassConstuctor","queryRefiners","updateRefinerPanel","getUpdateRefinerPanel","sorting","recommendation","Recommendation","ProductPageSummaryInput","simpleProductData","productBrand","getProductUrlSync","canonicalDomain","productAttributes","productAttribute","TextValue","getProductBrand","sharingImageUrl","canonicalUrl","faviconUrl","price","AdjustedPrice","sharingImage","updateCustomerAttributesInput","customerAttributes","phone","vatNumber","updateCustomerAttributesActionDataAction","VatNumber","validateCartLinesInventory","productAvailabilities","emailDeliveryModeCode","cartLineMap","Map","enableStockCheck","isValid","productIdWithErrors","IsInvoiceLine","has","cartLineTotal","productAvailabilityMap","ProductAvailableQuantity","from","cartLineQty","availableQuantity","AvailableQuantity","cartLineProduct","isStockedItem","Behavior","IsStockedProduct","isEmailDelivery","IsProductAvailable","registerAllModules","requiredModules","binding","modules","dataActions","handleError","modPath","errObject","errorObject","process","exit","module","isNotRegistered","moduleName","findIndex","registerActionId","actionPath","prototype","exportName","Action","registerSanitizedActionPath","sanitizedActionPath","dataAction","RegistrationId","$type","da","iNM","ns","n","p","pdp","md","path","runOn","definitionExtensions","themeSettings","require","rnds8","Uint8Array","rng","bind","msCrypto","validate","uuid","REGEX","test","byteToHex","arr","offset","arguments","TypeError","v4","Guid","Random","buf","rnds","random","uuidv4","_guid","cartLineProductUnits","CheckOut","GetFullAvailableInventoryNearbyInput","_productId","_latitude","_longitude","_radius","_DistanceUnitValue","_IgnoreLocation","radius","IgnoreLocation","createGetFullAvailableInventoryNearbyInput","getFullAvailableInventoryNearbyAction","retailMulitplePickupMFeatureState","pickup","getEstimatedAvailabilityAsync","productInventoryInformation","mapProductInventoryInformation","productWarehouseInformation","ProductWarehouseInventoryAvailabilities","DeliveryModeTypeFilter","Pickup","storeMap","stores","store","InventoryLocationId","locationDeliveryOptions","orgUnitChannel","channelCollection","channelIdList","getChannelDeliveryOptionsAsync","channelDeliveryOptions","_getLocationPickUpDeliveryModes","availabilityPromiseList","locationDeliveryOption","_channeldeliveryoption","orgUnitLocation","channelDeleiveryOptions","OrgUnitNumber","OrgUnitAvailability","getStoreHoursAsync","hours","itemAvailabilities","InventLocationId","availability","OrgUnitLocation","ItemAvailabilities","ProductInventoryInformation","OrgUnitPickUpDeliveryModes","StoreHours","_getAvailabilityWithHours","getFullAvailableInventoryNearbyActionDataAction","GetCardPaymentAcceptPointInput","paymenTenderType","showBillingAddress","shouldEnableSinglePaymentAuthorizationCheckout","amountDue","createCheckoutPaymentInstrumentInput","getCardPaymentAcceptPointInput","showBillingAddres","getCardPaymentAcceptPointAction","checkoutState","getCheckoutState","isEmptyOrNullObject","origin","cardPaymentAcceptSettings","HostPageOrigin","AdaptorPath","CardPaymentEnabled","CardTokenizationEnabled","HideBillingAddress","TenderTypeId","PaymentAmount","getCardPaymentAcceptPointAsync","cardPaymentAcceptPoint","AcceptPageUrl","AcceptPageContent","getCardPaymentAcceptPointActionDataAction","PriceForSelectedVariantInput","createActivePriceForSelectedVariantInput","getPriceForSelectedVariantAction","affliations","getCartFromCustomer","AffiliationLines","projectDomain","featureStates","getActivePricesAsync","ProductTypeValue","ProductType","Master","KitMaster","productPrices","getPriceForSelectedVariantActionDataAction","productPromises","productPrice","productQuantity","reason","productName","productChannelId","productChannelName","productCategoryId","productCategoryName","productCurrency","FullProductsRefineSearchByTextInput","criteria","productDetailsCriteria","getRefinedProducts","fullProductInputs","searchResults","ProductDetailsCriteria","getRefinedFullProducts","refineSearchByTextAsync","parameterize","sep","parameterizeFeatureFlags","neutralizedName","candidateName","platformSettings","enableUrlLocalization","enableUrlEncoding","Slug","getParameterizeFeatureFlags","getCategorySlug","categoryName","getUrlSync","getInvoiceDetailsPageUrlSync","invoiceId","getProductPageUrlSync","GetLoyaltyTransactionEstimationInput","createGetLoyaltyTransactionEstimationInput","getLoyaltyTransactionEstimationAction","_getCart","_getLoyalty","_getOrgUnits","CardNumber","getMaxLoyaltyPointsToRedeemForTransactionBalanceAsync","Currency","points","loyaltyCardInput","GetLoyaltyCardInput","getLoyalty","getOrgUnitConfigurationAsync","getLoyaltyTransactionEstimationActionDataAction","getRnrPartnerId","getRnrEndpointId","getRatingsSummaryDataAction","inputIsValid","sendRequest","FullProductsRefineSearchByCategoryInput","hasSortingColumn","refineSearchByCategoryAsync","AttributeGroupsForSelectedVariantInput","createAttributeGroupsForSelectedVariantInput","getAttributeGroupsForSelectedVariantAction","ProductDeliveryOptionsForCartLineItems","getDeliveryOptionsForCartLineItems","getActiveCartProductsAction","ActiveCartProductsInput","getDeliveryOptionsForCartLineItemsDataAction","GetUserReviewInput","authorization","PromiseQueueElement","_dequeue","_canProcess","_processElement","_processNext","GetProductListInput","productListSearchCriteria","QuickOrder","searchAsync","AddressInput","createGetAddressInput","getAddressAction","getAddressActionDataAction","ProductsByCategoryInput","searchByCategoryAsync","productSearchResults","displayLabelEnabled","inventoryCode","inventoryRanges","available","productsWarehouseInventory","physicalProductMap","mapInventoryWithPhysicalBufferEnabled","totalAvailableProductMap","mapInventoryWithTotalAvailableBufferEnabled","productMap","mapInventoryWithThresholdEnabled","productWarehouseInventoryAvailability","TotalAvailable","productQty","outOfStockThreshold","productAvailableQuantity","shouldRenderLabel","PhysicalAvailable","StockLevelCode","StockLevelLabel","PhysicalAvailableInventoryLevelLabel","TotalAvailableInventoryLevelLabel","isAggregatedInventory","warehouseAggregation","mapAggregatedProductInventoryInformation","productWarehouseInventoryInformation","AggregatedProductInventoryAvailabilities","DataAreaId","PhysicalAvailableQuantity","TotalAvailableQuantity","isDefaultWareHouse","isFilterByChannelFulfillmentGroup","defaultDeliveryMode","deliveryMode","shipping","inventoryAvailabilitySearchCriteria","QuantityUnitTypeValue","SearchArea","GetOrgUnitLocationsByAreaInput","_Latitude","_Longitude","_Radius","createGetOrgUnitLocationsByAreaInput","getOrgUnitLocationsByArea","locationPromiseList","_getLocationWithHours","getOrgUnitLocationsByAreaDataAction","_getActivePrices","validProductIds","productCollection","validInputs","versionLt","retailServerProxyVersion","CustomerContextualPrice","ProductPrice","_getProductRatings","getProductRatingsAsync","productRating","ProductRating","getFullProductsActionDataAction","Set","ratingsAndPricePromises","exports","React","predicate","arrayLine","firstArray","secondArray","comparator","valueFromFirstArray","valueFromSecondArray","otherItem","array","newArray","CategoryPageSummaryInput","currentCategoryResult","createGetCurrentCategoryInput","categoryUrl","OfflineImage","createInputForProductReviews","getReviewsForGivenProduct","isTakenDown","pagingInfo","getReviewsForGivenProductDataAction","OrganizationUsersCountInput","createGetOrganizationUsersCountInput","getOrganizationUsersCount","getUsersAsync","users","orderTemplateLinesState","OrderTemplateLine","getPaginatedOrderTemplateLinesActionDataAction","GetFullProductListInput","getFullProductListActionDataAction","inputParameters","getProductList","getProductListLines","DefaultValues","getProductRefinerHierarchy","getProductSearchRefinersAsync","productRefiners","productRefiner","RefinersByCollectionInput","searchProductId","CategoryIds","defaultCategoryIdValue","Refinement","SearchCondition","searchObject","RecommendationListId","defaultProductIdValue","ActiveProductListInput","getActiveProductList","fullProductListInput","getFullProductList","getActiveProductListDataAction","cacheKey","cacheObjectType","GetInvoiceDetailsInput","CreateGetInvoiceDetailsInput","getInvoiceDetails","InvoiceId","getInvoiceDetailsAsync","getInvoiceDetailsDataAction","GetInvoiceInput","CreateGetInvoiceInput","getInvoice","InvoiceIds","invoices","createGetCustomerLoyaltyCardsInput","ReactDOM","CatalogsInput","CatalogsDataActions","getCatalogsAsync","createGetOrderTemplatesInput","getOrderTemplatesAction","createGetLoyaltyCardInput","getLoyaltyAction","getCustomerLoyaltyCardsAsync","cards","firstCard","getLoyaltyCardAsync","card","LoyaltyEnrollmentDate","LoyaltyEnrollmentDateLocal","getLoyaltyActionDataAction","ProductListInventoryFilteringOptions","GetFullProductsByCollectionInput","isOutOfStock","channelInventoryConfiguration","attribute","InventoryProductAttributeRecordId","InventoryOutOfStockAttributeValueText","returnProductsBasedOnInventoryInformation","productListInventoryDisplay","HideOOS","filteredProducts","filterOutOfStockProducts","SortOOS","inStockProducts","outOfStockProducts","sortsProductsBasedOnAvailability","returnProducts","metadataCount","productSearchResultsWithImages","threshold","getInventoryConfigurationAsync","channelInventoryConfigurationId","SkipVariantExpansion","ListPageStateInput","totalProductCount","activeFilters","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","isQuantityLimitsFeatureEnabledInHq","customerInfo","isOrderQuantityLimitsFeatureEnabled","productIdsByWarehouseId","resultProducts","WarehouseId","entryWarehouseId","entryProductIds","accum","getActiveCartProductsActionWhenQuantityLimitsFeatureIsOn","hasInvoiceLine","getActiveCartProductsActionDataAction","handleMissingImplementationDetails","functionName","connectorName","connectorType","connectorDictionary","connectorProviderImpl","connectorListenerImpl","connectorDomainsList","provider","listener","connectorDomains","validateConnectorRegistration","connectorImpl","__proto__","verifyExperimentationReigstration","GetRelatedProductsInput","relationType","querySettings","productRelationTypes","getRelationTypesAsync","productRelationTypeId","_productRelationType","foundProductRelationTypeId","productRelationType","searchProductRelationType","getRelatedProductsAsync","stack","GetMfrCodeInput","getMfrCodeAsync","AddOrganizationUserInput","addOrganizationUserDataAction","createBusinessPartnerUserAsync","CurrentCategoryHierarchyInput","activeCategoryId","activeCategoryParsedId","findCategoryHierarchy","innerCategoryHierarchy","getCurrentCategoryHierarchyAction","fullCategoryHierarchy","getCategoriesHierarchy","getCurrentCategoryHierarchyActionDataAction","getUserReviewDataAction","errorMessage","userInfo","getRnrAuthEndpointId","tempActionContext","searchCategory","foundCategory","cat","matchingChild","getCurrentCategoryAction","categoryInput","getCategoryHierarchy","getCurrentCategoryActionDataAction","MediaLocationsByIdInput","createMediaLocationsByIdInput","getMediaLocationsByIdAction","getMediaLocationsAsync","mediaLocation","Uri","AltText","getMediaLocationsByIdActionDataAction","CreateProductListInput","templateType","createProductListActionDataAction","GetCategoryPathsInput","categoryPathLooksups","constructedCacheKey","categoryPath","createGetCategoryPathsInput","getCategoryPathsAction","categoryPathResults","getCategoryPathsAsync","CategoryPath","getCategoriesUrlSync","slice","getCategoryPathsActionDataAction","RefinersByTextInput","getRefinersByTextAsync","MfrCodeClassExtensionClass","ExternalItemId","createGetMfrCodeInput","mfrCodeQuery","OrganizationUsersInput","createGetOrganizationUsersInput","getOrganizationUsers","getOrganizationUsersDataAction","PromotionOptionsForCartLineItems","getPromotionOptionsForCartLineItemsDataAction","getAvailablePromotionsAsync","PriceForProductSearchResultInput","getPriceForProductSearchResultDataAction","productRecIds","productResults","activePrice","BasePrice","TradeAgreementPrice","viewDictionary","updatedCartLines","updatedProducts","UpdateInCart","updateCartLinesParams","GetAllDimensionsForProductInput","getAllDimensionsForProductActionDataAction","IssueLoyaltyInput","updateCart","updateLoyaltyCardId","loyaltyCardNumber","issueLoyaltyActionDataAction","issueLoyaltyCardAsync","CustomerAccount","issuedCard","GetCustomerBalanceInput","createGetCustomerBalanceInput","getCustomerBalanceAction","getCustomerBalanceAsync","InvoiceAccount","getCustomerBalanceActionDataAction","ProductAvailabilitiesForCartLineItems","getDeliveryMode","featureSate","channelDeliveryOptionConfig","pickupDeliveryMode","PickupDeliveryModeCodes","getAvailabilitiesForCartLineItems","shippingItems","bopisItems","channelConfiguration","retailMultiplePickUpOptionEnabled","PickupDeliveryModeCode","EmailDeliveryModeCode","unique","shippingProductAvailabilities","bopisItem","productWarehouse","InventLocationDataAreaId","quantityUnitTypeSales","getProductWarehouseAvail","getEstimatedProductWarehouseAvailabilityAsync","productWarehouseMapping","getAvailabilitiesForCartLineItemsDataAction","GetStateProvincesInput","countryRegionId","getStateProvinceAction","getStateProvincesAsync","MediaLocationsForSelectedVariantInput","createMediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariantAction","AsyncResult","getMediaLocationsForSelectedVariantActionDataAction","GetAddressPurposesInput","getAddressPurposesAction","getAddressPurposesAsync","getAddressPurposesActionDataAction","documentId","itemsCount","DocumentId","ItemsCount","ItemsPerPage","SkipCount","Items","ProductItems","getListDataDataAction","inputArray","GetProducts","listitem","getInutListData","GetCountryStateInput","getCountryStateAction","countryInput","GetCountryRegionsInput","countryRegionsInfo","getCountryRegionsAction","marketISOCode","currentCountryRegion","countryRegion","ISOCode","CountryRegionId","stateInput","getCountryStateActionDataAction","ProductAvailabilitiesForSelectedVariantInput","createProductAvailabilitiesForSelectedVariantInput","getProductAvailabilitiesForSelectedVariantAction","shippingSearchCriteria","pickupSearchCriteria","shippingAvailability","shippingInventory","deliveryType","pickupAvailability","pickupInventory","mergeProductWarehouseToProductAvailabities","productAvailable","getProductAvailabilitiesForSelectedVariantActionDataAction","GetAllStoresInput","GetOrganizationWideOrderHistoryInput","getOrganizationWideOrderHistoryDataAction","getOrderHistoryAsync","getCategoryActionDataAction","getCategoriesAsync","createSearchStateInput","getCountryRegionsByLanguageIdAsync","getCountryRegionsActionDataAction","PageSummaryInput","keywords","ProductAvailabilitiesForWishlistItems","getAvailabilitiesForWishlistItems","getAvailabilitiesForWishlistItemsDataAction","UpdateOrderTemplateInput","getLinesInput","getPaginatedOrderTemplateLines","linesToUpdate","lineToUpdate","updatedLines","updateProductListLinesAsync","updatedLine","updateAddressHandler","IsPrimary","updateAddressActionDataAction","AddressManagementInput","operationHandler","createReadAsync","addAddressHandler","addAddressActionDataAction","rnr","endpoint","proxyUrl","endsWith","substring","search","querySettingsProxy","createSearchByTextInput","SearchConfigurationInput","ListPageState","activeProducts","sortingCritera","currentPageNumber","featureProduct","listPageStateAction","createListPageInput","createAccordionStateInput","getFullOrderTemplatesActionDataAction","orderTemplates","AddItemToProductListInput","addItemToProductListActionDataAction","paymentTenderType","shouldShowBillingAddress","CartsDataActions","updatePrimaryAddressActionDataAction","setPrimaryAddress","primaryAddresses","addresses","addr","ActiveCheckoutCartProductsInput","getActiveCheckoutCartProductsAction","getActiveCheckoutCartProductsActionDataAction"],"mappings":"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Ac,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,YAId,KAAAE,YAA2B,CAC/B,CACIH,UAAW,OACXC,aAAc,UAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,YAId,KAAAG,YAA2B,CAC/B,CACIJ,UAAW,OACXC,aAAc,UAElB,CACID,UAAW,OACXC,aAAc,UAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,WAElB,CACID,UAAW,OACXC,aAAc,YAIfI,6BACH,OAAOzgB,QAAQuM,QAAQ,IAEpBmU,qBAAqBrf,GAExB,OADAsf,QAAQC,IAAR,gFAAqFvf,KAC9E,EAGJwf,iBACH,OAAO7gB,QAAQuM,QAAQ,CACnBuU,KAAM,sBACNC,YAAa,CACT,CACI3gB,GAAI,SACJ4gB,aAAc,eACdC,YAAa,yCACbC,KAAM,WACNC,OAAQC,IAAMC,QACdC,KAAM,yCACNC,WAAY,CACR,CACInhB,GAAI,OACJ4gB,aAAc,YACdG,OAAQC,IAAMI,OACdC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","file":"static/js/19.0c7c933f2b04b61f6829.chunk.js","sourcesContent":["/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductDimensionAvailabilitySearchCriteria, ProductsDataActions\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ArrayExtensions, getSelectedProductIdFromActionInput } from './utilities';\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 searchCriteria: ProductDimensionAvailabilitySearchCriteria =\n {\n RequestedDimensionTypeValue: dimension.DimensionTypeValue,\n MatchingDimensionValues: [],\n DefaultWarehouseOnly: false,\n FilterByChannelFulfillmentGroup: true,\n DeliveryModeTypeFilterValue: 0\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 { 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[] = [\n ProductDimensionType.Color,\n ProductDimensionType.Configuration,\n ProductDimensionType.Size,\n ProductDimensionType.Style\n ];\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 { 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 { 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 searchCriteria: ProductDimensionAvailabilitySearchCriteria =\n {\n RequestedDimensionTypeValue: dimension.DimensionTypeValue,\n MatchingDimensionValues: matchingDimensionValues,\n DefaultWarehouseOnly: false,\n FilterByChannelFulfillmentGroup: true,\n DeliveryModeTypeFilterValue: 0\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 { 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 { 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, 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","\r\n /*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n * THIS FILE IS AN AUTOGENERATED TYPESCRIPT PROXY EXTENSION.\r\n * TO USE THIS FILE, IT MUST BE ADDED TO A D365COMMERCE APPLICATION\r\n */\r\n // tslint:disable\r\n import { AsyncResult, callActionOrExecute, DataServiceQuery, IContext, IDataServiceRequest, IQueryResultSettings } from '@msdyn365-commerce/retail-proxy';\r\n // @ts-ignore\r\n import * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\n \r\n import * as DataServiceEntities from './DataServiceEntities.g';\r\n\r\n \r\n function promptCustomerSignatureQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n }\r\n \r\n \r\n export function promptCustomerSignatureInput (\r\n poiId:\r\n string,\r\n saleId:\r\n string,\r\n serviceId:\r\n string\r\n ): IDataServiceRequest {\r\n const query = promptCustomerSignatureQuery();\r\n return query.createDataServiceRequestForOperation(\r\n 'PromptCustomerSignature',\r\n true, \r\n DataServiceEntities.CustomerSignatureExtensionClass\r\n ,\r\n 'false',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.ICustomerSignature' },\r\n { \r\n poiId: poiId,\r\n saleId: saleId,\r\n serviceId: serviceId\r\n }\r\n );\r\n }\r\n \r\n export function promptCustomerSignatureAsync (\r\n context: IContext, poiId:\r\n string,\r\n saleId:\r\n string,\r\n serviceId:\r\n string\r\n ): AsyncResult {\r\n const request = promptCustomerSignatureInput(poiId, saleId, serviceId);\r\n return callActionOrExecute(request, context.callerContext);\r\n }\r\n \r\n function checkUserClockedInQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n }\r\n \r\n \r\n export function checkUserClockedInInput (\r\n staffId:\r\n string\r\n ): IDataServiceRequest {\r\n const query = checkUserClockedInQuery();\r\n return query.createDataServiceRequestForOperation(\r\n 'CheckUserClockedIn',\r\n true, \r\n ''\r\n ,\r\n 'false',\r\n { bypassCache: 'get', returnEntity: '' },\r\n { \r\n staffId: staffId\r\n }\r\n );\r\n }\r\n \r\n export function checkUserClockedInAsync (\r\n context: IContext, staffId:\r\n string\r\n ): AsyncResult {\r\n const request = checkUserClockedInInput(staffId);\r\n return callActionOrExecute(request, context.callerContext);\r\n }\r\n \r\n function getDemoProductsQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n }\r\n \r\n \r\n export function getDemoProductsInput (\r\n queryResultSettings: IQueryResultSettings, locationId:\r\n string,\r\n languageId:\r\n string\r\n ): IDataServiceRequest {\r\n const query = getDemoProductsQuery().resultSettings(queryResultSettings);\r\n return query.createDataServiceRequestForOperation(\r\n 'GetDemoProducts',\r\n true, \r\n DataServiceEntities.SignItemExtensionClass\r\n ,\r\n 'true',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.ISignItem' },\r\n { \r\n locationId: locationId,\r\n languageId: languageId\r\n }\r\n );\r\n }\r\n \r\n export function getDemoProductsAsync (\r\n context: IContext, locationId:\r\n string,\r\n languageId:\r\n string\r\n ): AsyncResult {\r\n const request = getDemoProductsInput(\r\n context.queryResultSettings || {}, locationId, languageId);\r\n return callActionOrExecute(request, context.callerContext);\r\n }\r\n \r\n function getDemoStoresQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n }\r\n \r\n \r\n export function getDemoStoresInput (\r\n queryResultSettings: IQueryResultSettings\r\n ): IDataServiceRequest {\r\n const query = getDemoStoresQuery().resultSettings(queryResultSettings);\r\n return query.createDataServiceRequestForOperation(\r\n 'GetDemoStores',\r\n true, \r\n DataServiceEntities.DemoStoreExtensionClass\r\n ,\r\n 'true',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.IDemoStore' },\r\n { \r\n \r\n }\r\n );\r\n }\r\n \r\n export function getDemoStoresAsync (\r\n context: IContext\r\n ): AsyncResult {\r\n const request = getDemoStoresInput(\r\n context.queryResultSettings || {});\r\n return callActionOrExecute(request, context.callerContext);\r\n }\r\n \r\n function getGroupedAttributesQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n }\r\n \r\n \r\n export function getGroupedAttributesInput (\r\n queryResultSettings: IQueryResultSettings, channelId:\r\n number,\r\n catalogId:\r\n number,\r\n productId:\r\n number\r\n ): IDataServiceRequest {\r\n const query = getGroupedAttributesQuery().resultSettings(queryResultSettings);\r\n return query.createDataServiceRequestForOperation(\r\n 'GetGroupedAttributes',\r\n true, \r\n DataServiceEntities.ProductAttributeGroupExtensionClass\r\n ,\r\n 'true',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.IProductAttributeGroup' },\r\n { \r\n channelId: channelId,\r\n catalogId: catalogId,\r\n productId: productId\r\n }\r\n );\r\n }\r\n \r\n export function getGroupedAttributesAsync (\r\n context: IContext, channelId:\r\n number,\r\n catalogId:\r\n number,\r\n productId:\r\n number\r\n ): AsyncResult {\r\n const request = getGroupedAttributesInput(\r\n context.queryResultSettings || {}, channelId, catalogId, productId);\r\n return callActionOrExecute(request, context.callerContext);\r\n }\r\n \r\n function getProductInfoQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n }\r\n \r\n \r\n export function getProductInfoInput (\r\n sku:\r\n string\r\n ): IDataServiceRequest {\r\n const query = getProductInfoQuery();\r\n return query.createDataServiceRequestForOperation(\r\n 'GetProductInfo',\r\n true, \r\n DataServiceEntities.ProductInfoExtensionClass\r\n ,\r\n 'false',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.IProductInfo' },\r\n { \r\n sku: sku\r\n }\r\n );\r\n }\r\n \r\n export function getProductInfoAsync (\r\n context: IContext, sku:\r\n string\r\n ): AsyncResult {\r\n const request = getProductInfoInput(sku);\r\n return callActionOrExecute(request, context.callerContext);\r\n }\r\n \r\n function getWhatisinBoxQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n }\r\n \r\n \r\n export function getWhatisinBoxInput (\r\n sku:\r\n string\r\n ): IDataServiceRequest {\r\n const query = getWhatisinBoxQuery();\r\n return query.createDataServiceRequestForOperation(\r\n 'GetWhatisinBox',\r\n true, \r\n DataServiceEntities.WhatisinBoxExtensionClass\r\n ,\r\n 'false',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.IWhatisinBox' },\r\n { \r\n sku: sku\r\n }\r\n );\r\n }\r\n \r\n export function getWhatisinBoxAsync (\r\n context: IContext, sku:\r\n string\r\n ): AsyncResult {\r\n const request = getWhatisinBoxInput(sku);\r\n return callActionOrExecute(request, context.callerContext);\r\n }\r\n \r\n function getProductPromotionsQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n }\r\n \r\n \r\n export function getProductPromotionsInput (\r\n queryResultSettings: IQueryResultSettings, recordId:\r\n number,\r\n distinctProductVariantId:\r\n number\r\n ): IDataServiceRequest {\r\n const query = getProductPromotionsQuery().resultSettings(queryResultSettings);\r\n return query.createDataServiceRequestForOperation(\r\n 'GetProductPromotions',\r\n true, \r\n DataServiceEntities.ProductPromotionExtensionClass\r\n ,\r\n 'true',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.IProductPromotion' },\r\n { \r\n recordId: recordId,\r\n distinctProductVariantId: distinctProductVariantId\r\n }\r\n );\r\n }\r\n \r\n export function getProductPromotionsAsync (\r\n context: IContext, recordId:\r\n number,\r\n distinctProductVariantId:\r\n number\r\n ): AsyncResult {\r\n const request = getProductPromotionsInput(\r\n context.queryResultSettings || {}, recordId, distinctProductVariantId);\r\n return callActionOrExecute(request, context.callerContext);\r\n }\r\n \r\n function getPromotionInfoQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n }\r\n \r\n \r\n export function getPromotionInfoInput (\r\n code:\r\n string\r\n ): IDataServiceRequest {\r\n const query = getPromotionInfoQuery();\r\n return query.createDataServiceRequestForOperation(\r\n 'GetPromotionInfo',\r\n true, \r\n DataServiceEntities.DiscountInfoExtensionClass\r\n ,\r\n 'false',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.IDiscountInfo' },\r\n { \r\n code: code\r\n }\r\n );\r\n }\r\n \r\n export function getPromotionInfoAsync (\r\n context: IContext, code:\r\n string\r\n ): AsyncResult {\r\n const request = getPromotionInfoInput(code);\r\n return callActionOrExecute(request, context.callerContext);\r\n }\r\n \r\n \r\n // @ts-ignore\r\n function flexitiPaymentQuery(transactionId?: string): DataServiceQuery {\r\n const key = (transactionId) ? { transactionId: transactionId } :null;\r\n return new DataServiceQuery(\"FlexitiPayment\", \"FlexitiTransactions\", DataServiceEntities.FlexitiTransactionsExtensionClass, key);\r\n }\r\n\r\n \r\n export function createGetFlexitiPaymentTransactionsInput(queryResultSettings: IQueryResultSettings, flexitiPaymentCustomer: DataServiceEntities.IFlexitiPaymentCustomer): IDataServiceRequest {\r\n const query = flexitiPaymentQuery().resultSettings(queryResultSettings);\r\n return query.createDataServiceRequestForOperation('GetFlexitiPaymentTransactions', true, DataServiceEntities.FlexitiTransactionsExtensionClass, 'true', {bypassCache: 'none', returnEntity: 'DataServiceEntities.IFlexitiTransactions'}, {flexitiPaymentCustomer: flexitiPaymentCustomer });\r\n }\r\n\r\n \r\n export function getFlexitiPaymentTransactionsAsync(context: IContext, flexitiPaymentCustomer: DataServiceEntities.IFlexitiPaymentCustomer): AsyncResult {\r\n const request = createGetFlexitiPaymentTransactionsInput(\r\n context.queryResultSettings || {}, flexitiPaymentCustomer);\r\n return callActionOrExecute(request, context.callerContext);\r\n }\r\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, 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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromSimpleProduct } from './telemetry.action.helper';\n\nconst beforeGetById = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterGetById = async (\n _inputs: IActionInput | IActionInput[],\n simpleProduct: SimpleProduct | SimpleProduct[],\n actionContext: IActionContext\n) => {\n simpleProduct = await Promise.resolve(Array.isArray(simpleProduct) ? simpleProduct[0] : simpleProduct);\n\n // If simple product result is defined run the post hook\n if (simpleProduct) {\n const productInfo = getProductInfoFromSimpleProduct(simpleProduct);\n actionContext.requestContext.telemetryData[productInfo.productSku] = productInfo;\n actionContext.requestContext.telemetryData[TelemetryEvent.ProductPageView] = productInfo ? [productInfo] : [];\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Products/GetById',\n postReaderHook: afterGetById,\n preReaderHook: beforeGetById\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';\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 { 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 { 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","export * from './DataActionExtension.g';\r\nexport * from './DataServiceEntities.g';\r\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 { 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 { CacheType, IActionInput } from '@msdyn365-commerce/core';\n\nexport type OrderBy =\n | 'None'\n | 'MostRecent'\n | 'Oldest'\n | 'HighestRating'\n | 'LowestRating'\n | 'MostHelpful'\n | 'LeastHelpful'\n | 'MostAsked'\n | 'MostAnswered'\n | 'LeastConcerns'\n | 'MostConcerns'\n | 'ReviewerNameAsc'\n | 'ReviewerNameDesc';\n\n/**\n * ReviewsGetRatingsSummary Input Action.\n */\nexport class GetProductReviewsInput implements IActionInput {\n /**\n * The Id representing the product to get the reviews for.\n */\n public productId: string;\n\n /**\n * The ID representing the tenant.\n */\n public tenantId: string;\n\n /**\n * The market for which to get the reviews from.\n */\n public localeListFilter: string;\n\n /**\n * Number of reviews to be shown on each page.\n */\n public pageSize: number;\n\n /**\n * Order in which reviews to be shown.\n */\n public orderBy: string;\n\n /**\n * Need to set this value if reviews need to be filtered with specific star rating .\n */\n public starFilters?: string;\n\n /**\n * Need to set this value if we need to skip few reviews.\n */\n public skipItems: number;\n\n /**\n * The continuation token.\n */\n public pageToken: string | null;\n\n /**\n * Selects which data sources to use to retrieve data.\n */\n public dataSources: string | null;\n\n /**\n * The ratings and reviews service endpoint.\n */\n public serviceEndpoint: string;\n\n constructor(\n productId: string,\n tenantId: string,\n localeListFilter: string,\n serviceEndpoint: string,\n orderBy: string = 'MostHelpful',\n starFilters: string = '',\n skipItems: number = 0,\n pageSize: number = 10,\n pageToken: string | null = null,\n dataSources: string | null = null\n ) {\n this.productId = productId;\n this.tenantId = tenantId;\n this.localeListFilter = localeListFilter;\n\n // Max page size which Rnr API supports is 25.\n // Hence if config has page size more than 25, we'll default it to 25.\n this.pageSize = pageSize > 25 ? 25 : pageSize;\n this.orderBy = orderBy;\n this.starFilters = starFilters;\n this.skipItems = skipItems;\n this.pageToken = pageToken;\n this.dataSources = dataSources;\n this.serviceEndpoint = serviceEndpoint;\n }\n\n public getCacheKey = () => `${this.productId}-${this.tenantId}-${this.localeListFilter}-${this.pageSize}-${this.orderBy}-${this.starFilters}-${this.skipItems}`;\n\n public getCacheObjectType = () => 'ProductReview';\n\n public dataCacheType = (): CacheType => 'request';\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 { 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 { 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\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 {\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 {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport { ProductLookupClause, ProductsDataActions, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IActiveImageConfig, IActivePointsData } from '../active-image';\n\n/**\n * ActiveImageInput.\n */\nexport class ActiveImageInput implements IActionInput {\n\n public config: IActiveImageConfig;\n\n private readonly _cacheKey: string = 'ActiveImage';\n\n public constructor(config: IActiveImageConfig) {\n this.config = config;\n\n if (this.config.activePoints && ArrayExtensions.hasElements(this.config.activePoints)) {\n for (const activePointData of this.config.activePoints) {\n if (activePointData.itemId) {\n this._cacheKey = (`${this._cacheKey}-${activePointData.itemId.toString()}`);\n }\n }\n }\n }\n\n /**\n * GetCacheObjectType.\n * @returns - Returns string.\n */\n public getCacheObjectType = (): string => 'ActiveImageFullProductSearchResult';\n\n /**\n * GetCacheKey.\n * @returns - Returns string.\n */\n public getCacheKey = (): string => this._cacheKey;\n\n /**\n * DataCacheType.\n * @returns - CacheType string.\n */\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * CreateInput.\n * @param inputData - IActionContext.\n * @returns - IActionInput.\n */\nexport const createInput = (inputData: ICreateActionContext): IActionInput => {\n return new ActiveImageInput(inputData.config as IActiveImageConfig);\n};\n\n/**\n * Action.\n * @param input - ActiveImageInput.\n * @param context - IActionContext.\n * @returns - ProductSearchResult[].\n */\nexport const getActiveImageproductAction = async (input: ActiveImageInput, context: IActionContext): Promise => {\n const { config } = input;\n const itemIds: ProductLookupClause[] = [];\n if (config.activePoints) {\n config.activePoints.map((activePointData: IActivePointsData) => itemIds.push({ ItemId: activePointData.itemId }));\n }\n const searchCriteriaInput: ProductSearchCriteria = {};\n searchCriteriaInput.Context = { ChannelId: context.requestContext.apiSettings.channelId, CatalogId: context.requestContext.apiSettings.catalogId };\n searchCriteriaInput.IncludeAttributes = true;\n searchCriteriaInput.ItemIds = itemIds;\n return await ProductsDataActions.searchByCriteriaAsync({ callerContext: context }, searchCriteriaInput);\n\n};\n\n/**\n * Action.\n * @param id - Id.\n * @param action - Action.\n * @returns - Results.\n */\nexport const actionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/active-image/get-active-image-products',\n action: getActiveImageproductAction as IAction,\n input: createInput\n});\n\nexport default actionDataAction;\n\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICommerceApiSettings,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { ProductDeliveryOptions, SalesOrder, SimpleProduct, TransactionType } from '@msdyn365-commerce/retail-proxy';\r\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport {\r\n getSalesOrderDetailsBySalesIdAsync,\r\n getSalesOrderDetailsByTransactionIdAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/SalesOrdersDataActions.g';\r\nimport {\r\n ArrayExtensions,\r\n buildCacheKey,\r\n getSimpleProducts,\r\n ObjectExtensions,\r\n ProductInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Sales order response interface.\r\n */\r\ninterface ISalesOrderWithHydrations {\r\n salesOrder: SalesOrder;\r\n products: SimpleProduct[];\r\n productDeliveryOptions?: ProductDeliveryOptions[];\r\n}\r\n\r\n/**\r\n * OrderTypes Types of orders.\r\n */\r\nexport enum orderTypes {\r\n salesOrder = 'salesOrder',\r\n transaction = 'transaction'\r\n}\r\n\r\n/**\r\n * Calls the Retail API and returns the sales order.\r\n * @param orderType - OrderType.\r\n * @param orderId - Unique OrderId for each order.\r\n * @returns Sales Order.\r\n */\r\nconst getSalesOrder = (orderType: string = '', orderId: string = '') => async (\r\n context: IActionContext\r\n): Promise => {\r\n // Local (1) searches the retail server database, and remote (2) searches\r\n // on the headquarters side. All (3) and none (0) are not supported.\r\n const localSearch = 1;\r\n return orderType === orderTypes.salesOrder\r\n ? getSalesOrderDetailsBySalesIdAsync({ callerContext: context }, orderId)\r\n : getSalesOrderDetailsByTransactionIdAsync({ callerContext: context }, orderId, localSearch);\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns the products.\r\n * @param productIds - The product ids of the product to retrieve.\r\n * @param channelId - The channel id for the products.\r\n * @returns Simple product data.\r\n */\r\nconst getProducts = (productIds: (string | number)[] = [], channelId?: number) => async (\r\n context: IActionContext\r\n): Promise => {\r\n const productInputs = productIds.map(productId => new ProductInput(productId, context.requestContext.apiSettings, channelId));\r\n return getSimpleProducts(productInputs, context);\r\n};\r\n\r\n/**\r\n * Action input.\r\n */\r\nexport class GetSalesOrderConfirmationWithHydrationsInput implements IActionInput {\r\n public orderType: string;\r\n\r\n public orderId: string;\r\n\r\n private readonly apiSettings: ICommerceApiSettings;\r\n\r\n constructor(orderType: string, orderId: string, apiSettings: ICommerceApiSettings) {\r\n this.orderType = orderType;\r\n this.orderId = orderId;\r\n this.apiSettings = apiSettings;\r\n }\r\n\r\n /**\r\n * Get cache key.\r\n * @returns String.\r\n */\r\n public getCacheKey = () => buildCacheKey('SalesOrderConfirmationWithHydrations', this.apiSettings);\r\n\r\n /**\r\n * Get cache object.\r\n * @returns String.\r\n */\r\n public getCacheObjectType = () => `SalesOrderConfirmationWithHydrations-${this.orderType}-${this.orderId}`;\r\n\r\n /**\r\n * Get cache data type.\r\n * @returns String.\r\n */\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\n/**\r\n * Creates the input required to make the retail api call.\r\n * @param inputData - Actioncontext data.\r\n * @returns Sales Order Input.\r\n */\r\nconst createSalesOrderConfrimationWithHydrationsInput = (inputData: ICreateActionContext) => {\r\n const { salesId = '', transactionId = '' } = inputData.requestContext.query || {};\r\n if (salesId) {\r\n return new GetSalesOrderConfirmationWithHydrationsInput(orderTypes.salesOrder, salesId, inputData.requestContext.apiSettings);\r\n } else if (transactionId) {\r\n return new GetSalesOrderConfirmationWithHydrationsInput(\r\n orderTypes.transaction,\r\n transactionId,\r\n inputData.requestContext.apiSettings\r\n );\r\n }\r\n throw new Error('createSalesOrderConfrimationWithHydrationsInput - No salesId or transactionId provided.');\r\n};\r\n\r\n/**\r\n * Get sales order with hydrations action.\r\n * @param input - Input for data action.\r\n * @param context - Action context.\r\n * @returns Sales order response.\r\n */\r\nexport async function getSalesOrderConfirmationWithHydrationsAction(\r\n input: GetSalesOrderConfirmationWithHydrationsInput,\r\n context: IActionContext\r\n): Promise {\r\n if (!context) {\r\n throw new Error('getSalesOrderConfirmationWithHydrationsAction - Action context cannot be null/undefined');\r\n }\r\n\r\n const { orderType, orderId } = input;\r\n\r\n if (!orderType || !orderId) {\r\n context.trace('[getSalesOrderConfirmationWithHydrationsAction] No orderType or orderId provided.');\r\n return {};\r\n }\r\n\r\n const salesOrder = await getSalesOrder(orderType, orderId)(context);\r\n\r\n if (!salesOrder) {\r\n context.trace('[getSalesOrderWithHydrationsAction] No salesOrder found.');\r\n return {};\r\n }\r\n\r\n // If it is salesInvoice, return salesOrder and empty products\r\n if (salesOrder.TransactionTypeValue === TransactionType.SalesInvoice) {\r\n return {\r\n salesOrder,\r\n products: []\r\n };\r\n }\r\n\r\n if (!ArrayExtensions.hasElements(salesOrder.SalesLines)) {\r\n context.trace('[getSalesOrderWithHydrationsAction] No salesLine found.');\r\n return {};\r\n }\r\n\r\n const productIds = salesOrder.SalesLines.map(salesLine => salesLine.ProductId ?? '');\r\n\r\n if (!ArrayExtensions.hasElements(productIds)) {\r\n context.trace('[getSalesOrderWithHydrationsAction] No products in saleLines found.');\r\n return {};\r\n }\r\n\r\n const products = await getProducts(productIds, salesOrder.ChannelId)(context);\r\n\r\n if (!ArrayExtensions.hasElements(products)) {\r\n context.trace('[getSalesOrderWithHydrationsAction] No simple products found.');\r\n return {};\r\n }\r\n\r\n const validProducts = products.filter(product => !ObjectExtensions.isNullOrUndefined(product.RecordId));\r\n const filterPickup = 4;\r\n const deliveryOptions = await getDeliveryOptionsAsync(\r\n { callerContext: context, queryResultSettings: {} },\r\n validProducts.map(product => product.RecordId),\r\n {},\r\n filterPickup\r\n )\r\n .then(result => {\r\n return result;\r\n })\r\n .catch((error: Error) => {\r\n context.trace(error.message);\r\n context.telemetry.exception(error);\r\n context.telemetry.debug('[getDeliveryOptionsForCartLineItems]Error executing action');\r\n throw new Error('[getDeliveryOptionsForCartLineItems]Error executing action');\r\n });\r\n\r\n return {\r\n salesOrder,\r\n products,\r\n deliveryOptions\r\n };\r\n}\r\n\r\n/**\r\n * Get sales order with hydrations action.\r\n * @param id - Unique Id for data action.\r\n * @param context - Action context.\r\n * @param input - Input for data action.\r\n * @returns Sales order response.\r\n */\r\nexport const getSalesOrderConfirmationWithHydrationsActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/order-management/get-sales-order-confirmation-with-hydrations',\r\n action: >getSalesOrderConfirmationWithHydrationsAction,\r\n input: createSalesOrderConfrimationWithHydrationsInput\r\n});\r\n\r\nexport default getSalesOrderConfirmationWithHydrationsActionDataAction;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput, IMSDyn365Window } from '@msdyn365-commerce/core';\nimport { SalesOrder } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, IProductTransaction, TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * Checkout data action pre-hook\n * @param inputs Data action inputs\n */\nconst beforePurchase = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\n/**\n * Fires a Purchase event after Checkout data action completed\n * @param _inputs Data action inputs\n * @param salesOrder Sales order for transaction\n * @param actionContext Action context\n */\nconst afterPurchase = async (\n _inputs: IActionInput | IActionInput[],\n salesOrder: SalesOrder | SalesOrder[],\n actionContext: IActionContext\n) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const salesObject = Array.isArray(salesOrder) ? salesOrder[0] : salesOrder;\n let saleLineProductUnits: IProductInfo[] = [];\n\n // Collect info on products in the sales order\n if (salesObject && salesObject.SalesLines && Array.isArray(salesObject.SalesLines) && salesObject.SalesLines.length > 0) {\n try {\n saleLineProductUnits = await getProductInfoFromCartLinesAsync(salesObject.SalesLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('Checkout post-data action hook failed to process cart lines.', error);\n }\n }\n\n // Store the purchased product information so that we can avoid \"code triggered\" remove from cart telemetry event.\n actionContext.requestContext.telemetryData[TelemetryEvent.Purchase] = {\n id: salesObject.Id,\n affiliation: salesObject.ChannelId ? salesObject.ChannelId.toString() : '',\n revenue: salesObject.NetAmountWithoutTax,\n tax: salesObject.TaxAmount,\n // shippingCost?: // Confirm if it is delivery mode charge amount;\n products: saleLineProductUnits\n };\n\n // Fire Purchase event\n window._msdyn365.telemetry.logEvent(\n TelemetryEvent.Purchase,\n actionContext.requestContext.telemetryData[TelemetryEvent.Purchase]\n );\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/Checkout',\n postReaderHook: afterPurchase,\n preReaderHook: beforePurchase\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 { 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,\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 { 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 { 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';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\n// TODO: import from commerce entities when available\ninterface SearchConfiguration {\n ProductSortColumns?: SortColumn[];\n}\n\nexport interface MappedSearchConfiguration {\n key: string;\n sortColumn: SortColumn;\n}\n\nexport const sortOptions = {\n sortByOptionRelevanceDesc: 'Ranking-Desc',\n sortByOptionRatingAsc: 'AverageRating-Asc',\n sortByOptionRatingDesc: 'AverageRating-Desc',\n sortByOptionNameAsc: 'Name-Asc',\n sortByOptionNameDesc: 'Name-Desc',\n sortByOptionPriceAsc: 'Price-Asc',\n sortByOptionPriceDesc: 'Price-Desc',\n sortByOptionBestSelling: 'BestSelling',\n sortByOptionNewScore: 'NewScore',\n sortByOptionTrendingScore: 'TrendingScore'\n};\n\n/**\n * ActionInput class for the get-mapped-search-configuration Data Action.\n */\nexport class MappedSearchInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('MappedSearchInput', this.apiSettings);\n\n public getCacheObjectType = () => 'MappedSearchInput';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Get a mapped search configuration that is easy to use for sorting.\n * @param input\n * @param ctx\n */\nexport async function getMappedSearchConfiguration(input: MappedSearchInput, ctx: IActionContext): Promise {\n return getSearchConfigurationAsync({ callerContext: ctx }).then((searchConfiguration: SearchConfiguration) => {\n return ((searchConfiguration.ProductSortColumns || []).map((sortColumn: SortColumn) => {\n let key = '';\n if (sortColumn.ColumnName) {\n switch (sortColumn.ColumnName.toUpperCase()) {\n case 'NAME':\n key = sortColumn.IsDescending ? sortOptions.sortByOptionNameDesc : sortOptions.sortByOptionNameAsc;\n break;\n case 'PRICE':\n key = sortColumn.IsDescending ? sortOptions.sortByOptionPriceDesc : sortOptions.sortByOptionPriceAsc;\n break;\n case 'AVERAGERATING':\n key = sortColumn.IsDescending ? sortOptions.sortByOptionRatingDesc : sortOptions.sortByOptionRatingAsc;\n break;\n case 'RANKING':\n key = sortOptions.sortByOptionRelevanceDesc;\n break;\n case 'BESTSELLINGSCORE':\n key = sortOptions.sortByOptionBestSelling;\n break;\n case 'NEWSCORE':\n key = sortOptions.sortByOptionNewScore;\n break;\n case 'TRENDINGSCORE':\n key = sortOptions.sortByOptionTrendingScore;\n break;\n default:\n }\n } else {\n ctx.telemetry.warning('[get-mapped-search-configuration] unknown search option');\n }\n if (key) {\n return {\n key,\n sortColumn\n };\n }\n return undefined;\n\n }).filter(Boolean));\n });\n}\n\nexport const createInput = (inputData: ICreateActionContext>): IActionInput => {\n return new MappedSearchInput(inputData.requestContext.apiSettings);\n};\n\nexport const getMappedSearchConfigurationDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-mapped-search-configuration',\n action: >getMappedSearchConfiguration,\n input: createInput\n});\n\nexport default getMappedSearchConfigurationDataAction;\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\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","\r\n // tslint:disable\r\n import * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\n import * as Entities from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g'; \r\n \r\n \r\n /**\r\n * FlexitiTransactions entity interface.\r\n */\r\n export interface IFlexitiTransactions {\r\n term?: string;\r\n transactionId: string;\r\n transactionStatus?: string;\r\n customerName?: string;\r\n transactionBalance?: string;\r\n transactionDate?: string;\r\n }\r\n \r\n /**\r\n * CustomerSignature entity interface.\r\n */\r\n export interface ICustomerSignature {\r\n Succeed: boolean;\r\n Id: number;\r\n ErrorCode?: string;\r\n ExtensionProperties?: Entities.CommerceProperty[];\r\n }\r\n \r\n /**\r\n * SignItem entity interface.\r\n */\r\n export interface ISignItem {\r\n ItemId?: string;\r\n Description?: string;\r\n Price: number;\r\n }\r\n \r\n /**\r\n * DemoStore entity interface.\r\n */\r\n export interface IDemoStore {\r\n Store?: string;\r\n StoreLocationId?: string;\r\n DefaultCustAccount?: string;\r\n }\r\n \r\n /**\r\n * FlexitiPaymentCustomer entity interface.\r\n */\r\n export interface IFlexitiPaymentCustomer {\r\n transactionStatus?: string;\r\n FirstName?: string;\r\n LastName?: string;\r\n PostalCode?: string;\r\n Birthday?: string;\r\n }\r\n \r\n /**\r\n * ProductAttributeGroup entity interface.\r\n */\r\n export interface IProductAttributeGroup {\r\n GroupId: number;\r\n Group?: string;\r\n Name?: string;\r\n DisplayOrder: number;\r\n Attributes?: Entities.AttributeValue[];\r\n }\r\n \r\n /**\r\n * ProductInfo entity interface.\r\n */\r\n export interface IProductInfo {\r\n ProductInfoId: number;\r\n Sku?: string;\r\n WebText?: string;\r\n }\r\n \r\n /**\r\n * WhatisinBox entity interface.\r\n */\r\n export interface IWhatisinBox {\r\n ProductInfoId: number;\r\n Sku?: string;\r\n WhatsIntheBox?: string;\r\n }\r\n \r\n /**\r\n * ProductPromotion entity interface.\r\n */\r\n export interface IProductPromotion {\r\n OfferId?: string;\r\n Name?: string;\r\n ProductIds?: number[];\r\n DiscountInfo?: IDiscountInfo;\r\n }\r\n \r\n /**\r\n * DiscountInfo entity interface.\r\n */\r\n export interface IDiscountInfo {\r\n MarketingHtml?: string;\r\n MarketingName?: string;\r\n CartHtml?: string;\r\n Expired: boolean;\r\n }\r\n \r\n /**\r\n * FlexitiTransactions entity class.\r\n */\r\n export class FlexitiTransactionsExtensionClass implements IFlexitiTransactions {\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public term: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public transactionId: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public transactionStatus: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public customerName: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public transactionBalance: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public transactionDate: string;\r\n \r\n // Navigation properties names\r\n \r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.term = odataObject.term;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.transactionId = odataObject.transactionId;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.transactionStatus = odataObject.transactionStatus;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.customerName = odataObject.customerName;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.transactionBalance = odataObject.transactionBalance;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.transactionDate = odataObject.transactionDate;\r\n \r\n }\r\n }\r\n\r\n /**\r\n * CustomerSignature entity class.\r\n */\r\n export class CustomerSignatureExtensionClass implements ICustomerSignature {\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Succeed: boolean;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Id: number;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ErrorCode: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ExtensionProperties: Entities.CommerceProperty[];\r\n \r\n // Navigation properties names\r\n \r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Succeed = odataObject.Succeed;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Id = (odataObject.Id) ? parseInt(odataObject.Id, 10) : 0;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ErrorCode = odataObject.ErrorCode;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties = undefined;\r\n if (odataObject.ExtensionProperties) {\r\n this.ExtensionProperties = [];\r\n for (var i = 0; i < odataObject.ExtensionProperties.length; i++) {\r\n if (odataObject.ExtensionProperties[i]) {\r\n if (odataObject.ExtensionProperties[i]['@odata.type']) {\r\n var className: string = odataObject.ExtensionProperties[i]['@odata.type'];\r\n className = className.substr(className.lastIndexOf('.') + 1).concat(\"Class\");\r\n if (EntityClasses[className]) {\r\n this.ExtensionProperties[i] = new EntityClasses[className](odataObject.ExtensionProperties[i])\r\n }\r\n } else {\r\n this.ExtensionProperties[i] = new EntityClasses.CommercePropertyClass(odataObject.ExtensionProperties[i]);\r\n }\r\n \r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties[i] = undefined;\r\n }\r\n }\r\n }\r\n \r\n }\r\n }\r\n\r\n /**\r\n * SignItem entity class.\r\n */\r\n export class SignItemExtensionClass implements ISignItem {\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ItemId: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Description: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Price: number;\r\n \r\n // Navigation properties names\r\n \r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ItemId = odataObject.ItemId;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Description = odataObject.Description;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Price = (odataObject.Price) ? parseFloat(odataObject.Price) : 0;\r\n \r\n }\r\n }\r\n\r\n /**\r\n * DemoStore entity class.\r\n */\r\n export class DemoStoreExtensionClass implements IDemoStore {\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Store: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public StoreLocationId: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public DefaultCustAccount: string;\r\n \r\n // Navigation properties names\r\n \r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Store = odataObject.Store;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.StoreLocationId = odataObject.StoreLocationId;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.DefaultCustAccount = odataObject.DefaultCustAccount;\r\n \r\n }\r\n }\r\n\r\n /**\r\n * FlexitiPaymentCustomer entity class.\r\n */\r\n export class FlexitiPaymentCustomerExtensionClass implements IFlexitiPaymentCustomer {\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public transactionStatus: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public FirstName: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public LastName: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public PostalCode: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Birthday: string;\r\n \r\n // Navigation properties names\r\n \r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.transactionStatus = odataObject.transactionStatus;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.FirstName = odataObject.FirstName;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.LastName = odataObject.LastName;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.PostalCode = odataObject.PostalCode;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Birthday = odataObject.Birthday;\r\n \r\n }\r\n }\r\n\r\n /**\r\n * ProductAttributeGroup entity class.\r\n */\r\n export class ProductAttributeGroupExtensionClass implements IProductAttributeGroup {\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public GroupId: number;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Group: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Name: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public DisplayOrder: number;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Attributes: Entities.AttributeValue[];\r\n \r\n // Navigation properties names\r\n \r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.GroupId = (odataObject.GroupId) ? parseInt(odataObject.GroupId, 10) : 0;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Group = odataObject.Group;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Name = odataObject.Name;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.DisplayOrder = (odataObject.DisplayOrder) ? parseFloat(odataObject.DisplayOrder) : 0;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Attributes = undefined;\r\n if (odataObject.Attributes) {\r\n this.Attributes = [];\r\n for (var i = 0; i < odataObject.Attributes.length; i++) {\r\n if (odataObject.Attributes[i]) {\r\n if (odataObject.Attributes[i]['@odata.type']) {\r\n var className: string = odataObject.Attributes[i]['@odata.type'];\r\n className = className.substr(className.lastIndexOf('.') + 1).concat(\"Class\");\r\n if (EntityClasses[className]) {\r\n this.Attributes[i] = new EntityClasses[className](odataObject.Attributes[i])\r\n }\r\n } else {\r\n this.Attributes[i] = new EntityClasses.AttributeValueClass(odataObject.Attributes[i]);\r\n }\r\n \r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Attributes[i] = undefined;\r\n }\r\n }\r\n }\r\n \r\n }\r\n }\r\n\r\n /**\r\n * ProductInfo entity class.\r\n */\r\n export class ProductInfoExtensionClass implements IProductInfo {\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ProductInfoId: number;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Sku: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public WebText: string;\r\n \r\n // Navigation properties names\r\n \r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ProductInfoId = (odataObject.ProductInfoId) ? parseInt(odataObject.ProductInfoId, 10) : 0;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Sku = odataObject.Sku;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.WebText = odataObject.WebText;\r\n \r\n }\r\n }\r\n\r\n /**\r\n * WhatisinBox entity class.\r\n */\r\n export class WhatisinBoxExtensionClass implements IWhatisinBox {\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ProductInfoId: number;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Sku: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public WhatsIntheBox: string;\r\n \r\n // Navigation properties names\r\n \r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ProductInfoId = (odataObject.ProductInfoId) ? parseInt(odataObject.ProductInfoId, 10) : 0;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Sku = odataObject.Sku;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.WhatsIntheBox = odataObject.WhatsIntheBox;\r\n \r\n }\r\n }\r\n\r\n /**\r\n * ProductPromotion entity class.\r\n */\r\n export class ProductPromotionExtensionClass implements IProductPromotion {\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public OfferId: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Name: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ProductIds: number[];\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public DiscountInfo: \r\n IDiscountInfo;\r\n \r\n // Navigation properties names\r\n \r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.OfferId = odataObject.OfferId;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Name = odataObject.Name;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ProductIds = undefined;\r\n if (odataObject.ProductIds) {\r\n this.ProductIds = [];\r\n for (var i = 0; i < odataObject.ProductIds.length; i++) {\r\n if (odataObject.ProductIds[i]) {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ProductIds[i] = \r\n parseInt(odataObject.ProductIds[i], 10);\r\n \r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ProductIds[i] = undefined;\r\n }\r\n }\r\n }\r\n \r\n if (odataObject.DiscountInfo === null) {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.DiscountInfo = undefined;\r\n } else if (odataObject.DiscountInfo['@odata.type'] == null) {\r\n this.DiscountInfo = new DiscountInfoExtensionClass(odataObject.DiscountInfo);\r\n } else {\r\n var className: string = odataObject.DiscountInfo['@odata.type'];\r\n className = className.substr(className.lastIndexOf('.') + 1).concat(\"Class\");\r\n if (EntityClasses[className]) {\r\n this.DiscountInfo = new EntityClasses[className](odataObject.DiscountInfo)\r\n }\r\n }\r\n\r\n \r\n }\r\n }\r\n\r\n /**\r\n * DiscountInfo entity class.\r\n */\r\n export class DiscountInfoExtensionClass implements IDiscountInfo {\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public MarketingHtml: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public MarketingName: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public CartHtml: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Expired: boolean;\r\n \r\n // Navigation properties names\r\n \r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.MarketingHtml = odataObject.MarketingHtml;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.MarketingName = odataObject.MarketingName;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.CartHtml = odataObject.CartHtml;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Expired = odataObject.Expired;\r\n \r\n }\r\n }\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any, max-lines */\nimport { IExperimentationProvider, IExperimentsResult, ISecretManager, IVariants, State } from '@msdyn365-commerce/core';\n/**\n * A basic implementation of the ExperimentationProvider interface used for testing\n */\nclass MsDyn365ExpTestConnector implements IExperimentationProvider {\n private variantSet1: IVariants[] = [\n {\n variantId: 'var1',\n experimentId: 'expid1'\n },\n {\n variantId: 'var1',\n experimentId: 'expid4'\n },\n {\n variantId: 'var1',\n experimentId: 'expid6'\n },\n {\n variantId: 'var1',\n experimentId: 'expid7'\n },\n {\n variantId: 'var1',\n experimentId: 'expid8'\n },\n {\n variantId: 'var1',\n experimentId: 'expid9'\n },\n {\n variantId: 'var1',\n experimentId: 'expid10'\n },\n {\n variantId: 'var1',\n experimentId: 'expid11'\n },\n {\n variantId: 'var1',\n experimentId: 'expid12'\n }\n ];\n\n private variantSet2: IVariants[] = [\n {\n variantId: 'var2',\n experimentId: 'expid1'\n },\n {\n variantId: 'var2',\n experimentId: 'expid5'\n },\n {\n variantId: 'var2',\n experimentId: 'expid7'\n },\n {\n variantId: 'var2',\n experimentId: 'expid8'\n },\n {\n variantId: 'var2',\n experimentId: 'expid9'\n },\n {\n variantId: 'var2',\n experimentId: 'expid10'\n },\n {\n variantId: 'var2',\n experimentId: 'expid11'\n },\n {\n variantId: 'var2',\n experimentId: 'expid12'\n }\n ];\n\n private variantSet3: IVariants[] = [\n {\n variantId: 'var1',\n experimentId: 'expid5'\n },\n {\n variantId: 'var2',\n experimentId: 'expid13'\n },\n {\n variantId: 'var2',\n experimentId: 'expid14'\n },\n {\n variantId: 'var2',\n experimentId: 'expid15'\n },\n {\n variantId: 'var2',\n experimentId: 'expid16'\n },\n {\n variantId: 'var2',\n experimentId: 'expid17'\n },\n {\n variantId: 'var2',\n experimentId: 'expid18'\n },\n {\n variantId: 'var2',\n experimentId: 'expid19'\n },\n {\n variantId: 'var2',\n experimentId: 'expid20'\n },\n {\n variantId: 'var2',\n experimentId: 'expid21'\n },\n {\n variantId: 'var2',\n experimentId: 'expid22'\n },\n {\n variantId: 'var2',\n experimentId: 'expid23'\n },\n {\n variantId: 'var2',\n experimentId: 'expid24'\n },\n {\n variantId: 'var2',\n experimentId: 'expid25'\n }\n ];\n\n private variantSet4: IVariants[] = [\n {\n variantId: 'var1',\n experimentId: 'expid5'\n },\n {\n variantId: 'var1',\n experimentId: 'expid1'\n },\n {\n variantId: 'var1',\n experimentId: 'expid13'\n },\n {\n variantId: 'var1',\n experimentId: 'expid14'\n },\n {\n variantId: 'var1',\n experimentId: 'expid15'\n },\n {\n variantId: 'var1',\n experimentId: 'expid16'\n },\n {\n variantId: 'var1',\n experimentId: 'expid17'\n },\n {\n variantId: 'var1',\n experimentId: 'expid18'\n },\n {\n variantId: 'var1',\n experimentId: 'expid19'\n },\n {\n variantId: 'var1',\n experimentId: 'expid20'\n },\n {\n variantId: 'var1',\n experimentId: 'expid21'\n },\n {\n variantId: 'var1',\n experimentId: 'expid22'\n },\n {\n variantId: 'var1',\n experimentId: 'expid23'\n },\n {\n variantId: 'var1',\n experimentId: 'expid24'\n },\n {\n variantId: 'var1',\n experimentId: 'expid25'\n }\n ];\n\n public getConfigForClientSideInit(): Promise {\n return Promise.resolve({});\n }\n public initializeClientSide(config: any): boolean {\n console.log(`Initialize client side called on MsDyn365ExpTestConnector with config ${config}`);\n return true;\n }\n\n public getExperiments(): Promise {\n return Promise.resolve({\n name: 'msdyn365-exp-test-2',\n experiments: [\n {\n id: 'expid1',\n friendlyName: 'experiment-1',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n link: 'www.msdyn365-exp-test-connector/expid1',\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var3',\n friendlyName: 'variant-3',\n status: State.Draft,\n weight: '0.2'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid2',\n friendlyName: 'experiment-2',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Paused,\n link: 'www.msdyn365-exp-test-connector/expid2',\n variations: [\n {\n id: 'var3',\n friendlyName: 'variant-3',\n status: State.Paused,\n weight: '1.0'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid3',\n friendlyName: 'experiment-3',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Archived,\n variations: [\n {\n id: 'var4',\n friendlyName: 'variant-4',\n status: State.Archived,\n weight: '1.0'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid4',\n friendlyName: 'experiment-4',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid5',\n friendlyName: 'experiment-5',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid6',\n friendlyName: 'experiment-6',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid7',\n friendlyName: 'experiment-7',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid8',\n friendlyName: 'experiment-8',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid9',\n friendlyName: 'experiment-9',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid10',\n friendlyName: 'experiment-10',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid11',\n friendlyName: 'experiment-11',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid12',\n friendlyName: 'experiment-12',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid13',\n friendlyName: 'experiment-13',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid14',\n friendlyName: 'experiment-14',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid15',\n friendlyName: 'experiment-15',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid16',\n friendlyName: 'experiment-16',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid17',\n friendlyName: 'experiment-17',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid18',\n friendlyName: 'experiment-18',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid19',\n friendlyName: 'experiment-19',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid20',\n friendlyName: 'experiment-20',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid21',\n friendlyName: 'experiment-21',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid22',\n friendlyName: 'experiment-22',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid23',\n friendlyName: 'experiment-23',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid24',\n friendlyName: 'experiment-24',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n },\n {\n id: 'expid25',\n friendlyName: 'experiment-25',\n description: 'This is a msdyn365-exp test experiment',\n type: 'A/B Test',\n status: State.Running,\n variations: [\n {\n id: 'var1',\n friendlyName: 'variant-1',\n status: State.Active,\n weight: '0.4'\n },\n {\n id: 'var2',\n friendlyName: 'variant-2',\n status: State.Active,\n weight: '0.6'\n }\n ],\n createdDate: '05/01/2020',\n lastModifiedDate: '05/01/2020',\n lastModifiedBy: 'User 1'\n }\n ]\n });\n }\n public getVariantsForUser(userId: string, attributes?: { [index: string]: string } | undefined): IVariants[] {\n if (userId.match(/^[0-3].*$/)) {\n return this.variantSet1;\n } else if (userId.match(/^[4-7].*$/)) {\n return this.variantSet2;\n } else if (userId.match(/^[8-9|a-b].*$/)) {\n return this.variantSet3;\n } else {\n return this.variantSet4;\n }\n }\n public activateExperiment(userId: string, experiments: IVariants[], attributes?: { [index: string]: string } | undefined): boolean {\n console.log(\n `Active experiment called on MsDyn365ExpTestConnector with userId: ${userId}, experiments: ${JSON.stringify(\n experiments\n )}, attributes: ${JSON.stringify(attributes)}`\n );\n return true;\n }\n public initialize(config: any, secretManager?: ISecretManager): Promise {\n console.log(`MsDyn365 Exp Test Connector called with config: ${JSON.stringify(config)}`);\n return Promise.resolve(true);\n }\n}\n\nconst connector = new MsDyn365ExpTestConnector();\nexport default connector;\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { generateProductImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { GetCookie } from '../../../shared-utils/cookie-utilities';\r\n\r\nexport interface IFullProductsSearchResultsWithCount {\r\n products: ProductSearchResult[];\r\n count: number;\r\n}\r\n\r\n/**\r\n * GetFullProductsByIds Action Input\r\n */\r\nexport class GetFullProductsByIdsInput implements IActionInput {\r\n public maxRecentlyViewedItemsCount: number;\r\n\r\n constructor(maxRecentlyViewedItemsCount: number) {\r\n this.maxRecentlyViewedItemsCount = maxRecentlyViewedItemsCount;\r\n }\r\n public getCacheKey = () => 'FullProductSearchResultByIds';\r\n public getCacheObjectType = () => 'FullProductSearchResultByIds';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nconst createInput = (inputData: ICreateActionContext>, maxRecentlyViewedItemsCount: number): GetFullProductsByIdsInput => {\r\n return new GetFullProductsByIdsInput(maxRecentlyViewedItemsCount);\r\n};\r\n\r\nexport async function getFullProductsByIds(\r\n input: GetFullProductsByIdsInput,\r\n ctx: IActionContext\r\n): Promise {\r\n const searchCriteriaInput: ProductSearchCriteria = {};\r\n searchCriteriaInput.Context = {\r\n ChannelId: ctx.requestContext.apiSettings.channelId,\r\n CatalogId: ctx.requestContext.apiSettings.catalogId\r\n };\r\n searchCriteriaInput.IncludeAttributes = true;\r\n const cookieName: string = '_msdyn365___recently_viewed_products';\r\n const cookieValue = GetCookie(ctx.requestContext.cookies, cookieName);\r\n const productIds = (cookieValue && cookieValue.split(',').map(x => +x)) || [0];\r\n searchCriteriaInput.Ids = productIds;\r\n const promise = searchByCriteriaAsync(\r\n {\r\n callerContext: ctx\r\n },\r\n searchCriteriaInput\r\n );\r\n\r\n const productSearchResults = await promise;\r\n\r\n const mappedProducts = productSearchResults.map(productSearchResult => {\r\n const newImageUrl = generateProductImageUrl(productSearchResult, ctx.requestContext.apiSettings);\r\n\r\n if (newImageUrl) {\r\n productSearchResult.PrimaryImageUrl = newImageUrl;\r\n }\r\n\r\n return productSearchResult;\r\n });\r\n\r\n const refinedProductSearchResult = refineProductSearchResults(\r\n ctx,\r\n productIds.reverse(),\r\n input.maxRecentlyViewedItemsCount,\r\n mappedProducts\r\n );\r\n\r\n return {\r\n products: refinedProductSearchResult,\r\n count: promise.metadata.count || 0\r\n };\r\n}\r\n\r\nfunction refineProductSearchResults(\r\n context: IActionContext,\r\n productIds: number[],\r\n maxRecentlyViewedItemsCount: number,\r\n productSearchResult: ProductSearchResult[]\r\n): ProductSearchResult[] {\r\n const newproductSearchResult: ProductSearchResult[] = [];\r\n const pathName = context.requestContext.url.requestUrl.pathname;\r\n const splitPathName = pathName.split('/') || [];\r\n const lastPathName = splitPathName[splitPathName.length - 1] || '';\r\n const isPdp = (lastPathName && lastPathName.indexOf('.p')) || -1;\r\n if (isPdp !== -1) {\r\n const productId = lastPathName.split('.');\r\n const index = productIds.indexOf(Number(productId[0]));\r\n if (index !== -1) {\r\n productIds.splice(index, 1);\r\n }\r\n }\r\n if (productIds.length > maxRecentlyViewedItemsCount) {\r\n productIds.splice(maxRecentlyViewedItemsCount, productIds.length - maxRecentlyViewedItemsCount);\r\n }\r\n productIds.map(id => {\r\n const productById = productSearchResult.filter(product => product.RecordId === id) || [];\r\n productById.length > 0 && newproductSearchResult.push(productById[0]);\r\n });\r\n return newproductSearchResult;\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/search-result-container/get-full-products-by-ids',\r\n action: >getFullProductsByIds,\r\n input: createInput\r\n});\r\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 { 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';\nimport { FullProductInput, getFullProducts, getProductDetailsCriteriaFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\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 wishlists.forEach((currWishlist) => {\n if (currWishlist.CommerceListLines) {\n currWishlist.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\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.error(error.message);\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 const getActiveWishlistItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/wishlist/wishlist-items/get-items-in-wishlist',\n action: >getActiveWishlistItems,\n input: createInput\n});\n\nexport default getActiveWishlistItemsDataAction;\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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getProductInfoFromSimpleProduct } from './telemetry.action.helper';\n\nconst beforeGetVariantsByDimensionValues = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterGetVariantsByDimensionValues = async (\n _inputs: IActionInput | IActionInput[],\n simpleProducts: SimpleProduct | SimpleProduct[],\n actionContext: IActionContext\n) => {\n if (!Array.isArray(simpleProducts)) {\n simpleProducts = [simpleProducts];\n }\n\n simpleProducts.forEach(async product => {\n if (product) {\n product = await Promise.resolve(product);\n const productInfo = getProductInfoFromSimpleProduct(product);\n actionContext.requestContext.telemetryData[productInfo.productSku] = productInfo;\n }\n });\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Products/GetVariantsByDimensionValues',\n postReaderHook: afterGetVariantsByDimensionValues,\n preReaderHook: beforeGetVariantsByDimensionValues\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 { 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\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 { 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 { 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,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICommerceApiSettings\n} from '@msdyn365-commerce/core';\nimport { ChannelReferenceLookupCriteria, OrderShipments, SalesOrder, SalesOrdersDataActions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IOrderHistory.\n */\nexport interface IOrderHistory {\n salesOrders: OrderShipments[];\n products: SimpleProduct[];\n}\n\n/**\n * Action input.\n */\nexport class GetSalesOrderDetailsByConfirmationInput implements IActionInput {\n\n public channelReferenceLookupCriteria: ChannelReferenceLookupCriteria | null;\n\n public confirmationId: string | undefined;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n public constructor(\n channelReferenceLookupCriteria: ChannelReferenceLookupCriteria | null,\n apiSettings: ICommerceApiSettings) {\n this.channelReferenceLookupCriteria = channelReferenceLookupCriteria;\n this.apiSettings = apiSettings;\n this.confirmationId = channelReferenceLookupCriteria?.ChannelReferenceId;\n }\n\n /**\n * GetCacheKey.\n * @returns - String.\n */\n public getCacheKey = (): string => buildCacheKey(`OrderDetails-${this.confirmationId ? this.confirmationId : ''}`, this.apiSettings);\n\n /**\n * GetCacheObjectType.\n * @returns - String.\n */\n public getCacheObjectType = (): string => 'OrderDetails';\n\n /**\n * DataCacheType.\n * @returns - String.\n */\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Get sales order details by confirmation id action.\n * @param input - GetOrderHistory hydration input.\n * @param context - Channel context.\n * @returns - Sales Order Details.\n */\nexport async function getSalesOrderDetailsByChannelReferenceIdAction(\n input: GetSalesOrderDetailsByConfirmationInput,\n context: IActionContext\n): Promise {\n return SalesOrdersDataActions.getOrderByChannelReferenceLookupCriteriaAsync(\n { callerContext: context }, input.channelReferenceLookupCriteria);\n}\n\n/**\n * GetSalesOrderDetailsByConfirmationIdDataAction.\n * @returns -- IObservableAction.\n */\nexport const getSalesOrderDetailsByChannelReferenceIdDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/order-management/order-lookup/get-sales-order-details-by-confirmation-id',\n action: getSalesOrderDetailsByChannelReferenceIdAction as IAction\n});\n\nexport default getSalesOrderDetailsByChannelReferenceIdDataAction;\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,\n ICreateActionContext } from '@msdyn365-commerce/core';\nimport {\n ChannelReferenceAdditionalLookupCriteria,\n ChannelReferenceLookupCriteria,\n ExtensibleEnumeration,\n IDictionary, ProductDeliveryOptions,\n ProductsDataActions,\n SalesOrder,\n SalesOrdersDataActions,\n SearchLocation,\n SimpleProduct,\n StoreOperationsDataActions,\n TransactionType\n} from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, buildCacheKey, getSimpleProducts, ObjectExtensions, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { getSalesOrderDetailsByChannelReferenceIdAction, GetSalesOrderDetailsByConfirmationInput } from './get-sales-order-details-by-confirmation-id';\n\n/**\n * ISalesOrderWithHydrations.\n */\ninterface ISalesOrderWithHydrations {\n salesOrder: SalesOrder;\n products: SimpleProduct[];\n productDeliveryOptions?: ProductDeliveryOptions[];\n}\n\n/**\n * AdditionalLookupCriteria entity interface.\n */\nexport interface IAdditionalLookupCriteria {\n orderStatusLookUpParameterTypeName: string;\n orderStatusLookUpParameterValue: string;\n}\n\n/**\n * OrderTypes Types of orders.\n */\nexport enum orderTypes {\n salesOrder = 'salesOrder',\n transaction = 'transaction'\n}\n\n/**\n * GetQueryStringParameters.\n * @param context -- URL.\n * @returns Additional lookup criteria -- IAdditionalLookupCriteria[].\n */\nconst getQueryStringParameters = (context: IActionContext): IAdditionalLookupCriteria[] => {\n const addtionalLookupParameter: IAdditionalLookupCriteria[] = [];\n let query: IDictionary;\n if (context.requestContext.query) {\n query = context.requestContext.query;\n const queryArray = Object.entries(query);\n\n for (let index = 1; index <= queryArray.length; index++) {\n const additionalFieldName: string = `field${index}Name`;\n const additionalFieldValue = `field${index}Value`;\n if (additionalFieldName in query && additionalFieldValue in query) {\n addtionalLookupParameter.push({\n orderStatusLookUpParameterTypeName: query[additionalFieldName],\n orderStatusLookUpParameterValue: query[additionalFieldValue]\n });\n }\n }\n }\n return addtionalLookupParameter;\n};\n\n/**\n * Calls the Retail API and returns the sales order for anonymous user.\n * @param confirmationId -- Confirmation Id.\n * @returns SalesOrder -- Promise.\n */\nconst getSalesOrderDetailsByLookupCriteria = (confirmationId: string) => async (context: IActionContext): Promise => {\n const {\n propertyName = '',\n propertyValue = ''\n } = (context.requestContext.query) ?? {};\n\n const addtionalLookupParameter: IAdditionalLookupCriteria[] = getQueryStringParameters(context);\n\n const getExtensibleEnumerations = await StoreOperationsDataActions.getExtensibleEnumerationsAsync(\n { callerContext: context });\n\n const orderLookupExtensibleEnum: ExtensibleEnumeration[] = getExtensibleEnumerations.find(\n item => item.TypeName === 'OrderLookupAdditionalCriteriaType')?.ExtensibleEnumerations ?? [];\n\n const channelReferenceAdditionalLookupCriteria: ChannelReferenceAdditionalLookupCriteria[] = [];\n\n for (const item of orderLookupExtensibleEnum) {\n const retailProxyValue: string = item.Name.toLocaleLowerCase();\n const retailProxyTypeValue: number = item.Value;\n const orderLookupSearchPropertyName: string = propertyName.toLocaleLowerCase();\n if (retailProxyValue === orderLookupSearchPropertyName) {\n channelReferenceAdditionalLookupCriteria.push({\n OrderLookupAdditionalCriteriaTypeValue: item.Value,\n OrderLookupAdditionalCriteriaTypeParameterValue: propertyValue\n });\n }\n if (ArrayExtensions.hasElements(addtionalLookupParameter)) {\n for (const additionalItem of addtionalLookupParameter) {\n if (retailProxyValue === additionalItem.orderStatusLookUpParameterTypeName.toLocaleLowerCase()) {\n channelReferenceAdditionalLookupCriteria.push({\n OrderLookupAdditionalCriteriaTypeValue: retailProxyTypeValue,\n OrderLookupAdditionalCriteriaTypeParameterValue: additionalItem.orderStatusLookUpParameterValue\n });\n }\n }\n }\n }\n\n const channelReferenceLookupCriteria: ChannelReferenceLookupCriteria = {\n ChannelReferenceId: confirmationId,\n ChannelReferenceAdditionalLookupCriteria: channelReferenceAdditionalLookupCriteria\n };\n\n const input = new GetSalesOrderDetailsByConfirmationInput(channelReferenceLookupCriteria, context.requestContext.apiSettings);\n\n return getSalesOrderDetailsByChannelReferenceIdAction(input, context);\n};\n\n/**\n * Calls the Retail API and returns the sales order.\n * @param orderType -- Order Type.\n * @param orderId -- Order id.\n * @returns SalesOrder -- Promise.\n */\nconst getSalesOrder = (orderType: string = '', orderId: string = '') => async (context: IActionContext): Promise => {\n const {\n confirmationId = ''\n } = (context.requestContext.query) ?? {};\n\n if (confirmationId) {\n return getSalesOrderDetailsByLookupCriteria(confirmationId)(context);\n } else if (orderType === orderTypes.salesOrder) {\n return SalesOrdersDataActions.getSalesOrderDetailsBySalesIdAsync({ callerContext: context }, orderId);\n }\n\n return SalesOrdersDataActions.getSalesOrderDetailsByTransactionIdAsync({ callerContext: context }, orderId, SearchLocation.All);\n};\n\n/**\n * Calls the Retail API and returns the products.\n * @param productIds - The product ids of the product to retrieve.\n * @param channelId - The channel id for the products.\n * @returns Simple product data.\n */\nconst getProducts = (productIds: (string | number)[] = [], channelId?: number) => async (context: IActionContext): Promise => {\n const productInputs = productIds.map(productId => new ProductInput(productId, context.requestContext.apiSettings, channelId));\n return getSimpleProducts(productInputs, context);\n};\n\n/**\n * Action input.\n */\nexport class GetSalesOrderWithHydrationsInput implements IActionInput {\n public orderType: string | undefined;\n\n public orderId: string | undefined ;\n\n public confirmationId: string | undefined;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n public constructor(orderType: string | undefined, orderId: string | undefined, apiSettings: ICommerceApiSettings, confirmationId?: string) {\n this.orderType = orderType;\n this.orderId = orderId;\n this.apiSettings = apiSettings;\n this.confirmationId = confirmationId;\n }\n\n /**\n * GetCacheKey.\n * @returns String.\n */\n public getCacheKey = (): string => buildCacheKey('SalesOrderWithHydrations', this.apiSettings);\n\n /**\n * GetCacheObjectType.\n * @returns String.\n */\n public getCacheObjectType = (): string => `SalesOrderWithHydrations-${this.orderType ?? ''}-${this.orderId ?? ''}-${this.confirmationId ?? ''}`;\n\n /**\n * DataCacheType.\n * @returns CacheType.\n */\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData -- InputData as ICreateActionContext.\n * @returns Action Input.\n */\nconst createSalesOrderWithHydrationsInput = (inputData: ICreateActionContext) => {\n const { salesId = '', transactionId = '', confirmationId = '' } = (inputData.requestContext.query) ?? {};\n\n if (confirmationId) {\n const orderType = undefined;\n const orderId = undefined;\n return new GetSalesOrderWithHydrationsInput(orderType, orderId, inputData.requestContext.apiSettings, confirmationId);\n } else if (salesId) {\n return new GetSalesOrderWithHydrationsInput(orderTypes.salesOrder, salesId, inputData.requestContext.apiSettings);\n } else if (transactionId) {\n return new GetSalesOrderWithHydrationsInput(orderTypes.transaction, transactionId, inputData.requestContext.apiSettings);\n }\n\n throw new Error('createSalesOrderWithHydrationsInput - No salesId, confirmationId or transactionId provided.');\n};\n\n/**\n * Get sales order with hydrations action.\n * @param input -- Input.\n * @param context -- Context.\n * @returns ISalesOrderWithHydrations.\n */\nexport async function getSalesOrderWithHydrationsAction(\n input: GetSalesOrderWithHydrationsInput,\n context: IActionContext\n): Promise {\n\n const { orderType, orderId } = input;\n\n const { confirmationId = '', salesId = '', transactionId = '' } = (context.requestContext.query) ?? {};\n\n if (context.requestContext.user.isAuthenticated && (!orderType || !orderId) && !confirmationId) {\n context.trace('[getSalesOrderWithHydrationsAction] No orderType or orderId or confirmationId provided.');\n return {};\n }\n\n if ((salesId || transactionId) && !context.requestContext.user.isAuthenticated) {\n const signInUrl: string = context.requestContext.user.signInUrl ?? '';\n window.location.assign(signInUrl);\n return {} as unknown as ISalesOrderWithHydrations;\n }\n\n const salesOrder = await getSalesOrder(orderType, orderId)(context);\n\n if (!salesOrder) {\n context.trace('[getSalesOrderWithHydrationsAction] No salesOrder found.');\n return {};\n }\n\n // If it is salesInvoice, return salesOrder and empty products\n if (salesOrder.TransactionTypeValue === TransactionType.SalesInvoice) {\n return {\n salesOrder,\n products: []\n };\n }\n\n if (!ArrayExtensions.hasElements(salesOrder.SalesLines)) {\n context.trace('[getSalesOrderWithHydrationsAction] No salesLine found.');\n return {};\n }\n\n const productIds = salesOrder.SalesLines.map(salesLine => salesLine.ProductId ?? '');\n\n if (!ArrayExtensions.hasElements(productIds)) {\n context.trace('[getSalesOrderWithHydrationsAction] No products in saleLines found.');\n return {};\n }\n\n const products = await getProducts(productIds, salesOrder.ChannelId)(context);\n\n if (!ArrayExtensions.hasElements(products)) {\n context.trace('[getSalesOrderWithHydrationsAction] No simple products found.');\n return {};\n }\n\n const validProducts = products.filter(product => !ObjectExtensions.isNullOrUndefined(product.RecordId));\n\n const deliveryOptions = await ProductsDataActions.getDeliveryOptionsAsync(\n { callerContext: context, queryResultSettings: {} }, validProducts.map(product => product.RecordId), {}, 4)\n .then(result => {\n return result;\n }).catch((error: Error) => {\n context.trace(error.message);\n context.telemetry.exception(error);\n context.telemetry.debug('[getDeliveryOptionsForCartLineItems]Error executing action');\n throw new Error('[getDeliveryOptionsForCartLineItems]Error executing action');\n });\n\n return {\n salesOrder,\n products,\n deliveryOptions\n };\n}\n\n/**\n * GetSalesOrderWithHydrationsAction Data Action.\n * @param options -- Options.\n */\nexport const getSalesOrderWithHydrationsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/order-management/get-sales-order-with-hydrations',\n action: getSalesOrderWithHydrationsAction as IAction,\n input: createSalesOrderWithHydrationsInput\n});\n\nexport default getSalesOrderWithHydrationsActionDataAction;\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","import { ICookieContext } from '@msdyn365-commerce/core';\r\n\r\nexport const GetCookie = (cookieContext: ICookieContext, name: string) => {\r\n const cookieValue = cookieContext.get(name);\r\n return cookieValue.value || '';\r\n};\r\n\r\nexport const SetCookie = (cookieContext: ICookieContext, value: string, name: string, maxAge: number) => {\r\n cookieContext.set(name, value, {\r\n maxAge: maxAge\r\n });\r\n};\r\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 {\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 { 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 { 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 { 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 {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { IQueryResultSettings } from '@msdyn365-commerce/retail-proxy';\nimport {\n buildCacheKeyWithUrlTokens,\n getFullOrderTemplate,\n GetFullOrderTemplateInput,\n IQueryResultSettingsModuleConfig,\n OrderTemplate,\n QueryResultSettingsProxy\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for getActiveOrderTemplateLines data action.\n */\nexport class ActiveOrderTemplateLinesInput implements IActionInput {\n public requestContext: IRequestContext;\n\n public orderTemplateId: string;\n\n public queryResultSettings: IQueryResultSettings;\n\n constructor(requestContext: IRequestContext, config: IQueryResultSettingsModuleConfig) {\n if (!requestContext.query?.id) {\n throw new Error('Failed to get order template id from the query.');\n }\n if (!config) {\n throw new Error('Failed to get order template module configuration');\n }\n this.orderTemplateId = requestContext.query.id;\n this.queryResultSettings = QueryResultSettingsProxy.fromModuleData(requestContext, config).QueryResultSettings;\n\n this.queryResultSettings.count = true;\n this.requestContext = requestContext;\n }\n\n public getCacheKey = (): string => buildCacheKeyWithUrlTokens('ActiveOrderTemplateLines', this.requestContext);\n\n public getCacheObjectType = (): string => 'ActiveOrderTemplateLines';\n\n public dataCacheType = (): CacheType => 'instance';\n\n public shouldCacheOutput = () => false;\n}\n\n/**\n * Calls the Retail API and returns a ProductList object based on the passed GetCartInput.\n * @param input\n * @param context\n */\nexport async function getActiveOrderTemplateLines(input: ActiveOrderTemplateLinesInput, context: IActionContext): Promise {\n return getFullOrderTemplate(new GetFullOrderTemplateInput(input.orderTemplateId, input.queryResultSettings), context);\n}\n\nexport const getActiveOrderTemplateLinesDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/order-template/order-template/get-order-template-lines',\n action: >getActiveOrderTemplateLines,\n input: (context: ICreateActionContext) => {\n if (!context.config) {\n throw new Error('Failed to get order template module configuration');\n }\n return new ActiveOrderTemplateLinesInput(context.requestContext, context.config);\n }\n});\n\nexport default getActiveOrderTemplateLinesDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { IExpLogger } from '@msdyn365-commerce/telemetry-internal';\n\n/**\n * A basic implementation of the ExperimentationProvider interface used for testing\n */\nclass MsDyn365ExpTestConnectorListener implements IExpLogger {\n private userId: string = '';\n public initializeClientSide(config: any, userId: string): boolean {\n this.userId = userId;\n console.log(`Listener initialize called with config ${JSON.stringify(config)} and userId ${userId}`);\n return true;\n }\n public logEvent(eventName: string, payload: any, attributes?: any): void {\n console.log(`tracking events with event type - ${eventName}, payload - ${payload}, user id - ${this.userId}`);\n }\n}\n\nconst connectorListener = new MsDyn365ExpTestConnectorListener();\nexport default connectorListener;\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 { 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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { IMSDyn365Window } from '@msdyn365-commerce/core-internal';\nimport { Cart, CartLine, IAddCartLinesParam, IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * Saves info on cart lines added before calling data action\n * @param inputs Data action inputs\n * @param actionContext Action context\n */\nconst beforeAddToCart = async (inputs: IActionInput | IActionInput[], actionContext: IActionContext) => {\n try {\n const actionInput = Array.isArray(inputs) ? inputs[0] : inputs;\n\n // If cart lines were added\n if (actionInput.queryParams && typeof actionInput.queryParams === 'function') {\n const addCartLinesParams = actionInput.queryParams();\n if (addCartLinesParams && addCartLinesParams.cartLines) {\n // Save info on added cart lines for post data action hook to pick up\n actionContext.requestContext.telemetryData.addedCartLines = addCartLinesParams.cartLines;\n return;\n }\n }\n actionContext.telemetry.debug('AddToCart pre-data action hook failed - No added cart lines found');\n } catch (e) {\n actionContext.telemetry.debug('AddToCart pre-data action hook failed.', e);\n }\n};\n\n/**\n * Fires an AddToCart event after AddCartLines data action completed\n * @param _inputs Data action inputs\n * @param cart New cart object after cart lines have been added\n * @param actionContext Action context\n */\nconst afterAddToCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n const addedCartLines = actionContext.requestContext.telemetryData.addedCartLines;\n let addedProducts: IProductInfo[] = [];\n\n // Collect info on products added to cart\n if (addedCartLines) {\n try {\n addedProducts = await getProductInfoFromCartLinesAsync(addedCartLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('AddCartLines post-data action hook failed to process cart lines.', error);\n }\n }\n\n // Fire AddToCart event\n window._msdyn365.telemetry.logEvent(TelemetryEvent.AddToCart, {\n cartId: cartObject.Id,\n cartVersion: cartObject.Version ? cartObject.Version.toString() : '',\n products: addedProducts,\n orderId: cartObject.OrderNumber ? cartObject.OrderNumber.toString() : ''\n });\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/AddCartLines',\n postReaderHook: afterAddToCart,\n preReaderHook: beforeAddToCart\n});\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 { 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 {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { OrgUnitLocation, SearchArea } from '@msdyn365-commerce/retail-proxy';\nimport { getOrgUnitLocationsByAreaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Interface of Org Unit Locations.\n */\ninterface IOrgUnitLocations {\n orgUnitLocations: OrgUnitLocation[];\n}\n\nconst searchArea: SearchArea = {\n Radius: Math.max(),\n DistanceUnitValue: 0 // 0 is miles\n};\n\n/**\n * Calls the Retail API and returns the orgUnitLocations.\n * @returns - List Org Unit Locations.\n */\nconst getOrgUnitLocations = () => async (ctx: IActionContext): Promise => {\n return getOrgUnitLocationsByAreaAsync(\n {\n callerContext: ctx,\n queryResultSettings: {}\n },\n searchArea\n );\n};\n\n/**\n * Action input.\n */\nexport class GetOrgUnitLocationsInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('OrgUnitLocations', this.apiSettings);\n\n public getCacheObjectType = () => 'OrgUnitLocations';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData - Action Context.\n * @returns - Org Unit Location input.\n */\nconst createOrgUnitLocationsInput = (inputData: ICreateActionContext>) => {\n return new GetOrgUnitLocationsInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * Get orgUnitLocations action.\n * @param input - Org UNit Locations Input.\n * @param context - Action Context.\n */\nexport async function getOrgUnitLocationsAction(\n input: GetOrgUnitLocationsInput,\n context: IActionContext\n): Promise {\n if (!context) {\n throw new Error('getOrgUnitLocationsAction - Action context cannot be null/undefined');\n }\n\n let orgUnitLocations: OrgUnitLocation[] = [];\n\n try {\n orgUnitLocations = await getOrgUnitLocations()(context);\n } catch (error) {\n throw error;\n }\n\n return { orgUnitLocations };\n}\n\nexport const getOrgUnitLocationsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/order-management/get-org-unit-locations',\n action: >getOrgUnitLocationsAction,\n input: createOrgUnitLocationsInput\n});\n\nexport default getOrgUnitLocationsActionDataAction;\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, 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 {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { ChannelIdentity } from '@msdyn365-commerce/retail-proxy';\nimport { getChannelsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Interface of Channel Identity..\n */\ninterface IChannelIdentity {\n channelIdentities: ChannelIdentity[];\n}\n\n/**\n * Calls the Retail API and returns the channels.\n * @returns - List of channel identity.\n */\nconst getChannels = () => async (ctx: IActionContext): Promise => {\n return getChannelsAsync(\n {\n callerContext: ctx\n }\n );\n};\n\n/**\n * Action input.\n */\nexport class GetChannelIdentitiesInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('ChannelIdentities', this.apiSettings);\n\n public getCacheObjectType = () => 'ChannelIdentities';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData - Action Data Input.\n * @returns - Input object.\n */\nconst createChannelIdentitiesInput = (inputData: ICreateActionContext>) => {\n return new GetChannelIdentitiesInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * Get channels action.\n * @param input - Input data.\n * @param context - Action context.\n * @returns - Channel Identity.\n */\nexport async function getChannelsAction(\n input: GetChannelIdentitiesInput,\n context: IActionContext\n): Promise {\n if (!context) {\n throw new Error('getChannelsAction - Action context cannot be null/undefined');\n }\n\n let channels: ChannelIdentity[] = [];\n\n try {\n channels = await getChannels()(context);\n } catch (error) {\n throw error;\n }\n\n return { channelIdentities: channels };\n}\n\n/**\n * Get sales order with hydrations action.\n * @param id - Unique Id for data action.\n * @param context - Action context.\n * @param input - Input for data action.\n * @returns Channel api response.\n */\nexport const getChannelsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/order-management/get-channels',\n action: >getChannelsAction,\n input: createChannelIdentitiesInput\n});\n\nexport default getChannelsActionDataAction;\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 { createGetTenderTypesInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { TenderType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\n/**\n * Get Tender Types Data Action.\n */\nexport const retailActionDataAction = createObservableDataAction({\n action: >retailAction,\n input: () => createGetTenderTypesInput({})\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 { 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, IActionContext, IActionInput, ICommerceApiSettings, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { ProductDeliveryOptions, SalesOrder, SimpleProduct, TransactionType } from '@msdyn365-commerce/retail-proxy';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { getSalesOrderDetailsBySalesIdAsync,\n getSalesOrderDetailsByTransactionIdAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/SalesOrdersDataActions.g';\nimport { ArrayExtensions, buildCacheKey, getSimpleProducts, ObjectExtensions, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Sales order response interface.\n */\ninterface ISalesOrderWithHydrations {\n salesOrder: SalesOrder;\n products: SimpleProduct[];\n productDeliveryOptions?: ProductDeliveryOptions[];\n}\n\n/**\n * OrderTypes Types of orders.\n */\nexport enum orderTypes {\n salesOrder = 'salesOrder',\n transaction = 'transaction'\n}\n\n/**\n * Calls the Retail API and returns the sales order.\n * @param orderType - OrderType.\n * @param orderId - Unique OrderId for each order.\n * @returns Sales Order.\n */\nconst getSalesOrder = (orderType: string = '', orderId: string = '') => async (context: IActionContext): Promise => {\n // Local (1) searches the retail server database, and remote (2) searches\n // on the headquarters side. All (3) and none (0) are not supported.\n const localSearch = 1;\n return orderType === orderTypes.salesOrder ? getSalesOrderDetailsBySalesIdAsync({ callerContext: context }, orderId) : getSalesOrderDetailsByTransactionIdAsync({ callerContext: context }, orderId, localSearch);\n};\n\n/**\n * Calls the Retail API and returns the products.\n * @param productIds - The product ids of the product to retrieve.\n * @param channelId - The channel id for the products.\n * @returns Simple product data.\n */\nconst getProducts = (productIds: (string | number)[] = [], channelId?: number) => async (context: IActionContext): Promise => {\n const productInputs = productIds.map(productId => new ProductInput(productId, context.requestContext.apiSettings, channelId));\n return getSimpleProducts(productInputs, context);\n};\n\n/**\n * Action input.\n */\nexport class GetSalesOrderConfirmationWithHydrationsInput implements IActionInput {\n public orderType: string;\n\n public orderId: string;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(orderType: string, orderId: string, apiSettings: ICommerceApiSettings) {\n this.orderType = orderType;\n this.orderId = orderId;\n this.apiSettings = apiSettings;\n }\n\n /**\n * Get cache key.\n * @returns String.\n */\n public getCacheKey = () => buildCacheKey('SalesOrderConfirmationWithHydrations', this.apiSettings);\n\n /**\n * Get cache object.\n * @returns String.\n */\n public getCacheObjectType = () => `SalesOrderConfirmationWithHydrations-${this.orderType}-${this.orderId}`;\n\n /**\n * Get cache data type.\n * @returns String.\n */\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData - Actioncontext data.\n * @returns Sales Order Input.\n */\nconst createSalesOrderConfrimationWithHydrationsInput = (inputData: ICreateActionContext) => {\n const { salesId = '', transactionId = '' } = (inputData.requestContext.query) || {};\n if (salesId) {\n return new GetSalesOrderConfirmationWithHydrationsInput(orderTypes.salesOrder, salesId, inputData.requestContext.apiSettings);\n } else if (transactionId) {\n return new GetSalesOrderConfirmationWithHydrationsInput(orderTypes.transaction, transactionId, inputData.requestContext.apiSettings);\n }\n throw new Error('createSalesOrderConfrimationWithHydrationsInput - No salesId or transactionId provided.');\n};\n\n/**\n * Get sales order with hydrations action.\n * @param input - Input for data action.\n * @param context - Action context.\n * @returns Sales order response.\n */\nexport async function getSalesOrderConfirmationWithHydrationsAction(\n input: GetSalesOrderConfirmationWithHydrationsInput,\n context: IActionContext\n): Promise {\n if (!context) {\n throw new Error('getSalesOrderConfirmationWithHydrationsAction - Action context cannot be null/undefined');\n }\n\n const { orderType, orderId } = input;\n\n if (!orderType || !orderId) {\n context.trace('[getSalesOrderConfirmationWithHydrationsAction] No orderType or orderId provided.');\n return {};\n }\n\n const salesOrder = await getSalesOrder(orderType, orderId)(context);\n\n if (!salesOrder) {\n context.trace('[getSalesOrderWithHydrationsAction] No salesOrder found.');\n return {};\n }\n\n // If it is salesInvoice, return salesOrder and empty products\n if (salesOrder.TransactionTypeValue === TransactionType.SalesInvoice) {\n return {\n salesOrder,\n products: []\n };\n }\n\n if (!ArrayExtensions.hasElements(salesOrder.SalesLines)) {\n context.trace('[getSalesOrderWithHydrationsAction] No salesLine found.');\n return {};\n }\n\n const productIds = salesOrder.SalesLines.map(salesLine => salesLine.ProductId ?? '');\n\n if (!ArrayExtensions.hasElements(productIds)) {\n context.trace('[getSalesOrderWithHydrationsAction] No products in saleLines found.');\n return {};\n }\n\n const products = await getProducts(productIds, salesOrder.ChannelId)(context);\n\n if (!ArrayExtensions.hasElements(products)) {\n context.trace('[getSalesOrderWithHydrationsAction] No simple products found.');\n return {};\n }\n\n const validProducts = products.filter(product => !ObjectExtensions.isNullOrUndefined(product.RecordId));\n const filterPickup = 4;\n const deliveryOptions = await getDeliveryOptionsAsync(\n { callerContext: context, queryResultSettings: {} }, validProducts.map(product => product.RecordId), {}, filterPickup)\n .then(result => {\n return result;\n }).catch((error: Error) => {\n context.trace(error.message);\n context.telemetry.exception(error);\n context.telemetry.debug('[getDeliveryOptionsForCartLineItems]Error executing action');\n throw new Error('[getDeliveryOptionsForCartLineItems]Error executing action');\n });\n\n return {\n salesOrder,\n products,\n deliveryOptions\n };\n}\n\n/**\n * Get sales order with hydrations action.\n * @param id - Unique Id for data action.\n * @param context - Action context.\n * @param input - Input for data action.\n * @returns Sales order response.\n */\nexport const getSalesOrderConfirmationWithHydrationsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/order-management/get-sales-order-confirmation-with-hydrations',\n action: >getSalesOrderConfirmationWithHydrationsAction,\n input: createSalesOrderConfrimationWithHydrationsInput\n});\n\nexport default getSalesOrderConfirmationWithHydrationsActionDataAction;\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","import {\r\n createObservableDataAction,\r\n IAction,\r\n ICreateActionContext,\r\n IActionContext,\r\n CacheType,\r\n IActionInput\r\n} from '@msdyn365-commerce/core';\r\nimport { ProductDimension, retailAction } from '@msdyn365-commerce/retail-proxy';\r\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getWhatisinBoxInput, IWhatisinBox } from './product-services';\r\n\r\n/**\r\n * GetProductInfoInput\r\n */\r\nclass GetWhatisinBoxInput implements IActionInput {\r\n public readonly selectedVariantInput: SelectedVariantInput;\r\n\r\n constructor(productId: number, channelId: number, matchingDimensionValues?: ProductDimension[]) {\r\n this.selectedVariantInput = new SelectedVariantInput(productId, channelId, matchingDimensionValues);\r\n }\r\n\r\n public getCacheKey = () => this.selectedVariantInput.getCacheKey();\r\n public getCacheObjectType = () => 'HEI-WhatisinBox';\r\n public dataCacheType = (): CacheType => this.selectedVariantInput.dataCacheType();\r\n}\r\n\r\nasync function action(input: GetWhatisinBoxInput, ctx: IActionContext): Promise {\r\n const product = await getSelectedVariant(input.selectedVariantInput, ctx);\r\n const itemId = product?.ItemId;\r\n\r\n if (!itemId) {\r\n throw new Error('Unable to get product SKU');\r\n }\r\n\r\n const WhatisinBoxInput = getWhatisinBoxInput(itemId);\r\n return retailAction(WhatisinBoxInput, ctx);\r\n}\r\n\r\n/**\r\n * Get Warranty Info Data Action\r\n */\r\nexport default createObservableDataAction({\r\n action: >action,\r\n input: (context: ICreateActionContext) => {\r\n const productId = getSelectedProductIdFromActionInput(context);\r\n if (productId) {\r\n return new GetWhatisinBoxInput(+productId, +context.requestContext.apiSettings.channelId, []);\r\n } else {\r\n throw new Error('Unable to create GetWhatisinBoxInput, no productId found on module config or query');\r\n }\r\n }\r\n});\r\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 { createObservableDataAction, IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nexport interface IRatingsReviewsState {\n filterKey: string;\n}\n\nexport function createRatingsReviewsStateInput(result: IRatingsReviewsState): GenericInput {\n return new GenericInput('ratingsReviewsState', result, 'ratingsReviewsStateInput');\n}\n\nconst createInternalRatingsReviewsStateInput = (): IActionInput => {\n return createRatingsReviewsStateInput({ filterKey: '1;2;3;4;5' });\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createInternalRatingsReviewsStateInput\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 { 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) 2018 Microsoft Corporation\n* Modules Registration\n* THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\n*/\n\nexport const componentDictionary = {};\n\ncomponentDictionary['__local__|__local__|modules|cart-icon|components|cart-icon'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-cart-icon' */\n 'partner/modules/cart-icon/components/cart-icon.component.tsx'),\n cn: '__local__-__local__-cart-icon'\n };\ncomponentDictionary['__local__|__local__|themes|henrys|views|components|addtocart'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-addtocart' */\n 'partner/themes/henrys/views/components/addtocart.component.tsx'),\n cn: '__local__-__local__-addtocart'\n };\ncomponentDictionary['__local__|__local__|themes|henrys|views|components|price'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-price' */\n 'partner/themes/henrys/views/components/price.component.tsx'),\n cn: '__local__-__local__-price'\n };\ncomponentDictionary['__local__|__local__|themes|henrys|views|components|product'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-product' */\n 'partner/themes/henrys/views/components/product.component.tsx'),\n cn: '__local__-__local__-product'\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) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput, IMSDyn365Window, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { Cart, CartLine, IDataServiceRequest, IRemoveCartLinesParam } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, IProductTransaction } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * Saves info on cart lines removed before calling data action\n * @param inputs Data action inputs\n * @param actionContext Action context\n */\nconst beforeRemoveFromCart = async (inputs: IActionInput | IActionInput[], actionContext: IActionContext) => {\n try {\n const actionInput = Array.isArray(inputs) ? inputs[0] : inputs;\n\n // If cart lines were removed\n if (actionInput.queryParams && typeof actionInput.queryParams === 'function') {\n const removeCartLinesParams = actionInput.queryParams();\n if (removeCartLinesParams && removeCartLinesParams.cartLineIds) {\n // Save info on removed cart lines for post data action hook to pick up\n actionContext.requestContext.telemetryData.removedCartLineIds = removeCartLinesParams.cartLineIds;\n return;\n }\n }\n actionContext.telemetry.debug('RemoveFromCart pre-data action hook failed - No removed cart lines found');\n } catch (e) {\n actionContext.telemetry.debug('RemoveFromCart pre-data action hook failed.', e);\n }\n};\n\n/**\n * Fires a RemoveFromCart event after RemoveCartLines data action completed\n * @param _inputs Data action inputs\n * @param cart New cart object after cart lines have been removed\n * @param actionContext Action context\n */\nconst afterRemoveFromCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n const removeCartLineIds = actionContext.requestContext.telemetryData.removedCartLineIds;\n const activeCart = actionContext.requestContext.telemetryData.activeCart;\n const productTransaction = actionContext.requestContext.telemetryData[TelemetryEvent.Purchase];\n const removedCartLines: CartLine[] = [];\n let removedProducts: IProductInfo[] = [];\n\n // Collect info on products removed from cart\n if (removeCartLineIds && activeCart && activeCart.CartLines) {\n activeCart.CartLines.forEach((cartLine: CartLine) => {\n if (\n cartLine.ProductId &&\n removeCartLineIds.indexOf(cartLine.LineId ? cartLine.LineId : '') !== -1 &&\n !(\n productTransaction &&\n productTransaction.products &&\n productTransaction.products.some(product => +product.productSku === cartLine.ProductId)\n )\n ) {\n removedCartLines.push(cartLine);\n }\n });\n\n if (removedCartLines.length > 0) {\n try {\n removedProducts = await getProductInfoFromCartLinesAsync(removedCartLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('RemoveCartLines post-data action hook failed to process cart lines.', error);\n }\n }\n }\n\n // Fire RemoveFromCart event if cart lines were removed\n if (removedCartLines && removedCartLines.length > 0) {\n window._msdyn365.telemetry.logEvent(TelemetryEvent.RemoveFromCart, {\n cartId: cartObject.Id,\n cartVersion: cartObject.Version ? cartObject.Version.toString() : '',\n products: removedProducts,\n orderId: cartObject.OrderNumber ? cartObject.OrderNumber.toString() : ''\n });\n } else {\n actionContext.telemetry.debug('No RemoveFromCart event fired, no removed cart lines found');\n }\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/RemoveCartLines',\n postReaderHook: afterRemoveFromCart,\n preReaderHook: beforeRemoveFromCart\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nexport * from './data-structures';\nexport * from './events';\nexport * from './extensions';\nexport * from './product-inventory-information';\nexport * from './promise-queue';\nexport * from './random';\nexport * from './regex';\nexport * from './utils';\nexport * from './validate-cartlines-inventory';\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-${this.products.map(product => product.RecordId).join('-')}`;\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 { 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","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { retailAction } from '@msdyn365-commerce/retail-proxy';\r\nimport { getProductPromotionsInput, IProductPromotion } from './product-services';\r\n\r\n/**\r\n * GetProductPromotions Input Action\r\n */\r\nexport class GetProductPromotionsInput implements Msdyn365.IActionInput {\r\n public readonly recordId: number;\r\n public readonly distinctProductVariantId: number;\r\n\r\n constructor(recordId: number, distinctProductVariantId: number) {\r\n this.recordId = recordId;\r\n this.distinctProductVariantId = distinctProductVariantId;\r\n }\r\n\r\n public getCacheKey = () => `${this.recordId}`;\r\n public getCacheObjectType = () => 'HEI-ProductPromotions';\r\n //public dataCacheType = (): Msdyn365.CacheType => 'application';\r\n public dataCacheType = (): Msdyn365.CacheType => 'none';\r\n}\r\n\r\nconst createInput = (context: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\r\n const productId = getSelectedProductIdFromActionInput(context);\r\n if (productId) {\r\n return new GetProductPromotionsInput(+productId, +productId);\r\n } else {\r\n throw new Error('Unable to create GetProductInfoInput, no productId found on module config or query');\r\n }\r\n};\r\n\r\nasync function action(input: GetProductPromotionsInput, ctx: Msdyn365.IActionContext): Promise {\r\n var productPromotionsInput = getProductPromotionsInput({ Paging: { Top: 5 } }, input.recordId, input.distinctProductVariantId);\r\n return retailAction(productPromotionsInput, ctx);\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n id: 'hei-get-product-promotions',\r\n input: createInput\r\n // isBatched: true\r\n});\r\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 MsDyn365, { IRequestContext } from '@msdyn365-commerce/core';\nimport { ProductRefinerValue, SortColumn } from '@msdyn365-commerce/retail-proxy';\n\n/**\n * Refiner Compression:\n * Refiners contains a non-trivial amount of data that is required to successfully make\n * a refiner-based API call. To allow for deep-linking of refiners in the URL, refiner data\n * must be compressed so that URL max length is not exceeded. Refiners will be compressed into\n * the following array style index-based format:\n * [DataTypeValue, LeftValueBoundString, RefinerRecordId, RefinerSourceValue, RightValueBoundString, UnitText].\n */\nconst compressedRefinerKeys = ['DataTypeValue', 'LeftValueBoundString', 'RefinerRecordId', 'RefinerSourceValue', 'RightValueBoundString', 'UnitText'];\n\n/**\n * Hydrates compressed refiner data from URL.\n * @param fullUrl The full URL of the page.\n * @param requestContext\n */\nexport const hydrateRefinersFromUrl = (requestContext: IRequestContext): ProductRefinerValue[] => {\n const compressedRefinerArray = parseQueryParam<(string | number)[][]>('refiners', requestContext);\n if (!compressedRefinerArray || compressedRefinerArray.length === 0) {\n return [];\n }\n\n return compressedRefinerArray.map((compressedRefiner) => {\n try {\n const parsedRefiner: ProductRefinerValue = {};\n compressedRefinerKeys.forEach((refinerKey, index) => {\n parsedRefiner[refinerKey] = compressedRefiner[index];\n });\n return parsedRefiner;\n } catch {\n return undefined;\n }\n }).filter(Boolean);\n};\n\n/**\n * Compressed a list of refiners for use in URLs.\n * @param refiners The uncompressed refiners.\n */\nexport const compressRefiners = (refiners: ProductRefinerValue[]) => {\n const compressedRefiners: (string | number)[][] = [];\n\n refiners.forEach((refiner) => {\n const compressedRefiner: (string | number)[] = [];\n compressedRefinerKeys.forEach((refinerKey) => {\n compressedRefiner.push(refiner[refinerKey]);\n });\n compressedRefiners.push(compressedRefiner);\n });\n\n return compressedRefiners;\n};\n\n/**\n * Method which creates a URL contiaining serialized active refiners.\n * @param fullUrl The Current URL of the page.\n * @param refiners The refiners which should be added to the URL.\n * @param sortingColumns\n * @param skipCount\n */\nexport const buildListPageUrl = (fullUrl: URL, refiners?: ProductRefinerValue[], sortingColumns?: SortColumn[], skipCount?: number) => {\n // Refiner Change flow\n if (refiners !== undefined) {\n if (refiners.length === 0) {\n fullUrl.searchParams.delete('refiners');\n } else {\n const sortedRefiners = refiners.sort((first, second) => (first.RefinerRecordId && second.RefinerRecordId &&\n (first.RefinerRecordId > second.RefinerRecordId) ? 1 : -1));\n fullUrl.searchParams.set('refiners', JSON.stringify(compressRefiners(sortedRefiners)));\n }\n\n // Adding or removing a refiner means we want to always load page 1\n fullUrl.searchParams.delete('skip');\n return fullUrl.href;\n }\n\n if (sortingColumns !== undefined) {\n if (sortingColumns.length === 0) {\n fullUrl.searchParams.delete('sorting');\n } else {\n fullUrl.searchParams.set('sorting', JSON.stringify(sortingColumns));\n }\n\n // Changing the sort means always load page 1\n fullUrl.searchParams.delete('skip');\n return fullUrl.href;\n }\n\n if (skipCount) {\n fullUrl.searchParams.set('skip', skipCount.toString());\n }\n\n return fullUrl.href;\n};\n\n/**\n * Parses a query param from the query object of the request context.\n * @param key The query parameter key.\n * @param requestContext The request context.\n */\nexport const parseQueryParam = (key: string, requestContext: IRequestContext): T | null => {\n if (requestContext.query && requestContext.query[key]) {\n return JSON.parse(decodeURIComponent(requestContext.query[key]));\n }\n return null;\n};\n\n/**\n * Gets the current URL of the page from the request context.\n * @param requestContext The request context.\n */\nexport const getCurrentUrl = (requestContext: IRequestContext): URL => {\n if (MsDyn365.isBrowser) {\n return new URL(window.location.href);\n }\n\n // NOTE: Typing on requestURL is incorrect\n if (requestContext.url.requestUrl.href) {\n return new URL(requestContext.url.requestUrl.href);\n }\n return new URL((requestContext.url.requestUrl));\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 { 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","import {\r\n createObservableDataAction,\r\n IAction,\r\n ICreateActionContext,\r\n IActionContext,\r\n CacheType,\r\n IActionInput\r\n} from '@msdyn365-commerce/core';\r\nimport { ProductDimension, retailAction } from '@msdyn365-commerce/retail-proxy';\r\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getProductInfoInput, IProductInfo } from './product-services';\r\n\r\n/**\r\n * GetProductInfoInput\r\n */\r\nclass GetProductInfoInput implements IActionInput {\r\n public readonly selectedVariantInput: SelectedVariantInput;\r\n\r\n constructor(productId: number, channelId: number, matchingDimensionValues?: ProductDimension[]) {\r\n this.selectedVariantInput = new SelectedVariantInput(productId, channelId, matchingDimensionValues);\r\n }\r\n\r\n public getCacheKey = () => this.selectedVariantInput.getCacheKey();\r\n public getCacheObjectType = () => 'HEI-ProductInfo';\r\n public dataCacheType = (): CacheType => this.selectedVariantInput.dataCacheType();\r\n}\r\n\r\nasync function action(input: GetProductInfoInput, ctx: IActionContext): Promise {\r\n const product = await getSelectedVariant(input.selectedVariantInput, ctx);\r\n const itemId = product?.ItemId;\r\n\r\n if (!itemId) {\r\n throw new Error('Unable to get product SKU');\r\n }\r\n\r\n const ProductInfoInput = getProductInfoInput(itemId);\r\n return retailAction(ProductInfoInput, ctx);\r\n}\r\n\r\n/**\r\n * Get Warranty Info Data Action\r\n */\r\nexport default createObservableDataAction({\r\n action: >action,\r\n input: (context: ICreateActionContext) => {\r\n const productId = getSelectedProductIdFromActionInput(context);\r\n if (productId) {\r\n return new GetProductInfoInput(+productId, +context.requestContext.apiSettings.channelId, []);\r\n } else {\r\n throw new Error('Unable to create GetProductInfoInput, no productId found on module config or query');\r\n }\r\n }\r\n});\r\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 {\n CacheType,\n getCatalogId,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { convertToString, IQueryResultSettings, ProductRefinerValue, SortColumn } from '@msdyn365-commerce/retail-proxy';\nimport {\n buildCacheKey,\n QueryResultSettingsProxy\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { toJS } from 'mobx';\n\nimport { hydrateRefinersFromUrl } from './url-utils';\n\n/**\n * Export listPageType.\n */\nexport type listPageType = 'Category' | 'Search' | 'Unknown';\n\n/**\n * Get include attributes from config.\n * @param inputData - ICreateActionContext.\n * @returns Boolean.\n */\nfunction getIncludeAttributes(inputData: ICreateActionContext, IGeneric>): boolean {\n if (inputData &&\n inputData.config &&\n inputData.config.includeAttributes !== undefined &&\n inputData.config.includeAttributes === true) {\n return true;\n }\n return false;\n}\n\n/**\n * Get updateRefinerPanel from config.\n * @param inputData - ICreateActionContext.\n * @returns Boolean.\n */\nfunction getUpdateRefinerPanel(inputData: ICreateActionContext, IGeneric>): boolean {\n return !!inputData.config?.updateRefinerPanel;\n}\n\n/**\n * BaseCollection Action Input.\n */\nexport class BaseCollectionInput implements IActionInput {\n public pageType: listPageType;\n\n public category: number | undefined;\n\n public searchText: string | undefined;\n\n public refiners: ProductRefinerValue[];\n\n public queryResultSettings: IQueryResultSettings;\n\n public apiSettings: ICommerceApiSettings;\n\n public includeAttributes: boolean | undefined;\n\n public locale?: string;\n\n public isUpdateRefinerPanel?: boolean;\n\n public catalogId?: number;\n\n public constructor(\n pageType: listPageType,\n apiSettings: ICommerceApiSettings,\n queryResultSettings: IQueryResultSettings,\n refiners: ProductRefinerValue[],\n category: number | undefined,\n searchText: string | undefined,\n includeAttributes: boolean | undefined,\n isUpdateRefinerPanel?: boolean | undefined,\n locale?: string,\n catalogId?: number\n ) {\n this.pageType = pageType;\n this.apiSettings = apiSettings;\n this.category = category;\n this.searchText = searchText;\n this.queryResultSettings = queryResultSettings;\n this.refiners = refiners;\n this.includeAttributes = includeAttributes;\n this.isUpdateRefinerPanel = isUpdateRefinerPanel;\n this.locale = locale;\n this.catalogId = catalogId ?? 0;\n }\n\n public getCacheKey = () => {\n const queryResultSettings = {\n ...this.queryResultSettings.Paging,\n ...toJS(this.queryResultSettings.Sorting)\n };\n\n const cacheKey = buildCacheKey(\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions -- disabling this as inputs can be undefined depending on page type\n `${this.pageType}-${this.locale}-${this.category || this.searchText}-${this.catalogId}-${this.refiners.map(refiner => `${refiner.RefinerRecordId + (refiner.LeftValueBoundString || '') + (refiner.RightValueBoundString || '')}-`)}-${convertToString(queryResultSettings)}`, this.apiSettings, this.locale\n );\n return cacheKey;\n };\n\n public getCacheObjectType = () => 'CollectionActionResult';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n// TODO: Create a data model here or import one to capture the response of the action\nexport interface IGetFullProductsByCollectionData {\n text: string;\n}\n\nexport type CollectionClassConstructor = new (\n pageType: listPageType,\n apiSettings: ICommerceApiSettings,\n queryResultSettings: IQueryResultSettings,\n refiners: ProductRefinerValue[],\n category: number | undefined,\n searchText: string | undefined,\n includeAttributes: boolean | undefined,\n isUpdateRefinerPanel?: boolean | undefined,\n locale?: string,\n catalogId?: number\n) => BaseCollectionInput;\n\n/**\n * TODO: Use this function to create the input required to make the action call.\n * @param args\n * @param inputClassConstuctor\n */\nexport const createBaseCollectionInput = (\n args: ICreateActionContext,\n inputClassConstuctor: CollectionClassConstructor\n): BaseCollectionInput => {\n const pageType =\n args.requestContext.urlTokens.pageType === 'Category' || (args.requestContext.query && args.requestContext.query.categoryId) ? 'Category' : 'Search';\n\n const queryResultSettings = QueryResultSettingsProxy.fromInputData(args).QueryResultSettings;\n const queryRefiners = hydrateRefinersFromUrl(args.requestContext);\n const includeAttributes = getIncludeAttributes(args);\n const isUpdateRefinerPanel = getUpdateRefinerPanel(args);\n const catalogId = getCatalogId(args.requestContext);\n\n if (args.requestContext.query && args.requestContext.query.sorting) {\n queryResultSettings.Sorting = { Columns: JSON.parse(decodeURIComponent(args.requestContext.query.sorting)) };\n }\n\n if (pageType === 'Category') {\n return new inputClassConstuctor(\n pageType,\n args.requestContext.apiSettings,\n queryResultSettings,\n queryRefiners,\n +(args.requestContext.urlTokens.itemId || (args.requestContext.query && args.requestContext.query.categoryId) || 0),\n undefined,\n includeAttributes,\n isUpdateRefinerPanel,\n args.requestContext.locale,\n catalogId\n );\n } else if (pageType === 'Search' && args.requestContext.query && args.requestContext.query.q) {\n return new inputClassConstuctor(\n pageType,\n args.requestContext.apiSettings,\n queryResultSettings,\n queryRefiners,\n undefined,\n args.requestContext.query.q,\n includeAttributes,\n isUpdateRefinerPanel,\n args.requestContext.locale,\n catalogId\n );\n } else if (pageType === 'Search' && args.requestContext.query && args.requestContext.query.productId && args.requestContext.query.recommendation) {\n return new inputClassConstuctor(\n pageType,\n args.requestContext.apiSettings,\n queryResultSettings,\n queryRefiners,\n undefined,\n JSON.stringify({ ProductId: args.requestContext.query.productId, Recommendation: args.requestContext.query.recommendation }),\n includeAttributes,\n isUpdateRefinerPanel,\n args.requestContext.locale,\n catalogId\n );\n }\n\n throw new Error('[getFullProductsForCollection]Unable to create input');\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 {\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 { IActionContext } from '@msdyn365-commerce/core';\nimport { CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ArrayExtensions } from './extensions/array-extensions';\nimport { IProductInventoryInformation } from './product-inventory-information';\n\n/**\n * Cart line inventory validation result interface.\n */\nexport interface ICartLineInventoryValidationResult {\n\n /**\n * Define whether the cart lines inventory is valid across multiple cart lines.\n */\n readonly isValid: boolean;\n\n /**\n * Defines the list of product id with invalid inventory.\n */\n readonly productIdWithErrors: number [];\n}\n\n/**\n * Validates inventory across cart lines.\n * @param cartLines - The cart lines.\n * @param productAvailabilities - The product availability collection.\n * @param actionContext - The action context.\n * @param products - The products.\n * @param emailDeliveryModeCode - The emailDeliveryModeCode.\n * @returns True if all product quantity are available, false otherwise.\n */\nexport function validateCartLinesInventory(\n cartLines: CartLine[],\n productAvailabilities: IProductInventoryInformation[],\n actionContext: IActionContext,\n products?: SimpleProduct[],\n emailDeliveryModeCode?: string | undefined): ICartLineInventoryValidationResult {\n const cartLineMap = new Map();\n const defaultCartLineQuantity = 1;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Disabling rule validation for this line.\n if (!actionContext.requestContext.app.config.enableStockCheck) {\n return {\n isValid: true,\n productIdWithErrors: []\n };\n }\n const productIdWithErrors = [];\n let isValid = true;\n\n if (ArrayExtensions.hasElements(cartLines) && ArrayExtensions.hasElements(productAvailabilities)) {\n\n // Consolidate products in different cart lines into single entry with the total cart quantity\n for (const cartLine of cartLines) {\n // Skip validation if is an invoice inline.\n if (cartLine.ProductId && !cartLine.IsInvoiceLine) {\n if (!cartLineMap.has(cartLine.ProductId)) {\n cartLineMap.set(cartLine.ProductId, cartLine.Quantity ?? defaultCartLineQuantity);\n } else {\n const cartLineTotal = cartLineMap.get(cartLine.ProductId) ?? 0;\n cartLineMap.delete(cartLine.ProductId);\n cartLineMap.set(cartLine.ProductId, cartLineTotal + (cartLine.Quantity ?? defaultCartLineQuantity));\n }\n }\n }\n\n // Hashing product availability object by product ID.\n const productAvailabilityMap = new Map();\n for (const productAvailability of productAvailabilities) {\n\n if (productAvailability.ProductAvailableQuantity.ProductId &&\n !productAvailabilityMap.has(productAvailability.ProductAvailableQuantity.ProductId)) {\n productAvailabilityMap.set(productAvailability.ProductAvailableQuantity.ProductId, productAvailability);\n }\n }\n\n // Compare total quantity with the available quantity from the inventory API, also validate that the product is available.\n for (const productId of Array.from(cartLineMap.keys())) {\n const cartLineQty = cartLineMap.get(productId) ?? defaultCartLineQuantity;\n const productAvailability = productAvailabilityMap.get(productId);\n const availableQuantity = productAvailability?.ProductAvailableQuantity.AvailableQuantity ?? undefined;\n\n // If product is non-stocked or cartLine is electronic delivery, then no inventory check\n const cartLine = cartLines.find(line => line.ProductId === productId);\n const cartLineProduct = products?.find(product => product.RecordId === productId);\n let isStockedItem = true;\n if (cartLineProduct) {\n isStockedItem = !!cartLineProduct.Behavior?.IsStockedProduct;\n }\n const isEmailDelivery = (cartLine?.DeliveryMode && cartLine.DeliveryMode !== '') ? cartLine.DeliveryMode === emailDeliveryModeCode : false;\n const shouldSkipInventoryCheck = !isStockedItem || isEmailDelivery;\n\n // If product is non-stocked or cartLine is electronic delivery, then no inventory check\n if (shouldSkipInventoryCheck) {\n continue;\n }\n if (!productAvailability?.IsProductAvailable || (availableQuantity && cartLineQty > availableQuantity)) {\n productIdWithErrors.push(productId);\n isValid = false;\n }\n }\n }\n return {\n isValid,\n productIdWithErrors\n };\n}\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 } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n 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('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('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};","// 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 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 REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput, IMSDyn365Window } from '@msdyn365-commerce/core';\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * CopyCart data action pre-hook\n * @param inputs Data action inputs\n */\nconst beforeCopyCart = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\n/**\n * Fires an CheckOut event after CopyCart data action completed\n * @param _inputs Data action inputs\n * @param cart New checkout cart\n * @param actionContext Action context\n */\nconst afterCopyCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n let cartLineProductUnits: IProductInfo[] = [];\n\n // Collect info on products in the cart\n if (cartObject && cartObject.CartLines && Array.isArray(cartObject.CartLines) && cartObject.CartLines.length > 0) {\n try {\n cartLineProductUnits = await getProductInfoFromCartLinesAsync(cartObject.CartLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('CopyCart post-data action hook failed to process cart lines.', error);\n }\n }\n\n // Fire Checkout event\n window._msdyn365.telemetry.logEvent(TelemetryEvent.CheckOut, {\n cartId: cartObject.Id,\n cartVersion: cartObject.Version ? cartObject.Version.toString() : '',\n products: cartLineProductUnits,\n orderId: cartObject.OrderNumber ? cartObject.OrderNumber.toString() : ''\n });\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/Copy',\n postReaderHook: afterCopyCart,\n preReaderHook: beforeCopyCart\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 {\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 { 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 {\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\n ICommerceApiSettings, ICreateActionContext, isEmptyOrNullObject\n} from '@msdyn365-commerce/core';\nimport { getCheckoutState, ICheckoutState } from '@msdyn365-commerce/global-state';\nimport {\n getCardPaymentAcceptPointAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n CardPaymentAcceptPoint\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\nimport get from 'lodash/get';\n\nexport interface IGetCardPaymentAcceptPointInput {\n showBillingAddress?: boolean;\n paymenTenderType?: string;\n apiSettings: ICommerceApiSettings;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n amountDue?: number;\n}\n\n/**\n * GetCardPaymentAcceptPointInput - Input for create GetCardPaymentAcceptPoint.\n */\nexport class GetCardPaymentAcceptPointInput implements IActionInput {\n public showBillingAddress?: boolean;\n\n public paymenTenderType?: string;\n\n public shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n\n public amountDue?: number;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(input: IGetCardPaymentAcceptPointInput) {\n this.showBillingAddress = input.showBillingAddress;\n this.paymenTenderType = input.paymenTenderType;\n this.apiSettings = input.apiSettings;\n this.shouldEnableSinglePaymentAuthorizationCheckout = input.shouldEnableSinglePaymentAuthorizationCheckout;\n this.amountDue = input.amountDue;\n }\n\n public getCacheKey = () => buildCacheKey(`CardPaymentAcceptPoint${this.paymenTenderType ? `-${this.paymenTenderType}` : ''}`, this.apiSettings);\n\n public getCacheObjectType = () => 'CardPaymentAcceptPoint';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport const createCheckoutPaymentInstrumentInput = (inputData: ICreateActionContext) => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- keep existing name.\n const { showBillingAddress, paymenTenderType, shouldEnableSinglePaymentAuthorizationCheckout, amountDue } = inputData.config ?? {};\n const getCardPaymentAcceptPointInput = {\n showBillingAddres: showBillingAddress,\n paymenTenderType,\n apiSettings: inputData.requestContext.apiSettings,\n shouldEnableSinglePaymentAuthorizationCheckout,\n amountDue\n };\n\n return new GetCardPaymentAcceptPointInput(getCardPaymentAcceptPointInput);\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 getCardPaymentAcceptPointAction(\n input: GetCardPaymentAcceptPointInput,\n ctx: IActionContext\n): Promise {\n // If no cart ID is provided in input, we need to create a cart object\n if (!input) {\n ctx.telemetry.exception(new Error('[getCardPaymentAcceptPointAction] No valid Input was provided, failing'));\n throw new Error('[getCardPaymentAcceptPointAction] No valid Input was provided, failing');\n }\n\n const { showBillingAddress, paymenTenderType, shouldEnableSinglePaymentAuthorizationCheckout, amountDue = 0 } = input;\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\n ctx.telemetry.exception(error);\n throw error;\n });\n\n if (\n isEmptyOrNullObject(checkoutState) ||\n isEmptyOrNullObject(checkoutState.checkoutCart) ||\n isEmptyOrNullObject(checkoutState.checkoutCart.cart)\n ) {\n ctx.telemetry.exception(new Error('[getCardPaymentAcceptPointAction] Unable to get cart'));\n throw new Error('[getCardPaymentAcceptPointAction] Unable to get cart');\n }\n\n if (!checkoutState.checkoutCart.cart.CartLines || checkoutState.checkoutCart.cart.CartLines.length === 0) {\n ctx.telemetry.exception(new Error('[getCardPaymentAcceptPointAction] Cart is empty'));\n throw new Error('[getCardPaymentAcceptPointAction] Cart is empty');\n }\n\n const requestUrl =\n typeof ctx.requestContext.url.requestUrl === 'string' ? new URL(ctx.requestContext.url.requestUrl) : ctx.requestContext.url.requestUrl;\n const origin = get(window, 'location.origin') || requestUrl.origin;\n\n const zeroAmount = 0;\n\n const cardPaymentAcceptSettings = {\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CardPaymentAcceptSettings',\n HostPageOrigin: origin,\n AdaptorPath: `${origin}/Connectors/` || origin,\n CardPaymentEnabled: false,\n CardTokenizationEnabled: true,\n ...(!showBillingAddress && { HideBillingAddress: true }),\n ...(paymenTenderType && { TenderTypeId: paymenTenderType }),\n PaymentAmount: shouldEnableSinglePaymentAuthorizationCheckout ? amountDue : zeroAmount\n };\n\n return getCardPaymentAcceptPointAsync(\n { callerContext: ctx, bypassCache: 'get' },\n checkoutState.checkoutCart.cart.Id,\n cardPaymentAcceptSettings,\n []\n )\n .then(cardPaymentAcceptPoint => {\n if (!cardPaymentAcceptPoint.AcceptPageUrl && !cardPaymentAcceptPoint.AcceptPageContent) {\n throw new Error(\n '[getCardPaymentAcceptPointAction] Payment Accept Page has neither return AcceptPageUrl nor AcceptPageContent in updatePaymentAcceptPageData'\n );\n }\n return cardPaymentAcceptPoint;\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('Unable to get Card Payment Accept Point');\n throw error;\n });\n}\n\nexport const getCardPaymentAcceptPointActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce/checkout-payment-instrument/get-card-payment-accept-point',\n action: >getCardPaymentAcceptPointAction,\n input: createCheckoutPaymentInstrumentInput\n});\n\nexport default getCardPaymentAcceptPointActionDataAction;\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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core-internal';\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getByIdAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { IProductInfo } from '@msdyn365-commerce/telemetry-internal';\n\n/**\n * Converts cart line products into promise of array of product info\n * @param cartLines Cart Lines with product info to collect\n * @param actionContext Action context\n * @returns Array of product info\n */\nexport const getProductInfoFromCartLinesAsync = async (cartLines: CartLine[], actionContext: IActionContext): Promise => {\n if (actionContext.requestContext.channel === undefined) {\n throw new Error('Unable to make product call, channel ID not provided');\n }\n\n const productPromises: Promise[] = [];\n\n // Call GetById API for all products in cartLines\n for (let i = 0; i < cartLines.length; i++) {\n const cartLine: CartLine = cartLines[i];\n\n if (cartLine.ProductId) {\n // The product id in cartLine actually contains recordId and not master product id so we can use it up here to lookup product.\n productPromises.push(\n getByIdAsync({ callerContext: actionContext }, cartLine.ProductId, actionContext.requestContext.channel.RecordId).then(\n result => {\n // Construct basic IProductInfo object for product\n const productInfo = getProductInfoFromSimpleProduct(result);\n\n // Attach fields from the CartLine\n productInfo.productPrice = cartLine.Price ? cartLine.Price.toString() : '';\n productInfo.productQuantity = cartLine.Quantity ? cartLine.Quantity.toString() : '';\n\n return productInfo;\n },\n reason => {\n throw new Error(`Failed to get product details for product ${cartLine.ProductId}.\\n${reason}`);\n }\n )\n );\n }\n }\n\n // Return promise for array of product results\n return Promise.all(productPromises);\n};\n\n/**\n * Converts a SimpleProduct object into an IProductInfo object\n * @param simpleProduct Simple Product object\n * @returns Populated IProductInfo\n */\nexport const getProductInfoFromSimpleProduct = (simpleProduct: SimpleProduct): IProductInfo => {\n const recordId = simpleProduct.RecordId || '';\n\n return {\n // If master product id is not available then product record id is master product id\n productId: simpleProduct.MasterProductId ? simpleProduct.MasterProductId.toString() : recordId.toString(),\n productSku: recordId ? recordId.toString() : '',\n productName: simpleProduct.Name || simpleProduct.Description || '',\n productPrice: simpleProduct.Price ? simpleProduct.Price.toString() : '',\n productChannelId: '', // Not needed for each product, sent as part of all events\n productChannelName: '',\n productCategoryId: '',\n productCategoryName: '',\n productQuantity: '', // Cannot be deteremined from SimpleProduct, will be added from CartLine later\n productCurrency: '' // Not needed for each product, sent as part of all events with product data\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 { 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 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\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 addAddress, { AddressManagementInput } from './add-address';\nimport addItemToProductListAction, { AddItemToProductListInput } from './add-item-to-product-list';\nimport addOrganizationUser, { AddOrganizationUserInput } from './add-organization-user';\nimport checkout, { CheckOutInput } from './checkout';\nimport createProductList, { CreateProductListInput } from './create-product-list';\nimport deleteAddress from './delete-address';\nimport deleteOrganizationUser, { DeleteOrganizationUserInput } from './delete-organization-user';\nimport editOrganizationUser, { EditOrganizationUserInput } from './edit-organization-user';\nimport { GenericInput, getGenericAction } from './generic-data-action';\nimport getAddress, { AddressInput } from './get-address';\nimport getAttributeDefinitions, { GetAttributeDefinitionsInput } from './get-attribute-definitions';\nimport getAvailabilitiesForCartLineItems, { ProductAvailabilitiesForCartLineItems } from './get-availabilities-cartlines';\nimport getCatalogs from './get-catalogs';\nimport getCategories from './get-categories';\nimport getCategoriesHierarchy, { CategoriesInput } from './get-categories-hierarchy';\nimport getCategoryPaths from './get-category-paths';\nimport getChannelDeliveryOptionConfiguration, { GetChannelDeliveryConfigurationInput } from './get-channel-delivery-option-configuration';\nimport getCheckoutCart, { GetCheckoutCartInput } from './get-checkout-cart';\nimport getCurrentCategory, { CurrentCategoryInput } from './get-current-category';\nimport getCurrentCategoryHierarchy from './get-current-category-hierarchy';\nimport getCustomer, { GetCustomerInput } from './get-customer';\nimport getCustomerBalance, { GetCustomerBalanceInput } from './get-customer-balance';\nimport getCustomerLoyaltyCards from './get-customer-loyalty-cards';\nimport getDeliveryOptionsForCartLineItems, { ProductDeliveryOptionsForCartLineItems } from './get-delivery-options-for-cartlines';\nimport getDeliveryOptionsForSelectedVariant, { GetDeliveryOptionsForSelectedVariantInput } from './get-delivery-options-for-selected-variant';\nimport getDimensionAvailabilitiesForProductSearchResultAction, {\n DimensionAvailabilitiesForProductSearchResultInput\n} from './get-dimension-availabilities-for-product-search-result';\nimport getDimensionAvailabilitiesForProductsAction, { createProductsDimensionAvailabilitiesInput,\n IProductDimension, ProductsDimensionAvailabilitiesInput } from './get-dimension-availabilities-for-products';\nimport getDimensionsForSelectedVariant from './get-dimensions-for-selected-variant';\nimport getFeatureState, { createGetFeatureStateInput } from './get-feature-state';\nimport getFullAvailableInventoryNearby, { GetFullAvailableInventoryNearbyInput } from './get-full-available-inventory-nearby';\nimport getFullProductList, { GetFullProductListInput } from './get-full-product-list';\nimport getFullProducts, { FullProductInput, ProductDetailsCriteria } from './get-full-products';\nimport getFullProductByRefineSearchCategory, {\n FullProductsRefineSearchByCategoryInput\n} from './get-full-products-by-refine-search-category';\nimport getFullProductByRefineSearchText, {\n FullProductsRefineSearchByTextInput\n} from './get-full-products-by-refine-search-text';\nimport getActiveWishlistItems, { ActiveWishlistInput } from './get-items-in-wishlist';\nimport getList, { ListInput } from './get-list';\nimport getLoyalty, { GetLoyaltyCardInput } from './get-loyalty-card';\nimport getLoyaltyTransactionEstimation, { GetLoyaltyTransactionEstimationInput } from './get-loyalty-transaction-estimation';\nimport getMediaLocationsById, { MediaLocationsByIdInput } from './get-media-locations-by-id';\nimport getMediaLocationsForSelectedVariant from './get-media-locations-for-selected-variant';\nimport getOrderHistory from './get-order-history';\nimport getOrgUnitConfiguration from './get-org-unit-configuration';\nimport getOrganizationUsers, { OrganizationUsersInput } from './get-organization-users';\nimport getOrganizationUsersCount from './get-organization-users-count';\nimport getOrganizationWideOrderHistory, { GetOrganizationWideOrderHistoryInput } from './get-organization-wide-order-history';\nimport getPriceForProductSearchResult, { PriceForProductSearchResultInput } from './get-price-for-product-search-result';\nimport getPriceForSelectedVariant, { PriceForSelectedVariantInput } from './get-price-for-selected-variant';\nimport getProductAvailabilitiesForSelectedVariant, { ProductAvailabilitiesForSelectedVariantInput } from './get-product-availabilities-for-selected-variant';\nimport getProductList, { GetProductListInput } from './get-product-list';\nimport getProductListLines, { GetProductListLinesInput } from './get-product-list-lines';\nimport getProductsByCategory from './get-products-by-category';\nimport getActiveCartProductsAction, { ActiveCartProductsInput } from './get-products-in-active-cart';\nimport getPromotionOptionsForCartLineItems, { PromotionOptionsForCartLineItems } from './get-promotion-options-for-cartlines';\nimport getRatingsSummary from './get-ratings-summary';\nimport { GetRatingsSummaryInput } from './get-ratings-summary-input';\nimport getRefinersByCategory, { createRefinersByCategoryInput, RefinersByCategoryInput } from './get-refiners-by-category';\nimport getRefinersByText, { createRefinersByTextInput, RefinersByTextInput } from './get-refiners-by-text';\nimport getRelatedProducts, { GetRelatedProductsInput } from './get-related-products';\nimport getScanResult, { GetScanResultInput } from './get-scan-results';\nimport getSearchConfiguration, { SearchConfigurationInput } from './get-search-configuration';\nimport getSelectedVariant from './get-selected-variant';\nimport getSimpleProducts, { getSimpleProductsAction, ProductInput } from './get-simple-products';\nimport getOrgUnitLocationsByArea, { GetOrgUnitLocationsByAreaInput } from './get-store-location-information';\nimport getWishlistByCustomerId from './get-wishlist-by-customer-id';\nimport getInvoiceDetails, { GetInvoiceDetailsInput } from './invoices/get-invoice-details';\nimport getInvoices, { GetInvoicesInput } from './invoices/get-invoices';\nimport issueLoyalty, { IssueLoyaltyInput } from './issue-loyalty';\nimport addItemToOrderTemplate, { AddItemToOrderTemplateInput } from './order-templates/add-item-to-order-template';\nimport addOrderTemplateToCartAction, { AddOrderTemplateToCartInput } from './order-templates/add-order-template-to-cart';\nimport createOrderTemplate, { CreateOrderTemplateInput } from './order-templates/create-order-template';\nimport getFullOrderTemplate, { GetFullOrderTemplateInput } from './order-templates/get-full-order-template';\nimport getFullOrderTemplates, { GetFullOrderTemplatesInput } from './order-templates/get-full-order-templates';\nimport getOrderTemplates, { createGetOrderTemplatesInput, GetOrderTemplatesInput } from './order-templates/get-order-templates';\nimport getOrderTemplatesPreview, { GetOrderTemplatesPreviewInput } from './order-templates/get-order-templates-preview';\nimport getPaginatedOrderTemplateLinesAction, { GetPaginatedOrderTemplateLinesInput } from './order-templates/get-paginated-order-template-lines';\nimport updateOrderTemplateHeader, { UpdateOrderTemplateHeaderInput } from './order-templates/update-order-template-header';\nimport updateOrderTemplateAction, { UpdateOrderTemplateInput } from './order-templates/update-order-template-line';\nimport refineSearchByCategory, { RefineSearchByCriteriaInput } from './refine-search-by-category';\nimport searchByText from './search-by-text';\nimport updateAddress from './update-address';\nimport updateCustomerAttributes, { updateCustomerAttributesInput } from './update-customer-attributes';\nimport updateCustomerPersonalization, { updateCustomerPersonalizationInput } from './update-customer-personalization';\nimport updatePrimaryAddress from './update-primary-address';\nimport { IFullOrgUnitAvailability } from './utilities/full-org-unit-availability';\nimport { getRnrAuthEndpointId, getRnrEndpointId, getRnrPartnerId } from './utilities/getRnrKeys';\nimport {\n createInventoryAvailabilitySearchCriteria,\n isAggregatedInventory,\n mapAggregatedProductInventoryInformation,\n mapProductInventoryInformation } from './utilities/product-inventory-utils';\nimport { IScanResultWithProduct } from './utilities/scan-result-with-product';\nimport { validateCartLinesInventory } from './utilities/validate-cartlines-inventory';\n\nexport * from './get-dimensions-for-selected-variant';\nexport * from './get-media-locations-for-selected-variant';\nexport * from './get-product-dimensions-with-availabilities';\nexport * from './get-selected-variant';\nexport * from './utilities';\nexport * from './utilities/order-templates';\nexport * from './utilities/quick-order-template-line';\nexport * from './utilities/quick-order-templates';\nexport * from './utilities/Url-builder';\n\nexport {\n ActiveCartProductsInput,\n ActiveWishlistInput,\n addAddress,\n addItemToOrderTemplate,\n AddItemToOrderTemplateInput,\n addItemToProductListAction,\n AddItemToProductListInput,\n addOrderTemplateToCartAction,\n AddOrderTemplateToCartInput,\n addOrganizationUser,\n AddOrganizationUserInput,\n AddressInput,\n AddressManagementInput,\n CategoriesInput,\n checkout,\n CheckOutInput,\n createGetFeatureStateInput,\n createGetOrderTemplatesInput,\n createInventoryAvailabilitySearchCriteria,\n createOrderTemplate,\n CreateOrderTemplateInput,\n createProductList,\n CreateProductListInput,\n createProductsDimensionAvailabilitiesInput,\n createRefinersByCategoryInput,\n createRefinersByTextInput,\n CurrentCategoryInput,\n deleteAddress,\n deleteOrganizationUser,\n DeleteOrganizationUserInput,\n DimensionAvailabilitiesForProductSearchResultInput,\n editOrganizationUser,\n EditOrganizationUserInput,\n FullProductInput,\n FullProductsRefineSearchByCategoryInput,\n FullProductsRefineSearchByTextInput,\n GenericInput,\n getActiveCartProductsAction,\n getActiveWishlistItems,\n getAddress,\n getAttributeDefinitions,\n GetAttributeDefinitionsInput,\n getAvailabilitiesForCartLineItems,\n getCatalogs,\n getCategories,\n getCategoriesHierarchy,\n getCategoryPaths,\n GetChannelDeliveryConfigurationInput,\n getChannelDeliveryOptionConfiguration,\n getCheckoutCart,\n GetCheckoutCartInput,\n getCurrentCategory,\n getCurrentCategoryHierarchy,\n getCustomer,\n getCustomerBalance,\n GetCustomerBalanceInput,\n GetCustomerInput,\n getCustomerLoyaltyCards,\n getDeliveryOptionsForCartLineItems,\n getDeliveryOptionsForSelectedVariant,\n GetDeliveryOptionsForSelectedVariantInput,\n getDimensionAvailabilitiesForProductsAction,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getDimensionsForSelectedVariant,\n getFeatureState,\n getFullAvailableInventoryNearby,\n GetFullAvailableInventoryNearbyInput,\n getFullOrderTemplate,\n GetFullOrderTemplateInput,\n getFullOrderTemplates,\n GetFullOrderTemplatesInput,\n getFullProductByRefineSearchCategory,\n getFullProductByRefineSearchText,\n getFullProductList,\n GetFullProductListInput,\n getFullProducts,\n getGenericAction,\n getInvoiceDetails,\n GetInvoiceDetailsInput,\n getInvoices,\n GetInvoicesInput,\n getList,\n getLoyalty,\n GetLoyaltyCardInput,\n getLoyaltyTransactionEstimation,\n GetLoyaltyTransactionEstimationInput,\n getMediaLocationsById,\n getMediaLocationsForSelectedVariant,\n getOrderHistory,\n getOrderTemplates,\n GetOrderTemplatesInput,\n getOrderTemplatesPreview,\n GetOrderTemplatesPreviewInput,\n getOrganizationUsers,\n getOrganizationUsersCount,\n getOrganizationWideOrderHistory,\n GetOrganizationWideOrderHistoryInput,\n getOrgUnitConfiguration,\n getOrgUnitLocationsByArea,\n GetOrgUnitLocationsByAreaInput,\n getPaginatedOrderTemplateLinesAction,\n GetPaginatedOrderTemplateLinesInput,\n getPriceForProductSearchResult,\n getPriceForSelectedVariant,\n getProductAvailabilitiesForSelectedVariant,\n getProductList,\n GetProductListInput,\n getProductListLines,\n GetProductListLinesInput,\n getProductsByCategory,\n getPromotionOptionsForCartLineItems,\n getRatingsSummary,\n GetRatingsSummaryInput,\n getRefinersByCategory,\n getRefinersByText,\n getRelatedProducts,\n GetRelatedProductsInput,\n getRnrAuthEndpointId,\n getRnrEndpointId,\n getRnrPartnerId,\n getScanResult,\n GetScanResultInput,\n getSearchConfiguration,\n getSelectedVariant,\n getSimpleProducts,\n getSimpleProductsAction,\n getWishlistByCustomerId,\n IFullOrgUnitAvailability,\n IProductDimension,\n isAggregatedInventory,\n IScanResultWithProduct,\n issueLoyalty,\n IssueLoyaltyInput,\n ListInput,\n mapAggregatedProductInventoryInformation,\n mapProductInventoryInformation,\n MediaLocationsByIdInput,\n OrganizationUsersInput,\n PriceForProductSearchResultInput,\n PriceForSelectedVariantInput,\n ProductAvailabilitiesForCartLineItems,\n ProductAvailabilitiesForSelectedVariantInput,\n ProductDeliveryOptionsForCartLineItems,\n ProductDetailsCriteria,\n ProductInput,\n ProductsDimensionAvailabilitiesInput,\n PromotionOptionsForCartLineItems,\n RefinersByCategoryInput,\n RefinersByTextInput,\n refineSearchByCategory,\n RefineSearchByCriteriaInput,\n searchByText,\n SearchConfigurationInput,\n updateAddress,\n updateCustomerAttributes,\n updateCustomerAttributesInput,\n updateCustomerPersonalization,\n updateCustomerPersonalizationInput,\n updateOrderTemplateAction,\n updateOrderTemplateHeader,\n UpdateOrderTemplateHeaderInput,\n UpdateOrderTemplateInput,\n updatePrimaryAddress,\n validateCartLinesInventory\n};\n\nexport { IQueryResultSettingsModuleConfig } from './utilities/IQueryResultSettingsModuleConfig';\nexport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\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/**\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 } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n try {\n\n\n isNotRegistered('account-block') && (binding.modules['account-block'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-account-block' */\n 'partner/modules/account-block/account-block.tsx'),\n $type: 'contentModule',\n da: [{name:'accountInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'account-block',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/account-block'\n });\n \n\n isNotRegistered('bazzarvoice-widget') && (binding.modules['bazzarvoice-widget'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-bazzarvoice-widget' */\n 'partner/modules/bazzarvoice-widget/bazzarvoice-widget.tsx'),\n $type: 'contentModule',\n da: [{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'bazzarvoice-widget',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/bazzarvoice-widget'\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: '__local__-__local__-cart' */\n 'partner/modules/cart/cart.tsx'),\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: 0},{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: false,\n ns: '__local__',\n n: 'cart',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/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: '__local__-__local__-cart-icon' */\n 'partner/modules/cart-icon/cart-icon.tsx'),\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: false,\n ns: '__local__',\n n: 'cart-icon',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/cart-icon'\n });\n \n\n isNotRegistered('conditional-tab-item') && (binding.modules['conditional-tab-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-conditional-tab-item' */\n 'partner/modules/conditional-tab-item/conditional-tab-item.tsx'),\n $type: 'containerModule',\n da: [{name:'activeTabState', path:'@msdyn365-commerce-modules/tab/dist/lib/data-actions/tab-state-data-action', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'conditional-tab-item',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/conditional-tab-item'\n });\n \n\n isNotRegistered('custom-content-block') && (binding.modules['custom-content-block'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-custom-content-block' */\n 'partner/modules/custom-content-block/custom-content-block.tsx'),\n $type: 'contentModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'custom-content-block',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/custom-content-block'\n });\n \n\n isNotRegistered('custom-recently-viewed-products') && (binding.modules['custom-recently-viewed-products'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-custom-recently-viewed-products' */\n 'partner/modules/custom-recently-viewed-products/custom-recently-viewed-products.tsx'),\n $type: 'contentModule',\n da: [{name:'fullProductsSearchResultsWithCount', path:'modules/custom-recently-viewed-products/actions/get-full-products-by-ids', runOn: 1}],\n \n iNM: false,\n ns: '__local__',\n n: 'custom-recently-viewed-products',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/custom-recently-viewed-products'\n });\n \n\n isNotRegistered('d365-marketing-from') && (binding.modules['d365-marketing-from'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-d365-marketing-from' */\n 'partner/modules/d365-marketing-from/d365-marketing-from.tsx'),\n $type: 'contentModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'd365-marketing-from',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/d365-marketing-from'\n });\n \n\n isNotRegistered('dynamic-image-carousel') && (binding.modules['dynamic-image-carousel'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-dynamic-image-carousel' */\n 'partner/modules/dynamic-image-carousel/dynamic-image-carousel.tsx'),\n $type: 'containerModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'dynamic-image-carousel',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/dynamic-image-carousel'\n });\n \n\n isNotRegistered('flipp') && (binding.modules['flipp'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-flipp' */\n 'partner/modules/flipp/flipp.tsx'),\n $type: 'contentModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'flipp',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/flipp'\n });\n \n\n isNotRegistered('hei-buybox') && (binding.modules['hei-buybox'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-buybox' */\n 'partner/modules/hei-buybox/hei-buybox.tsx'),\n $type: 'containerModule',\n da: [{name:'allDimensions', path:'actions/get-all-dimensions-for-product', runOn: 0},{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 0},{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'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:'mfrCode', path:'actions/get-mfr-code.action', 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:'productPromotions', path:'actions/get-product-promotions.action', 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: 0},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-buybox',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-buybox'\n });\n \n\n isNotRegistered('hei-donation') && (binding.modules['hei-donation'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-donation' */\n 'partner/modules/hei-donation/hei-donation.tsx'),\n $type: 'contentModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-donation',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-donation'\n });\n \n\n isNotRegistered('hei-order-confirmation') && (binding.modules['hei-order-confirmation'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-order-confirmation' */\n 'partner/modules/hei-order-confirmation/hei-order-confirmation.tsx'),\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:'modules/hei-order-confirmation/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: false,\n ns: '__local__',\n n: 'hei-order-confirmation',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-order-confirmation'\n });\n \n\n isNotRegistered('hei-preferred-store-button') && (binding.modules['hei-preferred-store-button'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-preferred-store-button' */\n 'partner/modules/hei-preferred-store-button/hei-preferred-store-button.tsx'),\n $type: 'contentModule',\n da: [{name:'allStores', path:'actions/get-all-stores', runOn: 0},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-preferred-store-button',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-preferred-store-button'\n });\n \n\n isNotRegistered('hei-product-included') && (binding.modules['hei-product-included'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-product-included' */\n 'partner/modules/hei-product-included/hei-product-included.tsx'),\n $type: 'contentModule',\n da: [{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'productSpecificationData', path:'modules/hei-product-specification/dataActions/get-attribute-groups-for-selected-variant', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-product-included',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-product-included'\n });\n \n\n isNotRegistered('hei-product-specification') && (binding.modules['hei-product-specification'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-product-specification' */\n 'partner/modules/hei-product-specification/hei-product-specification.tsx'),\n $type: 'contentModule',\n da: [{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'productSpecificationData', path:'modules/hei-product-specification/dataActions/get-attribute-groups-for-selected-variant', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-product-specification',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-product-specification'\n });\n \n\n isNotRegistered('hei-product-whatisinbox') && (binding.modules['hei-product-whatisinbox'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-product-whatisinbox' */\n 'partner/modules/hei-product-whatisinbox/hei-product-whatisinbox.tsx'),\n $type: 'contentModule',\n da: [{name:'whatisinBox', path:'actions/get-product-whatisinbox', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-product-whatisinbox',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-product-whatisinbox'\n });\n \n\n isNotRegistered('hei-promotion') && (binding.modules['hei-promotion'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-promotion' */\n 'partner/modules/hei-promotion/hei-promotion.tsx'),\n $type: 'contentModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-promotion',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-promotion'\n });\n \n\n isNotRegistered('hei-sailthru-signup-form') && (binding.modules['hei-sailthru-signup-form'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-sailthru-signup-form' */\n 'partner/modules/hei-sailthru-signup-form/hei-sailthru-signup-form.tsx'),\n $type: 'contentModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-sailthru-signup-form',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-sailthru-signup-form'\n });\n \n\n isNotRegistered('hei-store-address') && (binding.modules['hei-store-address'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-store-address' */\n 'partner/modules/hei-store-address/hei-store-address.tsx'),\n $type: 'contentModule',\n da: [{name:'allStores', path:'actions/get-all-stores', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-store-address',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-store-address'\n });\n \n\n isNotRegistered('hei-store-contact') && (binding.modules['hei-store-contact'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-store-contact' */\n 'partner/modules/hei-store-contact/hei-store-contact.tsx'),\n $type: 'contentModule',\n da: [{name:'allStores', path:'actions/get-all-stores', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-store-contact',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-store-contact'\n });\n \n\n isNotRegistered('hei-store-hours') && (binding.modules['hei-store-hours'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-store-hours' */\n 'partner/modules/hei-store-hours/hei-store-hours.tsx'),\n $type: 'contentModule',\n da: [{name:'allStores', path:'actions/get-all-stores', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-store-hours',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-store-hours'\n });\n \n\n isNotRegistered('hei-store-picture') && (binding.modules['hei-store-picture'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-store-picture' */\n 'partner/modules/hei-store-picture/hei-store-picture.tsx'),\n $type: 'contentModule',\n da: [{name:'allStores', path:'actions/get-all-stores', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-store-picture',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-store-picture'\n });\n \n\n isNotRegistered('henrys') && (binding.modules['henrys'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-henrys' */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/fabrikam'),\n $type: 'themeModule',\n da: [],\n definitionExtensions: ['header','hei-buybox','navigation-menu'],\n iNM: true,\n ns: '__local__',\n n: 'henrys',\n p: '__local__',\n \n pdp: 'node_modules/@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/fabrikam.definition.json',\n \n themeSettings: 'henrys.theme.settings.json',\n md: 'src/themes/henrys'\n });\n \n\n isNotRegistered('isp-serp') && (binding.modules['isp-serp'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-isp-serp' */\n 'partner/modules/isp-serp/isp-serp.tsx'),\n $type: 'contentModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'isp-serp',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/isp-serp'\n });\n \n\n isNotRegistered('language-toggle') && (binding.modules['language-toggle'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-language-toggle' */\n 'partner/modules/language-toggle/language-toggle.tsx'),\n $type: 'contentModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'language-toggle',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/language-toggle'\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: '__local__-__local__-navigation-menu' */\n 'partner/modules/navigation-menu/navigation-menu.tsx'),\n $type: 'containerModule',\n da: [{name:'categories', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'navigation-menu',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/navigation-menu'\n });\n \n\n isNotRegistered('product-info-content') && (binding.modules['product-info-content'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-product-info-content' */\n 'partner/modules/product-info-content/product-info-content.tsx'),\n $type: 'contentModule',\n da: [{name:'productInfo', path:'actions/get-product-info', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'product-info-content',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/product-info-content'\n });\n \n\n isNotRegistered('product-media-gallery') && (binding.modules['product-media-gallery'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-product-media-gallery' */\n 'partner/modules/product-media-gallery/product-media-gallery.tsx'),\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: false,\n ns: '__local__',\n n: 'product-media-gallery',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/product-media-gallery'\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: '__local__-__local__-quickview' */\n 'partner/modules/quickview/quickview.tsx'),\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: false,\n ns: '__local__',\n n: 'quickview',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/quickview'\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: '__local__-__local__-search' */\n 'partner/modules/search/search.tsx'),\n $type: 'contentModule',\n da: [{name:'searchState', path:'@msdyn365-commerce-modules/search-utilities/dist/lib/search-state-data-action', runOn: 1}],\n \n iNM: false,\n ns: '__local__',\n n: 'search',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/search'\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: '__local__-__local__-store-selector' */\n 'partner/modules/store-selector/store-selector.tsx'),\n $type: 'contentModule',\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: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'store-selector',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/store-selector'\n });\n \n\n isNotRegistered('store-selector-button') && (binding.modules['store-selector-button'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-store-selector-button' */\n 'partner/modules/store-selector-button/store-selector-button.tsx'),\n $type: 'containerModule',\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: false,\n ns: '__local__',\n n: 'store-selector-button',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/store-selector-button'\n });\n \n\n isNotRegistered('subcategory-navigation') && (binding.modules['subcategory-navigation'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-subcategory-navigation' */\n 'partner/modules/subcategory-navigation/subcategory-navigation.tsx'),\n $type: 'contentModule',\n da: [{name:'category', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'subcategory-navigation',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/subcategory-navigation'\n });\n \n\n { \n const actionPath = 'actions/get-availabilities-cartlines.action';\n binding.dataActions[actionPath] = require('partner/actions/get-availabilities-cartlines.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = 'actions/get-mfr-code.action';\n binding.dataActions[actionPath] = require('partner/actions/get-mfr-code.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = 'actions/get-product-availabilities-for-selected-variant-override.action';\n binding.dataActions[actionPath] = require('partner/actions/get-product-availabilities-for-selected-variant-override.action');\n registerActionId(actionPath);\n }\n\n { \n const actionPath = 'actions/get-product-promotions.action';\n binding.dataActions[actionPath] = require('partner/actions/get-product-promotions.action');\n registerActionId(actionPath);\n }\n\n if (isNotRegistered('account-block')){\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('bazzarvoice-widget')){\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('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('conditional-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('custom-recently-viewed-products')){\n const sanitizedActionPath = 'modules/custom-recently-viewed-products/actions/get-full-products-by-ids';\n let dataAction = require('partner/modules/custom-recently-viewed-products/actions/get-full-products-by-ids');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('hei-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('hei-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('hei-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('hei-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('hei-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('hei-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('hei-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('hei-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('hei-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('hei-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('hei-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('hei-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('hei-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('hei-buybox')){\n const sanitizedActionPath = 'actions/get-all-dimensions-for-product';\n let dataAction = require('partner/actions/get-all-dimensions-for-product');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('hei-buybox')){\n const sanitizedActionPath = 'actions/get-mfr-code.action';\n let dataAction = require('partner/actions/get-mfr-code.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('hei-buybox')){\n const sanitizedActionPath = 'actions/get-product-promotions.action';\n let dataAction = require('partner/actions/get-product-promotions.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('hei-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('hei-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('hei-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('hei-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('hei-order-confirmation')){\n const sanitizedActionPath = 'modules/hei-order-confirmation/actions/get-sales-order-confirmation-with-hydrations';\n let dataAction = require('partner/modules/hei-order-confirmation/actions/get-sales-order-confirmation-with-hydrations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('hei-preferred-store-button')){\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('hei-preferred-store-button')){\n const sanitizedActionPath = 'actions/get-all-stores';\n let dataAction = require('partner/actions/get-all-stores');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('hei-product-included')){\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('hei-product-included')){\n const sanitizedActionPath = 'modules/hei-product-specification/dataActions/get-attribute-groups-for-selected-variant';\n let dataAction = require('partner/modules/hei-product-specification/dataActions/get-attribute-groups-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('hei-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('hei-product-specification')){\n const sanitizedActionPath = 'modules/hei-product-specification/dataActions/get-attribute-groups-for-selected-variant';\n let dataAction = require('partner/modules/hei-product-specification/dataActions/get-attribute-groups-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('hei-product-whatisinbox')){\n const sanitizedActionPath = 'actions/get-product-whatisinbox';\n let dataAction = require('partner/actions/get-product-whatisinbox');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('hei-store-address')){\n const sanitizedActionPath = 'actions/get-all-stores';\n let dataAction = require('partner/actions/get-all-stores');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('hei-store-contact')){\n const sanitizedActionPath = 'actions/get-all-stores';\n let dataAction = require('partner/actions/get-all-stores');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('hei-store-hours')){\n const sanitizedActionPath = 'actions/get-all-stores';\n let dataAction = require('partner/actions/get-all-stores');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('hei-store-picture')){\n const sanitizedActionPath = 'actions/get-all-stores';\n let dataAction = require('partner/actions/get-all-stores');\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('product-info-content')){\n const sanitizedActionPath = 'actions/get-product-info';\n let dataAction = require('partner/actions/get-product-info');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n if (isNotRegistered('product-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('product-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('product-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('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('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('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('store-selector-button')){\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('subcategory-navigation')){\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 \n } catch (e) {\n handleError('-', e);\n }\n \n return binding;\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","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getGroupedAttributesAsync, IProductAttributeGroup } from '../../../actions/product-services';\r\n\r\n/**\r\n * Chains getting the SelectedVariant with GetActivePrice.\r\n */\r\nexport class AttributeGroupsForSelectedVariantInput implements IActionInput {\r\n public productId: number;\r\n\r\n public channelId: number;\r\n\r\n public catalogId: number;\r\n\r\n public selectedProduct: SimpleProduct | undefined;\r\n\r\n constructor(productId: number, channelId: number, selectedProduct?: SimpleProduct, catalogId?: number) {\r\n this.productId = productId;\r\n this.channelId = channelId;\r\n this.selectedProduct = selectedProduct;\r\n this.catalogId = catalogId || 0;\r\n }\r\n\r\n public getCacheKey = () => `AttributeGroupsForSelectedVariant-${this.productId}`;\r\n\r\n public getCacheObjectType = () => 'ProductAttributeGroup';\r\n\r\n public dataCacheType = (): CacheType => 'instance';\r\n}\r\n\r\nexport const createAttributeGroupsForSelectedVariantInput = (\r\n inputData: ICreateActionContext>\r\n): AttributeGroupsForSelectedVariantInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n\r\n if (productId) {\r\n return new AttributeGroupsForSelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId);\r\n }\r\n throw new Error('Unable to create AttributeGroupsForSelectedVariantInput, no productId found on module config or query');\r\n};\r\n\r\n/**\r\n * Calls the Retail API a get a list of dimension values for a given product.\r\n * @param input\r\n * @param ctx\r\n */\r\nexport async function getAttributeGroupsForSelectedVariantAction(\r\n input: AttributeGroupsForSelectedVariantInput,\r\n ctx: IActionContext\r\n): Promise {\r\n return Promise.resolve()\r\n .then(() => {\r\n const activeProduct: SimpleProduct | undefined = input.selectedProduct;\r\n\r\n if (!activeProduct) {\r\n const selectedVariantInput = new SelectedVariantInput(input.productId, input.channelId);\r\n\r\n return getSelectedVariant(selectedVariantInput, ctx);\r\n }\r\n\r\n return activeProduct;\r\n })\r\n .then((productResult: SimpleProduct | null) => {\r\n const activeProduct: SimpleProduct | undefined = productResult;\r\n\r\n if (activeProduct) {\r\n return getGroupedAttributesAsync(\r\n { callerContext: ctx, queryResultSettings: {} },\r\n input.channelId,\r\n input.catalogId,\r\n activeProduct.RecordId\r\n );\r\n }\r\n\r\n return null;\r\n })\r\n .then((attributeValues: IProductAttributeGroup[] | null) => {\r\n const resultArray = attributeValues;\r\n if (resultArray) {\r\n return resultArray;\r\n }\r\n\r\n return [];\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(error.message);\r\n throw new Error('[getPriceForSelectedVariantAction]Error executing action');\r\n });\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: 'hei-product-info/get-attribute-groups-for-selected-variant',\r\n action: >getAttributeGroupsForSelectedVariantAction,\r\n input: createAttributeGroupsForSelectedVariantInput\r\n});\r\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, IActionInput } from '@msdyn365-commerce/core';\n\n/**\n * These are the get user review API inputs.\n */\nexport class GetUserReviewInput 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 user's authorization token.\n */\n public authorization: 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 authorization: string,\n serviceEndpoint: string\n ) {\n this.productId = productId;\n this.tenantId = tenantId;\n this.authorization = authorization;\n this.serviceEndpoint = serviceEndpoint;\n }\n\n public getCacheKey = () => 'GetUserReview';\n\n public getCacheObjectType = () => 'GetUserReview';\n\n public dataCacheType = (): CacheType => 'none';\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","/*--------------------------------------------------------------\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, 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 { 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 { 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 { 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 => 'none';\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 { 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\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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getProductInfoFromSimpleProduct } from './telemetry.action.helper';\n\nconst beforeGetByIds = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterGetByIds = async (\n _inputs: IActionInput | IActionInput[],\n simpleProducts: SimpleProduct | SimpleProduct[],\n actionContext: IActionContext\n) => {\n if (!Array.isArray(simpleProducts)) {\n simpleProducts = [simpleProducts];\n }\n\n simpleProducts.forEach(async product => {\n if (product) {\n product = await Promise.resolve(product);\n const productInfo = getProductInfoFromSimpleProduct(product);\n actionContext.requestContext.telemetryData[productInfo.productSku] = productInfo;\n }\n });\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Products/GetByIds',\n postReaderHook: afterGetByIds,\n preReaderHook: beforeGetByIds\n});\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nexport * from './base-promise-queue';\nexport * from './finite-promise-queue';\nexport * from './promise-queue';\n","module.exports = React;","/*--------------------------------------------------------------\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 {\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 { Reviews } from '@msdyn365-commerce/commerce-entities';\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric, sendRequest } from '@msdyn365-commerce/core';\nimport { getRnrEndpointId, getRnrPartnerId, getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { GetProductReviewsInput } from './inputs/get-product-reviews-input';\n\n/**\n * TODO: Use this function to create the input required to make the API call.\n * @param input\n */\nexport const createInputForProductReviews = (input: ICreateActionContext>): IActionInput => {\n const productId = getSelectedProductIdFromActionInput(input);\n if (productId) {\n // Task #211227597 Remove these hardcoded values.\n return new GetProductReviewsInput(productId, getRnrPartnerId(input), input.requestContext.locale, getRnrEndpointId(input));\n }\n throw new Error('[GetProductReviews] Not all necessary parameters found while creating Input for GetProductReviewsApi');\n};\n\nexport async function getReviewsForGivenProduct(input: GetProductReviewsInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n throw new Error(\n `[GetProductReviews] Invalid input. ProductId = ${input.productId}, TenantId = ${input.tenantId}, localeListFilter = ${input.localeListFilter}`\n );\n }\n let requestUrl =\n `${input.serviceEndpoint}/v2.0/reviews/product/${input.productId}` +\n `?tenantId=${input.tenantId}` +\n `&localeListFilter=${input.localeListFilter}` +\n `&pageSize=${input.pageSize}` +\n `&orderBy=${input.orderBy}` +\n `&skipItems=${input.skipItems}`;\n\n if (input.starFilters !== undefined && input.starFilters.length > 0) {\n requestUrl = `${requestUrl}&starFilters=${input.starFilters}`;\n }\n\n if (input.pageToken !== null) {\n requestUrl = `${requestUrl}&pageToken=${input.pageToken}`;\n }\n return sendRequest(requestUrl, 'get')\n .then(response => {\n if (response.data && response.data.items && response.data.items.length > 0) {\n return {\n items: response.data.items.filter(i => !i.isTakenDown),\n pagingInfo: response.data.pagingInfo\n };\n }\n ctx.trace('[GetProductReviews] No reviews found for this product.');\n return response.data;\n })\n .catch(error => {\n ctx.trace('[GetProductReviews] Failed to get reviews for product');\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[GetProductReviews] Failed to get reviews for product');\n throw error;\n });\n}\n\nfunction inputIsValid(input: GetProductReviewsInput): boolean {\n return input && input.productId.length > 0 && input.tenantId.length > 0 && input.localeListFilter.length > 0 && input.pageSize > 0;\n}\n\nexport const getReviewsForGivenProductDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/get-product-reviews',\n action: >getReviewsForGivenProduct,\n input: createInputForProductReviews\n});\n\nexport default getReviewsForGivenProductDataAction;\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 { 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';\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 { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\n\nimport { BaseCollectionInput, createBaseCollectionInput } from './base-collection-action';\nimport { getProductRefinerHierarchy } from './get-product-refiner-hierarchy';\n\n/**\n * Default Category/Product Id Values.\n */\nenum DefaultValues {\n defaultCategoryIdValue = 0,\n defaultProductIdValue = 0\n}\n\n/**\n * Refiners-by-Collection Input action.\n */\nexport class RefinersByCollectionInput extends BaseCollectionInput implements IActionInput {\n public getCacheObjectType = () => 'ProductRefiner';\n\n public dataCacheType = () => {\n if (\n this.pageType !== 'Category' ||\n (this.refiners && this.refiners.length > 0) ||\n (this.queryResultSettings && this.queryResultSettings.Sorting && this.queryResultSettings.Sorting.Columns && this.queryResultSettings.Sorting.Columns.length > 0)\n ) {\n return 'request';\n }\n return 'application';\n\n };\n}\n\n/**\n * Create input method which creates an ActionInput for fetching list page refiners.\n * @param args\n */\nconst createInput = (args: ICreateActionContext): IActionInput => {\n return createBaseCollectionInput(args, RefinersByCollectionInput);\n};\n\n/**\n * Action method which fetches refiners for the given list page.\n * @param input\n * @param ctx\n */\nasync function action(input: RefinersByCollectionInput, ctx: IActionContext): Promise {\n let searchProductId;\n if (input.pageType === 'Category') {\n if (input.category) {\n return getProductRefinerHierarchy(\n {\n CategoryIds: [input.category || DefaultValues.defaultCategoryIdValue],\n Context: {\n ChannelId: input.apiSettings.channelId,\n CatalogId: input.catalogId\n },\n Refinement: input.isUpdateRefinerPanel ? input.refiners : []\n },\n input.queryResultSettings,\n ctx);\n }\n throw new Error('[GetRefinersForCollection]Category Page Detected, but no global categoryId found');\n\n } else {\n if (input.searchText && (ctx.requestContext.query && ctx.requestContext.query.q)) {\n return getProductRefinerHierarchy(\n {\n SearchCondition: input.searchText,\n Context: {\n ChannelId: input.apiSettings.channelId,\n CatalogId: input.catalogId\n },\n Refinement: input.isUpdateRefinerPanel ? input.refiners : []\n },\n input.queryResultSettings,\n ctx);\n }\n if (input.searchText && (ctx.requestContext.query && ctx.requestContext.query.productId)) {\n const searchObject = JSON.parse(input.searchText);\n searchProductId = Number(searchObject.ProductId);\n if (Number.isNaN(searchProductId)) {\n throw new Error('Failed to cast search product id into a number.');\n } else if (!searchObject.Recommendation) {\n throw new Error('Failed to retrieve the Recommendation.');\n } else {\n return getProductRefinerHierarchy(\n {\n Context: {\n ChannelId: input.apiSettings.channelId,\n CatalogId: input.catalogId\n },\n Refinement: input.isUpdateRefinerPanel ? input.refiners : [],\n RecommendationListId: searchObject.Recommendation,\n Ids: [searchProductId || DefaultValues.defaultProductIdValue]\n },\n input.queryResultSettings,\n ctx);\n }\n } else {\n throw new Error(\n '[GetFullProductsForCollection]Search Page Detected, but no q= or productId= query parameter found'\n );\n }\n\n }\n}\n\nexport const actionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-refiners-for-collection',\n action: >action,\n input: createInput\n});\n\nexport default actionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { IQueryResultSettings, ProductRefiner, ProductSearchCriteria } from '@msdyn365-commerce/retail-proxy';\nimport { getProductSearchRefinersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\n/**\n * Uses Bulk refiner API to get refiners and child refiner values.\n * @param searchCriteria Product search criteria.\n * @param maxItems Max items.\n * @param queryResultSettings\n * @param ctx Action context.\n */\nexport async function getProductRefinerHierarchy(searchCriteria: ProductSearchCriteria, queryResultSettings: IQueryResultSettings, ctx: IActionContext): Promise {\n return getProductSearchRefinersAsync({ callerContext: ctx, queryResultSettings }, searchCriteria).then((productRefiners: ProductRefiner[]) => {\n if (!productRefiners) {\n ctx.trace('[getRefinersByCriteriaAction] returned no refiners');\n return [];\n }\n\n const result = (productRefiners || []).map((productRefiner: ProductRefiner) => productRefiner);\n\n if (result.length === 0) {\n ctx.trace('[getRefinersByCriteriaAction] returned no IProductRefinerHierarchy objects');\n return [];\n }\n\n return result;\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 {\n buildCacheKeyWithUrlTokens,\n getFullProductList,\n GetFullProductListInput,\n QuickOrderTemplate\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for getActiveOrderTemplateLines data action.\n */\nexport class ActiveProductListInput implements IActionInput {\n public requestContext: IRequestContext;\n\n public productListId: string | undefined;\n\n public constructor(requestContext: IRequestContext, productListId?: string) {\n this.requestContext = requestContext;\n this.productListId = productListId;\n }\n\n /**\n * GetCacheObjectType.\n * @returns - Returns string.\n */\n public getCacheKey = (): string => buildCacheKeyWithUrlTokens('ActiveProductList', this.requestContext);\n\n /**\n * GetCacheKey.\n * @returns - Returns string.\n */\n public getCacheObjectType = (): string => 'ActiveProductList';\n\n /**\n * DataCacheType.\n * @returns - CacheType string.\n */\n public dataCacheType = (): CacheType => 'instance';\n\n /**\n * Set Cache output.\n * @returns - Flag for cache output.\n */\n public shouldCacheOutput = (): boolean => false;\n}\n\n/**\n * Calls the Retail API and returns a ProductList object for user.\n * @param input - ProductList Input.\n * @param context - ActionContext.\n * @returns - OrderTemplate.\n */\nexport async function getActiveProductList(input: ActiveProductListInput, context: IActionContext): Promise {\n const fullProductListInput = new GetFullProductListInput(input.productListId);\n const productList = await getFullProductList(fullProductListInput, context);\n return productList;\n}\n\n/**\n * Calls the Retail API and returns a ProductList object for user.\n * @param input - ProductList Input.\n * @param context - ActionContext.\n * @returns - ProductList.\n */\nexport const getActiveProductListDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/quick-order-grid/get-product-list',\n action: getActiveProductList as IAction,\n\n /**\n * Method to call for input.\n * @param context - ActionContext.\n * @returns - Input for action..\n */\n input: (context: ICreateActionContext) => {\n return new ActiveProductListInput(context.requestContext);\n }\n});\n\nexport default getActiveProductListDataAction;\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, 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 { 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","module.exports = ReactDOM;","/*--------------------------------------------------------------\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 { 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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\n\nconst beforeRead = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterRead = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n try {\n const activeCart = await Promise.resolve(Array.isArray(cart) ? cart[0] : cart);\n actionContext.requestContext.telemetryData.activeCart = activeCart;\n } catch (e) {\n actionContext.telemetry.debug('ReadCart post-data action hook failed.', e);\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/Read',\n postReaderHook: afterRead,\n preReaderHook: beforeRead\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';\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 { 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 MsDyn365, {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport { AsyncResult, ChannelInventoryConfiguration, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { getInventoryConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { ArrayExtensions, generateProductImageUrl, InventoryLevels, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { ListPageStateInput } from '../list-page-state';\nimport {\n BaseCollectionInput,\n createBaseCollectionInput\n} from './base-collection-action';\n\n/**\n * GetFullProductsByCollection Action Input.\n */\nexport class GetFullProductsByCollectionInput extends BaseCollectionInput implements IActionInput {\n /**\n * The cache object type.\n * @returns The cache object type.\n */\n public getCacheObjectType = (): string => 'FullProductSearchResult';\n\n /**\n * The data cache type.\n * @returns The data cache type.\n */\n public dataCacheType = (): CacheType => {\n if (\n this.pageType !== 'Category' ||\n (this.refiners && this.refiners.length > 0) ||\n (this.queryResultSettings && this.queryResultSettings.Sorting && this.queryResultSettings.Sorting.Columns && this.queryResultSettings.Sorting.Columns.length > 0)\n ) {\n return 'request';\n }\n return 'application';\n\n };\n}\n\n/**\n * This setting defines inventory filtering options.\n */\nexport enum ProductListInventoryFilteringOptions {\n\n /**\n * Filter out all products out of stock.\n */\n HideOOS = 'hideOOS',\n\n /**\n * Sort products by availability, OOS goes last.\n */\n SortOOS = 'sortOOS',\n\n /**\n * No filtering selected.\n */\n Default = 'default'\n}\n\n/**\n * The full product search result with count interface.\n */\nexport interface IFullProductsSearchResultsWithCount {\n products: ProductSearchResult[];\n count: number;\n channelInventoryConfigurationId?: number;\n}\n\n/**\n * CreateInput function which creates and actionInput used to fetch products for a list page.\n * @param args - The API arguments.\n * @returns IActionInput - The action input.\n */\nconst createInput = (args: ICreateActionContext<{ itemsPerPage: number ;includedAttributes: boolean | undefined }>): IActionInput => {\n const input = createBaseCollectionInput(args, GetFullProductsByCollectionInput);\n\n // Set Top\n if (input.queryResultSettings.Paging && args.config) {\n input.queryResultSettings.Paging.Top = args.config.itemsPerPage || 1;\n }\n\n // Set Skip\n if (input.queryResultSettings.Paging && args.requestContext.query && args.requestContext.query.skip) {\n input.queryResultSettings.Paging.Skip = +args.requestContext.query.skip;\n }\n\n input.queryResultSettings.count = true;\n\n return input;\n};\n\n/**\n * Finds whether a product is out of stock based on the attribute.\n * @param product - The product.\n * @param channelInventoryConfiguration - The channel configuration.\n * @returns True if is OOS, false otherwise.\n */\nfunction isOutOfStock(product: ProductSearchResult, channelInventoryConfiguration: ChannelInventoryConfiguration): boolean {\n if (!ArrayExtensions.hasElements(product.AttributeValues)) {\n // If no attributes then assume is in stock\n return false;\n }\n for (const attribute of product.AttributeValues) {\n if (attribute.RecordId === channelInventoryConfiguration.InventoryProductAttributeRecordId &&\n attribute.TextValue === channelInventoryConfiguration.InventoryOutOfStockAttributeValueText) {\n // The matching recordId indicates that is the inventory attribute\n // if the text value are the same then is out of stock.\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Returns only in stock products.\n * @param products - The product.\n * @param channelInventoryConfiguration - The channel configuration.\n * @returns Filtered product search result.\n */\nfunction filterOutOfStockProducts(\n products: ProductSearchResult[],\n channelInventoryConfiguration: ChannelInventoryConfiguration): ProductSearchResult[] {\n if (!ArrayExtensions.hasElements(products)) {\n return [];\n }\n const filteredProducts: ProductSearchResult[] = [];\n\n for (const product of products) {\n if (!isOutOfStock(product, channelInventoryConfiguration)) {\n filteredProducts.push(product);\n }\n }\n return filteredProducts;\n}\n\n/**\n * Returns sorted products based on availability.\n * @param products - The product.\n * @param channelInventoryConfiguration - The channel configuration.\n * @returns Sorted product search result.\n */\nfunction sortsProductsBasedOnAvailability(\n products: ProductSearchResult[],\n channelInventoryConfiguration: ChannelInventoryConfiguration): ProductSearchResult[] {\n\n if (!ArrayExtensions.hasElements(products)) {\n return [];\n }\n const inStockProducts: ProductSearchResult[] = [];\n const outOfStockProducts: ProductSearchResult[] = [];\n\n for (const product of products) {\n if (isOutOfStock(product, channelInventoryConfiguration)) {\n outOfStockProducts.push(product);\n } else {\n inStockProducts.push(product);\n }\n }\n return inStockProducts.concat(outOfStockProducts);\n}\n\n/**\n * Returns list of products based on inventory information.\n * @param products - The products.\n * @param channelInventoryConfiguration - The channel configuration.\n * @param context - The context.\n * @returns List of product based on the inventory information.\n */\nexport function returnProductsBasedOnInventoryInformation(\n products: ProductSearchResult[],\n channelInventoryConfiguration: ChannelInventoryConfiguration,\n context: IActionContext): ProductSearchResult[] {\n if (!ArrayExtensions.hasElements(products) || ObjectExtensions.isNullOrUndefined(channelInventoryConfiguration)) {\n return [];\n }\n switch (context.requestContext.app.config.productListInventoryDisplay) {\n case ProductListInventoryFilteringOptions.HideOOS:\n return filterOutOfStockProducts(products, channelInventoryConfiguration);\n case ProductListInventoryFilteringOptions.SortOOS:\n return sortsProductsBasedOnAvailability(products, channelInventoryConfiguration);\n default:\n return products;\n }\n}\n\n/**\n * Returns list of products based on inventory information.\n * @param productSearchResults - The products.\n * @param context - The context.\n * @param metadataCount - The metadata count.\n * @returns List of product based on the inventory information.\n */\nexport async function returnProducts(\n productSearchResults: ProductSearchResult[],\n context: IActionContext,\n metadataCount: number | undefined): Promise {\n\n const defaultProductCount: number = 0;\n\n const productSearchResultsWithImages = productSearchResults.map(productSearchResult => {\n const newImageUrl = generateProductImageUrl(\n productSearchResult,\n context.requestContext.apiSettings\n );\n\n if (newImageUrl) {\n productSearchResult.PrimaryImageUrl = newImageUrl;\n }\n\n return (productSearchResult);\n });\n\n // If inventory level is threshold or inventory check is disabled then return the list of products without the inventory configuration\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n if (context.requestContext.app.config.inventoryLevel === InventoryLevels.threshold || context.requestContext.app.config.enableStockCheck === false) {\n return {\n products: productSearchResultsWithImages,\n count: metadataCount ?? defaultProductCount\n };\n }\n const channelInventoryConfiguration = await getInventoryConfigurationAsync({ callerContext: context });\n\n const mappedProducts = productSearchResultsWithImages.map(productSearchResult => {\n if (ArrayExtensions.hasElements(productSearchResult.AttributeValues)) {\n for (const element of productSearchResult.AttributeValues) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- need check.\n if (channelInventoryConfiguration &&\n element.RecordId !== undefined &&\n element.RecordId === channelInventoryConfiguration.InventoryProductAttributeRecordId &&\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n context.requestContext.app.config.inventoryRanges !== 'all' &&\n element.TextValue !== channelInventoryConfiguration.InventoryOutOfStockAttributeValueText) {\n // If same RecordId then it means that is the Inventory attribute\n // Based on the inventory range (and filtering options), the inventory label will be displayed\n // If Inventory range is 'All' then in stock and out of stock labels are shown, else only OOS\n // if the text value is different that the channelInventoryConfiguration.InventoryOutOfStockAttributeValueText then is in stock\n element.TextValue = '';\n }\n }\n }\n\n return (productSearchResult);\n });\n const productsBasedOnInventory = returnProductsBasedOnInventoryInformation(mappedProducts, channelInventoryConfiguration, context);\n return {\n products: productsBasedOnInventory,\n count: metadataCount ?? defaultProductCount,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check config.\n channelInventoryConfigurationId: channelInventoryConfiguration ? channelInventoryConfiguration.InventoryProductAttributeRecordId : undefined\n };\n}\n\n/**\n * Action function to fetch products for a list page.\n * @param input - The input.\n * @param context - The context.\n * @returns IFullProductsSearchResultsWithCount - The full product search result with count.\n */\nasync function action(\n input: GetFullProductsByCollectionInput,\n context: IActionContext\n): Promise {\n\n let promise: AsyncResult;\n let searchProductId;\n const searchCriteriaInput: ProductSearchCriteria = {};\n searchCriteriaInput.Context = { ChannelId: context.requestContext.apiSettings.channelId, CatalogId: input.catalogId };\n searchCriteriaInput.Refinement = input.refiners;\n searchCriteriaInput.IncludeAttributes = input.includeAttributes;\n searchCriteriaInput.SkipVariantExpansion = true;\n const defaultNumber: number = 0;\n\n if (input.pageType === 'Category' || (context.requestContext.query && context.requestContext.query.categoryId)) {\n if (input.category) {\n searchCriteriaInput.CategoryIds = [input.category || defaultNumber];\n promise = searchByCriteriaAsync(\n {\n callerContext: context,\n queryResultSettings: input.queryResultSettings\n },\n searchCriteriaInput\n );\n } else {\n throw new Error(\n '[GetFullProductsForCollection]Category Page Detected, but no global categoryId found'\n );\n }\n } else if (input.searchText && (context.requestContext.query && context.requestContext.query.q)) {\n searchCriteriaInput.SearchCondition = input.searchText;\n promise = searchByCriteriaAsync(\n {\n callerContext: context,\n queryResultSettings: input.queryResultSettings\n },\n searchCriteriaInput\n );\n } else if (input.searchText && (context.requestContext.query && context.requestContext.query.productId && context.requestContext.query.recommendation)) {\n const searchObject = JSON.parse(input.searchText);\n searchProductId = Number(searchObject.ProductId);\n if (Number.isNaN(searchProductId)) {\n throw new Error('Failed to cast search product id into a number.');\n } else if (!searchObject.Recommendation) {\n throw new Error('Failed to retrieve the Recommendation.');\n } else {\n searchCriteriaInput.RecommendationListId = searchObject.Recommendation;\n searchCriteriaInput.Ids = [searchProductId || defaultNumber];\n promise = searchByCriteriaAsync(\n {\n callerContext: context,\n queryResultSettings: input.queryResultSettings\n },\n searchCriteriaInput\n );\n }\n } else {\n throw new Error(\n '[GetFullProductsForCollection]Search Page Detected, but no q= or productId= query parameter found'\n );\n }\n\n const productSearchResults = await promise;\n\n // Update ListPageState For SSR\n if (!MsDyn365.isBrowser) {\n context.update(new ListPageStateInput(), { totalProductCount: promise.metadata.count ?? defaultNumber, activeFilters: input.refiners });\n }\n\n return returnProducts(productSearchResults, context, promise.metadata.count);\n}\n\nexport const actionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-full-products-by-collection',\n action: >action,\n input: createInput\n});\n\nexport default actionDataAction;\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) 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 = 'msdyn365-exp-test';\n \n let connectorProviderImpl = require('@msdyn365-commerce-modules/msdyn365-exp-test-connector/dist/lib/connectors/msdyn365-exp-test/msdyn365-exp-test.provider');\n let connectorListenerImpl = require('@msdyn365-commerce-modules/msdyn365-exp-test-connector/dist/lib/connectors/msdyn365-exp-test/msdyn365-exp-test.listener');\n let connectorDomainsList = 'https://msdyn365-exp-test.com ';\n if (!connectorProviderImpl.default) {\n throw new Error('Exp Connector provider msdyn365-exp-test 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 msdyn365-exp-test 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\nexport const validateConnectorRegistration = () => {\n \n verifyExperimentationReigstration('msdyn365-exp-test');\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","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getMfrCodeAsync } from './DataActionExtension.g';\r\nimport { IMfrCodeClass } from './DataServiceEntities.g';\r\n// @ts-ignore\r\nimport { getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions/dist/lib/utilities/utils';\r\n/**\r\n * GetMfrCode Input Action\r\n */\r\nexport class GetMfrCodeInput implements Msdyn365.IActionInput {\r\n public readonly productId: number;\r\n constructor(productId: number) {\r\n this.productId = productId;\r\n }\r\n\r\n // TODO: Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () => `${this.productId}`;\r\n public getCacheObjectType = () => 'HEI-MfrCode';\r\n public dataCacheType = (): Msdyn365.CacheType => 'application';\r\n}\r\n\r\n// TODO: Create a data model here or import one to capture the response of the action\r\nexport interface IGetMfrCodeData {\r\n text: string;\r\n}\r\n\r\n/**\r\n * TODO: Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (args: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\r\n const productId = getSelectedProductIdFromActionInput(args);\r\n return new GetMfrCodeInput(+productId);\r\n};\r\n\r\n/**\r\n * TODO: Use this function to call your action and process the results as needed\r\n */\r\nasync function action(input: GetMfrCodeInput, ctx: Msdyn365.IActionContext): Promise {\r\n const response = await getMfrCodeAsync({ callerContext: ctx }, input.productId);\r\n return response;\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n // TODO: Give your data action a unique id\r\n id: 'GetMfrCode',\r\n input: createInput\r\n // TODO: Uncomment the below line if this is a meant to be a batched data action\r\n // isBatched: true\r\n});\r\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 { 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 { Review } from '@msdyn365-commerce/commerce-entities';\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext, sendRequest } from '@msdyn365-commerce/core';\nimport { getRnrAuthEndpointId, getRnrPartnerId, getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { GetUserReviewInput } from './inputs/get-user-review-input';\n\n/**\n * This method builds the input for the getUserReviewApi call.\n * @param input\n */\nconst createInput = (input: ICreateActionContext): IActionInput => {\n const productId = getSelectedProductIdFromActionInput(input);\n const userInfo = input.requestContext.user;\n if (productId && userInfo && userInfo.isAuthenticated) {\n // Task #211227597 Remove these hardcoded values.\n return new GetUserReviewInput(productId, getRnrPartnerId(input), userInfo.token, getRnrAuthEndpointId(input));\n }\n throw new Error('[GetUserReview] Not all necessary parameters found while creating Input for GetUserReviewAPI');\n};\n\n/**\n * This method gets the user's review from the RnR service endpoint.\n * @param input\n * @param ctx\n */\nasync function getUserReview(input: GetUserReviewInput, ctx: IActionContext): Promise {\n if (!inputIsValid(input)) {\n const errorMessage = `[GettUserReview] Failed to get user's review due to bad input ${input}`;\n ctx.trace(errorMessage);\n throw new Error(errorMessage);\n }\n\n const requestUrl = `${input.serviceEndpoint}/v2.0/reviews/product/${input.productId}/user?tenantId=${input.tenantId}`;\n\n return sendRequest(requestUrl, 'get', null, { headers: { Authorization: `id_token ${input.authorization}` } }).then((response) => {\n return response.data;\n }).catch((error) => {\n ctx.trace('[GettUserReview] Failed to get user\\'s review for product');\n ctx.telemetry.exception(error);\n ctx.telemetry.debug('[GettUserReview] Failed to get user\\'s review for product');\n ctx.trace(error);\n throw (error);\n });\n}\n\nfunction inputIsValid(input: GetUserReviewInput): boolean {\n return input.productId.length > 0 && input.authorization.length > 0 && input.tenantId.length > 0;\n}\n\nexport const getUserReviewDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/get-user-review',\n action: >getUserReview,\n input: createInput\n});\n\nexport default getUserReviewDataAction;\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 { 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 {\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 { 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 readonly locale: string;\n\n private constructedCacheKey: string;\n\n public 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 this.locale = context.locale;\n }\n\n public getCacheKey = () => buildCacheKey(this.constructedCacheKey, this.apiSettings, this.locale);\n\n public getCacheObjectType = () => 'CategoryPath';\n\n public dataCacheType = (): CacheType => 'request';\n\n /**\n * Retrieves locale to use for the current API call.\n * @returns A string which represents locale.\n */\n public getLocale = (): string => this.locale;\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 { 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 { 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","\r\n // tslint:disable\r\n import * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\n import * as Entities from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g'; \r\n \r\n \r\n /**\r\n * MfrCodeClass entity interface.\r\n */\r\n export interface IMfrCodeClass {\r\n Product: number;\r\n ExternalItemId?: string;\r\n ItemId?: string;\r\n ExtensionProperties?: Entities.CommerceProperty[];\r\n }\r\n \r\n /**\r\n * MfrCodeClass entity class.\r\n */\r\n export class MfrCodeClassExtensionClass implements IMfrCodeClass {\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Product: number;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ExternalItemId: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ItemId: string;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ExtensionProperties: Entities.CommerceProperty[];\r\n \r\n // Navigation properties names\r\n \r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Product = (odataObject.Product) ? parseInt(odataObject.Product, 10) : 0;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExternalItemId = odataObject.ExternalItemId;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ItemId = odataObject.ItemId;\r\n \r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties = undefined;\r\n if (odataObject.ExtensionProperties) {\r\n this.ExtensionProperties = [];\r\n for (var i = 0; i < odataObject.ExtensionProperties.length; i++) {\r\n if (odataObject.ExtensionProperties[i]) {\r\n if (odataObject.ExtensionProperties[i]['@odata.type']) {\r\n var className: string = odataObject.ExtensionProperties[i]['@odata.type'];\r\n className = className.substr(className.lastIndexOf('.') + 1).concat(\"Class\");\r\n if (EntityClasses[className]) {\r\n this.ExtensionProperties[i] = new EntityClasses[className](odataObject.ExtensionProperties[i])\r\n }\r\n } else {\r\n this.ExtensionProperties[i] = new EntityClasses.CommercePropertyClass(odataObject.ExtensionProperties[i]);\r\n }\r\n \r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties[i] = undefined;\r\n }\r\n }\r\n }\r\n \r\n }\r\n }\r\n","\r\n /*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n * THIS FILE IS AN AUTOGENERATED TYPESCRIPT PROXY EXTENSION.\r\n * TO USE THIS FILE, IT MUST BE ADDED TO A D365COMMERCE APPLICATION\r\n */\r\n // tslint:disable\r\n import { AsyncResult, callActionOrExecute, DataServiceQuery, IContext, IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\r\n // @ts-ignore\r\n import * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\n import * as DataServiceEntities from './DataServiceEntities.g';\r\n\r\n \r\n \r\n // @ts-ignore\r\n function mfrCodeQuery(product?: number): DataServiceQuery {\r\n const key = (product) ? { Product: product } :null;\r\n return new DataServiceQuery(\"MfrCode\", \"MfrCodeClass\", DataServiceEntities.MfrCodeClassExtensionClass, key);\r\n }\r\n\r\n \r\n export function createGetMfrCodeInput(productId: number): IDataServiceRequest {\r\n const query = mfrCodeQuery();\r\n return query.createDataServiceRequestForOperation('GetMfrCode', false, DataServiceEntities.MfrCodeClassExtensionClass, 'false', {bypassCache: 'none', returnEntity: 'DataServiceEntities.IMfrCodeClass'}, {productId: productId });\r\n }\r\n\r\n \r\n export function getMfrCodeAsync(context: IContext, productId: number): AsyncResult {\r\n const request = createGetMfrCodeInput(productId);\r\n return callActionOrExecute(request, context.callerContext);\r\n }\r\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 { 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, 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) 2018 Microsoft Corporation\n* Modules Registration\n* THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\n*/\n\nexport const viewDictionary = {};\n\nviewDictionary['__local__|__local__|modules|account-block|account-block'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-account-block' */\n 'partner/modules/account-block/account-block.view.tsx'),\n cn: '__local__-__local__-account-block'\n };\nviewDictionary['__local__|__local__|modules|bazzarvoice-widget|bazzarvoice-widget'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-bazzarvoice-widget' */\n 'partner/modules/bazzarvoice-widget/bazzarvoice-widget.view.tsx'),\n cn: '__local__-__local__-bazzarvoice-widget'\n };\nviewDictionary['__local__|__local__|modules|cart-icon|cart-icon'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-cart-icon' */\n 'partner/modules/cart-icon/cart-icon.view.tsx'),\n cn: '__local__-__local__-cart-icon'\n };\nviewDictionary['__local__|__local__|modules|cart|cart'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-cart' */\n 'partner/modules/cart/cart.view.tsx'),\n cn: '__local__-__local__-cart'\n };\nviewDictionary['__local__|__local__|modules|conditional-tab-item|conditional-tab-item'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-conditional-tab-item' */\n 'partner/modules/conditional-tab-item/conditional-tab-item.view.tsx'),\n cn: '__local__-__local__-conditional-tab-item'\n };\nviewDictionary['__local__|__local__|modules|custom-content-block|custom-content-block'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-custom-content-block' */\n 'partner/modules/custom-content-block/custom-content-block.view.tsx'),\n cn: '__local__-__local__-custom-content-block'\n };\nviewDictionary['__local__|__local__|modules|custom-recently-viewed-products|custom-recently-viewed-products'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-custom-recently-viewed-products' */\n 'partner/modules/custom-recently-viewed-products/custom-recently-viewed-products.view.tsx'),\n cn: '__local__-__local__-custom-recently-viewed-products'\n };\nviewDictionary['__local__|__local__|modules|d365-marketing-from|d365-marketing-from'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-d365-marketing-from' */\n 'partner/modules/d365-marketing-from/d365-marketing-from.view.tsx'),\n cn: '__local__-__local__-d365-marketing-from'\n };\nviewDictionary['__local__|__local__|modules|dynamic-image-carousel|dynamic-image-carousel'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-dynamic-image-carousel' */\n 'partner/modules/dynamic-image-carousel/dynamic-image-carousel.view.tsx'),\n cn: '__local__-__local__-dynamic-image-carousel'\n };\nviewDictionary['__local__|__local__|modules|flipp|flipp'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-flipp' */\n 'partner/modules/flipp/flipp.view.tsx'),\n cn: '__local__-__local__-flipp'\n };\nviewDictionary['__local__|__local__|modules|hei-buybox|hei-buybox'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-buybox' */\n 'partner/modules/hei-buybox/hei-buybox.view.tsx'),\n cn: '__local__-__local__-hei-buybox'\n };\nviewDictionary['__local__|__local__|modules|hei-donation|hei-donation'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-donation' */\n 'partner/modules/hei-donation/hei-donation.view.tsx'),\n cn: '__local__-__local__-hei-donation'\n };\nviewDictionary['__local__|__local__|modules|hei-order-confirmation|hei-order-confirmation'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-order-confirmation' */\n 'partner/modules/hei-order-confirmation/hei-order-confirmation.view.tsx'),\n cn: '__local__-__local__-hei-order-confirmation'\n };\nviewDictionary['__local__|__local__|modules|hei-preferred-store-button|hei-preferred-store-button'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-preferred-store-button' */\n 'partner/modules/hei-preferred-store-button/hei-preferred-store-button.view.tsx'),\n cn: '__local__-__local__-hei-preferred-store-button'\n };\nviewDictionary['__local__|__local__|modules|hei-product-included|hei-product-included'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-product-included' */\n 'partner/modules/hei-product-included/hei-product-included.view.tsx'),\n cn: '__local__-__local__-hei-product-included'\n };\nviewDictionary['__local__|__local__|modules|hei-product-specification|hei-product-specification'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-product-specification' */\n 'partner/modules/hei-product-specification/hei-product-specification.view.tsx'),\n cn: '__local__-__local__-hei-product-specification'\n };\nviewDictionary['__local__|__local__|modules|hei-product-whatisinbox|hei-product-whatisinbox'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-product-whatisinbox' */\n 'partner/modules/hei-product-whatisinbox/hei-product-whatisinbox.view.tsx'),\n cn: '__local__-__local__-hei-product-whatisinbox'\n };\nviewDictionary['__local__|__local__|modules|hei-promotion|hei-promotion'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-promotion' */\n 'partner/modules/hei-promotion/hei-promotion.view.tsx'),\n cn: '__local__-__local__-hei-promotion'\n };\nviewDictionary['__local__|__local__|modules|hei-sailthru-signup-form|hei-sailthru-signup-form'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-sailthru-signup-form' */\n 'partner/modules/hei-sailthru-signup-form/hei-sailthru-signup-form.view.tsx'),\n cn: '__local__-__local__-hei-sailthru-signup-form'\n };\nviewDictionary['__local__|__local__|modules|hei-store-address|hei-store-address'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-store-address' */\n 'partner/modules/hei-store-address/hei-store-address.view.tsx'),\n cn: '__local__-__local__-hei-store-address'\n };\nviewDictionary['__local__|__local__|modules|hei-store-contact|hei-store-contact'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-store-contact' */\n 'partner/modules/hei-store-contact/hei-store-contact.view.tsx'),\n cn: '__local__-__local__-hei-store-contact'\n };\nviewDictionary['__local__|__local__|modules|hei-store-hours|hei-store-hours'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-store-hours' */\n 'partner/modules/hei-store-hours/hei-store-hours.view.tsx'),\n cn: '__local__-__local__-hei-store-hours'\n };\nviewDictionary['__local__|__local__|modules|hei-store-picture|hei-store-picture'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-store-picture' */\n 'partner/modules/hei-store-picture/hei-store-picture.view.tsx'),\n cn: '__local__-__local__-hei-store-picture'\n };\nviewDictionary['__local__|__local__|modules|language-toggle|language-toggle'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-language-toggle' */\n 'partner/modules/language-toggle/language-toggle.view.tsx'),\n cn: '__local__-__local__-language-toggle'\n };\nviewDictionary['__local__|__local__|modules|navigation-menu|navigation-menu'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-navigation-menu' */\n 'partner/modules/navigation-menu/navigation-menu.view.tsx'),\n cn: '__local__-__local__-navigation-menu'\n };\nviewDictionary['__local__|__local__|modules|product-info-content|product-info-content'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-product-info-content' */\n 'partner/modules/product-info-content/product-info-content.view.tsx'),\n cn: '__local__-__local__-product-info-content'\n };\nviewDictionary['__local__|__local__|modules|product-media-gallery|product-media-gallery'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-product-media-gallery' */\n 'partner/modules/product-media-gallery/product-media-gallery.view.tsx'),\n cn: '__local__-__local__-product-media-gallery'\n };\nviewDictionary['__local__|__local__|modules|quickview|quickview'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-quickview' */\n 'partner/modules/quickview/quickview.view.tsx'),\n cn: '__local__-__local__-quickview'\n };\nviewDictionary['__local__|__local__|modules|search|search'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-search' */\n 'partner/modules/search/search.view.tsx'),\n cn: '__local__-__local__-search'\n };\nviewDictionary['__local__|__local__|modules|store-selector-button|store-selector-button'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-store-selector-button' */\n 'partner/modules/store-selector-button/store-selector-button.view.tsx'),\n cn: '__local__-__local__-store-selector-button'\n };\nviewDictionary['__local__|__local__|modules|store-selector|store-selector'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-store-selector' */\n 'partner/modules/store-selector/store-selector.view.tsx'),\n cn: '__local__-__local__-store-selector'\n };\nviewDictionary['__local__|__local__|modules|subcategory-navigation|subcategory-navigation'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-subcategory-navigation' */\n 'partner/modules/subcategory-navigation/subcategory-navigation.view.tsx'),\n cn: '__local__-__local__-subcategory-navigation'\n };\nviewDictionary['__local__|__local__|themes|henrys|views|cart'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-cart' */\n 'partner/themes/henrys/views/cart.view.tsx'),\n cn: '__local__-__local__-cart'\n };\nviewDictionary['__local__|__local__|themes|henrys|views|header'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-header' */\n 'partner/themes/henrys/views/header.view.tsx'),\n cn: '__local__-__local__-header'\n };\nviewDictionary['__local__|__local__|themes|henrys|views|hei-buybox'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-hei-buybox' */\n 'partner/themes/henrys/views/hei-buybox.view.tsx'),\n cn: '__local__-__local__-hei-buybox'\n };\nviewDictionary['__local__|__local__|themes|henrys|views|navigation-menu'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-navigation-menu' */\n 'partner/themes/henrys/views/navigation-menu.view.tsx'),\n cn: '__local__-__local__-navigation-menu'\n };\nviewDictionary['__local__|__local__|themes|henrys|views|product-specification'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-product-specification' */\n 'partner/themes/henrys/views/product-specification.view.tsx'),\n cn: '__local__-__local__-product-specification'\n };\nviewDictionary['__local__|__local__|themes|henrys|views|quickview'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-quickview' */\n 'partner/themes/henrys/views/quickview.view.tsx'),\n cn: '__local__-__local__-quickview'\n };\nviewDictionary['__local__|__local__|themes|henrys|views|search-result-container'] = {\n c: async () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n /* webpackChunkName: '__local__-__local__-search-result-container' */\n 'partner/themes/henrys/views/search-result-container.view.tsx'),\n cn: '__local__-__local__-search-result-container'\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|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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { IMSDyn365Window } from '@msdyn365-commerce/core-internal';\nimport { Cart, CartLine, IDataServiceRequest, IUpdateCartLinesParam } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCartLinesAsync } from './telemetry.action.helper';\n\ndeclare let window: IMSDyn365Window;\n\n/**\n * Saves info on cart lines updated before calling data action\n * @param inputs Data action inputs\n * @param actionContext Action context\n */\nconst beforeUpdateCart = async (inputs: IActionInput | IActionInput[], actionContext: IActionContext) => {\n try {\n const actionInput = Array.isArray(inputs) ? inputs[0] : inputs;\n\n // If cart lines were updated\n if (actionInput.queryParams && typeof actionInput.queryParams === 'function') {\n const updateCartLinesParams = actionInput.queryParams();\n if (updateCartLinesParams && updateCartLinesParams.cartLines) {\n // Save info on updated cart lines for post data action hook to pick up\n actionContext.requestContext.telemetryData.updatedCartLines = updateCartLinesParams.cartLines;\n return;\n }\n }\n actionContext.telemetry.debug('UpdateCart pre-data action hook failed - No updated cart lines found');\n } catch (e) {\n actionContext.telemetry.debug('UpdateCart pre-data action hook failed.', e);\n }\n};\n\n/**\n * Fires an UpdateInCart event after UpdateCartLines data action completed\n * @param _inputs Data action inputs\n * @param cart New cart object after cart lines have been added\n * @param actionContext Action context\n */\nconst afterUpdateCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n const updatedCartLines = actionContext.requestContext.telemetryData.updatedCartLines;\n let updatedProducts: IProductInfo[] = [];\n\n // Collect info on products updated in cart\n if (updatedCartLines) {\n try {\n updatedProducts = await getProductInfoFromCartLinesAsync(updatedCartLines, actionContext);\n } catch (error) {\n actionContext.telemetry.error('UpdateCartLines post-data action hook failed to process cart lines.', error);\n }\n }\n\n // Fire UpdateInCart event\n window._msdyn365.telemetry.logEvent(TelemetryEvent.UpdateInCart, {\n cartId: cartObject.Id,\n cartVersion: cartObject.Version ? cartObject.Version.toString() : '',\n products: updatedProducts,\n orderId: cartObject.OrderNumber ? cartObject.OrderNumber.toString() : ''\n });\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/UpdateCartLines',\n postReaderHook: afterUpdateCart,\n preReaderHook: beforeUpdateCart\n});\n","import { createObservableDataAction, ICreateActionContext, IAction } from '@msdyn365-commerce/core';\r\nimport {\r\n IDimensionForSelectedVariant,\r\n getDimensionsForSelectedVariantAction,\r\n getSelectedProductIdFromActionInput,\r\n GetDimensionsForSelectedVariantInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nclass GetAllDimensionsForProductInput extends GetDimensionsForSelectedVariantInput {\r\n constructor(productId: number, channelId: number) {\r\n super(productId, channelId, []);\r\n }\r\n\r\n public getCacheObjectType = () => 'HEI-AllDimensionsForProduct';\r\n}\r\n\r\nconst createAllDimensionsForProductInput = (inputData: ICreateActionContext) => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n\r\n process.env.NODE_ENV === 'development' &&\r\n console.log('hei-get-all-dimensions-for-product', 'createAllDimensionsForProductInput', productId, inputData);\r\n\r\n if (productId) {\r\n return new GetAllDimensionsForProductInput(+productId, +inputData.requestContext.apiSettings.channelId);\r\n }\r\n\r\n throw new Error('Unable to create AllDimensionsForProductInput, no productId found on module config or query');\r\n};\r\n\r\nexport const getAllDimensionsForProductActionDataAction = createObservableDataAction({\r\n id: 'hei-get-all-dimensions-for-product',\r\n action: >getDimensionsForSelectedVariantAction,\r\n input: createAllDimensionsForProductInput\r\n});\r\n\r\nexport default getAllDimensionsForProductActionDataAction;\r\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 {\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 {\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 {\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICommerceApiSettings\n} from '@msdyn365-commerce/core';\nimport {\n getStateProvincesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { StateProvinceInfo } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for get state provinces data action.\n */\nexport class GetStateProvincesInput implements IActionInput {\n public countryRegionId: string;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(countryRegionId: string, apiSettings: ICommerceApiSettings) {\n this.countryRegionId = countryRegionId;\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`StateProvinceInfo-${this.countryRegionId}`, this.apiSettings);\n\n public getCacheObjectType = () => 'StateProvinceInfo';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nexport async function getStateProvinceAction(input: GetStateProvincesInput, ctx: IActionContext): Promise {\n return getStateProvincesAsync({ callerContext: ctx, queryResultSettings: {} }, input.countryRegionId);\n}\n\nexport const getStateProvinceActionDataAction = createObservableDataAction({\n action: >getStateProvinceAction\n});\n\nexport default getStateProvinceActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nexport * from './event';\nexport * from './event-subscriber';\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 {\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny,\n ICommerceApiSettings, ICreateActionContext, IGeneric\n} from '@msdyn365-commerce/core';\nimport {\n getAddressPurposesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { AddressPurpose } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for get Address Purposes data action.\n */\nexport class GetAddressPurposesInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('AddressPurpose', this.apiSettings);\n\n public getCacheObjectType = () => 'AddressPurpose';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nconst createInput = (inputData: ICreateActionContext>): GetAddressPurposesInput => {\n return new GetAddressPurposesInput(inputData.requestContext.apiSettings);\n};\n\nexport async function getAddressPurposesAction(input: GetAddressPurposesInput, ctx: IActionContext): Promise {\n return getAddressPurposesAsync({ callerContext: ctx, queryResultSettings: {} });\n}\n\nexport const getAddressPurposesActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/address/get-address-purposes',\n action: >getAddressPurposesAction,\n input: createInput\n});\n\nexport default getAddressPurposesActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. 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 {\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny,\n ICommerceApiSettings, ICreateActionContext, IGeneric\n} from '@msdyn365-commerce/core';\nimport {\n CountryRegionInfo, StateProvinceInfo\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { getCountryRegionsAction, GetCountryRegionsInput } from './get-country-regions';\nimport { getStateProvinceAction, GetStateProvincesInput } from './get-state-provinces';\n\n/**\n * Input class for get country regions data action.\n */\nexport class GetCountryStateInput implements IActionInput {\n public locale: string;\n\n public apiSettings: ICommerceApiSettings;\n\n constructor(locale: string, apiSettings: ICommerceApiSettings) {\n this.locale = locale;\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`CountryStateInfo-${this.locale}`, this.apiSettings);\n\n public getCacheObjectType = () => 'StateProvinceInfo';\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>): GetCountryStateInput => {\n const { locale, apiSettings } = inputData.requestContext;\n if (!(inputData.requestContext && locale)) {\n throw new Error('Unable to create country regions input. Locale is not provided.');\n }\n return new GetCountryStateInput(locale, apiSettings);\n};\n\nexport async function getCountryStateAction(input: GetCountryStateInput, ctx: IActionContext): Promise {\n const countryInput = new GetCountryRegionsInput(input.locale, input.apiSettings);\n const countryRegionsInfo = await getCountryRegionsAction(countryInput, ctx);\n\n const channelConfiguration = ctx.requestContext.channel;\n\n const marketISOCode = channelConfiguration && channelConfiguration.ChannelCountryRegionISOCode || 'US';\n const currentCountryRegion = countryRegionsInfo.find(countryRegion => (countryRegion.ISOCode || '') === marketISOCode);\n const countryRegionId = (currentCountryRegion && currentCountryRegion.CountryRegionId) || 'USA';\n\n const stateInput = new GetStateProvincesInput(countryRegionId, input.apiSettings);\n return getStateProvinceAction(stateInput, ctx);\n}\n\nexport const getCountryStateActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/address/get-country-state',\n action: >getCountryStateAction,\n input: createInput\n});\n\nexport default getCountryStateActionDataAction;\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","import {\r\n IActionContext,\r\n CacheType,\r\n IActionInput,\r\n createObservableDataAction,\r\n IAction,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\r\nimport { getOrgUnitLocationsByAreaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\r\n\r\nexport class GetAllStoresInput implements IActionInput {\r\n constructor() {}\r\n\r\n public getCacheKey = () => 'stores';\r\n public getCacheObjectType = () => 'HEI-AllStores';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\nasync function action(input: GetAllStoresInput, ctx: IActionContext): Promise {\r\n const stores = await getOrgUnitLocationsByAreaAsync({ callerContext: ctx }, {});\r\n return stores;\r\n}\r\n\r\nexport default createObservableDataAction({\r\n action: >action,\r\n input: (context: ICreateActionContext) => {\r\n return new GetAllStoresInput();\r\n }\r\n});\r\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 { 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 /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => `${this.channelId}|top-${this.maxItems || 250}|${this.catalogId ?? 0}`;\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 { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { SearchState } from './search-state';\n\nexport function createSearchStateInput(result: SearchState): GenericInput {\n return new GenericInput('searchState', result, 'SearchState');\n}\n\nconst createsearchStateInputInternal = (inputData: ICreateActionContext>): IActionInput => {\n return createSearchStateInput({ searchText: '' });\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createsearchStateInputInternal\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, createObservableDataAction, IAction, IActionContext, IActionInput, IAny,\n ICommerceApiSettings, ICreateActionContext, IGeneric\n} from '@msdyn365-commerce/core';\nimport {\n getCountryRegionsByLanguageIdAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { CountryRegionInfo } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for get country regions data action.\n */\nexport class GetCountryRegionsInput implements IActionInput {\n public locale: string;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(locale: string, apiSettings: ICommerceApiSettings) {\n this.locale = locale;\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`CountryRegionInfo-${this.locale}`, this.apiSettings);\n\n public getCacheObjectType = () => 'CountryRegionInfo';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData\n */\nconst createInput = (inputData: ICreateActionContext>): GetCountryRegionsInput => {\n if (!(inputData.requestContext && inputData.requestContext.locale)) {\n throw new Error('Unable to create country regions input. Locale is not provided.');\n }\n\n return new GetCountryRegionsInput(inputData.requestContext.locale, inputData.requestContext.apiSettings);\n};\n\nexport async function getCountryRegionsAction(input: GetCountryRegionsInput, ctx: IActionContext): Promise {\n return getCountryRegionsByLanguageIdAsync({ callerContext: ctx, queryResultSettings: {} }, input.locale);\n}\n\nexport const getCountryRegionsActionDataAction = createObservableDataAction({\n action: >getCountryRegionsAction,\n input: createInput\n});\n\nexport default getCountryRegionsActionDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. 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 ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getEstimatedAvailabilityAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n ArrayExtensions,\n buildCacheKey,\n createInventoryAvailabilitySearchCriteria,\n IProductInventoryInformation,\n mapAggregatedProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { ActiveWishlistInput, getActiveWishlistItems } from './get-items-in-wishlists';\n\n/**\n * Input class for availabilities for items in wishlist.\n */\nexport class ProductAvailabilitiesForWishlistItems implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('ActiveWishlistItemsAvailability', this.apiSettings);\n\n public getCacheObjectType = () => 'ActiveWishlistItemsAvailability';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductAvailabilitiesForWishlistItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * Calls the Retail API to get wishlist which will be cached the then finds the quantities for each item.\n * @param input\n * @param ctx\n */\nexport async function getAvailabilitiesForWishlistItems(\n input: ProductAvailabilitiesForWishlistItems,\n ctx: IActionContext\n): Promise {\n // If no input is provided fail out\n if (!input) {\n throw new Error('[getAvailabilitiesForWishlistItems]No valid Input was provided, failing');\n }\n\n const products = await getActiveWishlistItems(new ActiveWishlistInput(), ctx);\n\n if (!products) {\n ctx.trace('[getAvailabilitiesForWishlistItems] Not able to get products in wishlist');\n return [];\n }\n\n let validProducts: number[] = [];\n\n for (const product of products) {\n if (product.ProductDetails && product.ProductDetails.RecordId && product.ProductDetails.ItemTypeValue !== ReleasedProductType.Service) {\n validProducts.push(product.ProductDetails.RecordId);\n }\n }\n\n if (validProducts.length === 0) {\n ctx.trace('[getAvailabilitiesForWishlistItems] No products in wishlist');\n return [];\n }\n\n validProducts = ArrayExtensions.unique(validProducts);\n const searchCriteria = createInventoryAvailabilitySearchCriteria(ctx, validProducts, true);\n const productAvailabilities = await getEstimatedAvailabilityAsync(\n { callerContext: ctx },\n searchCriteria\n );\n\n if (productAvailabilities && productAvailabilities) {\n return mapAggregatedProductInventoryInformation(ctx, productAvailabilities);\n }\n\n ctx.trace('[getAvailabilitiesForWishlistItems] unable to get availabilities for product');\n return [];\n}\n\nexport const getAvailabilitiesForWishlistItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/wishlist/wishlist-items/get-product-availabilities-wishlist-items',\n action: >getAvailabilitiesForWishlistItems,\n input: createInput\n});\n\nexport default getAvailabilitiesForWishlistItemsDataAction;\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 { 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, 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 { 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 { 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 { 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 { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductRefinerValue, ProductSearchResult, SimpleProduct, SortingInfo } from '@msdyn365-commerce/retail-proxy';\nimport { observable } from 'mobx';\n\nimport { listPageType } from './actions';\n\n/**\n * ListPageState class.\n */\nexport class ListPageState {\n @observable public activeFilters: ProductRefinerValue[] | null = null;\n\n @observable public activeProducts: ProductSearchResult[] = [];\n\n @observable public sortingCritera: SortingInfo | null = null;\n\n @observable public currentPageNumber: number | null = null;\n\n @observable public refiners: IProductRefinerHierarchy[] | null = null;\n\n @observable public totalProductCount: number | undefined;\n\n @observable public pageSize: number = 10;\n\n @observable public pageType: listPageType = 'Unknown';\n\n @observable public featureProduct: SimpleProduct | null = null;\n\n @observable public productPrices: ProductPrice[] | undefined = [];\n}\n\n/**\n * ListPageStateInput - action input.\n */\nexport class ListPageStateInput implements IActionInput {\n public getCacheKey = () => 'ListPageState';\n\n public getCacheObjectType = () => 'ListPageState';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nexport async function listPageStateAction(\n input: ListPageStateInput,\n ctx: IActionContext\n): Promise {\n return new ListPageState();\n}\n\n/**\n * Create new input for create action.\n * @param inputData\n */\nexport const createListPageInput = (\n inputData: ICreateActionContext>\n): IActionInput => {\n return new ListPageStateInput();\n};\n\n/**\n * ListPageState - create action.\n */\nexport default createObservableDataAction({\n action: >listPageStateAction,\n input: createListPageInput\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 { 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 { 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 { 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 {\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\n ICommerceApiSettings, ICreateActionContext, isEmptyOrNullObject\n} from '@msdyn365-commerce/core';\nimport { getCheckoutState, ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { CardPaymentAcceptPoint, CartsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\nimport { get } from 'lodash';\n\n/**\n * Get card payment accept point input.\n */\nexport interface IGetCardPaymentAcceptPointInput {\n shouldShowBillingAddress?: boolean;\n paymentTenderType?: string;\n apiSettings: ICommerceApiSettings;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n amountDue?: number;\n}\n\n/**\n * GetCardPaymentAcceptPointInput - Input for create GetCardPaymentAcceptPoint.\n */\nexport class GetCardPaymentAcceptPointInput implements IActionInput {\n public shouldShowBillingAddress?: boolean;\n\n public paymentTenderType?: string;\n\n public shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n\n public amountDue?: number;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility -- Existing code.\n constructor(input: IGetCardPaymentAcceptPointInput) {\n this.shouldShowBillingAddress = input.shouldShowBillingAddress;\n this.paymentTenderType = input.paymentTenderType;\n this.apiSettings = input.apiSettings;\n this.shouldEnableSinglePaymentAuthorizationCheckout = input.shouldEnableSinglePaymentAuthorizationCheckout;\n this.amountDue = input.amountDue;\n }\n\n /**\n * Get the cache key.\n * @returns Cache key.\n */\n // eslint-disable-next-line sonarjs/no-nested-template-literals -- Existing code.\n public getCacheKey = (): string => buildCacheKey(`CardPaymentAcceptPoint${this.paymentTenderType ? `-${this.paymentTenderType}` : ''}`, this.apiSettings);\n\n /**\n * Get cache object type.\n * @returns Card payment accept point.\n */\n public getCacheObjectType = (): string => 'CardPaymentAcceptPoint';\n\n /**\n * Get data cache type.\n * @returns The cache type.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Create checkout express input.\n * @param inputData - Get card payment accept point.\n * @returns CardPaymentAcceptInput.\n */\nexport const createCheckoutPaymentInstrumentInput = (inputData: ICreateActionContext): GetCardPaymentAcceptPointInput => {\n const { shouldShowBillingAddress, paymentTenderType, shouldEnableSinglePaymentAuthorizationCheckout, amountDue } = inputData.config ?? {};\n const getCardPaymentAcceptPointInput = {\n shouldShowBillingAddress,\n paymentTenderType,\n apiSettings: inputData.requestContext.apiSettings,\n shouldEnableSinglePaymentAuthorizationCheckout,\n amountDue\n };\n\n return new GetCardPaymentAcceptPointInput(getCardPaymentAcceptPointInput);\n};\n\n/**\n * Calls the Retail API and returns a cart object based on the passed GetCartInput.\n * @param input - The get card payment accept point.\n * @param ctx - The action context.\n * @returns CardPaymentAcceptPoint.\n */\nexport async function getCardPaymentAcceptPointAction(\n input: GetCardPaymentAcceptPointInput,\n // eslint-disable-next-line unicorn/prevent-abbreviations, @typescript-eslint/naming-convention -- Public name.\n ctx: IActionContext\n): Promise {\n // If no cart ID is provided in input, we need to create a cart object\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Double check.\n if (!input) {\n ctx.telemetry.exception(new Error('[getCardPaymentAcceptPointAction] No valid Input was provided, failing'));\n throw new Error('[getCardPaymentAcceptPointAction] No valid Input was provided, failing');\n }\n\n const { shouldShowBillingAddress, paymentTenderType, amountDue = 0 } = input;\n const checkoutState: ICheckoutState = await getCheckoutState(ctx).catch((error: Error) => {\n ctx.telemetry.exception(error);\n throw error;\n });\n\n if (\n isEmptyOrNullObject(checkoutState) ||\n isEmptyOrNullObject(checkoutState.checkoutCart) ||\n isEmptyOrNullObject(checkoutState.checkoutCart.cart)\n ) {\n ctx.telemetry.exception(new Error('[getCardPaymentAcceptPointAction] Unable to get cart'));\n throw new Error('[getCardPaymentAcceptPointAction] Unable to get cart');\n }\n\n if (!checkoutState.checkoutCart.cart.CartLines || !ArrayExtensions.hasElements(checkoutState.checkoutCart.cart.CartLines)) {\n ctx.telemetry.exception(new Error('[getCardPaymentAcceptPointAction] Cart is empty'));\n throw new Error('[getCardPaymentAcceptPointAction] Cart is empty');\n }\n\n const requestUrl =\n typeof ctx.requestContext.url.requestUrl === 'string' ? new URL(ctx.requestContext.url.requestUrl) : ctx.requestContext.url.requestUrl;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- Existing code.\n const origin = get(window, 'location.origin') || requestUrl.origin;\n\n const cardPaymentAcceptSettings = {\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CardPaymentAcceptSettings',\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- Any type.\n HostPageOrigin: origin,\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-assignment -- Any type.\n AdaptorPath: `${origin}/Connectors/` || origin,\n CardPaymentEnabled: false,\n CardTokenizationEnabled: true,\n ...(!shouldShowBillingAddress && { HideBillingAddress: true }),\n ...(paymentTenderType && { TenderTypeId: paymentTenderType }),\n PaymentAmount: amountDue\n };\n\n return CartsDataActions.getCardPaymentAcceptPointAsync(\n { callerContext: ctx, bypassCache: 'get' },\n checkoutState.checkoutCart.cart.Id,\n cardPaymentAcceptSettings,\n []\n )\n // eslint-disable-next-line promise/prefer-await-to-then -- Existing code.\n .then(cardPaymentAcceptPoint => {\n if (!cardPaymentAcceptPoint.AcceptPageUrl && !cardPaymentAcceptPoint.AcceptPageContent) {\n throw new Error(\n '[getCardPaymentAcceptPointAction]Payment Accept Page has neither return AcceptPageUrl nor AcceptPageContent in updatePaymentAcceptPageData'\n );\n }\n return cardPaymentAcceptPoint;\n })\n // eslint-disable-next-line promise/prefer-await-to-then, promise/prefer-await-to-callbacks -- Existing code.\n .catch(error => {\n ctx.telemetry.exception(error as Error);\n ctx.telemetry.debug('Unable to get Card Payment Accept Point');\n throw error;\n });\n}\n\n/**\n * Get card payment accept point.\n */\nexport const getCardPaymentAcceptPointActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce/checkout-express/get-card-payment-accept-point',\n action: getCardPaymentAcceptPointAction as IAction,\n input: createCheckoutPaymentInstrumentInput\n});\n\nexport default getCardPaymentAcceptPointActionDataAction;\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 { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { getCheckoutState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getSimpleProducts, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for ActiveCheckoutCartWithProducts data action.\n */\nexport class ActiveCheckoutCartProductsInput implements IActionInput {\n public getCacheKey = () => 'ActiveCheckoutCartProducts';\n\n public getCacheObjectType = () => 'ActiveCheckoutCartProducts';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport const createInput = () => {\n return new ActiveCheckoutCartProductsInput();\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 getActiveCheckoutCartProductsAction(input: ActiveCheckoutCartProductsInput, ctx: IActionContext): Promise {\n // If no cart ID is provided in input, we need to create a cart object\n if (!input) {\n ctx.telemetry.exception(new Error('[getActiveCheckoutCartWithProducts]No valid Input was provided, failing'));\n throw new Error('[getActiveCheckoutCartWithProducts]No valid Input was provided, failing');\n }\n\n const checkoutState = await getCheckoutState(ctx);\n const cart = checkoutState.checkoutCart.cart;\n\n // If there are cart lines, make call to get products\n if (!checkoutState.checkoutCart.hasInvoiceLine && cart && cart.CartLines && cart.CartLines.length > 0) {\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 => {\n if (products) {\n return products;\n }\n return [];\n\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCheckoutCartWithProdcuts]Unable to hydrate cart with product information');\n });\n }\n\n return [];\n}\n\nexport const getActiveCheckoutCartProductsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/checkout/get-products-in-active-checkout-cart',\n action: >getActiveCheckoutCartProductsAction,\n input: createInput\n});\n\nexport default getActiveCheckoutCartProductsActionDataAction;\n"],"sourceRoot":""}