{"version":3,"sources":["webpack:///../../../src/utilities/utils.ts?fbc0","webpack:///../../src/get-selected-variant.ts?f0c0","webpack:///../../src/get-wishlist-by-customer-id.ts?e873","webpack:///../../src/get-attribute-definitions.ts?cc6b","webpack:///src/actions/getById-product-telemetry.action.ts?3e17","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/actions/purchase-telemetry.action.ts?c1a6","webpack:///../../src/get-feature-state.ts?1a1d","webpack:///src/modules/search-result-container/actions/get-mapped-search-configuration.ts?978c","webpack:///../../../src/invoices/get-invoices.ts?22cb","webpack:///src/connectors/msdyn365-exp-test/msdyn365-exp-test.provider.ts?22ac","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/utilities/input-data-parser.ts?027a","webpack:///src/dataActions/get-attributes-for-selected-variant.ts?5b72","webpack:///src/actions/get-sales-order-with-hydrations.ts?9c2c","webpack:///src/data-actions/tab-state-data-action.ts?8dcc","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/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/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-dimensions-for-selected-variant.ts?6bf4","webpack:///src/actions/ratings-reviews-state-data-action.ts?6daf","webpack:///./lib/component-registration.js?266e","webpack:///src/actions/removeFromCart-telemetry.action.ts?f9cf","webpack:///src/modules/search-result-container/actions/url-utils.ts?6091","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:///./lib/module-registration.js?44dd","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:///./node_modules/react-universal-component/dist/requireById sync ^.*$?a75b","webpack:///../../../../src/utilities/Url-builder/parameterize.ts?f5a5","webpack:///../../../../src/utilities/Url-builder/category-url-builder.ts?e564","webpack:///../../../../src/utilities/Url-builder/product-url-builder.ts?baf1","webpack:///../../src/get-loyalty-transaction-estimation.ts?e254","webpack:///../../src/add-address.ts?fb17","webpack:///../../src/add-organization-user.ts?ed86","webpack:///../../src/checkout.ts?57e0","webpack:///../../src/delete-address.ts?f9a3","webpack:///../../src/delete-organization-user.ts?7f5d","webpack:///../../src/edit-organization-user.ts?d2ac","webpack:///../../src/generic-data-action.ts?f887","webpack:///../../src/get-checkout-cart.ts?79bc","webpack:///../../src/get-customer-loyalty-cards.ts?2466","webpack:///../../src/get-simple-products.ts?fed7","webpack:///../../src/get-full-products.ts?ba9a","webpack:///../../src/get-full-products-by-refine-search-category.ts?30ab","webpack:///../../src/get-full-products-by-refine-search-text.ts?2ad7","webpack:///../../../src/utilities/refiner-utils.ts?1e61","webpack:///../../src/get-list.ts?4fd5","webpack:///../../src/get-media-locations-for-selected-variant.ts?fd54","webpack:///../../src/get-order-history.ts?76fd","webpack:///../../src/get-org-unit-configuration.ts?4793","webpack:///../../src/get-organization-wide-order-history.ts?92b8","webpack:///../../src/get-products-by-category.ts?accf","webpack:///../../src/get-promotion-options-for-cartlines.ts?1a35","webpack:///../../src/get-ratings-summary-input.ts?3ccb","webpack:///../../src/get-refiners-by-category.ts?6d4e","webpack:///../../src/get-refiners-by-text.ts?c52a","webpack:///../../src/get-related-products.ts?6f93","webpack:///../../src/get-search-configuration.ts?acd1","webpack:///../../src/issue-loyalty.ts?f8fa","webpack:///../../../src/order-templates/add-item-to-order-template.ts?fff3","webpack:///../../../src/order-templates/get-paginated-order-template-lines.ts?9b12","webpack:///../../../src/order-templates/add-order-template-to-cart.ts?6ee4","webpack:///../../../src/order-templates/create-order-template.ts?03c1","webpack:///../../../src/order-templates/get-full-order-template.ts?72c6","webpack:///../../../src/order-templates/update-order-template-header.ts?1f77","webpack:///../../../src/order-templates/update-order-template-line.ts?527b","webpack:///../../src/refine-search-by-category.ts?3e65","webpack:///../../src/search-by-text.ts?ebe1","webpack:///../../src/update-address.ts?3e4d","webpack:///../../src/update-customer-attributes.ts?8d49","webpack:///../../src/update-customer-personalization.ts?4aa9","webpack:///../../src/update-primary-address.ts?83fa","webpack:///../../../../src/utilities/promise-queue/promise-queue.ts?e362","webpack:///../../../../src/utilities/promise-queue/finite-promise-queue.ts?77bf","webpack:///../../../../src/utilities/extensions/object-extensions.ts?6388","webpack:///../../../../src/utilities/extensions/array-extensions.ts?1a2a","webpack:///../../../../src/utilities/extensions/enum-extensions.ts?cf51","webpack:///../../../../src/utilities/extensions/string-extensions.ts?ab9f","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/get-ratings-summary.ts?49bc","webpack:///./lib/module-registration.local.js?540f","webpack:///../../src/get-delivery-options-for-cartlines.ts?4dfe","webpack:///src/actions/inputs/get-user-review-input.ts?f98a","webpack:///../../src/get-address.ts?20a3","webpack:///../../../src/utilities/product-inventory-utils.ts?58b5","webpack:///../../src/get-store-location-information.ts?1df0","webpack:///src/actions/getByIds-product-telemetry.action.ts?a77c","webpack:///external \"React\"?c481","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/modules/search-result-container/actions/get-product-refiner-hierarchy.ts?bc3c","webpack:///src/modules/search-result-container/actions/get-refiners-for-collection.ts?3c89","webpack:///external \"ReactDOM\"?4b2d","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-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/get-category-paths.ts?b007","webpack:///../../../src/utilities/order-templates.ts?d593","webpack:///../../src/get-organization-users.ts?b72e","webpack:///./lib/view-registration.js?92f2","webpack:///src/actions/updateCart-telemetry.action.ts?2995","webpack:///../../src/get-customer-balance.ts?d165","webpack:///../../src/get-availabilities-cartlines.ts?b8e8","webpack:///src/actions/get-state-provinces.ts?d329","webpack:///src/actions/get-address-purposes.ts?30ca","webpack:///src/actions/get-country-state.ts?3926","webpack:///../../src/get-product-availabilities-for-selected-variant.ts?0abd","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/utilities/getRnrKeys.ts?700f","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/modules/checkout/actions/get-products-in-active-checkout-cart.ts?e0ab"],"names":["wrapInResolvedAsyncResult","input","status","result","metadata","wrapInRejectedAsyncResult","buildQueryResultSettings","inputData","searchInputData","q","Error","Paging","Top","maxItems","Number","top","Skip","skip","e","getSelectedProductIdFromActionInput","requestContext","query","productId","urlTokens","itemId","config","generateImageUrl","imageUrl","apiSettings","startsWith","baseImageUrl","encodeURIComponent","generateProductImageUrl","product","PrimaryImageUrl","buildCartLine","quantity","catalogId","CatalogId","Description","EntryMethodTypeValue","ItemId","ProductId","RecordId","Quantity","TrackingId","UnitOfMeasureSymbol","DefaultUnitOfMeasure","buildWishlistLine","customerId","wishlistId","CommerceListId","CustomerId","getProductDetailsCriteriaFromActionInput","getPrice","hidePrice","getRating","hideRating","buildCacheKey","base","locale","channelId","buildCacheKeyWithUrlTokens","defaultCacheKey","recordId","pageType","generateKey","args","options","handler","separator","undefined","map","arg","join","getFallbackImageUrl","SelectedVariantInput","matchingDimensionValues","getCacheKey","getCacheObjectType","dataCacheType","this","id","action","async","ctx","response","callerContext","baseProduct","Array","isArray","baseProductHadUnmatchedDimension","Dimensions","dimension","matchedTargetDimension","find","targetDimension","DimensionTypeValue","DimensionValue","length","variants","queryResultSettings","newImageUrl","user","isAuthenticated","GetAttributeDefinitionsInput","attributeDefinitionCriteria","channel","CustomerAttributeGroupId","then","trace","AttributeGroupIdentifier","actionId","postReaderHook","_inputs","simpleProduct","actionContext","Promise","resolve","productInfo","telemetryData","productSku","ProductPageView","preReaderHook","GetProductReviewsInput","tenantId","localeListFilter","serviceEndpoint","orderBy","starFilters","skipItems","pageSize","pageToken","dataSources","GetDeliveryOptionsForSelectedVariantInput","selectedProduct","featureState","getFeatureState","context","createDeliveryOptionsForSelectedVariantInput","getDeliveryOptionsForSelectedVariantAction","item","Name","IsEnabled","activeProduct","selectedVariantInput","productResult","IsGiftCard","catch","error","message","telemetry","exception","debug","GetCustomerInput","accountNumber","customerAccountNumber","token","salesOrder","_msdyn365","window","Purchase","logEvent","FeatureStateInput","featureNames","createGetFeatureStateInput","getFeatureStateAction","sortOptions","sortByOptionRelevanceDesc","sortByOptionRatingAsc","sortByOptionRatingDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","MappedSearchInput","getMappedSearchConfiguration","searchConfiguration","ProductSortColumns","sortColumn","key","ColumnName","toUpperCase","IsDescending","warning","filter","Boolean","createInput","GetInvoicesInput","searchCriteria","CreateGetInvoicesInput","getDefaultSearchCriteria","getInvoices","connector","variantSet1","variantId","experimentId","variantSet2","variantSet3","variantSet4","console","log","name","experiments","friendlyName","description","type","Running","link","variations","Active","weight","Draft","createdDate","lastModifiedDate","lastModifiedBy","Paused","Archived","userId","attributes","match","JSON","stringify","secretManager","createSearchOrgUnitLocationsInputFunc","ActiveWishlistInput","getActiveWishlistItems","wishlists","productInputs","forEach","currWishlist","CommerceListLines","commerceListLine","push","products","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","isNaN","getItemsPerPage","skipCount","getSkipCount","productItems","sum","index","clonedList","productItem","simpleProducts","parseSearchData","fromInputData","QueryResultSettings","AttributesForSelectedVariantInput","createAttributesForSelectedVariantInput","getAttributesForSelectedVariantAction","attributeValues","GetSalesOrderWithHydrationsInput","orderType","orderId","getSalesOrderWithHydrationsAction","getSalesOrder","TransactionTypeValue","SalesLines","productIds","salesLine","getProducts","ChannelId","deliveryOptions","x","salesId","transactionId","createTabStateInput","QueryResultSettingsProxy","Sorting","Columns","column","fromModuleData","sortingCriteria","CategoriesInput","mappedToHierarchy","_mappedToHierarchy","getLocale","mapCategoryToHierarchy","categoryList","categoryMap","reduce","memo","category","localName","nameTranslations","nameTranslation","Language","toLowerCase","Text","getFriendlyName","NameTranslations","categoryHierarchy","NeutralizedName","zeroCategory","Object","keys","element","parentId","ParentCategory","Url","parent","Children","createCategoriesHierarchyInput","topItems","topCategories","parseInt","getCategoryHierarchyAction","categories","ActiveOrderTemplateLinesInput","shouldCacheOutput","orderTemplateId","count","getActiveOrderTemplateLines","connectorListener","eventName","payload","cart","addedProducts","addedCartLines","cartLine","addedProduct","AddToCart","inputs","actionInput","queryParams","addCartLinesParams","cartLines","listMapViewState","displayList","displayMap","preferredStoreLocalStorageKey","isMapModuleLoaded","value","_readFromToCookie","storeInfo","parse","preferredStore","_context","storeId","selectedStoreLocationId","storeName","writeToCookie","StoreId","StoreName","Latitude","Longitude","_writeToCookie","latitude","longitude","lastInlineShownStoreInfo","_removeCookie","isBrowser","localStorage","removeItem","setItem","cookieValue","getItem","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchTerm","BingMapsApiKey","BingMapsEnabled","jsonp","crypto","getRandomValues","Uint32Array","encodeURI","geolocationApiUrl","app","requestUrl","script","document","createElement","setAttribute","body","removeChild","resourceSets","resources","point","coordinates","appendChild","getElementById","url","lang","market","reject","defer","src","mapAPIReady","isMapApiLoaded","onerror","createStoreSelectorStateInput","searchArea","Radius","Math","max","DistanceUnitValue","GetOrgUnitLocationsInput","getOrgUnitLocationsAction","orgUnitLocations","getOrgUnitLocations","GetOrderTemplatesPreviewInput","createGetOrderTemplatesPreviewInput","getOrderTemplatesPreview","GetChannelDeliveryConfigurationInput","GetChannelIdentitiesInput","getChannelsAction","channels","getChannels","channelIdentities","GetDimensionsForSelectedVariantInput","results","dimensionValues","MasterProductId","fullDimension","DimensionValues","createRatingsReviewsStateInput","filterKey","universal","require","default","componentDictionary","component","chunkName","ignoreBabelRename","removeCartLineIds","removedCartLineIds","activeCart","productTransaction","removedCartLines","CartLines","indexOf","LineId","some","RemoveFromCart","removeCartLinesParams","cartLineIds","compressedRefinerKeys","hydrateRefinersFromUrl","compressedRefinerArray","parseQueryParam","compressedRefiner","parsedRefiner","refinerKey","buildListPageUrl","fullUrl","refiners","sortingColumns","searchParams","set","compressedRefiners","refiner","compressRefiners","delete","toString","decodeURIComponent","getCurrentUrl","URL","location","BaseCollectionInput","searchText","includeAttributes","RefinerRecordId","LeftValueBoundString","RightValueBoundString","createBaseCollectionInput","inputClassConstuctor","categoryId","queryRefiners","sorting","ProductPageSummaryInput","simpleProductData","createGetSelectedVariantInput","productUrl","canonicalDomain","sharingImageUrl","canonicalUrl","faviconUrl","sharingImage","registerAllModules","requiredModules","binding","modules","dataActions","handleError","modPath","errObject","errorObject","process","exit","module","isNotRegistered","moduleName","findIndex","$type","definitionPath","isNodeModule","moduleNamespace","packageName","parentDefinitionPath","moduleDirectory","path","runOn","definitionExtensions","themeSettings","actionPath","prototype","sanitizedActionPath","RegistrationId","cartObject","cartLineProductUnits","cartLineitem","productChannelId","productChannelName","productCategoryId","productCategoryName","productName","productPrice","Price","productQuantity","productCurrency","Currency","CheckOut","cartId","Id","cartVersion","Version","OrderNumber","GetFullAvailableInventoryNearbyInput","_productId","_latitude","_longitude","_radius","_DistanceUnitValue","_IgnoreLocation","radius","IgnoreLocation","createGetFullAvailableInventoryNearbyInput","getFullAvailableInventoryNearbyAction","retailMulitplePickupMFeatureState","ProductIds","SearchArea","DefaultWarehouseOnly","FilterByChannelFulfillmentGroup","productInventoryInformation","productWarehouseInformation","ProductWarehouseInventoryAvailabilities","storeMap","Map","stores","store","InventoryLocationId","locationDeliveryOptions","orgUnitChannel","channelCollection","channelIdList","channelDeliveryOptions","_getLocationPickUpDeliveryModes","availabilityPromiseList","locationDeliveryOption","_channeldeliveryoption","orgUnitLocation","channelDeleiveryOptions","OrgUnitNumber","OrgUnitAvailability","hours","itemAvailabilities","InventLocationId","has","AvailableQuantity","ProductAvailableQuantity","availability","OrgUnitLocation","ItemAvailabilities","ProductInventoryInformation","OrgUnitPickUpDeliveryModes","StoreHours","_getAvailabilityWithHours","all","GetCardPaymentAcceptPointInput","paymenTenderType","showBillingAddress","createCheckoutPaymentInstrumentInput","getCardPaymentAcceptPointInput","showBillingAddres","getCardPaymentAcceptPointAction","checkoutState","checkoutCart","origin","cardPaymentAcceptSettings","HostPageOrigin","AdaptorPath","CardPaymentEnabled","CardTokenizationEnabled","HideBillingAddress","TenderTypeId","PaymentAmount","bypassCache","cardPaymentAcceptPoint","AcceptPageUrl","AcceptPageContent","PriceForSelectedVariantInput","createActivePriceForSelectedVariantInput","getPriceForSelectedVariantAction","affliations","customerInput","customer","CustomerAffiliations","affliation","aff","AffiliationId","RetailAffiliationId","AccountNumber","projectDomain","Date","retailServerProxyVersion","CustomerContextualPrice","AdjustedPrice","getProductInfoFromCart","productData","_getProductInfoFromCartLines","getProductTransactionInfoFromSalesOrder","affiliation","revenue","NetAmountWithoutTax","tax","TaxAmount","_getProductInfoFromSalesLines","salesObject","saleLineProductUnits","saleLineitem","getProductInfoFromSimpleProduct","webpackContext","req","webpackContextResolve","__webpack_require__","o","code","exports","parameterize","sep","parameterizeFeatureFlags","neutralizedName","candidateName","platformSettings","enableUrlLocalization","enableUrlEncoding","replace","trim","getCategorySlug","categoryName","Slug","getCategoryUrl","getProductUrlSync","getProductPageUrlSync","GetLoyaltyTransactionEstimationInput","userAccountNumber","createGetLoyaltyTransactionEstimationInput","getLoyaltyTransactionEstimationAction","promises","_getCart","_getLoyalty","_getOrgUnits","CardNumber","points","loyaltyCardInput","AddressManagementInput","address","createAddressManagementInput","doAddressManagementOperation","operationHandler","newCustomer","updatedCustomer","update","Addresses","addAddressHandler","isBatched","AddOrganizationUserInput","newUser","businessPartner","BusinessPartnerId","CheckOutInput","receiptEmail","cartTenderLines","billingAddress","baseUrl","requestOptions","headers","oun","Authorization","cartTenderLineItem","TokenizedPaymentCard","House","CardTokenInfo","Phone","ThreeLetterISORegionName","Street","City","State","ZipCode","Country","Address1","Zip","requestBody","deleteAddressHandler","cur","DeleteOrganizationUserInput","EditOrganizationUserInput","updatedUser","GenericInput","cacheKey","cacheObjectType","getGenericAction","CartCookieName","CartCookie","get","productIdMapping","idx","getDefault","mappedProducts","split","criteria","ProductDetailsCriteria","_getActivePrices","validProductIds","productCollection","validInputs","fullProduct","ProductDetails","semver","ProductPrice","_getProductRatings","productRating","ProductRating","err","Set","ratingsAndPricePromises","productDetailsCriteria","FullProductsRefineSearchByCategoryInput","queryResultSettingsProxy","refinementCriteria","hasSortingColumn","fullProductInputs","searchResults","productSearchResult","FullProductsRefineSearchByTextInput","getRefinedProducts","getRefinedFullProducts","ListInput","documentId","itemsCount","DocumentId","ItemsCount","ItemsPerPage","SkipCount","Items","ProductItems","inputArray","productMap","listitem","getInutListData","MediaLocationsForSelectedVariantInput","mediaLocation","Uri","AltText","categorySlug","cacheKeyHint","currentCategory","productSearchResults","cartState","hasInvoiceLine","c","GetRatingsSummaryInput","RefinersByCategoryInput","createRefinersByCategoryInput","createRefinersByTextInput","GetRelatedProductsInput","relationType","querySettings","productRelationTypes","productRelationTypeId","_productRelationType","foundProductRelationTypeId","productRelationType","searchProductRelationType","stack","updateCart","card","updateLoyaltyCardId","loyaltyCardNumber","CustomerAccount","issuedCard","AddItemToOrderTemplateInput","unitOfMeasure","productListLineToAdd","ProductListId","UnitOfMeasure","productListLine","getPaginatedOrderTemplateLinesAction","orderTemplateLinesState","lines","totalCount","promise","productListLines","listLine","fullProductsInfo","line","AddOrderTemplateToCartInput","getPaginatedOrderTemplateLinesInput","orderTemplateLines","productLine","concat","refreshCart","CreateOrderTemplateInput","templateName","orderTemplate","ProductListTypeValue","createdProductList","GetFullOrderTemplateInput","inputParams","productLists","inputLines","linesState","UpdateOrderTemplateHeaderInput","updatedProductList","UpdateOrderTemplateInput","getLinesInput","linesToUpdate","lineToUpdate","updatedLines","updatedLine","refinementCriterion","search","querySettingsProxy","updateAddressHandler","IsPrimary","customerAttributes","phone","vatNumber","VatNumber","Attributes","isOptOut","preferenceType","OptOutWebActivityTracking","OptOutPersonalization","updatePrimaryAddressHandler","setPrimaryAddress","primaryAddresses","addresses","addr","PromiseQueueElement","PromiseQueue","_queue","_isBusy","promiseBody","_dequeue","_canProcess","shift","_processElement","_processNext","FinitePromiseQueueError","ObjectExtensions","maxQueueLength","InvalidMaxQueueLengthPassed","super","_maxQueueLength","totalElementsCount","ProcessWasDiscardedFromTheQueue","enqueue","isNullOrUndefined","isString","isNumber","isFunction","ArrayExtensions","hasElements","unique","from","predicate","EnumExtensions","getValues","enumClass","getNumericValues","getNames","getEnumValues","StringExtensions","isNullOrEmpty","isNullOrWhitespace","rnds8","Uint8Array","rng","bind","msCrypto","validate","uuid","REGEX","test","byteToHex","i","substr","arr","offset","arguments","TypeError","v4","buf","rnds","random","generateGuid","Guid","inputIsValid","ProductDeliveryOptionsForCartLineItems","getDeliveryOptionsForCartLineItems","GetUserReviewInput","authorization","AddressInput","createGetAddressInput","getAddressAction","mapProductInventoryInformation","productsWarehouseInventory","enableStockCheck","inventoryLevel","physicalProductMap","mapInventoryWithPhysicalBufferEnabled","totalAvailableProductMap","mapInventoryWithTotalAvailableBufferEnabled","mapInventoryWithThresholdEnabled","productWarehouseInventoryAvailability","TotalAvailable","productQty","outOfStockThreshold","productAvailableQuantity","IsProductAvailable","shouldRenderLabel","displayLabelEnabled","PhysicalAvailableInventoryLevelCode","PhysicalAvailable","StockLevelCode","StockLevelLabel","PhysicalAvailableInventoryLevelLabel","TotalAvailableInventoryLevelCode","TotalAvailableInventoryLevelLabel","inventoryCode","inventoryRanges","GetOrgUnitLocationsByAreaInput","_Latitude","_Longitude","_Radius","createGetOrgUnitLocationsByAreaInput","getOrgUnitLocationsByArea","locationPromiseList","_getLocationWithHours","React","CategoryPageSummaryInput","createGetCurrentCategoryInput","categoryUrl","OfflineImage","createInputForProductReviews","getReviewsForGivenProduct","isTakenDown","pagingInfo","OrganizationUsersCountInput","createGetOrganizationUsersCountInput","getOrganizationUsersCount","users","getProductRefinerHierarchy","productRefiners","productRefiner","searchProductId","CategoryIds","Context","SearchCondition","RecommendationListId","Ids","ReactDOM","GetOrderTemplatesInput","productListId","createGetOrderTemplatesInput","getOrderTemplatesAction","productListSearchCriteria","GetLoyaltyCardInput","createGetLoyaltyCardInput","getLoyaltyAction","cards","firstCard","LoyaltyEnrollmentDate","LoyaltyEnrollmentDateLocal","GetFullProductsByCollectionInput","searchCriteriaInput","Refinement","IncludeAttributes","SkipVariantExpansion","totalProductCount","activeFilters","ActiveCartProductsInput","getActiveCartProductsAction","handleMissingImplementationDetails","functionName","connectorName","connectorType","connectorDictionary","connectorProviderImpl","connectorListenerImpl","provider","listener","validateConnectorRegistration","connectorImpl","__proto__","initialize","getConfigForClientSideInit","initializeClientSide","getExperiments","getVariantsForUser","activateExperiment","verifyExperimentationReigstration","CurrentCategoryHierarchyInput","activeCategoryId","getCurrentCategoryHierarchyAction","fullCategoryHierarchy","categoryArray","findCategory","childCategory","reverse","errorMessage","userInfo","CurrentCategoryInput","tempActionContext","searchCategory","foundCategory","cat","matchingChild","getCurrentCategoryAction","categoryInput","MediaLocationsByIdInput","createMediaLocationsByIdInput","getMediaLocationsByIdAction","GetCategoryPathsInput","categoryPathLooksups","constructedCacheKey","categoryPath","createGetCategoryPathsInput","getCategoryPathsAction","categoryPathResults","CategoryPath","OrderTemplateLine","OrderTemplate","totalLines","OrganizationUsersInput","createGetOrganizationUsersInput","getOrganizationUsers","viewDictionary","updatedProducts","updatedCartLines","updatedProduct","UpdateInCart","updateCartLinesParams","GetCustomerBalanceInput","createGetCustomerBalanceInput","getCustomerBalanceAction","InvoiceAccount","ProductAvailabilitiesForCartLineItems","getDeliveryMode","featureSate","channelDeliveryOptionConfig","pickupDeliveryMode","DeliveryMode","PickupDeliveryModeCodes","deliveryMode","getAvailabilitiesForCartLineItems","shippingItems","bopisItems","productAvailabilities","channelConfiguration","retailMultiplePickUpOptionEnabled","PickupDeliveryModeCode","EmailDeliveryModeCode","shippingProductAvailabilities","bopisItem","productWarehouse","WarehouseId","InventLocationDataAreaId","DataAreaId","getProductWarehouseAvail","productWarehouseMapping","GetStateProvincesInput","countryRegionId","getStateProvinceAction","GetAddressPurposesInput","getAddressPurposesAction","GetCountryStateInput","getCountryStateAction","countryInput","countryRegionsInfo","marketISOCode","ChannelCountryRegionISOCode","currentCountryRegion","countryRegion","ISOCode","CountryRegionId","stateInput","ProductAvailabilitiesForSelectedVariantInput","createProductAvailabilitiesForSelectedVariantInput","getProductAvailabilitiesForSelectedVariantAction","ItemTypeValue","ProductTypeValue","mergeProductWarehouseToProductAvailabities","productAvailable","createSearchStateInput","GetCountryRegionsInput","getCountryRegionsAction","PageSummaryInput","keywords","ProductAvailabilitiesForWishlistItems","getAvailabilitiesForWishlistItems","validProducts","getRnrPartnerId","rnr","getRnrEndpointId","getRnrAuthEndpointId","endpoint","proxyUrl","charAt","substring","ListPageState","activeProducts","sortingCritera","currentPageNumber","featureProduct","productPrices","ListPageStateInput","listPageStateAction","createListPageInput","createAccordionStateInput","GetFullOrderTemplatesInput","orderTemplates","ActiveCheckoutCartProductsInput","getActiveCheckoutCartProductsAction"],"mappings":"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lB,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,YAIf,6BACH,OAAO/E,QAAQC,QAAQ,IAEpB,qBAAqB7F,GAExB,OADA+K,QAAQC,IAAI,yEAAyEhL,IAC9E,EAGJ,iBACH,OAAO4F,QAAQC,QAAQ,CACnBoF,KAAM,sBACNC,YAAa,CACT,CACIzH,GAAI,SACJ0H,aAAc,eACdC,YAAa,yCACbC,KAAM,WACN5M,OAAQ,QAAM6M,QACdC,KAAM,yCACNC,WAAY,CACR,CACI/H,GAAI,OACJ0H,aAAc,YACd1M,OAAQ,QAAMgN,OACdC,OAAQ,OAEZ,CACIjI,GAAI,OACJ0H,aAAc,YACd1M,OAAQ,QAAMgN,OACdC,OAAQ,OAEZ,CACIjI,GAAI,OACJ0H,aAAc,YACd1M,OAAQ,QAAMkN,MACdD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","file":"static/js/10.296f764f7c2e5e51.chunk.js","sourcesContent":["import { IAny, ICommerceApiSettings, ICreateActionContext, IGeneric, IRequestContext } from '@msdyn365-commerce/core';\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\nimport {\n CartLine,\n CommerceListLine,\n ProductSearchResult,\n QueryResultSettings,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ProductDetailsCriteria } from '../get-full-products';\nimport { parseSearchData } from './input-data-parser';\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 (e) {\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 */\nexport const getSelectedProductIdFromActionInput = (inputData: ICreateActionContext>): string | undefined => {\n if (inputData && inputData.requestContext && inputData.requestContext.query && inputData.requestContext.query.productId) {\n return inputData.requestContext.query.productId;\n } else if (inputData && inputData.requestContext && inputData.requestContext.urlTokens && inputData.requestContext.urlTokens.itemId) {\n return inputData.requestContext.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 */\nexport const generateImageUrl = (imageUrl: string | undefined, apiSettings: ICommerceApiSettings): string | undefined => {\n if (imageUrl) {\n // Images hosted in CMS include schema\n if (imageUrl.startsWith('http')) {\n return imageUrl;\n }\n\n // Images hosted in Retail Server must be encoded and joined with the base image url\n return apiSettings.baseImageUrl + encodeURIComponent(imageUrl);\n } else {\n // d365Commerce.telemetry.warning(`Unable to generate a proper Image URL for Product: ${product.RecordId}`);\n return undefined;\n }\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 */\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 // 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(/[^0-9a-zA-Z\\s]+/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\n ? `${defaultCacheKey}-${urlTokens.itemId}-${urlTokens.recordId}-${urlTokens.pageType}`\n : 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 productUrl = `Products/${itemId}_000_001.png`;\n return generateImageUrl(productUrl, apiSettings);\n};","import { CacheType, IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { generateProductImageUrl, getSelectedProductIdFromActionInput } from './utilities/utils';\n\nimport { getByIdAsync, getVariantsByDimensionValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ProductDimension, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\n/**\n * Get selected variant action input class\n */\nexport class SelectedVariantInput implements IActionInput {\n public productId: number;\n public channelId: number;\n public matchingDimensionValues: ProductDimension[];\n\n constructor(productId: number, channelId: number, matchingDimensionValues?: ProductDimension[]) {\n this.productId = productId;\n this.channelId = channelId;\n this.matchingDimensionValues = matchingDimensionValues || [];\n }\n\n public getCacheKey = () => `SelectedVariant`;\n public getCacheObjectType = () => 'SimpleProduct';\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 */\nconst createInput = (inputData: ICreateActionContext>): SelectedVariantInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n\n if (productId) {\n return new SelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId, []);\n } else {\n throw new Error('Unable to create SelectedVariantInput, no productId found on module config or query');\n }\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 */\nasync function getSelectedVariantAction(input: SelectedVariantInput, ctx: IActionContext): Promise {\n let product: SimpleProduct | null = null;\n\n const response = await getByIdAsync({ callerContext: ctx }, input.productId, input.channelId);\n\n const baseProduct: SimpleProduct = Array.isArray(response) ? response[0] : response;\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 = { ...baseProduct };\n\n if (product) {\n let baseProductHadUnmatchedDimension: boolean = false;\n if (product.Dimensions) {\n product.Dimensions.map(dimension => {\n const matchedTargetDimension = input.matchingDimensionValues.find(\n targetDimension => targetDimension.DimensionTypeValue === dimension.DimensionTypeValue\n );\n\n if (matchedTargetDimension) {\n dimension.DimensionValue = matchedTargetDimension.DimensionValue;\n } else {\n baseProductHadUnmatchedDimension = true;\n }\n });\n }\n\n if (!baseProductHadUnmatchedDimension && input.matchingDimensionValues.length > 0) {\n const variants = await getVariantsByDimensionValuesAsync(\n { callerContext: ctx, queryResultSettings: {} },\n baseProduct.RecordId,\n input.channelId,\n input.matchingDimensionValues\n );\n\n if (variants && variants.length > 0) {\n product = variants[0];\n }\n }\n\n const newImageUrl = generateProductImageUrl(product, ctx.requestContext.apiSettings);\n\n if (newImageUrl) {\n product.PrimaryImageUrl = newImageUrl;\n }\n }\n\n return product;\n}\n\n/**\n * The complete getSelectedVariant data action\n */\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-selected-variant',\n action: >getSelectedVariantAction,\n input: createInput\n});\n","import { IAction } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, 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';\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-wishlist-by-customer-id',\n action: >retailAction,\n input: createWishlistInput\n});\n","import { CacheType, IAction, IActionInput, ICommerceApiSettings } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, IAny, 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';\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 private 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 public getCacheObjectType = () => 'CustomerAttribute';\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-custom-attributes',\n action: >getAttributeDefinitionsAction,\n input: createInput\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 { 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, actionContext.requestContext);\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","import { 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 // 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 public getCacheObjectType = () => 'ProductReview';\n public dataCacheType = (): CacheType => 'request';\n}\n","import { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { FeatureState } from '@msdyn365-commerce/retail-proxy';\nimport { FilterDeliveryModeOption, ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { FeatureStateInput, getFeatureStateAction } from './get-feature-state';\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput } from './index';\n\n/**\n * Input class for the GetDeliveryOptionsForSelectedVariant Data Action\n */\nexport class GetDeliveryOptionsForSelectedVariantInput implements IActionInput {\n public productId: number;\n public channelId: number;\n public selectedProduct: SimpleProduct | undefined;\n public customerId: string;\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 public getCacheObjectType = () => 'DeliveryOptions';\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 */\nexport async function getFeatureState(context: IActionContext): Promise {\n return getFeatureStateAction(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 } else {\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 */\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 // @ts-ignore: Promise vs. ObservablePromise typing conflict\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 // for giftcard, should not apply filter.\n (input.featureState && !productResult?.IsGiftCard) ? 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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-delivery-options-for-selected-variant',\n action: >getDeliveryOptionsForSelectedVariantAction,\n input: createDeliveryOptionsForSelectedVariantInput\n});\n","import { CacheType, IAction, IActionInput, ICommerceApiSettings } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { readAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g';\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 private apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings, accountNumber?: string) {\n this.customerAccountNumber = accountNumber;\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`Customer-${this.customerAccountNumber}`, this.apiSettings);\n public getCacheObjectType = () => 'Customer';\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call\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\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 readAsync({ callerContext: ctx }, 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\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-customer',\n action: >getCustomerAction,\n input: createInput\n});\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 { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { SalesOrder } from '@msdyn365-commerce/retail-proxy';\nimport { TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductTransactionInfoFromSalesOrder } from './telemetry.action.helper';\n\nconst beforePurchase = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterPurchase = async (\n _inputs: IActionInput | IActionInput[],\n salesOrder: SalesOrder | SalesOrder[],\n actionContext: IActionContext\n) => {\n const _msdyn365 = window && (window)._msdyn365;\n\n if (_msdyn365 && _msdyn365.telemetry) {\n // store the purchased product information so that we can avoid \"code triggered\" remove from cart telemetry event.\n actionContext.requestContext.telemetryData[TelemetryEvent.Purchase] = getProductTransactionInfoFromSalesOrder(\n salesOrder,\n actionContext.requestContext.telemetryData\n );\n\n _msdyn365.telemetry.logEvent(TelemetryEvent.Purchase, actionContext.requestContext.telemetryData[TelemetryEvent.Purchase]);\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/Checkout',\n postReaderHook: afterPurchase,\n preReaderHook: beforePurchase\n});\n","import { 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 ];\n\n public getCacheKey = () => 'FeatureState';\n public getCacheObjectType = () => 'FeatureState';\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 // tslint:disable-next-line:no-unnecessary-local-variable\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-feature-state',\n action: >getFeatureStateAction,\n input: createGetFeatureStateInput\n});\n","import { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\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\n// TODO: import from commerce entities when available\n// tslint:disable-next-line:interface-name\ninterface SearchConfiguration {\n ProductSortColumns?: SortColumn[];\n}\n\n// tslint:disable-next-line:interface-name\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};\n\n/**\n * ActionInput class for the get-mapped-search-configuration Data Action\n */\nexport class MappedSearchInput implements IActionInput {\n private apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('MappedSearchInput', this.apiSettings);\n public getCacheObjectType = () => 'MappedSearchInput';\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Get a mapped search configuration that is easy to use for sorting\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 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 } else {\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-mapped-search-configuration',\n action: >getMappedSearchConfiguration,\n input: createInput\n});","import { CacheType, IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { InvoicePaidStatus, InvoiceSearchCriteria, InvoiceType, OrderInvoice } from '@msdyn365-commerce/retail-proxy';\nimport { getInvoicesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/SalesOrdersDataActions.g';\n\nconst getDefaultSearchCriteria = (): InvoiceSearchCriteria => {\n const searchCriteria: InvoiceSearchCriteria = {};\n searchCriteria.InvoiceTypeValues = [InvoiceType.SalesOrderInvoice];\n searchCriteria.InvoicePaidStatusValues = [InvoicePaidStatus.None];\n return searchCriteria;\n};\n\n/**\n * Input class for get invoice data action\n */\nexport class GetInvoicesInput implements IActionInput {\n public readonly searchCriteria: InvoiceSearchCriteria;\n\n constructor(searchCriteria: InvoiceSearchCriteria) {\n this.searchCriteria = searchCriteria;\n }\n\n public getCacheKey = () => 'BusinessPartnerInvoices';\n public getCacheObjectType = () => 'OrderInvoice';\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 return new GetInvoicesInput(getDefaultSearchCriteria());\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 return getInvoicesAsync({ callerContext: context }, input.searchCriteria);\n}\n\nexport default createObservableDataAction({\n id: 'get-invoices',\n action: >getInvoices,\n input: CreateGetInvoicesInput\n});\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","import { IAction } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, 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 */\nexport function createSearchOrgUnitLocationsInputFunc(inputData: ICreateActionContext, IGeneric>): IDataServiceRequest {\n return createSearchOrgUnitLocationsInput(buildQueryResultSettings(inputData), {});\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/search-org-unit-locations',\n action: >retailAction,\n input: createSearchOrgUnitLocationsInputFunc\n});\n","import { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { CommerceListLine } from '@msdyn365-commerce/retail-proxy';\n\nimport { FullProductInput, getFullProducts, getProductDetailsCriteriaFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { getByCustomerAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CommerceListsDataActions.g';\n\n/**\n * Input class for getActiveWishlistItems data action\n */\nexport class ActiveWishlistInput implements IActionInput {\n public getCacheKey = () => `ActiveWishlistItems`;\n public getCacheObjectType = () => 'ActiveWishlistItems';\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 */\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 } else {\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 } else {\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/wishlist/wishlist-items/get-items-in-wishlist',\n action: >getActiveWishlistItems,\n input: createInput\n});\n","import { 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';\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 { IDefaultPageSummaryConfig } from '../default-page-summary/default-page-summary.props.autogenerated';\nimport { IPageSummaryData } from '../IPageSummaryData';\n\n/** List Page Summary Input */\nexport class ListPageSummaryInput implements IActionInput {\n public requestContext: IRequestContext;\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 public getCacheKey = (): string => buildCacheKeyWithUrlTokens('ListPageSummary', this.requestContext);\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * List item type enum\n */\nconst enum ListItemType {\n list = 'list',\n product = 'product'\n}\n\n/**\n * Get the url of sub list.\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 */\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 */\nfunction getSitePath(inputData: ICreateActionContext, IGeneric>): string {\n // @ts-ignore\n return inputData && inputData.requestContext && inputData.requestContext.sitePath ? inputData.requestContext.sitePath : '';\n}\n\n/**\n * Get items per page\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 */\nfunction getSkipCount(inputData: ICreateActionContext, IGeneric>): number {\n return inputData && inputData.requestContext && inputData.requestContext.query && inputData.requestContext.query.skipCount\n ? Number(inputData.requestContext.query.skipCount)\n : 0;\n}\n\n/**\n * Get 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 */\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 (e) {\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 // 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 } else {\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, actionContext.requestContext);\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","import { IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { QueryResultSettings } from '@msdyn365-commerce/retail-proxy';\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-ignore: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};","import { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { AttributeValue, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\n\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { getAttributeValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\n/**\n * Chains getting the SelectedVariant with GetActivePrice\n */\nexport class AttributesForSelectedVariantInput implements IActionInput {\n public productId: number;\n public channelId: number;\n public catalogId: number;\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 public getCacheObjectType = () => 'ProductAttributeValue';\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 } else {\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 */\nexport async function getAttributesForSelectedVariantAction(\n input: AttributesForSelectedVariantInput,\n ctx: IActionContext\n): Promise {\n // @ts-ignore: Promise vs. ObservablePromise typing conflict\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","import { buildCacheKey, getSimpleProducts, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { CacheType, createObservableDataAction, 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, getSalesOrderDetailsByTransactionIdAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/SalesOrdersDataActions.g';\n\ninterface ISalesOrderWithHydrations {\n salesOrder: SalesOrder;\n products: SimpleProduct[];\n productDeliveryOptions?: ProductDeliveryOptions[];\n}\n\n/**\n * orderTypes Types of orders\n */\nexport const enum orderTypes {\n salesOrder = 'salesOrder',\n transaction = 'transaction'\n}\n\n/**\n * Calls the Retail API and returns the sales order\n */\nconst getSalesOrder = (orderType: string = '', orderId: string = '') => async (ctx: IActionContext): Promise => {\n return orderType === orderTypes.salesOrder\n ? getSalesOrderDetailsBySalesIdAsync({ callerContext: ctx }, orderId)\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 getSalesOrderDetailsByTransactionIdAsync({ callerContext: ctx }, orderId, 3);\n};\n\n/**\n * Calls the Retail API and returns the products\n */\nconst getProducts = (productIds: number[] = [], channelId?: number) => async (ctx: IActionContext): Promise => {\n const productInputs = productIds.map(productId => new ProductInput(productId, ctx.requestContext.apiSettings, channelId));\n return getSimpleProducts(productInputs, ctx);\n};\n\n/**\n * Action input\n */\nexport class GetSalesOrderWithHydrationsInput implements IActionInput {\n public orderType: string;\n public orderId: string;\n private 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 public getCacheKey = () => buildCacheKey(`SalesOrderWithHydrations`, this.apiSettings);\n public getCacheObjectType = () => `SalesOrderWithHydrations-${this.orderType}-${this.orderId}`;\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call\n */\nconst createSalesOrderWithHydrationsInput = (inputData: ICreateActionContext) => {\n const { salesId = '', transactionId = '' } = (inputData.requestContext.query && inputData.requestContext.query) || {};\n 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 throw new Error(`createSalesOrderWithHydrationsInput - No salesId or transactionId provided.`);\n};\n\n/**\n * Get sales order with hydrations action\n */\nexport async function getSalesOrderWithHydrationsAction(\n input: GetSalesOrderWithHydrationsInput,\n ctx: IActionContext\n): Promise {\n if (!ctx) {\n throw new Error(`getSalesOrderWithHydrationsAction - Action context cannot be null/undefined`);\n }\n\n const { orderType, orderId } = input;\n\n if (!orderType || !orderId) {\n ctx.trace(`[getSalesOrderWithHydrationsAction] No orderType or orderId provided.`);\n return {};\n }\n\n const salesOrder = await getSalesOrder(orderType, orderId)(ctx);\n\n if (!salesOrder) {\n ctx.trace(`[getSalesOrderWithHydrationsAction] No salesOrder found.`);\n return {};\n }\n\n // If it is salesInvoice, return salesOrder and empty products\n // tslint:disable-next-line:prefer-type-cast\n if (salesOrder.TransactionTypeValue === 15 as TransactionType.SalesInvoice) {\n return {\n salesOrder,\n products: []\n };\n }\n\n if (!salesOrder.SalesLines || !salesOrder.SalesLines.length) {\n ctx.trace(`[getSalesOrderWithHydrationsAction] No salesLine found.`);\n return {};\n }\n\n const productIds: number[] = salesOrder.SalesLines.map(salesLine => salesLine.ProductId || 0).filter(productId => productId);\n\n if (!productIds || !productIds.length) {\n ctx.trace(`[getSalesOrderWithHydrationsAction] No productId in saleLines found.`);\n return {};\n }\n\n const products = await getProducts(productIds, salesOrder.ChannelId)(ctx);\n\n if (!products || !products.length) {\n ctx.trace(`[getSalesOrderWithHydrationsAction] No product found.`);\n return {};\n }\n\n const deliveryOptions = await getDeliveryOptionsAsync({ callerContext: ctx, queryResultSettings: {} }, products.map(x => x.RecordId), {}, 4)\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 return {\n salesOrder,\n products,\n deliveryOptions\n };\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/order-management/get-sales-order-with-hydrations',\n action: >getSalesOrderWithHydrationsAction,\n input: createSalesOrderWithHydrationsInput\n});","import { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\nimport { createObservableDataAction, IAction, IActionInput } from '@msdyn365-commerce/core';\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 default createObservableDataAction({\n action: >getGenericAction,\n input: createTabStateInputInternal\n});\n","import { IAny, ICreateActionContext, IGeneric, IRequestContext } from '@msdyn365-commerce/core';\nimport { QueryResultSettings, SortColumn } from '@msdyn365-commerce/retail-proxy';\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 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 */\n private constructor(\n queryResultSettings: QueryResultSettings\n ) {\n this.queryResultSettings = queryResultSettings;\n }\n}","import { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, IAction, IActionContext, IActionInput, ICommerceApiSettings } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IAny, ICreateActionContext, IGeneric, IRequestContext } from '@msdyn365-commerce/core';\nimport { Category } from '@msdyn365-commerce/retail-proxy';\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\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 public readonly channelId: number;\n private readonly sitePath: string;\n private _mappedToHierarchy: boolean;\n private apiSettings: ICommerceApiSettings;\n private locale?:string;\n\n 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 }\n\n public getCacheKey = () => buildCacheKey(`${this.channelId}|${this.sitePath}|top-${this.maxItems || 250}`, this.apiSettings, this.locale);\n public getCacheObjectType = () => (this._mappedToHierarchy ? 'CategoryHierarchy' : 'Category');\n public dataCacheType = (): CacheType => 'application';\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 * @returns Hierarchy of categories in array\n */\nexport const mapCategoryToHierarchy = (categoryList: Category[], ctx: IActionContext, locale?: string ): CategoryHierarchy[] => {\n if (!categoryList || !categoryList.length) {\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 */\nexport const createCategoriesHierarchyInput = (inputData: ICreateActionContext>): IActionInput => {\n const topItems = inputData.config && inputData.config.topCategories && 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 */\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-categories-hierarchy',\n action: >getCategoryHierarchyAction,\n input: createCategoriesHierarchyInput\n});\n","import {\n buildCacheKeyWithUrlTokens,\n getFullOrderTemplate,\n GetFullOrderTemplateInput,\n IQueryResultSettingsModuleConfig,\n OrderTemplate,\n QueryResultSettingsProxy\n} from '@msdyn365-commerce-modules/retail-actions';\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';\n\n/**\n * Input class for getActiveOrderTemplateLines data action\n */\nexport class ActiveOrderTemplateLinesInput implements IActionInput {\n public requestContext: IRequestContext;\n public orderTemplateId: string;\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 public getCacheObjectType = (): string => 'ActiveOrderTemplateLines';\n public dataCacheType = (): CacheType => 'instance';\n public shouldCacheOutput = () => false;\n}\n\n/**\n * Calls the Retail API and returns a ProductList object based on the passed GetCartInput\n */\nexport async function getActiveOrderTemplateLines(input: ActiveOrderTemplateLinesInput, context: IActionContext): Promise {\n return getFullOrderTemplate(new GetFullOrderTemplateInput(input.orderTemplateId, input.queryResultSettings), context);\n}\n\nexport default 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","/*!\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.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createDataActionHook, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { IAny, IDictionary, IMSDyn365Window } from '@msdyn365-commerce/core-internal';\nimport { Cart, CartLine, IAddCartLinesParam, IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\nimport { TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCart } 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 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 addedProducts: IDictionary = {};\n const addedCartLines = actionContext.requestContext.telemetryData.addedCartLines;\n\n // If TelemetryData exists for added cart lines, collect product info\n if (addedCartLines) {\n addedCartLines.forEach((cartLine: CartLine) => {\n if (cartLine && cartLine.ProductId) {\n const addedProduct = actionContext.requestContext.telemetryData[cartLine.ProductId];\n if (addedProduct) {\n addedProducts[cartLine.ProductId] = addedProduct;\n }\n }\n });\n }\n\n // Fire AddToCart event\n window._msdyn365.telemetry.logEvent(\n TelemetryEvent.AddToCart,\n getProductInfoFromCart(cart, addedProducts, actionContext.requestContext)\n );\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/AddCartLines',\n postReaderHook: afterAddToCart,\n preReaderHook: beforeAddToCart\n});\n","import { IActionContext } from '@msdyn365-commerce/core';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { action, computed, observable } from 'mobx';\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 @computed public get context(): Readonly {\n return this._context;\n }\n\n @observable public isMapApiLoaded?: boolean;\n @observable public selectedStoreLocationId?: string;\n @observable public preferredStore?: IStoreInfo;\n @observable public listMapViewState: IListMapViewState = { displayList: true, displayMap: false };\n @observable public isMapModuleLoaded?: boolean;\n @observable public lastInlineShownStoreInfo?: IStoreInfo;\n @observable protected _context?: IStoreSelectionStateContext;\n private 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}","import { action } from 'mobx';\n\nimport { IActionContext } from '@msdyn365-commerce/core';\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 * 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 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 const jsonp = `mapSearchCallback_${crypto.getRandomValues(new Uint32Array(1))[0]}`;\n const query = encodeURI(searchTerm);\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 document.body.removeChild(script);\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 const isScriptAlreadyLoaded = document?.getElementById('msdyn_map-api-script') ? true : false;\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.onerror = (error: string | Event) => {\n reject(error);\n };\n document?.body?.appendChild(script);\n });\n }\n\n}","import { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\nimport { IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\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 default createObservableDataAction({\n action: >getGenericAction,\n input: createStoreSelectorStateInputInternal\n});\n","import { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\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';\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 */\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 apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`OrgUnitLocations`, this.apiSettings);\n public getCacheObjectType = () => `OrgUnitLocations`;\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call\n */\nconst createOrgUnitLocationsInput = (inputData: ICreateActionContext>) => {\n return new GetOrgUnitLocationsInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * Get orgUnitLocations action\n */\nexport async function getOrgUnitLocationsAction(\n input: GetOrgUnitLocationsInput,\n ctx: IActionContext\n): Promise {\n if (!ctx) {\n throw new Error(`getOrgUnitLocationsAction - Action context cannot be null/undefined`);\n }\n\n let orgUnitLocations: OrgUnitLocation[] = [];\n\n try {\n orgUnitLocations = await getOrgUnitLocations()(ctx);\n } catch (error) {\n throw error;\n }\n\n return { orgUnitLocations: orgUnitLocations };\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/order-management/get-org-unit-locations',\n action: >getOrgUnitLocationsAction,\n input: createOrgUnitLocationsInput\n});\n","import { CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext } from '@msdyn365-commerce/core';\nimport { IQueryResultSettings } from '@msdyn365-commerce/retail-proxy';\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 public getCacheObjectType = () => 'GetOrderTemplatesPreview';\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/get-order-templates-preview',\n action: >getOrderTemplatesPreview,\n input: createGetOrderTemplatesPreviewInput\n});","import { CacheType, IAction, IActionInput, ICommerceApiSettings } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\nimport { getChannelDeliveryOptionConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\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 apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings, accountNumber?: string) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('ChannelDeliveryConfiguration', this.apiSettings);\n public getCacheObjectType = () => 'ChannelDeliveryConfiguration';\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Creates the input required to make the retail api call\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","import { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\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';\n\ninterface IChannelIdentity {\n channelIdentities: ChannelIdentity[];\n}\n\n/**\n * Calls the Retail API and returns the channels\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 apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`ChannelIdentities`, this.apiSettings);\n public getCacheObjectType = () => `ChannelIdentities`;\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call\n */\nconst createChannelIdentitiesInput = (inputData: ICreateActionContext>) => {\n return new GetChannelIdentitiesInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * Get channels action\n */\nexport async function getChannelsAction(\n input: GetChannelIdentitiesInput,\n ctx: IActionContext\n): Promise {\n if (!ctx) {\n throw new Error(`getChannelsAction - Action context cannot be null/undefined`);\n }\n\n let channels: ChannelIdentity[] = [];\n\n try {\n channels = await getChannels()(ctx);\n } catch (error) {\n throw error;\n }\n\n return { channelIdentities: channels };\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/order-management/get-channels',\n action: >getChannelsAction,\n input: createChannelIdentitiesInput\n});\n","import { 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 default createObservableDataAction({\n action: >retailAction,\n input: () => createGetTenderTypesInput({})\n});\n","import { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductDimension, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport getSelectedVariant, { SelectedVariantInput } from './get-selected-variant';\nimport { getSelectedProductIdFromActionInput } from './utilities/utils';\n\nimport { getDimensionValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\n/**\n * Input class for the getDimensionsForSelectedVariant data action\n */\nexport class GetDimensionsForSelectedVariantInput implements IActionInput {\n public productId: number;\n public channelId: number;\n public matchingDimensionValues: ProductDimension[];\n\n constructor(productId: number, channelId: number, matchingDimensionValues?: ProductDimension[]) {\n this.productId = productId;\n this.channelId = channelId;\n this.matchingDimensionValues = matchingDimensionValues || [];\n }\n\n public getCacheKey = () => `DimensionsForSelectedVariant`;\n public getCacheObjectType = () => 'DimensionsForSelectedVariantInput';\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 */\nconst createDimensionsForSelectedVariantInput = (inputData: ICreateActionContext>): SelectedVariantInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n\n if (productId) {\n return new GetDimensionsForSelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId, []);\n } else {\n throw new Error('Unable to create DimensionsForSelectedVariantInput, no productId found on module config or query');\n }\n};\n\n/**\n * Action Method for the getDimensionsForSelectedVariant Data Action\n */\nasync function getDimensionsForSelectedVariantAction(\n input: GetDimensionsForSelectedVariantInput,\n ctx: IActionContext\n): Promise {\n const selectedVariantInput = new SelectedVariantInput(input.productId, input.channelId, input.matchingDimensionValues);\n\n const activeProduct: SimpleProduct | null = await getSelectedVariant(selectedVariantInput, ctx);\n\n if (activeProduct && activeProduct.Dimensions && activeProduct.Dimensions.length > 0) {\n const results: ProductDimensionFull[] = [];\n\n for (const dimension of activeProduct.Dimensions) {\n const dimensionValues = await getDimensionValuesAsync(\n { callerContext: ctx, queryResultSettings: {} },\n activeProduct.MasterProductId ? activeProduct.MasterProductId : activeProduct.RecordId,\n input.channelId,\n dimension.DimensionTypeValue,\n input.matchingDimensionValues.filter(value => value.DimensionTypeValue !== dimension.DimensionTypeValue),\n // @ts-ignore: KitVariantResolution context should be nullable\n null\n );\n\n const fullDimension: ProductDimensionFull = {\n ...dimension,\n DimensionValues: dimensionValues,\n };\n\n results.push(fullDimension);\n }\n\n return results;\n }\n\n return [];\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-dimensions/for-selected-variant',\n action: >getDimensionsForSelectedVariantAction,\n input: createDimensionsForSelectedVariantInput\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\nimport { createObservableDataAction, IAction, IActionInput } from '@msdyn365-commerce/core';\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 default createObservableDataAction({\n action: >getGenericAction,\n input: createInternalRatingsReviewsStateInput\n});\n","/**\n* Copyright (c) 2018 Microsoft Corporation\n* Modules Registration\n* THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\n*/\n\nconst universal = require('react-universal-component').default;\nexport const componentDictionary = {};\n\ncomponentDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|components|cartlineitem'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/components/cartlineitem.component.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-fabrikam-design-kit-dist-lib-modules-fabrikam-views-components-cartlineitem.component.js',\n ignoreBabelRename: true\n }\n )};\ncomponentDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|components|promocode'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/components/promocode.component.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-fabrikam-design-kit-dist-lib-modules-fabrikam-views-components-promocode.component.js',\n ignoreBabelRename: true\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, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { Cart, CartLine, IDataServiceRequest, IRemoveCartLinesParam } from '@msdyn365-commerce/retail-proxy';\nimport { IProductTransaction } from '@msdyn365-commerce/telemetry-internal';\nimport { getProductInfoFromCart } 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 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 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\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\n // Fire RemoveFromCart event if cart lines were removed\n if (removedCartLines && removedCartLines.length > 0) {\n window._msdyn365.telemetry.logEvent(\n TelemetryEvent.RemoveFromCart,\n getProductInfoFromCart(\n { ...{}, ...cart, ...{ CartLines: removedCartLines } },\n actionContext.requestContext.telemetryData,\n actionContext.requestContext\n )\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 * Licensed under the MIT License. See License.txt in the project root for license information.\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 */\nexport const hydrateRefinersFromUrl = (requestContext: IRequestContext): ProductRefinerValue[] => {\n const compressedRefinerArray = parseQueryParam<(string | number)[][]>('refiners', requestContext);\n if (!compressedRefinerArray || !compressedRefinerArray.length) {\n return [];\n }\n\n return compressedRefinerArray.map((compressedRefiner) => {\n try {\n const parsedRefiner: ProductRefinerValue = {};\n compressedRefinerKeys.forEach((refinerKey, index) => {\n // @ts-ignore: This line is intentionally not typesafe\n parsedRefiner[refinerKey] = compressedRefiner[index];\n });\n return parsedRefiner;\n } catch(e) {\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 // @ts-ignore: This line is intentionally not typesafe\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 */\nexport const buildListPageUrl = (fullUrl: URL, refiners?: ProductRefinerValue[], sortingColumns?: SortColumn[], skipCount?: number) => {\n // Refiner Change flow\n if (refiners !== undefined) {\n if (!refiners.length) {\n fullUrl.searchParams.delete('refiners');\n } else {\n fullUrl.searchParams.set('refiners', JSON.stringify(compressRefiners(refiners)));\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) {\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 } else {\n // NOTE: Typing on requestURL is incorrect\n if (requestContext.url.requestUrl.href) {\n return new URL(requestContext.url.requestUrl.href);\n } else {\n return new URL((requestContext.url.requestUrl));\n }\n }\n};\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport {\n buildCacheKey,\n QueryResultSettingsProxy\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CacheType,\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 { toJS } from 'mobx';\nimport { hydrateRefinersFromUrl } from './url-utils';\n\nexport type listPageType = 'Category' | 'Search' | 'Unknown';\n\n/**\n * Get include attributes from config.\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 * BaseCollection Action Input\n */\nexport class BaseCollectionInput implements IActionInput {\n public pageType: listPageType;\n public category: number | undefined;\n public searchText: string | undefined;\n public refiners: ProductRefinerValue[];\n public queryResultSettings: IQueryResultSettings;\n public apiSettings: ICommerceApiSettings;\n public includeAttributes:boolean | undefined;\n public locale?:string;\n\n 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 locale?: string\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.locale = locale;\n }\n public getCacheKey = () => {\n const queryResultSettings = {\n ...this.queryResultSettings.Paging,\n ...toJS(this.queryResultSettings.Sorting)\n };\n // tslint:disable \n const cacheKey = buildCacheKey(\n `${this.pageType}-${this.locale}-${this.category || this.searchText}-${this.refiners.map(refiner => `${refiner.RefinerRecordId + (refiner.LeftValueBoundString || '') + (refiner.RightValueBoundString || '')}-`)}-${convertToString(queryResultSettings)}`,\n this.apiSettings, this.locale\n ); \n return cacheKey;\n }\n \n public getCacheObjectType = () => 'CollectionActionResult';\n public dataCacheType = (): CacheType => 'request';\n}\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 locale?: string\n) => BaseCollectionInput;\n\n/**\n * TODO: Use this function to create the input required to make the action call\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)\n ? 'Category'\n : 'Search';\n\n const queryResultSettings = QueryResultSettingsProxy.fromInputData(args).QueryResultSettings;\n const queryRefiners = hydrateRefinersFromUrl(args.requestContext);\n const includeAttributes=getIncludeAttributes(args);\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 args.requestContext.locale\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 args.requestContext.locale\n )\n } else if (pageType === 'Search' && args.requestContext.query && args.requestContext.query.productId) {\n return new inputClassConstuctor(\n pageType,\n args.requestContext.apiSettings,\n queryResultSettings,\n queryRefiners,\n undefined,\n args.requestContext.query.productId,\n includeAttributes,\n args.requestContext.locale\n );\n }\n\n throw new Error('[getFullProductsForCollection]Unable to create input');\n};","import { buildCacheKey, getProductUrlSync, getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { CacheType, createObservableDataAction, IAction, IActionContext,IActionInput, ICommerceApiSettings, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { IDefaultPageSummaryConfig } from '../default-page-summary/default-page-summary.props.autogenerated';\nimport { IPageSummaryData } from '../IPageSummaryData';\n\n/** Product Page Summary Input */\nexport class ProductPageSummaryInput implements IActionInput {\n public apiSettings: ICommerceApiSettings;\n public config: IDefaultPageSummaryConfig;\n\n constructor(config: IDefaultPageSummaryConfig, apiSettings: ICommerceApiSettings) {\n this.config = config || {};\n this.apiSettings = apiSettings;\n }\n\n public getCacheObjectType = (): string => 'ProductPageSummary';\n public getCacheKey = (): string => `${buildCacheKey('ProductPageSummary', this.apiSettings)}-${this.config.title}`;\n public dataCacheType = (): CacheType => 'request';\n}\n\nconst createGetSelectedVariantInput = (inputData: IActionContext): SelectedVariantInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n\n if (productId) {\n return new SelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId, []);\n } else {\n throw new Error('Unable to create SelectedVariantInput, no productId found on module config or query');\n }\n};\n\nconst action = async (input: ProductPageSummaryInput, context: IActionContext): Promise => {\n const { config } = input;\n let simpleProductData;\n try {\n simpleProductData = await getSelectedVariant(createGetSelectedVariantInput(context), context);\n } catch (e) {\n // Do nothing, if there's an error we fall back to values defined from data\n }\n if (simpleProductData) {\n let productUrl: string | undefined;\n try {\n productUrl = getProductUrlSync(simpleProductData, context);\n // @ts-ignore - TODO: property exits in new version of SDK. Remove once released.\n const canonicalDomain = context.requestContext.canonicalDomain;\n if (productUrl && canonicalDomain) {\n productUrl = `https://${canonicalDomain}${productUrl}`;\n } else {\n productUrl = undefined;\n }\n } catch (e) {\n productUrl = undefined;\n }\n return {\n title: simpleProductData.Name,\n description: simpleProductData.Description,\n sharingImageUrl: simpleProductData.PrimaryImageUrl,\n canonicalUrl: productUrl,\n faviconUrl: config && config.faviconUrl\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 sharingImageUrl: config.sharingImage && config.sharingImage.src,\n faviconUrl: config && config.faviconUrl\n };\n } else {\n return {};\n }\n};\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/page-summary/product-page-summary',\n action: >action,\n input: (args: ICreateActionContext) => {\n return new ProductPageSummaryInput(args.config, args.requestContext.apiSettings);\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\nconst universal = require('react-universal-component').default;\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 try {\n\n\n isNotRegistered('aad-generic') && (binding.modules['aad-generic'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/aad-generic/aad-generic'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-aad-generic-aad-generic',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/aad-generic/aad-generic.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'aad-generic',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/aad-generic'\n });\n \n\n isNotRegistered('accordion') && (binding.modules['accordion'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/accordion/dist/lib/modules/accordion/accordion'),\n {\n chunkName: () => '@msdyn365-commerce-modules-accordion-dist-lib-modules-accordion-accordion',\n ignoreBabelRename: true\n }\n ),\n $type: 'moduleDefinition',\n dataActions: [{name:'accordionExpandedState', path:'@msdyn365-commerce-modules/accordion/dist/lib/data-actions/accordion-state-data-action', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/accordion/dist/lib/modules/accordion/accordion.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'accordion',\n packageName: 'accordion',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/accordion/dist/lib/modules/accordion'\n });\n \n\n isNotRegistered('accordion-item') && (binding.modules['accordion-item'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/accordion/dist/lib/modules/accordion-item/accordion-item'),\n {\n chunkName: () => '@msdyn365-commerce-modules-accordion-dist-lib-modules-accordion-item-accordion-item',\n ignoreBabelRename: true\n }\n ),\n $type: 'moduleDefinition',\n dataActions: [{name:'accordionExpandedState', path:'@msdyn365-commerce-modules/accordion/dist/lib/data-actions/accordion-state-data-action', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/accordion/dist/lib/modules/accordion-item/accordion-item.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'accordion-item',\n packageName: 'accordion',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-address-tile/account-address-tile'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-address-tile-account-address-tile',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-address-tile/account-address-tile.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'account-address-tile',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-customer-balance/account-customer-balance'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-customer-balance-account-customer-balance',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-customer-balance/account-customer-balance.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'account-customer-balance',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-customer-balance-tile/account-customer-balance-tile'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-customer-balance-tile-account-customer-balance-tile',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-customer-balance-tile/account-customer-balance-tile.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'account-customer-balance-tile',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-generic-tile/account-generic-tile'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-generic-tile-account-generic-tile',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-generic-tile/account-generic-tile.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'account-generic-tile',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-invoice-tile/account-invoice-tile'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-invoice-tile-account-invoice-tile',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'invoices', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoices', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-invoice-tile/account-invoice-tile.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'account-invoice-tile',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-loyalty/account-loyalty'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-loyalty-account-loyalty',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-loyalty/account-loyalty.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'account-loyalty',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-loyalty-tile/account-loyalty-tile'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-loyalty-tile-account-loyalty-tile',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-loyalty-tile/account-loyalty-tile.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'account-loyalty-tile',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/address/dist/lib/modules/account-management-address/account-management-address'),\n {\n chunkName: () => '@msdyn365-commerce-modules-address-dist-lib-modules-account-management-address-account-management-address',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/address/dist/lib/modules/account-management-address/account-management-address.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'account-management-address',\n packageName: 'address',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-order-templates-tile/account-order-templates-tile'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-order-templates-tile-account-order-templates-tile',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 1},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 1},{name:'orderTemplates', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates', runOn: 1}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-order-templates-tile/account-order-templates-tile.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'account-order-templates-tile',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-profile/account-profile'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-profile-account-profile',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-profile/account-profile.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'account-profile',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-profile-edit/account-profile-edit'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-profile-edit-account-profile-edit',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-profile-edit/account-profile-edit.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'account-profile-edit',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-welcome-tile/account-welcome-tile'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-welcome-tile-account-welcome-tile',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'accountInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-welcome-tile/account-welcome-tile.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'account-welcome-tile',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-wishlist-tile/account-wishlist-tile'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-wishlist-tile-account-wishlist-tile',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-wishlist-tile/account-wishlist-tile.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'account-wishlist-tile',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/account-wishlist-tile'\n });\n \n\n isNotRegistered('back-top-footer') && (binding.modules['back-top-footer'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/footer/dist/lib/modules/back-top-footer/back-top-footer'),\n {\n chunkName: () => '@msdyn365-commerce-modules-footer-dist-lib-modules-back-top-footer-back-top-footer',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/footer/dist/lib/modules/back-top-footer/back-top-footer.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'back-top-footer',\n packageName: 'footer',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/footer/dist/lib/modules/back-top-footer'\n });\n \n\n isNotRegistered('breadcrumb') && (binding.modules['breadcrumb'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/breadcrumb/dist/lib/modules/breadcrumb/breadcrumb'),\n {\n chunkName: () => '@msdyn365-commerce-modules-breadcrumb-dist-lib-modules-breadcrumb-breadcrumb',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/breadcrumb/dist/lib/modules/breadcrumb/breadcrumb.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'breadcrumb',\n packageName: 'breadcrumb',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/breadcrumb/dist/lib/modules/breadcrumb'\n });\n \n\n isNotRegistered('business-account-address') && (binding.modules['business-account-address'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/address/dist/lib/modules/business-account-address/business-account-address'),\n {\n chunkName: () => '@msdyn365-commerce-modules-address-dist-lib-modules-business-account-address-business-account-address',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/address/dist/lib/modules/business-account-address/business-account-address.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'business-account-address',\n packageName: 'address',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/business-organization-list/dist/lib/modules/business-organization-list/business-organization-list'),\n {\n chunkName: () => '@msdyn365-commerce-modules-business-organization-list-dist-lib-modules-business-organization-list-business-organization-list',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'users', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-organization-users', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/business-organization-list/dist/lib/modules/business-organization-list/business-organization-list.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'business-organization-list',\n packageName: 'business-organization-list',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/business-account-management/dist/lib/modules/business-sign-up/business-sign-up'),\n {\n chunkName: () => '@msdyn365-commerce-modules-business-account-management-dist-lib-modules-business-sign-up-business-sign-up',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/business-account-management/dist/lib/modules/business-sign-up/business-sign-up.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'business-sign-up',\n packageName: 'business-account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/business-account-management/dist/lib/modules/business-sign-up'\n });\n \n\n isNotRegistered('buybox') && (binding.modules['buybox'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/buybox/dist/lib/modules/buybox/buybox'),\n {\n chunkName: () => '@msdyn365-commerce-modules-buybox-dist-lib-modules-buybox-buybox',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [{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:'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: 0},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/buybox/dist/lib/modules/buybox/buybox.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'buybox',\n packageName: 'buybox',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/buybox/dist/lib/modules/buybox'\n });\n \n\n isNotRegistered('carousel') && (binding.modules['carousel'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/carousel/dist/lib/modules/carousel/carousel'),\n {\n chunkName: () => '@msdyn365-commerce-modules-carousel-dist-lib-modules-carousel-carousel',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/carousel/dist/lib/modules/carousel/carousel.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'carousel',\n packageName: 'carousel',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/carousel/dist/lib/modules/carousel'\n });\n \n\n isNotRegistered('cart') && (binding.modules['cart'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/cart/dist/lib/modules/cart/cart'),\n {\n chunkName: () => '@msdyn365-commerce-modules-cart-dist-lib-modules-cart-cart',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/cart/dist/lib/modules/cart/cart.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'cart',\n packageName: 'cart',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/cart/dist/lib/modules/cart'\n });\n \n\n isNotRegistered('cart-icon') && (binding.modules['cart-icon'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/cart/dist/lib/modules/cart-icon/cart-icon'),\n {\n chunkName: () => '@msdyn365-commerce-modules-cart-dist-lib-modules-cart-icon-cart-icon',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [{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:'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 definitionPath: 'node_modules/@msdyn365-commerce-modules/cart/dist/lib/modules/cart-icon/cart-icon.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'cart-icon',\n packageName: 'cart',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary'),\n {\n chunkName: () => '@msdyn365-commerce-modules-page-summary-dist-lib-modules-default-page-summary-default-page-summary',\n ignoreBabelRename: true\n }\n ),\n $type: 'htmlHeadTagsModule',\n dataActions: [{name:'pageSummary', path:'@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary/category-page-summary.action', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary/category-page-summary.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'category-page-summary',\n packageName: 'page-summary',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary'\n });\n \n\n isNotRegistered('checkout') && (binding.modules['checkout'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout/checkout'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-checkout',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout/checkout.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'checkout',\n packageName: 'checkout',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout'\n });\n \n\n isNotRegistered('checkout-billing-address') && (binding.modules['checkout-billing-address'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/address/dist/lib/modules/checkout-billing-address/checkout-billing-address'),\n {\n chunkName: () => '@msdyn365-commerce-modules-address-dist-lib-modules-checkout-billing-address-checkout-billing-address',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/address/dist/lib/modules/checkout-billing-address/checkout-billing-address.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'checkout-billing-address',\n packageName: 'address',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-customer-account-payment/checkout-customer-account-payment'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-customer-account-payment-checkout-customer-account-payment',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-customer-account-payment/checkout-customer-account-payment.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'checkout-customer-account-payment',\n packageName: 'checkout',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-delivery-options/checkout-delivery-options'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-delivery-options-checkout-delivery-options',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-delivery-options/checkout-delivery-options.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'checkout-delivery-options',\n packageName: 'checkout',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-delivery-options'\n });\n \n\n isNotRegistered('checkout-gift-card') && (binding.modules['checkout-gift-card'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-gift-card/checkout-gift-card'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-gift-card-checkout-gift-card',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'checkout', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action', runOn: 1}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-gift-card/checkout-gift-card.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'checkout-gift-card',\n packageName: 'checkout',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-guest-profile/checkout-guest-profile'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-guest-profile-checkout-guest-profile',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-guest-profile/checkout-guest-profile.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'checkout-guest-profile',\n packageName: 'checkout',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-guest-profile'\n });\n \n\n isNotRegistered('checkout-loyalty') && (binding.modules['checkout-loyalty'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-loyalty/checkout-loyalty'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-loyalty-checkout-loyalty',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-loyalty/checkout-loyalty.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'checkout-loyalty',\n packageName: 'checkout',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/checkout-order-confirmation/checkout-order-confirmation'),\n {\n chunkName: () => '@msdyn365-commerce-modules-order-management-dist-lib-modules-checkout-order-confirmation-checkout-order-confirmation',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/order-management/dist/lib/modules/checkout-order-confirmation/checkout-order-confirmation.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'checkout-order-confirmation',\n packageName: 'order-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-payment-instrument/checkout-payment-instrument'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-payment-instrument-checkout-payment-instrument',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-payment-instrument/checkout-payment-instrument.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'checkout-payment-instrument',\n packageName: 'checkout',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-payment-instrument'\n });\n \n\n isNotRegistered('checkout-pickup') && (binding.modules['checkout-pickup'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-pickup/checkout-pickup'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-pickup-checkout-pickup',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-pickup/checkout-pickup.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'checkout-pickup',\n packageName: 'checkout',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-section-container/checkout-section-container'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-section-container-checkout-section-container',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-section-container/checkout-section-container.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'checkout-section-container',\n packageName: 'checkout',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/address/dist/lib/modules/checkout-shipping-address/checkout-shipping-address'),\n {\n chunkName: () => '@msdyn365-commerce-modules-address-dist-lib-modules-checkout-shipping-address-checkout-shipping-address',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/address/dist/lib/modules/checkout-shipping-address/checkout-shipping-address.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'checkout-shipping-address',\n packageName: 'address',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-terms-and-conditions/checkout-terms-and-conditions'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-terms-and-conditions-checkout-terms-and-conditions',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'checkout', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action', runOn: 1}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-terms-and-conditions/checkout-terms-and-conditions.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'checkout-terms-and-conditions',\n packageName: 'checkout',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/content-block/dist/lib/modules/content-block/content-block'),\n {\n chunkName: () => '@msdyn365-commerce-modules-content-block-dist-lib-modules-content-block-content-block',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/content-block/dist/lib/modules/content-block/content-block.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'content-block',\n packageName: 'content-block',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/content-block/dist/lib/modules/content-block'\n });\n \n\n isNotRegistered('cookie-compliance') && (binding.modules['cookie-compliance'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/cookie-compliance/dist/lib/modules/cookie-compliance/cookie-compliance'),\n {\n chunkName: () => '@msdyn365-commerce-modules-cookie-compliance-dist-lib-modules-cookie-compliance-cookie-compliance',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/cookie-compliance/dist/lib/modules/cookie-compliance/cookie-compliance.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'cookie-compliance',\n packageName: 'cookie-compliance',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/cookie-compliance/dist/lib/modules/cookie-compliance'\n });\n \n\n isNotRegistered('default-container') && (binding.modules['default-container'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-container/default-container'),\n {\n chunkName: () => '@msdyn365-commerce-modules-core-components-dist-lib-modules-default-container-default-container',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-container/default-container.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'default-container',\n packageName: 'core-components',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-container-2-slots/default-container-2-slots'),\n {\n chunkName: () => '@msdyn365-commerce-modules-core-components-dist-lib-modules-default-container-2-slots-default-container-2-slots',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-container-2-slots/default-container-2-slots.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'default-container-2-slots',\n packageName: 'core-components',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-container-3-slots/default-container-3-slots'),\n {\n chunkName: () => '@msdyn365-commerce-modules-core-components-dist-lib-modules-default-container-3-slots-default-container-3-slots',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-container-3-slots/default-container-3-slots.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'default-container-3-slots',\n packageName: 'core-components',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-external-script/default-external-script'),\n {\n chunkName: () => '@msdyn365-commerce-modules-core-components-dist-lib-modules-default-external-script-default-external-script',\n ignoreBabelRename: true\n }\n ),\n $type: 'scriptModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-external-script/default-external-script.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'default-external-script',\n packageName: 'core-components',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-inline-script/default-inline-script'),\n {\n chunkName: () => '@msdyn365-commerce-modules-core-components-dist-lib-modules-default-inline-script-default-inline-script',\n ignoreBabelRename: true\n }\n ),\n $type: 'scriptModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-inline-script/default-inline-script.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'default-inline-script',\n packageName: 'core-components',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-metatags/default-metatags'),\n {\n chunkName: () => '@msdyn365-commerce-modules-core-components-dist-lib-modules-default-metatags-default-metatags',\n ignoreBabelRename: true\n }\n ),\n $type: 'htmlHeadTagsModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-metatags/default-metatags.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'default-metatags',\n packageName: 'core-components',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-metatags'\n });\n \n\n isNotRegistered('default-page') && (binding.modules['default-page'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/default-page/default-page'),\n {\n chunkName: () => '@msdyn365-commerce-modules-core-components-dist-lib-modules-default-page-default-page',\n ignoreBabelRename: true\n }\n ),\n $type: 'pageModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/default-page/default-page.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'default-page',\n packageName: 'core-components',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary'),\n {\n chunkName: () => '@msdyn365-commerce-modules-page-summary-dist-lib-modules-default-page-summary-default-page-summary',\n ignoreBabelRename: true\n }\n ),\n $type: 'htmlHeadTagsModule',\n dataActions: [{name:'pageSummary', path:'@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary.action', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'default-page-summary',\n packageName: 'page-summary',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary'\n });\n \n\n isNotRegistered('fabrikam') && (binding.modules['fabrikam'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/fabrikam'),\n {\n chunkName: () => '@msdyn365-commerce-modules-fabrikam-design-kit-dist-lib-modules-fabrikam-fabrikam',\n ignoreBabelRename: true\n }\n ),\n $type: 'themeModule',\n dataActions: [],\n definitionExtensions: ['buybox','content-block','promo-banner','text-block'],\n definitionPath: 'node_modules/@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/fabrikam.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'fabrikam',\n packageName: 'fabrikam-design-kit',\n \n parentDefinitionPath: '',\n \n themeSettings: 'fabrikam.theme.settings.json',\n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam'\n });\n \n\n isNotRegistered('footer-category') && (binding.modules['footer-category'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/footer/dist/lib/modules/footer-category/footer-category'),\n {\n chunkName: () => '@msdyn365-commerce-modules-footer-dist-lib-modules-footer-category-footer-category',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/footer/dist/lib/modules/footer-category/footer-category.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'footer-category',\n packageName: 'footer',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/footer/dist/lib/modules/footer-category'\n });\n \n\n isNotRegistered('footer-item') && (binding.modules['footer-item'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/footer/dist/lib/modules/footer-item/footer-item'),\n {\n chunkName: () => '@msdyn365-commerce-modules-footer-dist-lib-modules-footer-item-footer-item',\n ignoreBabelRename: true\n }\n ),\n $type: 'moduleDefinition',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/footer/dist/lib/modules/footer-item/footer-item.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'footer-item',\n packageName: 'footer',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/gift-card-balance-check/gift-card-balance-check'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-gift-card-balance-check-gift-card-balance-check',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/gift-card-balance-check/gift-card-balance-check.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'gift-card-balance-check',\n packageName: 'checkout',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/checkout/dist/lib/modules/gift-card-balance-check'\n });\n \n\n isNotRegistered('header') && (binding.modules['header'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/header/dist/lib/modules/header/header'),\n {\n chunkName: () => '@msdyn365-commerce-modules-header-dist-lib-modules-header-header',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [{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}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/header/dist/lib/modules/header/header.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'header',\n packageName: 'header',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/header/dist/lib/modules/header'\n });\n \n\n isNotRegistered('iframe') && (binding.modules['iframe'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/iframe/dist/lib/modules/iframe/iframe'),\n {\n chunkName: () => '@msdyn365-commerce-modules-iframe-dist-lib-modules-iframe-iframe',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/iframe/dist/lib/modules/iframe/iframe.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'iframe',\n packageName: 'iframe',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/iframe/dist/lib/modules/iframe'\n });\n \n\n isNotRegistered('invoices-list') && (binding.modules['invoices-list'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/invoice/dist/lib/modules/invoices-list/invoices-list'),\n {\n chunkName: () => '@msdyn365-commerce-modules-invoice-dist-lib-modules-invoices-list-invoices-list',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'customer', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'invoices', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoices', runOn: 1}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/invoice/dist/lib/modules/invoices-list/invoices-list.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'invoices-list',\n packageName: 'invoice',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary'),\n {\n chunkName: () => '@msdyn365-commerce-modules-page-summary-dist-lib-modules-default-page-summary-default-page-summary',\n ignoreBabelRename: true\n }\n ),\n $type: 'htmlHeadTagsModule',\n dataActions: [{name:'pageSummary', path:'@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary/list-page-summary.action', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary/list-page-summary.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'list-page-summary',\n packageName: 'page-summary',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-sign-up/loyalty-sign-up'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-loyalty-sign-up-loyalty-sign-up',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-sign-up/loyalty-sign-up.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'loyalty-sign-up',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-terms/loyalty-terms'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-loyalty-terms-loyalty-terms',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [{name:'loyaltyCard', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card', runOn: 1}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-terms/loyalty-terms.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'loyalty-terms',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-terms'\n });\n \n\n isNotRegistered('map') && (binding.modules['map'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/map/dist/lib/modules/map/map'),\n {\n chunkName: () => '@msdyn365-commerce-modules-map-dist-lib-modules-map-map',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/map/dist/lib/modules/map/map.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'map',\n packageName: 'map',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/map/dist/lib/modules/map'\n });\n \n\n isNotRegistered('media-gallery') && (binding.modules['media-gallery'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/media-gallery/dist/lib/modules/media-gallery/media-gallery'),\n {\n chunkName: () => '@msdyn365-commerce-modules-media-gallery-dist-lib-modules-media-gallery-media-gallery',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'mediaLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id', runOn: 0},{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/media-gallery/dist/lib/modules/media-gallery/media-gallery.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'media-gallery',\n packageName: 'media-gallery',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/media-gallery/dist/lib/modules/media-gallery'\n });\n \n\n isNotRegistered('navigation-menu') && (binding.modules['navigation-menu'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu'),\n {\n chunkName: () => '@msdyn365-commerce-modules-navigation-menu-dist-lib-modules-navigation-menu-navigation-menu',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'categories', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'navigation-menu',\n packageName: 'navigation-menu',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu'\n });\n \n\n isNotRegistered('order-confirmation') && (binding.modules['order-confirmation'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-confirmation/order-confirmation'),\n {\n chunkName: () => '@msdyn365-commerce-modules-order-management-dist-lib-modules-order-confirmation-order-confirmation',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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-with-hydrations', runOn: 0},{name:'tenderTypes', path:'@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/order-management/dist/lib/modules/order-confirmation/order-confirmation.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'order-confirmation',\n packageName: 'order-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/order-management/dist/lib/modules/order-confirmation'\n });\n \n\n isNotRegistered('order-details') && (binding.modules['order-details'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-details/order-details'),\n {\n chunkName: () => '@msdyn365-commerce-modules-order-management-dist-lib-modules-order-details-order-details',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/order-management/dist/lib/modules/order-details/order-details.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'order-details',\n packageName: 'order-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/order-management/dist/lib/modules/order-details'\n });\n \n\n isNotRegistered('order-history') && (binding.modules['order-history'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-history/order-history'),\n {\n chunkName: () => '@msdyn365-commerce-modules-order-management-dist-lib-modules-order-history-order-history',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/order-management/dist/lib/modules/order-history/order-history.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'order-history',\n packageName: 'order-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/order-management/dist/lib/modules/order-history'\n });\n \n\n isNotRegistered('order-template') && (binding.modules['order-template'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template/order-template'),\n {\n chunkName: () => '@msdyn365-commerce-modules-order-template-dist-lib-modules-order-template-order-template',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template/order-template.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'order-template',\n packageName: 'order-template',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template-list/order-template-list'),\n {\n chunkName: () => '@msdyn365-commerce-modules-order-template-dist-lib-modules-order-template-list-order-template-list',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'orderTemplates', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview', runOn: 1}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template-list/order-template-list.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'order-template-list',\n packageName: 'order-template',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/organization-users-tile/organization-users-tile'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-organization-users-tile-organization-users-tile',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'users', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-organization-users-count', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/organization-users-tile/organization-users-tile.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'organization-users-tile',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/password-reset/password-reset'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-password-reset-password-reset',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/password-reset/password-reset.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'password-reset',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/password-reset-verification/password-reset-verification'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-password-reset-verification-password-reset-verification',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/password-reset-verification/password-reset-verification.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'password-reset-verification',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/place-holder-for-container-preview/place-holder-for-container-preview'),\n {\n chunkName: () => '@msdyn365-commerce-modules-core-components-dist-lib-modules-place-holder-for-container-preview-place-holder-for-container-preview',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/place-holder-for-container-preview/place-holder-for-container-preview.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'place-holder-for-container-preview',\n packageName: 'core-components',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/product-collection/dist/lib/modules/product-collection/product-collection'),\n {\n chunkName: () => '@msdyn365-commerce-modules-product-collection-dist-lib-modules-product-collection-product-collection',\n ignoreBabelRename: true\n }\n ),\n $type: 'containerModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/product-collection/dist/lib/modules/product-collection/product-collection.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'product-collection',\n packageName: 'product-collection',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary'),\n {\n chunkName: () => '@msdyn365-commerce-modules-page-summary-dist-lib-modules-default-page-summary-default-page-summary',\n ignoreBabelRename: true\n }\n ),\n $type: 'htmlHeadTagsModule',\n dataActions: [{name:'pageSummary', path:'@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary.action', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'product-page-summary',\n packageName: 'page-summary',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/product-specification/dist/lib/modules/product-specification/product-specification'),\n {\n chunkName: () => '@msdyn365-commerce-modules-product-specification-dist-lib-modules-product-specification-product-specification',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/product-specification/dist/lib/modules/product-specification/product-specification.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'product-specification',\n packageName: 'product-specification',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/product-specification/dist/lib/modules/product-specification'\n });\n \n\n isNotRegistered('promo-banner') && (binding.modules['promo-banner'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/promo-banner/dist/lib/modules/promo-banner/promo-banner'),\n {\n chunkName: () => '@msdyn365-commerce-modules-promo-banner-dist-lib-modules-promo-banner-promo-banner',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/promo-banner/dist/lib/modules/promo-banner/promo-banner.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'promo-banner',\n packageName: 'promo-banner',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/promo-banner/dist/lib/modules/promo-banner'\n });\n \n\n isNotRegistered('ratings-histogram') && (binding.modules['ratings-histogram'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/ratings-histogram/ratings-histogram'),\n {\n chunkName: () => '@msdyn365-commerce-modules-ratings-reviews-dist-lib-modules-ratings-histogram-ratings-histogram',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/ratings-histogram/ratings-histogram.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'ratings-histogram',\n packageName: 'ratings-reviews',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/ratings-histogram'\n });\n \n\n isNotRegistered('reviews-list') && (binding.modules['reviews-list'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/reviews-list/reviews-list'),\n {\n chunkName: () => '@msdyn365-commerce-modules-ratings-reviews-dist-lib-modules-reviews-list-reviews-list',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/reviews-list/reviews-list.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'reviews-list',\n packageName: 'ratings-reviews',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/reviews-list'\n });\n \n\n isNotRegistered('script-injector') && (binding.modules['script-injector'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/core-components/dist/lib/modules/script-injector/script-injector'),\n {\n chunkName: () => '@msdyn365-commerce-modules-core-components-dist-lib-modules-script-injector-script-injector',\n ignoreBabelRename: true\n }\n ),\n $type: 'scriptModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/script-injector/script-injector.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'script-injector',\n packageName: 'core-components',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/core-components/dist/lib/modules/script-injector'\n });\n \n\n isNotRegistered('search') && (binding.modules['search'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/search/dist/lib/modules/search/search'),\n {\n chunkName: () => '@msdyn365-commerce-modules-search-dist-lib-modules-search-search',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{name:'searchState', path:'@msdyn365-commerce-modules/search-utilities/dist/lib/search-state-data-action', runOn: 1}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/search/dist/lib/modules/search/search.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'search',\n packageName: 'search',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/search/dist/lib/modules/search'\n });\n \n\n isNotRegistered('search-result-container') && (binding.modules['search-result-container'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/search-result-container'),\n {\n chunkName: () => '@msdyn365-commerce-modules-search-result-container-dist-lib-modules-search-result-container-search-result-container',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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:'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 definitionPath: 'node_modules/@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/search-result-container.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'search-result-container',\n packageName: 'search-result-container',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-in/sign-in'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-sign-in-sign-in',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-in/sign-in.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'sign-in',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-in'\n });\n \n\n isNotRegistered('sign-up') && (binding.modules['sign-up'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-up/sign-up'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-sign-up-sign-up',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-up/sign-up.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'sign-up',\n packageName: 'account-management',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-up'\n });\n \n\n isNotRegistered('site-picker') && (binding.modules['site-picker'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/site-picker/dist/lib/modules/site-picker/site-picker'),\n {\n chunkName: () => '@msdyn365-commerce-modules-site-picker-dist-lib-modules-site-picker-site-picker',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/site-picker/dist/lib/modules/site-picker/site-picker.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'site-picker',\n packageName: 'site-picker',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/site-picker/dist/lib/modules/site-picker'\n });\n \n\n isNotRegistered('social-share') && (binding.modules['social-share'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/social-share/dist/lib/modules/social-share/social-share'),\n {\n chunkName: () => '@msdyn365-commerce-modules-social-share-dist-lib-modules-social-share-social-share',\n ignoreBabelRename: true\n }\n ),\n $type: 'moduleDefinition',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/social-share/dist/lib/modules/social-share/social-share.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'social-share',\n packageName: 'social-share',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: '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 component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/social-share/dist/lib/modules/social-share-item/social-share-item'),\n {\n chunkName: () => '@msdyn365-commerce-modules-social-share-dist-lib-modules-social-share-item-social-share-item',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/social-share/dist/lib/modules/social-share-item/social-share-item.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'social-share-item',\n packageName: 'social-share',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/social-share/dist/lib/modules/social-share-item'\n });\n \n\n isNotRegistered('spacer') && (binding.modules['spacer'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/spacer/dist/lib/modules/spacer/spacer'),\n {\n chunkName: () => '@msdyn365-commerce-modules-spacer-dist-lib-modules-spacer-spacer',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/spacer/dist/lib/modules/spacer/spacer.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'spacer',\n packageName: 'spacer',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/spacer/dist/lib/modules/spacer'\n });\n \n\n isNotRegistered('starter') && (binding.modules['starter'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/starter-theme-pack/dist/lib/modules/starter/starter'),\n {\n chunkName: () => '@msdyn365-commerce-modules-starter-theme-pack-dist-lib-modules-starter-starter',\n ignoreBabelRename: true\n }\n ),\n $type: 'themeModule',\n dataActions: [],\n definitionExtensions: ['content-block','promo-banner','text-block'],\n definitionPath: 'node_modules/@msdyn365-commerce-modules/starter-theme-pack/dist/lib/modules/starter/starter.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'starter',\n packageName: 'starter-theme-pack',\n \n parentDefinitionPath: '',\n \n themeSettings: 'starter.theme.settings.json',\n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/starter-theme-pack/dist/lib/modules/starter'\n });\n \n\n isNotRegistered('store-selector') && (binding.modules['store-selector'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector/store-selector'),\n {\n chunkName: () => '@msdyn365-commerce-modules-store-selector-dist-lib-modules-store-selector-store-selector',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector/store-selector.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'store-selector',\n packageName: 'store-selector',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector'\n });\n \n\n isNotRegistered('tab') && (binding.modules['tab'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/tab/dist/lib/modules/tab/tab'),\n {\n chunkName: () => '@msdyn365-commerce-modules-tab-dist-lib-modules-tab-tab',\n ignoreBabelRename: true\n }\n ),\n $type: 'moduleDefinition',\n dataActions: [{name:'activeTabState', path:'@msdyn365-commerce-modules/tab/dist/lib/data-actions/tab-state-data-action', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/tab/dist/lib/modules/tab/tab.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'tab',\n packageName: 'tab',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/tab/dist/lib/modules/tab'\n });\n \n\n isNotRegistered('tab-item') && (binding.modules['tab-item'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/tab/dist/lib/modules/tab-item/tab-item'),\n {\n chunkName: () => '@msdyn365-commerce-modules-tab-dist-lib-modules-tab-item-tab-item',\n ignoreBabelRename: true\n }\n ),\n $type: 'moduleDefinition',\n dataActions: [{name:'activeTabState', path:'@msdyn365-commerce-modules/tab/dist/lib/data-actions/tab-state-data-action', runOn: 0}],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/tab/dist/lib/modules/tab-item/tab-item.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'tab-item',\n packageName: 'tab',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/tab/dist/lib/modules/tab-item'\n });\n \n\n isNotRegistered('text-block') && (binding.modules['text-block'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/text-block/dist/lib/modules/text-block/text-block'),\n {\n chunkName: () => '@msdyn365-commerce-modules-text-block-dist-lib-modules-text-block-text-block',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/text-block/dist/lib/modules/text-block/text-block.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'text-block',\n packageName: 'text-block',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/text-block/dist/lib/modules/text-block'\n });\n \n\n isNotRegistered('video-player') && (binding.modules['video-player'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/video-player/dist/lib/modules/video-player/video-player'),\n {\n chunkName: () => '@msdyn365-commerce-modules-video-player-dist-lib-modules-video-player-video-player',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [],\n \n definitionPath: 'node_modules/@msdyn365-commerce-modules/video-player/dist/lib/modules/video-player/video-player.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'video-player',\n packageName: 'video-player',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/video-player/dist/lib/modules/video-player'\n });\n \n\n isNotRegistered('wishlist-items') && (binding.modules['wishlist-items'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/wishlist-items'),\n {\n chunkName: () => '@msdyn365-commerce-modules-wishlist-dist-lib-modules-wishlist-items-wishlist-items',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/wishlist-items.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'wishlist-items',\n packageName: 'wishlist',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items'\n });\n \n\n isNotRegistered('write-review') && (binding.modules['write-review'] = {\n component: universal(\n () =>\n import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/write-review/write-review'),\n {\n chunkName: () => '@msdyn365-commerce-modules-ratings-reviews-dist-lib-modules-write-review-write-review',\n ignoreBabelRename: true\n }\n ),\n $type: 'contentModule',\n dataActions: [{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 definitionPath: 'node_modules/@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/write-review/write-review.definition.json',\n isNodeModule: true,\n moduleNamespace: '@msdyn365-commerce-modules',\n name: 'write-review',\n packageName: 'ratings-reviews',\n \n parentDefinitionPath: '',\n \n \n moduleDirectory: 'node_modules/@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/write-review'\n });\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 if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n }\n \n }\n\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 if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n }\n \n }\n\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 if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n }\n \n }\n\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 if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n }\n \n }\n\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 if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n }\n \n }\n\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 if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n }\n \n }\n\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 if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n }\n \n }\n\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 if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n }\n \n }\n\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 if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n }\n \n }\n\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 if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n }\n \n }\n\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 if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n }\n \n }\n\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 if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n }\n \n }\n\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 if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n }\n \n }\n\n if (isNotRegistered('accordion')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/accordion/dist/lib/data-actions/accordion-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/accordion/dist/lib/data-actions/accordion-state-data-action');\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 if (isNotRegistered('accordion-item')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/accordion/dist/lib/data-actions/accordion-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/accordion/dist/lib/data-actions/accordion-state-data-action');\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 if (isNotRegistered('account-address-tile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-address';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-address');\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 if (isNotRegistered('account-address-tile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('account-customer-balance')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('account-customer-balance')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\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 if (isNotRegistered('account-customer-balance-tile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('account-customer-balance-tile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\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 if (isNotRegistered('account-invoice-tile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoices';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoices');\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 if (isNotRegistered('account-loyalty')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\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 if (isNotRegistered('account-loyalty-tile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\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 if (isNotRegistered('account-management-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes');\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 if (isNotRegistered('account-management-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions');\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 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 binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\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 if (isNotRegistered('account-management-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-address';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-address');\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 if (isNotRegistered('account-order-templates-tile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('account-order-templates-tile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('account-order-templates-tile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates');\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 if (isNotRegistered('account-profile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-attribute-definitions';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-attribute-definitions');\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 if (isNotRegistered('account-profile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('account-welcome-tile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('account-wishlist-tile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\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 if (isNotRegistered('breadcrumb')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-category-paths';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-category-paths');\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 if (isNotRegistered('breadcrumb')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy');\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 if (isNotRegistered('breadcrumb')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\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 if (isNotRegistered('business-account-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes');\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 if (isNotRegistered('business-account-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions');\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 if (isNotRegistered('business-account-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state');\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 if (isNotRegistered('business-account-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-address';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-address');\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 if (isNotRegistered('business-organization-list')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-organization-users';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-organization-users');\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 if (isNotRegistered('buybox')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\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 if (isNotRegistered('buybox')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('buybox')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-selected-variant';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-selected-variant');\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 if (isNotRegistered('buybox')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-dimensions-for-selected-variant';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-dimensions-for-selected-variant');\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 if (isNotRegistered('buybox')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('buybox')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-price-for-selected-variant';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-price-for-selected-variant');\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 if (isNotRegistered('buybox')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-availabilities-for-selected-variant';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-availabilities-for-selected-variant');\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 if (isNotRegistered('buybox')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary');\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 if (isNotRegistered('buybox')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\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 if (isNotRegistered('buybox')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\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 if (isNotRegistered('buybox')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview');\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 if (isNotRegistered('buybox')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action');\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 if (isNotRegistered('cart')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\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 if (isNotRegistered('cart')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines');\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 if (isNotRegistered('cart')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\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 if (isNotRegistered('cart')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('cart')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines');\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 if (isNotRegistered('cart')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('cart')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist');\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 if (isNotRegistered('cart')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart');\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 if (isNotRegistered('cart')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\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 if (isNotRegistered('cart')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview');\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 if (isNotRegistered('cart')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\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 if (isNotRegistered('cart')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action');\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 if (isNotRegistered('cart-icon')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\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 if (isNotRegistered('cart-icon')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('cart-icon')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\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 if (isNotRegistered('cart-icon')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action');\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 if (isNotRegistered('category-page-summary')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary/category-page-summary.action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/category-page-summary/category-page-summary.action');\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 if (isNotRegistered('checkout')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout/actions/get-products-in-active-checkout-cart';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout/actions/get-products-in-active-checkout-cart');\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 if (isNotRegistered('checkout')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\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 if (isNotRegistered('checkout')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('checkout')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines');\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 if (isNotRegistered('checkout')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('checkout')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\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 if (isNotRegistered('checkout')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\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 if (isNotRegistered('checkout-billing-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes');\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 if (isNotRegistered('checkout-billing-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions');\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 if (isNotRegistered('checkout-billing-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state');\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 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 binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\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 if (isNotRegistered('checkout-billing-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\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 if (isNotRegistered('checkout-billing-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('checkout-billing-address')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\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 if (isNotRegistered('checkout-customer-account-payment')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('checkout-customer-account-payment')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\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 if (isNotRegistered('checkout-customer-account-payment')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\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 if (isNotRegistered('checkout-delivery-options')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\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 if (isNotRegistered('checkout-delivery-options')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('checkout-delivery-options')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\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 if (isNotRegistered('checkout-gift-card')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\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 if (isNotRegistered('checkout-guest-profile')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action');\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 if (isNotRegistered('checkout-guest-profile')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\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 if (isNotRegistered('checkout-loyalty')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\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 if (isNotRegistered('checkout-loyalty')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-transaction-estimation';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-transaction-estimation');\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 if (isNotRegistered('checkout-loyalty')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\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 if (isNotRegistered('checkout-order-confirmation')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types');\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 if (isNotRegistered('checkout-order-confirmation')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\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 if (isNotRegistered('checkout-order-confirmation')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('checkout-order-confirmation')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\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 if (isNotRegistered('checkout-order-confirmation')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\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 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 binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-payment-instrument/actions/get-card-payment-accept-point');\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 if (isNotRegistered('checkout-payment-instrument')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\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 if (isNotRegistered('checkout-payment-instrument')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('checkout-payment-instrument')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\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 if (isNotRegistered('checkout-pickup')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\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 if (isNotRegistered('checkout-pickup')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines');\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 if (isNotRegistered('checkout-pickup')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('checkout-pickup')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\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 if (isNotRegistered('checkout-pickup')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\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 if (isNotRegistered('checkout-shipping-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-address-purposes');\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 if (isNotRegistered('checkout-shipping-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-regions');\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 if (isNotRegistered('checkout-shipping-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/address/dist/lib/actions/get-country-state');\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 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 binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\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 if (isNotRegistered('checkout-shipping-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-address';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-address');\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 if (isNotRegistered('checkout-shipping-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\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 if (isNotRegistered('checkout-shipping-address')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('checkout-shipping-address')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\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 if (isNotRegistered('checkout-terms-and-conditions')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/checkout-state-data-action');\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 if (isNotRegistered('default-page-summary')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary.action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/default-page-summary/default-page-summary.action');\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 if (isNotRegistered('header')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\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 if (isNotRegistered('header')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('header')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action');\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 if (isNotRegistered('invoices-list')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('invoices-list')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoices';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/invoices/get-invoices');\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 if (isNotRegistered('list-page-summary')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary/list-page-summary.action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/list-page-summary/list-page-summary.action');\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 if (isNotRegistered('loyalty-sign-up')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\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 if (isNotRegistered('loyalty-terms')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\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 if (isNotRegistered('map')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\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 if (isNotRegistered('media-gallery')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-media-locations-by-id');\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 if (isNotRegistered('media-gallery')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\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 if (isNotRegistered('navigation-menu')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy');\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 if (isNotRegistered('order-confirmation')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-sales-order-with-hydrations';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-sales-order-with-hydrations');\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 if (isNotRegistered('order-confirmation')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types');\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 if (isNotRegistered('order-confirmation')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\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 if (isNotRegistered('order-confirmation')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('order-confirmation')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\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 if (isNotRegistered('order-details')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-channels';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-channels');\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 if (isNotRegistered('order-details')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-org-unit-locations';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-org-unit-locations');\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 if (isNotRegistered('order-details')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-sales-order-with-hydrations';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-sales-order-with-hydrations');\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 if (isNotRegistered('order-details')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-tender-types');\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 if (isNotRegistered('order-details')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\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 if (isNotRegistered('order-details')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('order-details')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-loyalty-card');\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 if (isNotRegistered('order-history')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-channels';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-channels');\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 if (isNotRegistered('order-history')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-management/dist/lib/actions/get-org-unit-locations';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/order-management/dist/lib/actions/get-org-unit-locations');\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 if (isNotRegistered('order-history')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\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 if (isNotRegistered('order-history')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('order-history')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('order-template')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template/actions/get-order-template';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template/actions/get-order-template');\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 if (isNotRegistered('order-template')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action');\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 if (isNotRegistered('order-template-list')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview');\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 if (isNotRegistered('organization-users-tile')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-organization-users-count';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-organization-users-count');\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 if (isNotRegistered('product-page-summary')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary.action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/page-summary/dist/lib/modules/product-page-summary/product-page-summary.action');\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 if (isNotRegistered('product-specification')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/product-specification/dist/lib/dataActions/get-attributes-for-selected-variant';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/product-specification/dist/lib/dataActions/get-attributes-for-selected-variant');\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 if (isNotRegistered('product-specification')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\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 if (isNotRegistered('ratings-histogram')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/ratings-reviews-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/ratings-reviews-state-data-action');\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 if (isNotRegistered('ratings-histogram')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary');\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 if (isNotRegistered('reviews-list')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-product-reviews';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-product-reviews');\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 if (isNotRegistered('reviews-list')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-user-review';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-user-review');\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 if (isNotRegistered('reviews-list')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/ratings-reviews-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/ratings-reviews-state-data-action');\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 if (isNotRegistered('reviews-list')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary');\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 if (isNotRegistered('reviews-list')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\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 if (isNotRegistered('search')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/search-utilities/dist/lib/search-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/search-utilities/dist/lib/search-state-data-action');\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 if (isNotRegistered('search-result-container')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category');\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 if (isNotRegistered('search-result-container')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy');\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 if (isNotRegistered('search-result-container')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\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 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 binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/actions/get-full-products-by-collection');\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 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 binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/actions/get-mapped-search-configuration');\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 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 binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/actions/get-refiners-for-collection');\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 if (isNotRegistered('search-result-container')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/list-page-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/list-page-state');\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 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 binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\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 if (isNotRegistered('store-selector')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-full-available-inventory-nearby');\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 if (isNotRegistered('store-selector')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-store-location-information');\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 if (isNotRegistered('tab')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/tab/dist/lib/data-actions/tab-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/tab/dist/lib/data-actions/tab-state-data-action');\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 if (isNotRegistered('tab-item')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/tab/dist/lib/data-actions/tab-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/tab/dist/lib/data-actions/tab-state-data-action');\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 if (isNotRegistered('wishlist-items')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 if (isNotRegistered('wishlist-items')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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 if (isNotRegistered('wishlist-items')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\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 if (isNotRegistered('wishlist-items')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/actions/get-items-in-wishlists';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/actions/get-items-in-wishlists');\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 if (isNotRegistered('wishlist-items')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/actions/get-product-availabilities-wishlist-items';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/actions/get-product-availabilities-wishlist-items');\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 if (isNotRegistered('wishlist-items')) {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action');\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 if (isNotRegistered('write-review')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-user-review';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/ratings-reviews/dist/lib/actions/get-user-review');\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 if (isNotRegistered('write-review')) {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n binding.dataActions[sanitizedActionPath] = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n \n\n \n } catch (e) {\n handleError('-', e);\n }\n \n return binding;\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, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInfo, TelemetryEvent } from '@msdyn365-commerce/telemetry-internal';\n\ndeclare let window: IMSDyn365Window;\n\nconst beforeCopyCart = async (inputs: IActionInput | IActionInput[]) => {\n // placeholder\n};\n\nconst afterCopyCart = async (_inputs: IActionInput | IActionInput[], cart: Cart | Cart[], actionContext: IActionContext) => {\n if (window && window._msdyn365 && window._msdyn365.telemetry) {\n // TODO (Matt D 4/8/20): Adding product conversion here as workaround for CheckOut bug. Will revisit in user story 6963863\n const cartObject = Array.isArray(cart) ? cart[0] : cart;\n const cartLineProductUnits: IProductInfo[] = [];\n if (cartObject && cartObject.CartLines && Array.isArray(cartObject.CartLines) && cartObject.CartLines.length > 0) {\n cartObject.CartLines.forEach((cartLineitem: CartLine) => {\n if (cartLineitem.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 const productInfo = actionContext.requestContext.telemetryData[cartLineitem.ProductId];\n if (productInfo) {\n cartLineProductUnits.push({\n productChannelId: cartObject.ChannelId ? cartObject.ChannelId.toString() : '',\n productChannelName: '',\n productCategoryId: '',\n productCategoryName: '',\n productId: productInfo.productId,\n productName: productInfo.productName,\n productSku: productInfo.productSku,\n productPrice: cartLineitem.Price ? cartLineitem.Price.toString() : '',\n productQuantity: cartLineitem.Quantity ? cartLineitem.Quantity.toString() : '',\n productCurrency: actionContext.requestContext.channel ? actionContext.requestContext.channel.Currency || '' : ''\n });\n }\n }\n });\n }\n\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","import { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ChannelDeliveryOption, FeatureState, ItemAvailability, OrgUnitAvailability, OrgUnitLocation, ProductWarehouseInventoryInformation, SearchArea, StoreHours } from '@msdyn365-commerce/retail-proxy';\nimport { getChannelDeliveryOptionsAsync, getOrgUnitLocationsByAreaAsync, getStoreHoursAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\nimport { getEstimatedAvailabilityAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport {FeatureStateInput, getFeatureStateAction} from './get-feature-state';\nimport { IFullOrgUnitAvailability } from './utilities/full-org-unit-availability';\nimport { IProductInventoryInformation } from './utilities/product-inventory-information';\nimport { 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 public longitude?: number;\n public radius?: number;\n public productId?: number;\n public DistanceUnitValue?: number;\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 public getCacheObjectType = () => 'GetFullAvailableInventoryNearbyInput';\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 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 */\nexport async function getFeatureState(context: IActionContext): Promise {\n return getFeatureStateAction(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 */\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\n return getEstimatedAvailabilityAsync({callerContext: ctx}, {ProductIds: [input.productId], SearchArea: searchArea, DefaultWarehouseOnly:false, FilterByChannelFulfillmentGroup: true})\n .then(async (productWarehouseInformation: ProductWarehouseInventoryInformation) => {\n const productInventoryInformation = mapProductInventoryInformation(ctx, productWarehouseInformation?.ProductWarehouseInventoryAvailabilities);\n return getOrgUnitLocationsByAreaAsync({callerContext: ctx}, searchArea)\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 // 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\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 productWarehouseInventoryInformation The product ware house information\n * @param storeMap a map that contains store information group by the inventory location id\n * @param ctx The action context\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) && 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 { OrgUnitAvailability: availability, StoreHours: hours, ProductInventoryInformation: productInventoryInformation, OrgUnitPickUpDeliveryModes : channelDeleiveryOptions };\n }\n\n return { OrgUnitAvailability: availability, ProductInventoryInformation: productInventoryInformation, 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 */\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-full-available-inventory-nearby',\n action: >getFullAvailableInventoryNearbyAction,\n input: createGetFullAvailableInventoryNearbyInput\n});","import { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { CommerceListLine } from '@msdyn365-commerce/retail-proxy';\n\nimport { getByCustomerAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CommerceListsDataActions.g';\nimport { FullProductInput, getFullProducts, getProductDetailsCriteriaFromActionInput } from './index';\n\n/**\n * Input class for getActiveWishlistItems data action\n */\nexport class ActiveWishlistInput implements IActionInput {\n public getCacheKey = () => `ActiveWishlistItems`;\n public getCacheObjectType = () => 'ActiveWishlistItems';\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 */\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 } else {\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 } else {\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 * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\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 get from 'lodash/get';\n\nexport interface IGetCardPaymentAcceptPointInput {\n showBillingAddress?: boolean;\n paymenTenderType?: string;\n apiSettings: ICommerceApiSettings;\n}\n\n/**\n * GetCardPaymentAcceptPointInput - Input for create GetCardPaymentAcceptPoint\n */\nexport class GetCardPaymentAcceptPointInput implements IActionInput {\n public showBillingAddress?: boolean;\n public paymenTenderType?: string;\n private apiSettings: ICommerceApiSettings;\n\n constructor(input: IGetCardPaymentAcceptPointInput) {\n this.showBillingAddress = input.showBillingAddress;\n this.paymenTenderType = input.paymenTenderType;\n this.apiSettings = input.apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`CardPaymentAcceptPoint${this.paymenTenderType ? `-${this.paymenTenderType}` : ''}`, this.apiSettings);\n public getCacheObjectType = () => `CardPaymentAcceptPoint`;\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport const createCheckoutPaymentInstrumentInput = (inputData: ICreateActionContext) => {\n // @ts-ignore\n const { showBillingAddress, paymenTenderType } = inputData.config;\n const getCardPaymentAcceptPointInput = {\n showBillingAddres: showBillingAddress,\n paymenTenderType: paymenTenderType,\n apiSettings: inputData.requestContext.apiSettings\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 */\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 } = 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) {\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'\n ? new URL(ctx.requestContext.url.requestUrl)\n : ctx.requestContext.url.requestUrl;\n const origin = get(window, 'location.origin') || requestUrl.origin;\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: 0\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 default createObservableDataAction({\n id: '@msdyn365-commerce/checkout-payment-instrument/get-card-payment-accept-point',\n action: >getCardPaymentAcceptPointAction,\n input: createCheckoutPaymentInstrumentInput\n});\n","import { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductPrice, ProjectionDomain, SimpleProduct, AffiliationLoyaltyTier, CustomerAffiliation } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { getActivePricesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, SelectedVariantInput, getCustomer } from './index';\n\nimport * as semver from 'semver';\nimport { GetCustomerInput } from './get-customer';\n\n/**\n * Input class for the GetPriceForSelectedVariant Data Action\n */\nexport class PriceForSelectedVariantInput implements IActionInput {\n public productId: number;\n public channelId: number;\n public selectedProduct: SimpleProduct | undefined;\n public customerId?: string;\n\n 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 = () => `PriceForSelectedVariant`;\n public getCacheObjectType = () => 'Price';\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 */\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 } else {\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 */\nexport async function getPriceForSelectedVariantAction(\n input: PriceForSelectedVariantInput,\n ctx: IActionContext\n): Promise {\n let affliations:AffiliationLoyaltyTier[] = [];\n if(ctx.requestContext && ctx.requestContext.user && ctx.requestContext.user.isAuthenticated)\n {\n const customerInput = new GetCustomerInput(ctx.requestContext.apiSettings);\n const customer = await getCustomer(customerInput, ctx);\n if(customer && customer.CustomerAffiliations)\n {\n customer.CustomerAffiliations.forEach((affliation: CustomerAffiliation) => {\n var aff:AffiliationLoyaltyTier = {AffiliationId:affliation.RetailAffiliationId, CustomerId: customer.AccountNumber}\n affliations.push(aff);\n \n });\n }\n }\n return Promise.resolve()\n // @ts-ignore: Promise vs. ObservablePromise typing conflict\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 projectDomain: ProjectionDomain = { ChannelId: +ctx.requestContext.apiSettings.channelId, CatalogId: +ctx.requestContext.apiSettings.catalogId };\n\n const activeProduct: SimpleProduct | undefined = productResult; \n if (activeProduct) {\n \n return getActivePricesAsync(\n { callerContext: ctx, queryResultSettings: {} },\n projectDomain,\n [activeProduct.RecordId],\n new Date(),\n input.customerId || null,\n affliations,\n true\n // @ts-ignore\n ).then(response => {\n if(response && response.length > 0) {\n const productPrice = response[0];\n\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 (semver.lt(ctx.requestContext.apiSettings.retailServerProxyVersion, '9.16.0')) {\n productPrice.CustomerContextualPrice = productPrice.AdjustedPrice;\n }\n\n return productPrice;\n }\n throw new Error('[getPriceForSelectedVariantAction]Invalid response recieved from calculateProductPrice');\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-price-for-selected-variant',\n action: >getPriceForSelectedVariantAction,\n input: createActivePriceForSelectedVariantInput\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IAny, IDictionary, IRequestContext } from '@msdyn365-commerce/core-internal';\nimport { Cart, CartLine, SalesLine, SalesOrder, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ICartInfo, IProductInfo, IProductTransaction } from '@msdyn365-commerce/telemetry-internal';\n\n/**\n * getProductInfoFromCart\n * @param cart Cart object\n * @param productData Product data\n * @param requestContext Request Context\n */\nexport const getProductInfoFromCart = (cart: Cart | Cart[], productData: IDictionary, requestContext: IRequestContext): ICartInfo => {\n // ToDo: Need to revisit this when we make sure that we can expect only one cart and not array\n cart = Array.isArray(cart) ? cart[0] : cart;\n return _getProductInfoFromCartLines(cart, productData, requestContext);\n};\n\n/**\n * _getProductInfoFromCartLines\n * @param cartObject Cart object\n * @param productData Product data\n * @param requestContext Request context\n */\nconst _getProductInfoFromCartLines = (cartObject: Cart, productData: IDictionary, requestContext: IRequestContext): ICartInfo => {\n const cartLineProductUnits: IProductInfo[] = [];\n if (cartObject && cartObject.CartLines && Array.isArray(cartObject.CartLines) && cartObject.CartLines.length > 0) {\n cartObject.CartLines.forEach((cartLineitem: CartLine) => {\n if (cartLineitem.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 const productInfo = productData[cartLineitem.ProductId];\n if (productInfo) {\n cartLineProductUnits.push({\n productChannelId: '',\n productChannelName: '',\n productCategoryId: '',\n productCategoryName: '',\n productId: productInfo.productId,\n productName: productInfo.productName,\n productSku: productInfo.productSku,\n productPrice: cartLineitem.Price ? cartLineitem.Price.toString() : '',\n productQuantity: cartLineitem.Quantity ? cartLineitem.Quantity.toString() : '',\n productCurrency: ''\n });\n }\n }\n });\n }\n\n return {\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/**\n * getProductTransactionInfoFromSalesOrder\n * @param salesOrder Sales order\n * @param productData Product data\n */\nexport const getProductTransactionInfoFromSalesOrder = (\n salesOrder: SalesOrder | SalesOrder[],\n productData: IDictionary\n): IProductTransaction => {\n // ToDo: Need to revisit this when we make sure that we can expect only one sales order and not array\n salesOrder = Array.isArray(salesOrder) ? salesOrder[0] : salesOrder;\n\n return {\n id: salesOrder.Id,\n affiliation: salesOrder.ChannelId ? salesOrder.ChannelId.toString() : '',\n revenue: salesOrder.NetAmountWithoutTax,\n tax: salesOrder.TaxAmount,\n // shippingCost?: // Confirm if it is delivery mode charge amount;\n products: _getProductInfoFromSalesLines(salesOrder, productData)\n };\n};\n\n/**\n * _getProductInfoFromSalesLines\n * @param salesObject Sales object\n * @param productData Product dat\n */\nconst _getProductInfoFromSalesLines = (salesObject: SalesOrder, productData: IDictionary): IProductInfo[] => {\n const saleLineProductUnits: IProductInfo[] = [];\n if (salesObject && salesObject.SalesLines && Array.isArray(salesObject.SalesLines) && salesObject.SalesLines.length > 0) {\n salesObject.SalesLines.forEach((saleLineitem: SalesLine) => {\n if (saleLineitem.ProductId) {\n // The product id in salesLine actually contains recordId and not master product id so we can use it up here to lookup product.\n const productInfo = productData[saleLineitem.ProductId];\n if (productInfo) {\n saleLineProductUnits.push({\n productChannelId: '',\n productChannelName: '',\n productCategoryId: '',\n productCategoryName: '',\n productId: productInfo.productId, // This is already precooked to contain master product id\n productName: productInfo.productName,\n productSku: productInfo.productSku, // This is a;ready precooked to contain record id\n productPrice: saleLineitem.Price ? saleLineitem.Price.toString() : '',\n productQuantity: saleLineitem.Quantity ? saleLineitem.Quantity.toString() : '',\n productCurrency: ''\n });\n }\n }\n });\n }\n\n return saleLineProductUnits;\n};\n\n/**\n * getProductInfoFromSimpleProduct\n * @param simpleProduct Simple product\n * @param requestContext Request context\n */\nexport const getProductInfoFromSimpleProduct = (simpleProduct: SimpleProduct, requestContext: IRequestContext): 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: '',\n productChannelName: '',\n productCategoryId: '',\n productCategoryName: '',\n productQuantity: '',\n productCurrency: ''\n };\n};\n","var map = {\n\t\".\": \"aVE6\",\n\t\"./\": \"aVE6\",\n\t\"./index\": \"aVE6\",\n\t\"./index.js\": \"aVE6\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"T4xW\";","import 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 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(/[^a-z0-9\\-_]+/g, ' ')\n .trim()\n .replace(/\\s+/g, sep);\n}\n","import { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { getParameterizeFeatureFlags, getUrlSync, IActionContext, IParameterizeFeatureFlags } from '@msdyn365-commerce/core';\nimport { parameterize } from './parameterize';\n\ninterface ICategoryMap {\n [RecordId: number]: CategoryHierarchy;\n}\n\n/**\n * Builds slugs for category\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 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","import { 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 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 */\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}","import { 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';\nimport { getLoyalty, GetLoyaltyCardInput } from './index';\nimport { buildCacheKey } from './index';\n\n/**\n * Input class for the getLoyaltyCard data action\n */\nexport class GetLoyaltyTransactionEstimationInput implements IActionInput {\n public userAccountNumber?: string;\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 public getCacheObjectType = () => 'GetLoyaltyCardTransactionEstimation';\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 {\n return getMaxLoyaltyPointsToRedeemForTransactionBalanceAsync({ callerContext: ctx }, result[0].Id, result[1].CardNumber!, result[2].Currency || '')\n .then(points => {\n return points;\n })\n .catch(e => {\n ctx.telemetry.exception(e);\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(e => {\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-loyalty-transaction-estimation',\n action: >getLoyaltyTransactionEstimationAction,\n input: <(args: ICreateActionContext) => IActionInput>createGetLoyaltyTransactionEstimationInput\n});\n","import {\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';\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* The input class for the addAddress data action\n*/\nexport class AddressManagementInput implements IAddressManagementInput {\n public address: Address;\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 public getCacheObjectType = () => 'AddAddress';\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);\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/add-address',\n action: >addAddressAction,\n input: <(args: ICreateActionContext) => IActionInput>(createAddressManagementInput),\n isBatched: false\n});","import { 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 * 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 public getCacheObjectType = () => 'AddOrganizationUser';\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Input class for addOrganizationUser data action\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 */\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/add-organization-user',\n action: >addOrganizationUser,\n input: <(args: ICreateActionContext) => IActionInput>(createAddOrganizationUserInput),\n});","import {\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 public cartVersion: number;\n public receiptEmail?: string;\n public cartTenderLines?: CartTenderLine[];\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 public getCacheObjectType = () => 'CheckOut';\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Calls the Retail API to check out and returns sales order\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) {\n input.cartTenderLines = input.cartTenderLines.map((cartTenderLineItem: CartTenderLine) => {\n // @ts-ignore\n // tslint:disable-next-line:prefer-type-cast\n cartTenderLineItem['@odata.type'] = '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CartTenderLine';\n // @ts-ignore\n // tslint:disable-next-line:prefer-type-cast\n cartTenderLineItem['Amount@odata.type'] = '#Decimal';\n\n if (cartTenderLineItem.TokenizedPaymentCard) {\n // @ts-ignore\n // tslint:disable-next-line:prefer-type-cast\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 // @ts-ignore: House prop not yet typed\n if (!cartTenderLineItem.TokenizedPaymentCard.House) {\n // @ts-ignore: House prop not yet typed\n cartTenderLineItem.TokenizedPaymentCard.House = 'N/A';\n }\n\n if (cartTenderLineItem.TokenizedPaymentCard.CardTokenInfo) {\n // @ts-ignore\n // tslint:disable-next-line:prefer-type-cast\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/checkout',\n action: >checkOutAction\n});\n","import { IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IAny, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { Address, Customer } from '@msdyn365-commerce/retail-proxy';\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/delete-address',\n action: >deleteAddressAction,\n input: <(args: ICreateActionContext) => IActionInput>(createAddressManagementInput),\n isBatched: false\n});\n","import { 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 * 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 public getCacheObjectType = () => 'DeleteOrganizationUser';\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Input class for DeleteOrganizationUser data action\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 */\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/delete-organization-user',\n action: >deleteOrganizationUser,\n input: <(args: ICreateActionContext) => IActionInput>(createDeleteOrganizationUserInput),\n});","import { 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 * 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 public getCacheObjectType = () => 'EditOrganizationUser';\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Input class for edit organization user data action\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/Edit-organization-user',\n action: >editOrganizationUser,\n input: <(args: ICreateActionContext) => IActionInput>(createEditOrganizationUserInput),\n});","import { CacheType, IActionInput } from '@msdyn365-commerce/core';\nimport { IActionContext } 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 public cacheKey: string;\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 public getCacheObjectType = () => `${this.cacheObjectType}`;\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 */\nexport async function getGenericAction(input: GenericInput, ctx: IActionContext): Promise {\n return input.result;\n}\n","import { CacheType, IAction, IActionContext, IActionInput, ICommerceApiSettings, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\nimport Cookie from 'js-cookie';\n\nimport { copyAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { buildCacheKey } from './utilities/utils';\n\nimport { getCartState } from '@msdyn365-commerce/global-state';\n\n/**\n * Input class for getCheckoutCart data action\n */\nexport class GetCheckoutCartInput implements IActionInput {\n private apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`ActiveCheckoutCart`, this.apiSettings);\n public getCacheObjectType = () => 'ActiveCheckoutCart';\n public dataCacheType = (): CacheType => 'request';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new GetCheckoutCartInput(inputData.requestContext.apiSettings);\n};\n\n// @ts-ignore\nconst CartCookieName: string = msdyn365Commerce.CartCookie || 'cart';\n\n/**\n * Data action to copy the cart for checkout actions\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-checkout-cart',\n action: >getCheckoutCart,\n input: createInput\n});\n","import { IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, 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 */\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-customer-loyalty-cards',\n action: >retailAction,\n input: createCustomerLoyaltyCardsInput\n});\n","import { CacheType, IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, 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 public channelId: number;\n private apiSettings: ICommerceApiSettings;\n\n constructor(productId: number | string, apiSettings: ICommerceApiSettings, channelId?: number) {\n this.apiSettings = apiSettings;\n this.productId = +productId;\n this.channelId = channelId || apiSettings.channelId;\n }\n\n public getCacheKey = () => buildCacheKey(`RecordId-${this.productId.toString()}-ChannelId-${this.channelId.toString()}`, this.apiSettings);\n public getCacheObjectType = () => 'SimpleProduct';\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Creates the input required to make the retail api call\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)\n ? []\n : 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 */\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({ callerContext: ctx, queryResultSettings: QueryResultSettingsProxy.getDefault().QueryResultSettings }, inputs[0].channelId, productIds).then(products => {\n const mappedProducts = products.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 (e) {\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","import { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProjectionDomain } from '@msdyn365-commerce/retail-proxy';\n\nimport { getActivePricesAsync, getProductRatingsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport getSimpleProducts, { ProductInput } from './get-simple-products';\nimport { buildCacheKey, generateKey, getProductDetailsCriteriaFromActionInput } from './utilities/utils';\n\nimport * as semver from 'semver';\n\n/**\n * Full Product Input\n */\nexport class FullProductInput implements IActionInput {\n public productId: number;\n public channelId: number;\n public ProductDetailsCriteria: ProductDetailsCriteria;\n\n private apiSettings: ICommerceApiSettings;\n\n constructor(productId: number | string, apiSettings: ICommerceApiSettings, criteria: ProductDetailsCriteria) {\n this.productId = typeof productId === 'string' ? 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 public getCacheObjectType = () => 'FullProduct';\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 public getRating: boolean;\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 */\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) {\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 */\nexport async function getFullProductsAction(inputs: FullProductInput[], ctx: IActionContext): Promise {\n if (!Array.isArray(inputs) || !inputs.length) {\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(e => {\n ctx.telemetry.exception(e);\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 // @ts-ignore\n ).then(result => {\n // @ts-ignore\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 (semver.lt(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(err => {\n const telemetry = ctx.telemetry;\n telemetry.debug(`[getProductRatingsAsync] Unable to get product ratings.`);\n telemetry.exception(err);\n });\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-full-products',\n action: >getFullProductsAction,\n input: createInput,\n isBatched: true\n});\n","import { FullProduct, IRefineFullProductSearchOutput } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, 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';\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 public readonly channelId?: number;\n public readonly refinementCriteria: ProductRefinerValue[];\n public readonly catalogId: number;\n public ProductDetailsCriteria?: ProductDetailsCriteria;\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 public getCacheObjectType = () => 'FullProductsRefineSearchByCategoryInput';\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Creates the input required to make the core action calls\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 */\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 && !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: refinementCriteria\n };\n } else {\n return {\n productSearchResult: [],\n refinementCriteria: refinementCriteria\n };\n }\n}\n\nexport default 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","import { IRefineFullProductSearchOutput } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, 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';\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 public readonly channelId?: number;\n public readonly refinementCriteria: ProductRefinerValue[];\n public readonly itemsPerPage?: number;\n public readonly skipCount?: number;\n public readonly catalogId: number;\n public productDetailsCriteria?: ProductDetailsCriteria;\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 public getCacheObjectType = () => 'FullProductsRefineSearchByTextInput';\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Creates the input required to make the core action calls\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 */\nexport function getFullProductsByRefineSearchTextAction(\n input: FullProductsRefineSearchByTextInput,\n ctx: IActionContext\n): Promise {\n return getRefinedFullProducts(\n input,\n ctx,\n // @ts-ignore: Promise.then typing conflict\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 default 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","import { IRefineFullProductSearchOutput } from '@msdyn365-commerce/commerce-entities';\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ProductRefinerValue, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\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) {\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) {\n const productResult = await getFullProducts(fullProductInputs, ctx);\n return {\n productSearchResult: productResult,\n refinementCriteria: input.refinementCriteria\n };\n } else {\n return {\n productSearchResult: [],\n refinementCriteria: input.refinementCriteria\n };\n }\n}","import { Image, ISubList, List } from '@msdyn365-commerce-modules/data-types';\nimport { IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\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 public Title: string;\n public Description: string;\n public ShortDescription: string;\n public BackgroundColor: string;\n public ForegroundColor: string;\n public Images: Image[];\n public Items: (IProductItem[] | ISubList)[];\n public ProductItems: IProductItem[];\n public ItemsCount: number;\n public ItemsPerPage: number;\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 public getCacheObjectType = () => 'LIST';\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 */\nconst enum ListItemType {\n list = 'list',\n product = 'product'\n}\n\n/**\n * Calls to getSimpleProducts to get product array by ID's in list.\n */\nexport async function getListData(input: ListInput, ctx: IActionContext): Promise {\n ctx.trace(`List Title: ${input.Title}`);\n\n // @ts-ignore\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) {\n // get all products\n let products: SimpleProduct[] = [];\n if (input.ProductItems && input.ProductItems.length) {\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 */\nfunction isSublist(listItem: IProductItem[] | ISubList): listItem is ISubList {\n return (listItem).Images !== undefined;\n}\n\n/**\n * Get 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 */\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 */\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 */\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 */\nfunction getSitePath(inputData: ICreateActionContext, IGeneric>): string {\n // @ts-ignore\n return inputData && inputData.requestContext && inputData.requestContext.sitePath ? inputData.requestContext.sitePath : '';\n}\n\n/**\n * Get items per page\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 */\nfunction getSkipCount(inputData: ICreateActionContext, IGeneric>): number {\n return inputData && inputData.requestContext && inputData.requestContext.query && inputData.requestContext.query.skipCount\n ? Number(inputData.requestContext.query.skipCount)\n : 0;\n}\n\n/**\n * Creates the input required to make the list call to get products.\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-list',\n action: >getListData,\n input: createListInput\n});\n","import { 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 {\n generateImageUrl,\n getSelectedProductIdFromActionInput,\n getSelectedVariant,\n SelectedVariantInput\n} from './';\n\n/**\n * The action input class for the getMediaLocationsForSelectedVariant data action\n */\nexport class MediaLocationsForSelectedVariantInput implements IActionInput {\n public productId: number;\n public channelId: number;\n public catalogId: number;\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 = () => `MediaLocationsForSelectedVariant`;\n public getCacheObjectType = () => 'MediaLocations';\n public dataCacheType = (): CacheType => 'none';\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 } else {\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 */\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\n // @ts-ignore: Typing issues that will auto-resolve when SDK 1.4 publishes\n return >getSelectedVariant(selectedVariantInput, ctx);\n }\n\n return activeProduct;\n })\n .then(productResult => {\n const activeProduct: SimpleProduct | undefined = 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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-media-locations-for-selected-variant',\n action: >getMediaLocationsForSelectedVariantAction,\n input: createMediaLocationsForSelectedVariantInput\n});\n","import { IAction } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, 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 * Creates the input required to make the retail api call\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 //@ts-ignore\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","import { IAction } from '@msdyn365-commerce/core';\nimport { createObservableDataAction } 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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-org-unit-configuration',\n action: >retailAction,\n input: () => {\n return createGetOrgUnitConfigurationInput();\n }\n});\n","import {\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';\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 public getCacheObjectType = () => 'GetOrganizationWideOrderHistoryInput';\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 */\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-organization-wide-order-history',\n action: >getOrganizationWideOrderHistory,\n input: getOrganizationWideOrderHistoryInput\n});\n","import { CacheType, IAction, IActionInput, ICommerceApiSettings } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductSearchResult, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport getCurrentCategory, { CurrentCategoryInput } from './get-current-category';\nimport getProducts, { ProductInput } from './get-simple-products';\n\nimport { searchByCategoryAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\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 public categorySlug?: string;\n public categoryName?: string;\n public catalogId: number;\n public currentCategory: CurrentCategoryInput;\n public readonly queryResultSettingsProxy: QueryResultSettingsProxy;\n private 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 public getCacheObjectType = () => 'Products-From-Search';\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * createInput method for the getProductsByCategory data aciton\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 */\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 } else {\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-products-by-category',\n action: >getProductsByCategoryAction,\n input: createGetProductsByCategoryInput\n});\n","import { 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';\nimport { buildCacheKey } from './index';\nimport {ActiveCartProductsInput, getActiveCartProductsAction} from './index';\n\n/**\n * Input class for promotion options for items in cart\n */\nexport class PromotionOptionsForCartLineItems implements IActionInput {\n private apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`ActiveCartLineItemsPromotionOptions`, this.apiSettings);\n public getCacheObjectType = () => 'ActiveCartLineItemsPromotionOptions';\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 */\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 console.log('[getPromotionOptionsForCartLineItems] Not able to get cart OR channelConfiguration or no products in cart');\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-promotion-options-for-cartlines',\n action: >getPromotionOptionsForCartLineItems,\n input: createInput\n});\n","import { 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 public getCacheObjectType = () => 'RatingsSummary';\n public dataCacheType = (): CacheType => 'application';\n}\n","import { IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductRefiner } from '@msdyn365-commerce/retail-proxy';\nimport getCurrentCategory, { CurrentCategoryInput } from './get-current-category';\n\nimport { getRefinersByCategoryAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\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 public readonly currentCategory: CurrentCategoryInput;\n public readonly queryResultSettingsProxy: QueryResultSettingsProxy;\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 public getCacheObjectType = () => 'ProductRefiner';\n public shouldCacheOutput = () => true;\n}\n\n/**\n * Creates the input required to make the retail api call\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 */\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","import { CacheType, IAction, IActionInput, ICommerceApiSettings } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductRefiner } from '@msdyn365-commerce/retail-proxy';\n\nimport { getRefinersByTextAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\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 public readonly searchText: string;\n public readonly queryResultSettingsProxy: QueryResultSettingsProxy;\n private 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 public getCacheObjectType = () => 'ProductRefiner';\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call\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 */\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-refiners-by-text',\n action: >getRefinersByTextAction,\n input: createRefinersByTextInput\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, 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 public readonly catalogId: number;\n public readonly relationType: string;\n public ProductDetailsCriteria: ProductDetailsCriteria;\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 = () =>\n `${this.productId}|${this.catalogId}|${this.relationType.toLowerCase()}|${this.queryResultSettingsProxy.cacheKeyHint}|${\n this.ProductDetailsCriteria.getPrice\n }`;\n public getCacheObjectType = () => 'GetRelatedProducts';\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Creates the input required to make GetRelatedProducts retail api call\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 // @ts-ignore: URLTokens not properly types\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) {\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 } else {\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-related-products',\n action: >getRelatedProductsAction,\n input: createGetRelatedProductsInput\n});\n","import { CacheType, IAction, IActionInput, ICommerceApiSettings } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { SortColumn } from '@msdyn365-commerce/retail-proxy';\nimport { buildCacheKey } from '.';\n\nimport { getSearchConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\n\n// TODO: import from commerce entities when available\n// tslint:disable-next-line:interface-name\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 apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('SearchConfig', this.apiSettings);\n public getCacheObjectType = () => 'SearchConfiguration';\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call\n */\nexport const createSearchConfigurationInput = (inputData: ICreateActionContext>): IActionInput => {\n return new SearchConfigurationInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * Calls the Retail API\n */\nexport async function getSearchConfigurationAction(input: SearchConfigurationInput, ctx: IActionContext): Promise {\n return getSearchConfigurationAsync({ callerContext: ctx });\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-search-configurations',\n action: >getSearchConfigurationAction,\n input: createSearchConfigurationInput\n});\n","import { 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';\nimport { getLoyaltyAction, GetLoyaltyCardInput} from './get-loyalty-card';\nimport { buildCacheKey } from './index';\n\n/**\n * Input class for the issueLoyalty data action\n */\nexport class IssueLoyaltyInput implements IActionInput {\n public userAccountNumber?: string;\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 public getCacheObjectType = () => 'GetIssueLoyalty';\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 //@ts-ignore\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 //@ts-ignore\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/issue-loyalty',\n action: >issueLoyaltyAction,\n input: <(args: ICreateActionContext) => IActionInput>createIssueLoyaltyInput\n});\n","import { 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 public readonly productId: number;\n public readonly quantity: number;\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 public getCacheObjectType = () => 'AddItemToOrderTemplateInput';\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 */\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 } else {\n ctx.telemetry.error('Product list line was not returned when adding it to order template');\n throw 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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/add-item-to-order-template',\n action: >addItemToOrderTemplateAction,\n input: addItemToOrderTemplateInput\n});","import { 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';\nimport { FullProductInput, getFullProducts, getProductDetailsCriteriaFromActionInput, QueryResultSettingsProxy } from '..';\nimport { IOrderTemplateLinesState, OrderTemplateLine } from '../utilities/order-templates';\n/**\n * Input class for the GetOrderTemplates data action\n */\nexport class GetPaginatedOrderTemplateLinesInput implements IActionInput {\n public orderTemplateId: string;\n public queryResultSettings: IQueryResultSettings;\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 public getCacheObjectType = () => 'GetPaginatedOrderTemplateLines';\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 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); // tslint:disable-line:align\n const productListLines = await promise;\n const productInputs: FullProductInput[] = [];\n if (productListLines && productListLines.length > 0) {\n orderTemplateLinesState.totalCount = promise.metadata.count || orderTemplateLinesState.lines.length;\n productListLines.forEach((listLine) => {\n if (listLine.ProductId) {\n orderTemplateLinesState.lines.push(new OrderTemplateLine(listLine));\n productInputs.push(new FullProductInput(listLine.ProductId, context.requestContext.apiSettings, getProductDetailsCriteriaFromActionInput(context)));\n }\n });\n if (productInputs.length > 0) {\n const fullProductsInfo = await getFullProducts(productInputs, context)\n .then((products: FullProduct[]) => {\n if (products) {\n return products;\n } else {\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/get-paginated-order-template-lines',\n action: >getPaginatedOrderTemplateLinesAction,\n input: createGetPaginatedOrderTemplateLinesInput\n});","import { getPaginatedOrderTemplateLinesAction, GetPaginatedOrderTemplateLinesInput } from './get-paginated-order-template-lines'\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\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 public getCacheObjectType = () => 'AddOrderTemplateToCartInput';\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 */\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 // tslint:disable-next-line:no-unnecessary-local-variable\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/add-order-template-to-cart',\n action: >addOrderTemplateToCartAction,\n input: addOrderTemplateToCartInput\n});","import {\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 public getCacheObjectType = () => 'CreateOrderTemplateInput';\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 } else {\n ctx.telemetry.error('Created product list was null');\n throw 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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/create-order-template',\n action: >createOrderTemplateAction,\n input: createOrderTemplateInput\n});","import { 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';\nimport { getOrderTemplates, GetOrderTemplatesInput, QueryResultSettingsProxy } from '..';\nimport { getPaginatedOrderTemplateLinesAction, GetPaginatedOrderTemplateLinesInput } 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 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 public getCacheObjectType = () => 'GetFullOrderTemplate';\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 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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/get-full-order-template',\n action: >getFullOrderTemplateAction,\n input: createGetFullOrderTemplateInput\n});","import { 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 public getCacheObjectType = () => 'UpdateOrderTemplateHeaderInput';\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 } else {\n ctx.telemetry.error(`Updated product list ${orderTemplate.Id} came back as null.`);\n throw 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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/update-order-template-header',\n action: >updateOrderTemplateHeaderAction,\n input: updateOrderTemplateHeaderInput\n});","import { 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';\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 public readonly productId: number;\n public readonly quantity: number;\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 public getCacheObjectType = () => 'UpdateOrderTemplateInput';\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 */\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 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 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 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 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 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});","import { CacheType, IAction, IActionInput, ICommerceApiSettings } from '@msdyn365-commerce/core';\nimport {\n createObservableDataAction,\n IAny,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { ProductRefinerValue, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\n\nimport { createRefineSearchByCategoryInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { retailAction } from '@msdyn365-commerce/retail-proxy/dist/retail-action';\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 public readonly channelId?: number;\n public readonly refinementCriteria: ProductRefinerValue[];\n public readonly catalogId: number;\n public readonly queryResultSettingsProxy: QueryResultSettingsProxy;\n private 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 public getCacheObjectType = () => 'RefineSearchByCriteriaInput';\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * createInput method for the refineSearchByCategory data action\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/regin-search-by-category',\n action: >retailAction,\n input: createInput\n});\n","import { IAction } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, 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';\nimport { QueryResultSettingsProxy } from './utilities/QueryResultSettingsProxy';\n\n/**\n * createInput method for the searchByText data action\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/search-by-text',\n action: >retailAction,\n input: createSearchByTextInputFunc\n});\n","import { IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IAny, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { Address, Customer } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/update-address',\n action: >updateAddressAction,\n input: <(args: ICreateActionContext) => IActionInput>(createAddressManagementInput)\n});\n","import {\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 { GetCustomerInput } from './get-customer';\nimport { buildCacheKey } from './index';\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 public customerAttributes: CustomerAttribute[];\n public apiSettings: ICommerceApiSettings;\n public phone?: string;\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 public getCacheObjectType = () => 'Customer';\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 }, 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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/update-customer-attributes',\n action: >updateCustomerAttributesAction\n});","import {\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 { GetCustomerInput } from './get-customer';\nimport { buildCacheKey } from './index';\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 public isOptOut: boolean;\n public apiSettings: ICommerceApiSettings;\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 public getCacheObjectType = () => 'Customer';\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\n const customer = await readAsync({ callerContext: ctx }, userAccountNumber);\n\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/update-customer-personalization',\n action: >updateCustomerPersonalizationAction\n});\n","import { IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IAny, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { Address, Customer } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { createAddressManagementInput, doAddressManagementOperation, IAddressManagementInput } from './add-address';\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 return doAddressManagementOperation(input, ctx, updatePrimaryAddressHandler);\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/update-primary-address',\n action: >updatePrimaryAddressAction,\n input: <(args: ICreateActionContext) => IActionInput>(createAddressManagementInput),\n isBatched: false\n});\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","import { 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 // tslint:disable-next-line:promise-must-complete\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}","import { 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 * Namespace which extends Object functionality.\n */\nexport namespace ObjectExtensions {\n // tslint:disable:no-any\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 * @return {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 // tslint:enable:no-any\n}","import { ObjectExtensions } from './object-extensions';\n\n/**\n * Namespace which extends Array functionality.\n */\nexport namespace ArrayExtensions {\n /**\n * @description Remove duplicate elements in the array.\n * @param {T[]} value The array to examine.\n * @returns {T[]} 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 * @description Verifies whether the object array has elements.\n * @param {ReadonlyArray} value The array to examine.\n * @returns {boolean} True if the object has elements, false otherwise.\n */\n export function hasElements(value: ReadonlyArray | null | undefined): boolean {\n return !ObjectExtensions.isNullOrUndefined(value) && value.length > 0;\n }\n\n /**\n * @description Checks if all elements satisfy given condition.\n * @param {T[]} value The array to examine.\n * @param {(value: T, index: number, array: T[]) => boolean} predicate The function which checks an element.\n * @returns {boolean} 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[], 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}","import { ObjectExtensions } from './object-extensions';\n\n/**\n * Namespace which extends enum functionality.\n */\nexport namespace EnumExtensions {\n // tslint:disable:no-any\n\n /**\n * @description Returns a list of numeric values and enum names for the specified enum.\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 {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 {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 {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 // tslint:enable:no-any\n}","import { ObjectExtensions } from './object-extensions';\n\n/**\n * Namespace which extends string functionality.\n */\nexport namespace StringExtensions {\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}","// 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;","import { 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}","import { Guid as _guid } from './guid';\n\nexport namespace Random {\n export import Guid = _guid;\n}","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { RatingsSummary } from '@msdyn365-commerce/commerce-entities';\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric, sendRequest } from '@msdyn365-commerce/core';\nimport { GetRatingsSummaryInput, getSelectedProductIdFromActionInput } from './index';\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 */\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-ratings-summary',\n action: >getRatingsSummary,\n input: createInput\n});","\n/**\n * Copyright (c) 2018 Microsoft Corporation\n * Modules Registration\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\n */\n\nconst universal = require('react-universal-component').default;\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 try {\n\n\n \n } catch (e) {\n handleError('-', e);\n }\n \n return binding;\n};","import { 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';\nimport { buildCacheKey, } from './index';\nimport {ActiveCartProductsInput, getActiveCartProductsAction} from './index';\n\n/**\n * Input class for delivery options for items in cart\n */\nexport class ProductDeliveryOptionsForCartLineItems implements IActionInput {\n private apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`ActiveCartLineItemsDeliveryOptions`, this.apiSettings);\n public getCacheObjectType = () => 'ActiveCartLineItemsDeliveryOptions';\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 */\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 console.log('[getDeliveryOptionsForCartLineItems] Not able to get cart OR channelConfiguration or no products in cart');\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-delivery-options-for-cartlines',\n action: >getDeliveryOptionsForCartLineItems,\n input: createInput\n});\n","import { 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 public getCacheObjectType = () => 'GetUserReview';\n public dataCacheType = (): CacheType => 'none';\n}\n","import { CacheType, IAction, IActionContext, IActionInput, ICommerceApiSettings } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { Address } from '@msdyn365-commerce/retail-proxy';\n\nimport { buildCacheKey } from './utilities/utils';\nimport getCustomer, { GetCustomerInput } from './get-customer';\n\n/**\n * Input class for the getAddress data action\n */\nexport class AddressInput implements IActionInput {\n public userAccountNumber?: string;\n private 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 public getCacheObjectType = () => 'GetAddress';\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-address',\n action: >getAddressAction,\n input: <(args: ICreateActionContext) => IActionInput>createGetAddressInput\n});","import { IActionContext } from '@msdyn365-commerce/core';\nimport { ProductAvailableQuantity, ProductWarehouseInventoryAvailability } from '@msdyn365-commerce/retail-proxy';\nimport { IProductInventoryInformation } from './product-inventory-information';\n\n/**\n * The function that maps a ProductWareHouse object into a ProductAvailabilityQuantity\n */\nexport function mapProductInventoryInformation(ctx: IActionContext,productsWarehouseInventory?: ProductWarehouseInventoryAvailability[]): IProductInventoryInformation[] {\n const productInventoryInformation: IProductInventoryInformation[] = [];\n\n if(ctx.requestContext.app.config.enableStockCheck === undefined || ctx.requestContext.app.config.enableStockCheck === false) {\n return productInventoryInformation;\n }\n\n if(productsWarehouseInventory && productsWarehouseInventory.length > 0) {\n for(const product of productsWarehouseInventory) {\n switch(ctx.requestContext.app.config.inventoryLevel){\n case 'physicalAvailable':\n // Inventory level is enabled with Physical inventory\n const physicalProductMap = mapInventoryWithPhysicalBufferEnabled(ctx, product);\n if(physicalProductMap){\n productInventoryInformation.push(physicalProductMap);\n }\n break;\n case 'totalAvailable':\n // Inventory level is enabled with Total available inventory\n const totalAvailableProductMap = mapInventoryWithTotalAvailableBufferEnabled(ctx, 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(ctx, product);\n if(productMap){\n productInventoryInformation.push(productMap);\n }\n break;\n }\n }\n }\n return productInventoryInformation;\n}\n\nexport function mapInventoryWithThresholdEnabled(ctx: IActionContext, productWarehouseInventoryAvailability: ProductWarehouseInventoryAvailability) : IProductInventoryInformation | null {\n if(productWarehouseInventoryAvailability && productWarehouseInventoryAvailability.ProductId && productWarehouseInventoryAvailability.TotalAvailable!==undefined) {\n const productQty = productWarehouseInventoryAvailability.TotalAvailable - ctx.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 ? true : false,\n InventLocationId: productWarehouseInventoryAvailability.InventLocationId\n };\n }\n\n return null;\n}\n\nexport function mapInventoryWithPhysicalBufferEnabled(ctx: IActionContext, productWarehouseInventoryAvailability: ProductWarehouseInventoryAvailability): IProductInventoryInformation | null {\n const shouldRenderLabel = displayLabelEnabled(ctx, productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelCode);\n\n if(productWarehouseInventoryAvailability && 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 const productQuantity = productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelCode === 'OOS' \n ? 0 \n :productWarehouseInventoryAvailability.PhysicalAvailable;\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\nexport function mapInventoryWithTotalAvailableBufferEnabled(ctx: IActionContext, productWarehouseInventoryAvailability: ProductWarehouseInventoryAvailability): IProductInventoryInformation | null {\n const shouldRenderLabel = displayLabelEnabled(ctx, productWarehouseInventoryAvailability.TotalAvailableInventoryLevelCode);\n if(productWarehouseInventoryAvailability && 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 const productQuantity = productWarehouseInventoryAvailability.TotalAvailableInventoryLevelCode === 'OOS' \n ? 0 \n :productWarehouseInventoryAvailability.TotalAvailable;\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\nexport function displayLabelEnabled(ctx: IActionContext, inventoryCode?:string) : boolean {\n if(!inventoryCode){\n return false;\n }\n\n switch(ctx.requestContext.app.config.inventoryRanges) {\n case 'lowAndOutofStock':\n if(inventoryCode !== 'AVAIL'){\n return true;\n }\n break;\n case 'outOfStock':\n if(inventoryCode == 'OOS'){\n return true;\n }\n break;\n case 'all':\n return true;\n }\n return false;\n}","import { 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';\nimport {FeatureStateInput, getFeatureStateAction} 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 public Longitude?: number;\n public Radius?: number;\n public DistanceUnitValue?: number;\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 public getCacheObjectType = () => 'GetOrgUnitLocationsByAreaInput';\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 */\nexport async function getFeatureState(context: IActionContext): Promise {\n return getFeatureStateAction(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 // 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 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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-store-location-information',\n action: >getOrgUnitLocationsByArea,\n input: createGetOrgUnitLocationsByAreaInput\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, actionContext.requestContext);\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","module.exports = React;","import { buildCacheKeyWithUrlTokens, CurrentCategoryInput, getCategoryUrl, getCurrentCategory } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CacheType,\n createObservableDataAction,\n getFriendlyName,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { IDefaultPageSummaryConfig } from '../default-page-summary/default-page-summary.props.autogenerated';\nimport { IPageSummaryData } from '../IPageSummaryData';\n\n/** Category Page Summary Input */\nexport class CategoryPageSummaryInput implements IActionInput {\n public requestContext: IRequestContext;\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 public getCacheKey = (): string => buildCacheKeyWithUrlTokens('CategoryPageSummary', this.requestContext);\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 currentCategory;\n try {\n currentCategory = await getCurrentCategory(createGetCurrentCategoryInput(context), context);\n } catch (e) {\n // Do nothing, if the action fails fallback to values defined in data\n }\n if (currentCategory) {\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 // @ts-ignore - TODO: property exits in new version of SDK. Remove once released.\n const canonicalDomain = context.requestContext.canonicalDomain;\n if (categoryUrl && canonicalDomain) {\n categoryUrl = `https://${canonicalDomain}${categoryUrl}`;\n } else {\n categoryUrl = undefined;\n }\n } catch (e) {\n categoryUrl = undefined;\n }\n return {\n title: currentCategory.Name,\n sharingImageUrl: currentCategory.OfflineImage,\n canonicalUrl: categoryUrl,\n faviconUrl: config && config.faviconUrl\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 } else {\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 * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { getRnrEndpointId, getRnrPartnerId, getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { Reviews } from '@msdyn365-commerce/commerce-entities';\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric, sendRequest } from '@msdyn365-commerce/core';\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 */\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/get-product-reviews',\n action: >getReviewsForGivenProduct,\n input: createInputForProductReviews\n});\n","import { CacheType, IAction, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, 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 public getCacheObjectType = () => 'BusinessPartner';\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","import { 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 ctx action context\n */\nexport async function getProductRefinerHierarchy(searchCriteria: ProductSearchCriteria, queryResultSettings: IQueryResultSettings, ctx: IActionContext): Promise {\n return getProductSearchRefinersAsync({ callerContext: ctx, queryResultSettings: 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) {\n ctx.trace('[getRefinersByCriteriaAction] returned no IProductRefinerHierarchy objects');\n return [];\n }\n\n return result;\n });\n}","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { BaseCollectionInput, createBaseCollectionInput } from './base-collection-action';\nimport { getProductRefinerHierarchy } from './get-product-refiner-hierarchy';\n\n/**\n * Refiners-by-Collection Input action\n */\nexport class RefinersByCollectionInput extends BaseCollectionInput implements IActionInput {\n public getCacheObjectType = () => 'ProductRefiner';\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 } else {\n return 'application';\n }\n }\n}\n\n/**\n * Create input method which creates an ActionInput for fetching list page refiners\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 */\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],\n Context: {\n ChannelId: input.apiSettings.channelId,\n CatalogId: input.apiSettings.catalogId\n }\n },\n input.queryResultSettings,\n ctx);\n } else {\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.apiSettings.catalogId\n }\n },\n input.queryResultSettings,\n ctx);\n } else {\n if (input.searchText && (ctx.requestContext.query && ctx.requestContext.query.productId)) {\n searchProductId = Number(input.searchText);\n if (Number.isNaN(searchProductId)) {\n throw new Error('Failed to cast search product id into a number.');\n } else {\n return getProductRefinerHierarchy(\n {\n Context: {\n ChannelId: input.apiSettings.channelId,\n CatalogId: input.apiSettings.catalogId\n },\n RecommendationListId: 'looks',\n Ids: [searchProductId || 0]\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-refiners-for-collection',\n action: >action,\n input: createInput\n});","module.exports = ReactDOM;","/*!\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","import { 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 } 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 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 public getCacheObjectType = () => 'ProductList';\n public dataCacheType = (): CacheType => 'instance';\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 */\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 CustomerId: ctx.requestContext.user.customerAccountNumber\n };\n return 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});","import { 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';\nimport { buildCacheKey } from './index';\n\n/**\n * Input class for the getLoyaltyCard data action\n */\nexport class GetLoyaltyCardInput implements IActionInput {\n public userAccountNumber?: string;\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 public getCacheObjectType = () => 'GetLoyaltyCard';\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 < 1) {\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-loyalty-card',\n action: >getLoyaltyAction,\n input: <(args: ICreateActionContext) => IActionInput>createGetLoyaltyCardInput\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { generateProductImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport MsDyn365, {\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport { AsyncResult, ProductSearchCriteria,ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { searchByCriteriaAsync} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport {\n BaseCollectionInput,\n createBaseCollectionInput\n} from './base-collection-action';\n\nimport { ListPageStateInput } from '../list-page-state';\n\n/**\n * GetFullProductsByCollection Action Input\n */\nexport class GetFullProductsByCollectionInput extends BaseCollectionInput implements IActionInput {\n public getCacheObjectType = () => 'FullProductSearchResult';\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 } else {\n return 'application';\n }\n }\n}\n\nexport interface IFullProductsSearchResultsWithCount {\n products: ProductSearchResult[];\n count: number;\n}\n\n/**\n * createInput function which creates and actionInput used to fetch products for a list page.\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 * Action function to fetch products for a list page\n */\nasync function action(\n input: GetFullProductsByCollectionInput,\n ctx: IActionContext\n): Promise {\n let productSearchResults: ProductSearchResult[];\n let promise: AsyncResult;\n let searchProductId;\n const searchCriteriaInput: ProductSearchCriteria = {};\n searchCriteriaInput.Context = { ChannelId: ctx.requestContext.apiSettings.channelId, CatalogId: ctx.requestContext.apiSettings.catalogId };\n searchCriteriaInput.Refinement = input.refiners;\n searchCriteriaInput.IncludeAttributes = input.includeAttributes;\n searchCriteriaInput.SkipVariantExpansion = true;\n\n if (input.pageType === 'Category' || (ctx.requestContext.query && ctx.requestContext.query.categoryId)) {\n if (input.category) {\n searchCriteriaInput.CategoryIds = [input.category || 0];\n promise = searchByCriteriaAsync(\n {\n callerContext: ctx,\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 {\n if (input.searchText && (ctx.requestContext.query && ctx.requestContext.query.q)) {\n searchCriteriaInput.SearchCondition = input.searchText;\n promise = searchByCriteriaAsync(\n {\n callerContext: ctx,\n queryResultSettings: input.queryResultSettings\n },\n searchCriteriaInput\n );\n } else {\n if (input.searchText && (ctx.requestContext.query && ctx.requestContext.query.productId)) {\n searchProductId = Number(input.searchText);\n if (Number.isNaN(searchProductId)) {\n throw new Error('Failed to cast search product id into a number.');\n } else {\n searchCriteriaInput.RecommendationListId = 'looks';\n searchCriteriaInput.Ids = [searchProductId || 0];\n promise = searchByCriteriaAsync(\n {\n callerContext: ctx,\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 }\n\n productSearchResults = await promise;\n\n const mappedProducts = productSearchResults.map(productSearchResult => {\n const newImageUrl = generateProductImageUrl(\n productSearchResult,\n ctx.requestContext.apiSettings\n );\n\n if (newImageUrl) {\n productSearchResult.PrimaryImageUrl = newImageUrl;\n }\n\n return (productSearchResult);\n });\n\n // Update ListPageState For SSR\n if (!MsDyn365.isBrowser) {\n ctx.update(new ListPageStateInput(), { totalProductCount: promise.metadata.count || 0, activeFilters: input.refiners });\n\n }\n\n return {\n products: mappedProducts,\n count: promise.metadata.count || 0\n };\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-full-products-by-collection',\n action: >action,\n input: createInput\n});\n","import { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { getSimpleProducts, ProductInput } from './index';\n\n/**\n * Input class for activeCartWithProducts data action\n */\nexport class ActiveCartProductsInput implements IActionInput {\n public getCacheKey = () => `ActiveCartProducts`;\n public getCacheObjectType = () => 'ActiveCartProducts';\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 */\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 // If there are cart lines, make call to get products\n if (cart && cart.CartLines && cart.CartLines.length) {\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 } else {\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-products-in-active-cart',\n action: >getActiveCartProductsAction,\n input: createInput\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 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 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};\n }\n\nexport const validateConnectorRegistration = () => {\n \n verifyExperimentationReigstration('msdyn365-exp-test');\n};","import { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric, IRequestContext } from '@msdyn365-commerce/core';\nimport getCategoriesHierarchy, { CategoriesInput } from './get-categories-hierarchy';\n\n/**\n * Action Input Class for get-current-category-hierarchy\n */\nexport class CurrentCategoryHierarchyInput extends CategoriesInput {\n public activeCategoryId: number;\n\n constructor(context: IRequestContext, mappedToHierarchy: boolean, maxItems?: number, activeCategoryId?: number) {\n super(context, mappedToHierarchy, maxItems);\n this.activeCategoryId = activeCategoryId || 0;\n }\n\n // @ts-ignore: Overriding cache object type\n public getCacheObjectType = () => 'CurrentCategoryHierarchy';\n public getCacheKey = () => `${this.activeCategoryId}-${this.channelId}`;\n}\n\n/**\n * Creates the input required for the data action\n */\nexport const createCategoriesHierarchyInput = (inputData: ICreateActionContext>): IActionInput => {\n const topItems = inputData.config && inputData.config.topCategories && parseInt(inputData.config.topCategories, 10);\n const activeCategoryId =\n (inputData.requestContext.urlTokens && inputData.requestContext.urlTokens.pageType === 'Category' && inputData.requestContext.urlTokens.itemId) ||\n (inputData.requestContext.query && inputData.requestContext.query.categoryId) ||\n 0;\n\n return new CurrentCategoryHierarchyInput(inputData.requestContext, true, topItems, +activeCategoryId);\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 */\nexport async function getCurrentCategoryHierarchyAction(input: CurrentCategoryHierarchyInput, ctx: IActionContext): Promise {\n\n const fullCategoryHierarchy = await getCategoriesHierarchy(\n new CategoriesInput(\n ctx.requestContext,\n true,\n input.maxItems),\n ctx);\n const categoryArray: CategoryHierarchy[] = [];\n\n const findCategory = (category: CategoryHierarchy) => {\n if(category.RecordId === input.activeCategoryId) {\n categoryArray.push(category);\n return true;\n } else if (category.Children && category.Children.length) {\n category.Children.forEach((childCategory) => {\n if(findCategory(childCategory)) {\n categoryArray.push(category);\n }\n });\n } else {\n return false;\n }\n };\n\n fullCategoryHierarchy.forEach((categoryHierarchy: CategoryHierarchy) => {\n findCategory(categoryHierarchy);\n });\n\n return categoryArray.reverse();\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-current-category-hierarchy',\n action: >getCurrentCategoryHierarchyAction,\n input: createCategoriesHierarchyInput\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { getRnrAuthEndpointId, getRnrPartnerId, getSelectedProductIdFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { Review } from '@msdyn365-commerce/commerce-entities';\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext, sendRequest } from '@msdyn365-commerce/core';\nimport { GetUserReviewInput } from './inputs/get-user-review-input';\n\n/**\n * This method builds the input for the getUserReviewApi call\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 */\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/ratings-reviews/get-user-review',\n action: >getUserReview,\n input: createInput\n});\n","import { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, getParameterizeFeatureFlags, IAction, IActionInput, ICommerceApiSettings, IParameterizeFeatureFlags } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, IAny, ICreateActionContext, IGeneric, IRequestContext } from '@msdyn365-commerce/core';\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 public categorySlug?: string;\n private apiSettings: ICommerceApiSettings;\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 // @ts-ignore: RecordId URLToken not typed yet\n } else if (context.urlTokens && context.urlTokens.recordId) {\n // @ts-ignore: RecordId URLToken not typed yet\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) {\n const categories: string[] = (context.urlTokens.categories);\n\n if (!categories.length) {\n throw new Error('Failed to get category name from urlTokens');\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-ignore 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 }\n\n public getCacheKey = () => buildCacheKey(`${this.categoryId || this.categorySlug}`, this.apiSettings);\n public getCacheObjectType = () => 'Current-Category';\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Creates a current category input from an ICreateActionContext\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) {\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-current-category',\n action: >getCurrentCategoryAction,\n input: createGetCurrentCategoryInput\n});\n","import { CacheType, IAction, IActionInput, ICommerceApiSettings } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { MediaLocation } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { generateImageUrl, buildCacheKey } from './utilities/utils';\nimport { getMediaLocationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n/**\n * Product Input\n */\nexport class MediaLocationsByIdInput implements IActionInput {\n public productId?: number;\n public channelId: number;\n public catalogId: number;\n private 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 public getCacheObjectType = () => 'MediaLocations';\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Creates the input required to make the retail api call\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 */\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-media-locations-by-id',\n action: >getMediaLocationsByIdAction,\n input: createMediaLocationsByIdInput\n});\n","import { CacheType, IAction, IActionInput, IRequestContext, ICommerceApiSettings, getCategoriesUrlSync } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, IActionContext, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { getCategoryPathsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { CategoryPathLookup} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getSelectedProductIdFromActionInput, buildCacheKey } from './utilities/utils';\nimport { ICategoryPath, ICategoryUrl } from '@msdyn365-commerce/core-internal/dist/types/interfaces/ICategoryPathInterfaces';\n\n/**\n * Category path input\n */\nexport class GetCategoryPathsInput implements IActionInput {\n public readonly ChannelId: number;\n public readonly CatalogId: number; \n public readonly categoryPathLooksups: CategoryPathLookup[];\n private constructedCacheKey: string;\n public readonly apiSettings: ICommerceApiSettings;\n\n constructor(context: IRequestContext, categoryPathLooksups: CategoryPathLookup[]) {\n this.ChannelId = context.apiSettings.channelId;\n this.CatalogId = context.apiSettings.catalogId | 0;\n this.categoryPathLooksups = categoryPathLooksups;\n this.apiSettings = context.apiSettings;\n this.constructedCacheKey = ``;\n categoryPathLooksups.forEach(categoryPath=>\n {\n this.constructedCacheKey+=`${categoryPath.ProductId && categoryPath.ProductId.toString()}|`;\n })\n this.constructedCacheKey+=`${this.ChannelId.toString()}|`\n this.constructedCacheKey+=`${this.CatalogId.toString()}|`\n }\n \n public getCacheKey = () => buildCacheKey(this.constructedCacheKey, this.apiSettings);;\n public getCacheObjectType = () => 'CategoryPath';\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the getCategoryPath retail api call\n */\nexport const createGetCategoryPathsInput = (inputData: ICreateActionContext>): IActionInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n if (productId) {\n return new GetCategoryPathsInput(inputData.requestContext, [{ProductId:+productId}]);\n } else {\n throw new Error('Unable to create SelectedVariantInput, no productId found on module config or query');\n }\n \n};\n\n/**\n * Calls the Retail API and returns the category path for a product\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 as ICategoryPath, ctx);\n if(categoryUrl)\n {\n return categoryUrl;\n }\n return [];\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-category-paths',\n action: >getCategoryPathsAction,\n input: createGetCategoryPathsInput,\n});\n","import { 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 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 public orderTemplateLines: OrderTemplateLine[];\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}","import { 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';\nimport { buildCacheKey } from './utilities/utils';\n\n/**\n * Input class for get customer data action\n */\nexport class OrganizationUsersInput implements IActionInput {\n private apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n public getCacheKey = () => buildCacheKey('OrganizationUsers', this.apiSettings);\n public getCacheObjectType = () => 'BusinessPartner';\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 default createObservableDataAction({\n id: 'get-organization-users',\n action: >getOrganizationUsers,\n input: createGetOrganizationUsersInput\n});\n","/**\n* Copyright (c) 2018 Microsoft Corporation\n* Modules Registration\n* THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\n*/\n\nconst universal = require('react-universal-component').default;\n\nexport const viewDictionary = {};\n\nviewDictionary['@msdyn365-commerce-modules|accordion|modules|accordion-item|accordion-item'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/accordion/dist/lib/modules/accordion-item/accordion-item.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-accordion-dist-lib-modules-accordion-item-accordion-item.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|accordion|modules|accordion|accordion'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/accordion/dist/lib/modules/accordion/accordion.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-accordion-dist-lib-modules-accordion-accordion.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|aad-generic|aad-generic'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/aad-generic/aad-generic.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-aad-generic-aad-generic.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-address-tile|account-address-tile'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-address-tile/account-address-tile.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-address-tile-account-address-tile.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-customer-balance-tile|account-customer-balance-tile'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-customer-balance-tile/account-customer-balance-tile.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-customer-balance-tile-account-customer-balance-tile.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-customer-balance|account-customer-balance'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-customer-balance/account-customer-balance.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-customer-balance-account-customer-balance.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-generic-tile|account-generic-tile'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-generic-tile/account-generic-tile.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-generic-tile-account-generic-tile.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-invoice-tile|account-invoice-tile'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-invoice-tile/account-invoice-tile.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-invoice-tile-account-invoice-tile.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-loyalty-tile|account-loyalty-tile'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-loyalty-tile/account-loyalty-tile.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-loyalty-tile-account-loyalty-tile.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-loyalty|account-loyalty'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-loyalty/account-loyalty.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-loyalty-account-loyalty.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-order-templates-tile|account-order-templates-tile'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-order-templates-tile/account-order-templates-tile.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-order-templates-tile-account-order-templates-tile.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-profile-edit|account-profile-edit'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-profile-edit/account-profile-edit.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-profile-edit-account-profile-edit.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-profile|account-profile'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-profile/account-profile.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-profile-account-profile.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-welcome-tile|account-welcome-tile'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-welcome-tile/account-welcome-tile.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-welcome-tile-account-welcome-tile.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|account-wishlist-tile|account-wishlist-tile'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/account-wishlist-tile/account-wishlist-tile.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-account-wishlist-tile-account-wishlist-tile.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|loyalty-sign-up|loyalty-sign-up'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-sign-up/loyalty-sign-up.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-loyalty-sign-up-loyalty-sign-up.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|loyalty-terms|loyalty-terms'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/loyalty-terms/loyalty-terms.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-loyalty-terms-loyalty-terms.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|organization-users-tile|organization-users-tile'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/organization-users-tile/organization-users-tile.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-organization-users-tile-organization-users-tile.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|password-reset-verification|password-reset-verification'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/password-reset-verification/password-reset-verification.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-password-reset-verification-password-reset-verification.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|password-reset|password-reset'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/password-reset/password-reset.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-password-reset-password-reset.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|sign-in|sign-in'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-in/sign-in.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-sign-in-sign-in.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|account-management|modules|sign-up|sign-up'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/account-management/dist/lib/modules/sign-up/sign-up.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-account-management-dist-lib-modules-sign-up-sign-up.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|address|modules|account-management-address|account-management-address'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/address/dist/lib/modules/account-management-address/account-management-address.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-address-dist-lib-modules-account-management-address-account-management-address.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|address|modules|business-account-address|business-account-address'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/address/dist/lib/modules/business-account-address/business-account-address.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-address-dist-lib-modules-business-account-address-business-account-address.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|address|modules|checkout-billing-address|checkout-billing-address'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/address/dist/lib/modules/checkout-billing-address/checkout-billing-address.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-address-dist-lib-modules-checkout-billing-address-checkout-billing-address.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|address|modules|checkout-shipping-address|checkout-shipping-address'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/address/dist/lib/modules/checkout-shipping-address/checkout-shipping-address.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-address-dist-lib-modules-checkout-shipping-address-checkout-shipping-address.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|breadcrumb|modules|breadcrumb|breadcrumb'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/breadcrumb/dist/lib/modules/breadcrumb/breadcrumb.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-breadcrumb-dist-lib-modules-breadcrumb-breadcrumb.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|business-account-management|modules|business-sign-up|business-sign-up'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/business-account-management/dist/lib/modules/business-sign-up/business-sign-up.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-business-account-management-dist-lib-modules-business-sign-up-business-sign-up.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|business-organization-list|modules|business-organization-list|business-organization-list'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/business-organization-list/dist/lib/modules/business-organization-list/business-organization-list.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-business-organization-list-dist-lib-modules-business-organization-list-business-organization-list.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|buybox|modules|buybox|buybox'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/buybox/dist/lib/modules/buybox/buybox.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-buybox-dist-lib-modules-buybox-buybox.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|carousel|modules|carousel|carousel'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/carousel/dist/lib/modules/carousel/carousel.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-carousel-dist-lib-modules-carousel-carousel.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|cart|modules|cart-icon|cart-icon'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/cart/dist/lib/modules/cart-icon/cart-icon.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-cart-dist-lib-modules-cart-icon-cart-icon.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|cart|modules|cart|cart'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/cart/dist/lib/modules/cart/cart.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-cart-dist-lib-modules-cart-cart.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-customer-account-payment|checkout-customer-account-payment'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-customer-account-payment/checkout-customer-account-payment.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-customer-account-payment-checkout-customer-account-payment.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-delivery-options|checkout-delivery-options'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-delivery-options/checkout-delivery-options.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-delivery-options-checkout-delivery-options.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-gift-card|checkout-gift-card'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-gift-card/checkout-gift-card.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-gift-card-checkout-gift-card.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-guest-profile|checkout-guest-profile'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-guest-profile/checkout-guest-profile.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-guest-profile-checkout-guest-profile.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-loyalty|checkout-loyalty'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-loyalty/checkout-loyalty.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-loyalty-checkout-loyalty.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-payment-instrument|checkout-payment-instrument'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-payment-instrument/checkout-payment-instrument.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-payment-instrument-checkout-payment-instrument.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-pickup|checkout-pickup'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-pickup/checkout-pickup.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-pickup-checkout-pickup.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-section-container|checkout-section-container'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-section-container/checkout-section-container.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-section-container-checkout-section-container.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout-terms-and-conditions|checkout-terms-and-conditions'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout-terms-and-conditions/checkout-terms-and-conditions.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-terms-and-conditions-checkout-terms-and-conditions.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|checkout|checkout'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/checkout/checkout.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-checkout-checkout.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|checkout|modules|gift-card-balance-check|gift-card-balance-check'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/checkout/dist/lib/modules/gift-card-balance-check/gift-card-balance-check.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-checkout-dist-lib-modules-gift-card-balance-check-gift-card-balance-check.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|content-block|modules|content-block|content-block'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/content-block/dist/lib/modules/content-block/content-block.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-content-block-dist-lib-modules-content-block-content-block.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|cookie-compliance|modules|cookie-compliance|cookie-compliance'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/cookie-compliance/dist/lib/modules/cookie-compliance/cookie-compliance.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-cookie-compliance-dist-lib-modules-cookie-compliance-cookie-compliance.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|buybox'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/buybox.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-fabrikam-design-kit-dist-lib-modules-fabrikam-views-buybox.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|cart'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/cart.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-fabrikam-design-kit-dist-lib-modules-fabrikam-views-cart.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|header'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/header.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-fabrikam-design-kit-dist-lib-modules-fabrikam-views-header.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|navigation-menu'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/navigation-menu.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-fabrikam-design-kit-dist-lib-modules-fabrikam-views-navigation-menu.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|order-details'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/order-details.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-fabrikam-design-kit-dist-lib-modules-fabrikam-views-order-details.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|order-history'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/order-history.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-fabrikam-design-kit-dist-lib-modules-fabrikam-views-order-history.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|ratings-histogram'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/ratings-histogram.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-fabrikam-design-kit-dist-lib-modules-fabrikam-views-ratings-histogram.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|reviews-list'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/reviews-list.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-fabrikam-design-kit-dist-lib-modules-fabrikam-views-reviews-list.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|search-result-container'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/search-result-container.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-fabrikam-design-kit-dist-lib-modules-fabrikam-views-search-result-container.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|footer|modules|footer-category|footer-category'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/footer/dist/lib/modules/footer-category/footer-category.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-footer-dist-lib-modules-footer-category-footer-category.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|footer|modules|footer-item|footer-item'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/footer/dist/lib/modules/footer-item/footer-item.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-footer-dist-lib-modules-footer-item-footer-item.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|header|modules|header|header'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/header/dist/lib/modules/header/header.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-header-dist-lib-modules-header-header.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|iframe|modules|iframe|iframe'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/iframe/dist/lib/modules/iframe/iframe.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-iframe-dist-lib-modules-iframe-iframe.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|invoice|modules|invoices-list|invoices-list'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/invoice/dist/lib/modules/invoices-list/invoices-list.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-invoice-dist-lib-modules-invoices-list-invoices-list.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|map|modules|map|map'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/map/dist/lib/modules/map/map.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-map-dist-lib-modules-map-map.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|media-gallery|modules|media-gallery|media-gallery'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/media-gallery/dist/lib/modules/media-gallery/media-gallery.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-media-gallery-dist-lib-modules-media-gallery-media-gallery.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|navigation-menu|modules|navigation-menu|navigation-menu'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-navigation-menu-dist-lib-modules-navigation-menu-navigation-menu.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|order-management|modules|checkout-order-confirmation|checkout-order-confirmation'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/checkout-order-confirmation/checkout-order-confirmation.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-order-management-dist-lib-modules-checkout-order-confirmation-checkout-order-confirmation.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|order-management|modules|order-confirmation|order-confirmation'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-confirmation/order-confirmation.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-order-management-dist-lib-modules-order-confirmation-order-confirmation.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|order-management|modules|order-details|order-details'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-details/order-details.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-order-management-dist-lib-modules-order-details-order-details.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|order-management|modules|order-history|order-history'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/order-management/dist/lib/modules/order-history/order-history.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-order-management-dist-lib-modules-order-history-order-history.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|order-template|modules|order-template-list|order-template-list'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template-list/order-template-list.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-order-template-dist-lib-modules-order-template-list-order-template-list.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|order-template|modules|order-template|order-template'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/order-template/dist/lib/modules/order-template/order-template.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-order-template-dist-lib-modules-order-template-order-template.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|product-collection|modules|product-collection|product-collection'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/product-collection/dist/lib/modules/product-collection/product-collection.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-product-collection-dist-lib-modules-product-collection-product-collection.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|product-specification|modules|product-specification|product-specification'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/product-specification/dist/lib/modules/product-specification/product-specification.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-product-specification-dist-lib-modules-product-specification-product-specification.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|promo-banner|modules|promo-banner|promo-banner'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/promo-banner/dist/lib/modules/promo-banner/promo-banner.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-promo-banner-dist-lib-modules-promo-banner-promo-banner.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|ratings-reviews|modules|ratings-histogram|ratings-histogram'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/ratings-histogram/ratings-histogram.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-ratings-reviews-dist-lib-modules-ratings-histogram-ratings-histogram.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|ratings-reviews|modules|reviews-list|reviews-list'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/reviews-list/reviews-list.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-ratings-reviews-dist-lib-modules-reviews-list-reviews-list.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|ratings-reviews|modules|write-review|write-review'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/ratings-reviews/dist/lib/modules/write-review/write-review.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-ratings-reviews-dist-lib-modules-write-review-write-review.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|search-result-container|modules|search-result-container|search-result-container'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/search-result-container.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-search-result-container-dist-lib-modules-search-result-container-search-result-container.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|search|modules|search|search'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/search/dist/lib/modules/search/search.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-search-dist-lib-modules-search-search.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|site-picker|modules|site-picker|site-picker'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/site-picker/dist/lib/modules/site-picker/site-picker.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-site-picker-dist-lib-modules-site-picker-site-picker.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|social-share|modules|social-share-item|social-share-item'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/social-share/dist/lib/modules/social-share-item/social-share-item.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-social-share-dist-lib-modules-social-share-item-social-share-item.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|social-share|modules|social-share|social-share'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/social-share/dist/lib/modules/social-share/social-share.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-social-share-dist-lib-modules-social-share-social-share.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|spacer|modules|spacer|spacer'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/spacer/dist/lib/modules/spacer/spacer.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-spacer-dist-lib-modules-spacer-spacer.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|store-selector|modules|store-selector|store-selector'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/store-selector/dist/lib/modules/store-selector/store-selector.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-store-selector-dist-lib-modules-store-selector-store-selector.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|tab|modules|tab-item|tab-item'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/tab/dist/lib/modules/tab-item/tab-item.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-tab-dist-lib-modules-tab-item-tab-item.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|tab|modules|tab|tab'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/tab/dist/lib/modules/tab/tab.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-tab-dist-lib-modules-tab-tab.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|text-block|modules|text-block|text-block'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/text-block/dist/lib/modules/text-block/text-block.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-text-block-dist-lib-modules-text-block-text-block.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|video-player|modules|video-player|video-player'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/video-player/dist/lib/modules/video-player/video-player.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-video-player-dist-lib-modules-video-player-video-player.view.js',\n ignoreBabelRename: true\n }\n )};\nviewDictionary['@msdyn365-commerce-modules|wishlist|modules|wishlist-items|wishlist-items'] = {\ncomponent: universal(\n () => import(/* webpackInclude: /.(t|j)sx?$/ */ \n /* webpackExclude: /.data.|.autogenerated.|.test.|.field.|.data-model./ */\n '@msdyn365-commerce-modules/wishlist/dist/lib/modules/wishlist-items/wishlist-items.view.js'),\n {\n chunkName: () => '@msdyn365-commerce-modules-wishlist-dist-lib-modules-wishlist-items-wishlist-items.view.js',\n ignoreBabelRename: true\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, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { IAny, IDictionary, IMSDyn365Window } from '@msdyn365-commerce/core-internal';\nimport { Cart, CartLine, IDataServiceRequest, IUpdateCartLinesParam } from '@msdyn365-commerce/retail-proxy';\nimport { getProductInfoFromCart } 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 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 updatedProducts: IDictionary = {};\n const updatedCartLines = actionContext.requestContext.telemetryData.updatedCartLines;\n\n // If TelemetryData exists for updated cart lines, collect product info\n if (updatedCartLines) {\n updatedCartLines.forEach((cartLine: CartLine) => {\n if (cartLine && cartLine.ProductId) {\n const updatedProduct = actionContext.requestContext.telemetryData[cartLine.ProductId];\n if (updatedProduct) {\n updatedProducts[cartLine.ProductId] = updatedProduct;\n }\n }\n });\n }\n\n // Fire UpdateInCart event\n window._msdyn365.telemetry.logEvent(\n TelemetryEvent.UpdateInCart,\n getProductInfoFromCart(cart, updatedProducts, actionContext.requestContext)\n );\n }\n};\n\ncreateDataActionHook({\n actionId: '@msdyn365-commerce/retail-proxy/Carts/UpdateCartLines',\n postReaderHook: afterUpdateCart,\n preReaderHook: beforeUpdateCart\n});\n","import {\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 getCustomer, { GetCustomerInput } from './get-customer';\nimport { buildCacheKey } from './index';\n\n/**\n * Input class for the GetCustomerBalance data action\n */\nexport class GetCustomerBalanceInput implements IActionInput {\n public customerAccountNumber?: string;\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 public getCacheObjectType = () => 'GetCustomerBalance';\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-customer-balance',\n action: >getCustomerBalanceAction,\n input: <(args: ICreateActionContext) => IActionInput>createGetCustomerBalanceInput\n});\n","import {\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';\nimport {FeatureStateInput, getFeatureStateAction} from './get-feature-state';\nimport {\n ActiveCartProductsInput,\n ArrayExtensions,\n buildCacheKey,\n getActiveCartProductsAction,\n IProductInventoryInformation,\n mapProductInventoryInformation\n} from './index';\n/**\n * Input class for availabilities for items in cart\n */\nexport class ProductAvailabilitiesForCartLineItems implements IActionInput {\n private apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`ActiveCartLineItemsAvailability`, this.apiSettings);\n public getCacheObjectType = () => 'ActiveCartLineItemsAvailability';\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 */\nconst getDeliveryMode = (cartLine: CartLine, featureSate: boolean = false, channelDeliveryOptionConfig: ChannelDeliveryOptionConfiguration, pickupDeliveryMode?: string) => {\n if(!featureSate) {\n return cartLine.DeliveryMode === pickupDeliveryMode;\n } else {\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 */\n// tslint:disable-next-line:cyclomatic-complexity tslint:disable: max-func-body-length\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 */\n async function getFeatureState(context: IActionContext): Promise {\n return getFeatureStateAction(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\n const shippingProductAvailabilities = await getEstimatedAvailabilityAsync(\n { callerContext: ctx, bypassCache: 'get' },\n { ProductIds: productIds, DefaultWarehouseOnly: true }\n );\n\n if (shippingProductAvailabilities &&\n shippingProductAvailabilities.ProductWarehouseInventoryAvailabilities &&\n shippingProductAvailabilities.ProductWarehouseInventoryAvailabilities.length > 0) {\n\n productAvailabilities = mapProductInventoryInformation(\n ctx,\n shippingProductAvailabilities?.ProductWarehouseInventoryAvailabilities\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 getProductWarehouseAvail = await getEstimatedProductWarehouseAvailabilityAsync(\n { callerContext: ctx, bypassCache: 'get', queryResultSettings: {} },\n [productWarehouse]\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) {\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-availabilities-cartlines',\n action: >getAvailabilitiesForCartLineItems,\n input: createInput\n});\n","import { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\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';\n\n/**\n * Input class for get state provinces data action\n */\nexport class GetStateProvincesInput implements IActionInput {\n public countryRegionId: string;\n private 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 public getCacheObjectType = () => 'StateProvinceInfo';\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 default createObservableDataAction({\n action: >getStateProvinceAction\n});\n","import { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\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';\n\n/**\n * Input class for get Address Purposes data action\n */\nexport class GetAddressPurposesInput implements IActionInput {\n private apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('AddressPurpose', this.apiSettings);\n public getCacheObjectType = () => 'AddressPurpose';\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/address/get-address-purposes',\n action: >getAddressPurposesAction,\n input: createInput\n});\n","import { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\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';\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 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 public getCacheObjectType = () => 'StateProvinceInfo';\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/address/get-country-state',\n action: >getCountryStateAction,\n input: createInput\n});","import { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductWarehouseInventoryAvailability } from '@msdyn365-commerce/retail-proxy';\nimport { getEstimatedAvailabilityAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ProductAvailableQuantity, ReleasedProductType, ProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getSelectedProductIdFromActionInput, getSelectedVariant, IProductInventoryInformation, SelectedVariantInput } from './index';\nimport { mapProductInventoryInformation } 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 public channelId: number;\n\n constructor(productId: number | string, channelId: number) {\n this.productId = typeof productId === 'string' ? +productId : productId;\n this.channelId = channelId;\n }\n\n public getCacheKey = () => `ProductAvailabilitiesForSelectedVariant`;\n public getCacheObjectType = () => 'ProductAvailabilities';\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 */\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 } else {\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 */\nexport async function getProductAvailabilitiesForSelectedVariantAction(\n input: ProductAvailabilitiesForSelectedVariantInput,\n ctx: IActionContext\n): Promise {\n const selectedVariantInput = new SelectedVariantInput(input.productId, input.channelId);\n // tslint:disable-next-line:prefer-type-cast\n const PRODUCTASSERVICE = 2 as ReleasedProductType.Service;\n return getSelectedVariant(selectedVariantInput, ctx)\n .then(productResult => {\n // don't get availability if it is service item\n if (productResult && productResult.ItemTypeValue !== PRODUCTASSERVICE && productResult.ProductTypeValue !== ProductType.Master) {\n return getEstimatedAvailabilityAsync({ callerContext: ctx }, { ProductIds: [productResult.RecordId], DefaultWarehouseOnly: true}).then(response => {\n if(response && response.ProductWarehouseInventoryAvailabilities && response.ProductWarehouseInventoryAvailabilities.length) {\n return mapProductInventoryInformation(ctx, response.ProductWarehouseInventoryAvailabilities);\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(`[getPriceForSelectedVariantAction]Error executing action`);\n throw new Error('[getPriceForSelectedVariantAction]Error executing action');\n });\n}\n\n/**\n * The function that maps a ProductWareHouse object into a ProductAvailabilityQuantity\n */\nexport function mergeProductWarehouseToProductAvailabities(productsWarehouseInventory: ProductWarehouseInventoryAvailability[]): ProductAvailableQuantity[] {\n const productAvailable: ProductAvailableQuantity[] = [];\n if(productsWarehouseInventory && productsWarehouseInventory.length > 0) {\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/**\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-product-availabilities-for-selected-variant',\n action: >getProductAvailabilitiesForSelectedVariantAction,\n input: createProductAvailabilitiesForSelectedVariantInput\n});\n","import { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { createObservableDataAction, 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 public readonly channelId: number;\n private _mappedToHierarchy: boolean;\n 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 }\n\n public getCacheKey = () => `${this.channelId}|top-${this.maxItems || 250}`;\n public getCacheObjectType = () => (this._mappedToHierarchy ? 'CategoryHierarchy' : 'Category');\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Creates the input required to make the retail api call\n */\nexport const createCategoriesInput = (inputData: ICreateActionContext>): IActionInput => {\n const topItems = inputData.config && inputData.config.topCategories && 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 */\nexport async function getCategoryAction(input: CategoriesInput, ctx: IActionContext): Promise {\n return (getCategoriesAsync({ callerContext: ctx }, input.channelId));\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-categories',\n action: >getCategoryAction,\n input: createCategoriesInput\n});\n","import { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\nimport { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\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 default createObservableDataAction({\n action: >getGenericAction,\n input: createsearchStateInputInternal\n});\n","import { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\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';\n\n/**\n * Input class for get country regions data action\n */\nexport class GetCountryRegionsInput implements IActionInput {\n public locale: string;\n private 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 public getCacheObjectType = () => 'CountryRegionInfo';\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call\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 default createObservableDataAction({\n action: >getCountryRegionsAction,\n input: createInput\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { buildCacheKeyWithUrlTokens } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IRequestContext\n} from '@msdyn365-commerce/core';\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/** Page Summary Input */\nexport class PageSummaryInput implements IActionInput {\n public requestContext: IRequestContext;\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 public getCacheKey = (): string => `${buildCacheKeyWithUrlTokens('PageSummary', this.requestContext)}-${this.config.title}`;\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,\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","import { ArrayExtensions, buildCacheKey, IProductInventoryInformation, mapProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\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 { 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 apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey(`ActiveWishlistItemsAvailability`, this.apiSettings);\n public getCacheObjectType = () => `ActiveWishlistItemsAvailability`;\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 */\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 // tslint:disable-next-line:prefer-type-cast\n const PRODUCTASSERVICE = 2 as ReleasedProductType.Service;\n\n for (const product of products) {\n if (product.ProductDetails && product.ProductDetails.RecordId && product.ProductDetails.ItemTypeValue !== PRODUCTASSERVICE) {\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\n const productAvailabilities = await getEstimatedAvailabilityAsync(\n { callerContext: ctx },\n { ProductIds: validProducts, DefaultWarehouseOnly: true }\n );\n\n if (productAvailabilities && productAvailabilities) {\n return mapProductInventoryInformation(ctx, productAvailabilities?.ProductWarehouseInventoryAvailabilities);\n }\n\n ctx.trace('[getAvailabilitiesForWishlistItems] unable to get availabilities for product');\n return [];\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/wishlist/wishlist-items/get-product-availabilities-wishlist-items',\n action: >getAvailabilitiesForWishlistItems,\n input: createInput\n});\n","import { 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 // @ts-ignore\n const endpoint = (args.requestContext.apiSettings.rnr.proxyUrl ? args.requestContext.apiSettings.rnr.proxyUrl : args.requestContext.apiSettings.rnr.url || '');\n if (endpoint.length > 0 && endpoint.charAt(endpoint.length-1) === '/') {\n return endpoint.substring(0, endpoint.length-1);\n }\n return endpoint;\n};","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport {\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 @observable public activeProducts: ProductSearchResult[] = [];\n @observable public sortingCritera: SortingInfo | null = null;\n @observable public currentPageNumber: number | null = null;\n @observable public totalProductCount: number | undefined;\n @observable public pageSize: number = 10;\n @observable public pageType: listPageType = 'Unknown';\n @observable public featureProduct: SimpleProduct | null = null;\n @observable public productPrices: ProductPrice[] | undefined = [];\n}\n\n/**\n * ListPageStateInput - action input\n */\nexport class ListPageStateInput implements IActionInput {\n public getCacheKey = () => `ListPageState`;\n public getCacheObjectType = () => 'ListPageState';\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 */\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","import { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\nimport { createObservableDataAction, IAction, IActionInput } from '@msdyn365-commerce/core';\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 default createObservableDataAction({\n action: >getGenericAction,\n input: createAccordionStateInputInternal\n});\n","import { 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';\nimport { getOrderTemplates, GetOrderTemplatesInput, QueryResultSettingsProxy } from '..';\nimport { getPaginatedOrderTemplateLinesAction, GetPaginatedOrderTemplateLinesInput } 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 public getCacheObjectType = () => 'GetFullOrderTemplates';\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 (let i = 0; i < productLists.length; ++i) {\n const list = productLists[i];\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/get-full-order-templates',\n action: >getFullOrderTemplatesAction,\n input: createGetFullOrderTemplatesInput\n});","import { getSimpleProducts, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\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';\n\n/**\n * Input class for ActiveCheckoutCartWithProducts data action\n */\nexport class ActiveCheckoutCartProductsInput implements IActionInput {\n public getCacheKey = () => 'ActiveCheckoutCartProducts';\n public getCacheObjectType = () => 'ActiveCheckoutCartProducts';\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 */\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 (cart && cart.CartLines && cart.CartLines.length) {\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 } else {\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 default createObservableDataAction({\n id: '@msdyn365-commerce-modules/checkout/get-products-in-active-checkout-cart',\n action: >getActiveCheckoutCartProductsAction,\n input: createInput\n});\n"],"sourceRoot":""}