{"version":3,"file":"static/js/993aaefbdf8b3764b709.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/actions/get-organization-customer.ts?79c2","webpack://Msdyn365.Commerce.Online/./src/actions/get-product-unit-of-measure-options.action.ts?bc1e","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-recently-viewed-products/actions/get-full-products-by-ids.ts?52f9","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-recently-viewed-products/dlvry-recently-viewed-products.props.autogenerated.ts?7d65","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-recently-viewed-products/dlvry-recently-viewed-products.tsx?51fb","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-recently-viewed-products/dlvry-recently-viewed-products.view.tsx?6632","webpack://Msdyn365.Commerce.Online/./src/shared-utils/agreement-product-utils.ts?ee0a","webpack://Msdyn365.Commerce.Online/./src/shared-utils/attributes/locale/locale.ts?bf3e","webpack://Msdyn365.Commerce.Online/./src/shared-utils/attributes/on-buy-access-validator.ts?4b31","webpack://Msdyn365.Commerce.Online/./src/shared-utils/cookie-utilities.ts?6237","webpack://Msdyn365.Commerce.Online/./lib/dlvry-recently-viewed-products/module-registration.js?e066","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["import { createObservableDataAction, IActionContext, IAction, ICreateActionContext, IGeneric, IAny, ICommerceApiSettings } from '@msdyn365-commerce/core';\r\nimport { CacheType, callActionOrExecute, Customer, DataServiceQuery, IActionInput, IDataServiceRequest } from \"@msdyn365-commerce/retail-proxy\";\r\nimport * as Entities from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\n\r\nexport class GetOrganizationCustomerInput implements IActionInput {\r\n private readonly user: string | undefined;\r\n private readonly query: DataServiceQuery;\r\n\r\n constructor(apiSettings: ICommerceApiSettings, user: string) {\r\n this.user = user;\r\n\r\n this.query = new DataServiceQuery();\r\n }\r\n\r\n public getDataServiceRequest = (): IDataServiceRequest => {\r\n return this.query.createDataServiceRequestForOperation(\r\n 'GetOrganizationCustomer',\r\n false,\r\n Entities.CustomerClass,\r\n 'false',\r\n {\r\n bypassCache: 'get',\r\n returnEntity: 'Entities.CustomerClass'\r\n },\r\n {}\r\n );\r\n };\r\n\r\n public shouldCacheOutput = (): boolean => false;\r\n\r\n public getCacheKey = () => `OrganizationCustomer-${this.user}`;\r\n public getCacheObjectType = () => 'OrganizationCustomer';\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\nconst createInput = (inputData: ICreateActionContext>): GetOrganizationCustomerInput => {\r\n const { user } = inputData.requestContext;\r\n return new GetOrganizationCustomerInput(inputData.requestContext.apiSettings, user.customerAccountNumber ?? \"\");\r\n};\r\n\r\nexport const getOrganizationCustomerAction = async (input: GetOrganizationCustomerInput, ctx: IActionContext): Promise => {\r\n if (!ctx.requestContext.user.isAuthenticated) {\r\n return {};\r\n }\r\n var customer = await callActionOrExecute(input.getDataServiceRequest(), ctx);\r\n return customer;\r\n};\r\n\r\nexport const getOrganizationCustomer = createObservableDataAction({\r\n id: 'src/actions/get-organization-customer',\r\n action: >getOrganizationCustomerAction,\r\n input: createInput\r\n});\r\n\r\nexport default getOrganizationCustomer;\r\n","import { callActionOrExecute, DataServiceQuery, IContext, IDataServiceRequest, IQueryResultSettings } from \"@msdyn365-commerce/retail-proxy\";\r\nimport * as Entities from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\nimport * as Types from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nfunction getProductUnitOfMeasureOptionsQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n}\r\n\r\n\r\nexport function getProductUnitOfMeasureOptionsInput(\r\n queryResultSettings: IQueryResultSettings, productIds:\r\n number[]\r\n): IDataServiceRequest {\r\n const query = getProductUnitOfMeasureOptionsQuery().resultSettings(queryResultSettings);\r\n query.top(10000);\r\n return query.createDataServiceRequestForOperation(\r\n 'GetProductUnitOfMeasureOptions',\r\n true, Entities.UnitOfMeasureConversionClass,\r\n 'true',\r\n { bypassCache: 'none', returnEntity: 'Entities.UnitOfMeasureConversion' },\r\n {\r\n productIds: productIds\r\n }\r\n );\r\n}\r\n\r\nexport async function getProductUnitOfMeasureOptionsAsync(context: IContext, productIds: number[]): Promise {\r\n const request = getProductUnitOfMeasureOptionsInput(\r\n context.queryResultSettings || {}, productIds);\r\n const conversions = await callActionOrExecute(request, context.callerContext);\r\n return conversions;\r\n}","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { generateProductImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric,\r\n getCatalogId\r\n} from '@msdyn365-commerce/core';\r\n// @ts-ignore - unused import\r\nimport { AsyncResult, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { GetCookie } from '../../../shared-utils/cookie-utilities';\r\n\r\nexport interface IFullProductsSearchResultsWithCount {\r\n products: ProductSearchResult[];\r\n count: number;\r\n}\r\n\r\n/**\r\n * GetFullProductsByIds Action Input\r\n */\r\nexport class GetFullProductsByIdsInput implements IActionInput {\r\n public maxRecentlyViewedItemsCount: number;\r\n\r\n constructor(maxRecentlyViewedItemsCount: number) {\r\n this.maxRecentlyViewedItemsCount = maxRecentlyViewedItemsCount;\r\n }\r\n public getCacheKey = () => 'FullProductSearchResultByIds';\r\n public getCacheObjectType = () => 'FullProductSearchResultByIds';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nconst createInput = (inputData: ICreateActionContext>, maxRecentlyViewedItemsCount: number): GetFullProductsByIdsInput => {\r\n return new GetFullProductsByIdsInput(maxRecentlyViewedItemsCount);\r\n};\r\n\r\nexport async function getFullProductsByIds(\r\n input: GetFullProductsByIdsInput,\r\n ctx: IActionContext\r\n): Promise {\r\n //let productSearchResults: ProductSearchResult[];\r\n //let promise: AsyncResult;\r\n const searchCriteriaInput: ProductSearchCriteria = {};\r\n searchCriteriaInput.Context = {\r\n ChannelId: ctx.requestContext.apiSettings.channelId,\r\n CatalogId: getCatalogId(ctx.requestContext)\r\n };\r\n searchCriteriaInput.IncludeAttributes = true;\r\n const cookieName: string = '_i365___recently_viewed_products';\r\n const cookieValue = GetCookie(ctx.requestContext.cookies, cookieName);\r\n const productIds = (cookieValue && cookieValue.split(',').map(x => +x)) || [0];\r\n searchCriteriaInput.Ids = productIds;\r\n const promise = searchByCriteriaAsync(\r\n {\r\n callerContext: ctx\r\n },\r\n searchCriteriaInput\r\n );\r\n\r\n const productSearchResults = await promise;\r\n\r\n const mappedProducts = productSearchResults.map(productSearchResult => {\r\n const newImageUrl = generateProductImageUrl(productSearchResult, ctx.requestContext.apiSettings);\r\n\r\n if (newImageUrl) {\r\n productSearchResult.PrimaryImageUrl = newImageUrl;\r\n }\r\n\r\n return productSearchResult;\r\n });\r\n\r\n const refinedProductSearchResult = refineProductSearchResults(\r\n ctx,\r\n productIds.reverse(),\r\n input.maxRecentlyViewedItemsCount,\r\n mappedProducts\r\n );\r\n\r\n refinedProductSearchResult.forEach(x => {\r\n x.Price = 0;\r\n x.BasePrice = 0;\r\n x.MaxVariantPrice = 0;\r\n x.MinVariantPrice = 0;\r\n });\r\n\r\n return {\r\n products: refinedProductSearchResult,\r\n count: promise.metadata.count || 0\r\n };\r\n}\r\n\r\nfunction refineProductSearchResults(\r\n context: IActionContext,\r\n productIds: number[],\r\n maxRecentlyViewedItemsCount: number,\r\n productSearchResult: ProductSearchResult[]\r\n): ProductSearchResult[] {\r\n const newproductSearchResult: ProductSearchResult[] = [];\r\n const pathName = context.requestContext.url.requestUrl.pathname;\r\n const splitPathName = pathName.split('/') || [];\r\n const lastPathName = splitPathName[splitPathName.length - 1] || '';\r\n const isPdp = (lastPathName && lastPathName.indexOf('.p')) || -1;\r\n if (isPdp !== -1) {\r\n const productId = lastPathName.split('.');\r\n const index = productIds.indexOf(Number(productId[0]));\r\n if (index !== -1) {\r\n productIds.splice(index, 1);\r\n }\r\n }\r\n if (productIds.length > maxRecentlyViewedItemsCount) {\r\n productIds.splice(maxRecentlyViewedItemsCount, productIds.length - maxRecentlyViewedItemsCount);\r\n }\r\n productIds.map(id => {\r\n const productById = productSearchResult.filter(product => product.RecordId === id) || [];\r\n productById.length > 0 && newproductSearchResult.push(productById[0]);\r\n });\r\n return newproductSearchResult;\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/search-result-container/get-full-products-by-ids',\r\n action: >getFullProductsByIds,\r\n input: createInput\r\n});\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IDlvryRecentlyViewedProducts contentModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum layout {\r\n carousel = 'carousel',\r\n grid = 'grid'\r\n}\r\n\r\nexport interface IDlvryRecentlyViewedProductsConfig extends Msdyn365.IModuleConfig {\r\n productCollection: Msdyn365.IProductList;\r\n heading?: IHeadingData;\r\n layout?: layout;\r\n imageSettings?: Msdyn365.IImageSettings;\r\n className?: string;\r\n}\r\n\r\nexport interface IDlvryRecentlyViewedProductsResources {\r\n priceFree: string;\r\n ratingAriaLabel: string;\r\n flipperNext: string;\r\n flipperPrevious: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n addToCartText: string;\r\n updateCartText: string;\r\n removeFromCartText: string;\r\n outOfStockText: string;\r\n productsAddedToCart: string;\r\n productsRemovedFromCart: string;\r\n productsUpdatedInCart: string;\r\n toastErrorHeader: string;\r\n toastGoToCart: string;\r\n toastNoAccessToProduct: string;\r\n addToOrderTemplateHeader: string;\r\n noOrderTemplatesMessage: string;\r\n noOrderTemplatesDescription: string;\r\n createAnOrderTemplateButtonText: string;\r\n createNewOrderTemplateButtonText: string;\r\n cancelOrderTemplateCreationButtonText: string;\r\n selectTemplatesText: string;\r\n addToTemplateButtonText: string;\r\n lineItemsText: string;\r\n createOrderTemplateHeader: string;\r\n orderTemplateTitle: string;\r\n orderTemplateNameAriaLabel: string;\r\n createOrderTemplateDescription: string;\r\n defaultOrderTemplateName: string;\r\n createOrderTemplateButtonText: string;\r\n cancelNewOrderTemplateCreationButtonText: string;\r\n viewOrderTemplateButtonText: string;\r\n continueShoppingButtonText: string;\r\n itemAddedToOrderTemplateHeaderItemOneText: string;\r\n itemAddedToOrderTemplateHeaderItemFormatText: string;\r\n itemAddedToOrderTemplateHeaderMessageText: string;\r\n duplicatedProductsHeader: string;\r\n duplicatedProductsDescription: string;\r\n updateQuantityButtonText: string;\r\n cancelDuplicateItemsButtonText: string;\r\n addToOrderTemplateButtonText: string;\r\n addToOrderTemplateButtonTooltip: string;\r\n priceErrorText: string;\r\n}\r\n\r\nexport const enum HeadingTag {\r\n h1 = 'h1',\r\n h2 = 'h2',\r\n h3 = 'h3',\r\n h4 = 'h4',\r\n h5 = 'h5',\r\n h6 = 'h6'\r\n}\r\n\r\nexport interface IHeadingData {\r\n text: string;\r\n tag?: HeadingTag;\r\n}\r\n\r\nexport interface IDlvryRecentlyViewedProductsProps extends Msdyn365.IModule {\r\n resources: IDlvryRecentlyViewedProductsResources;\r\n config: IDlvryRecentlyViewedProductsConfig;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\nimport {\r\n format,\r\n Heading,\r\n IComponentNodeProps,\r\n IModuleProps,\r\n INodeProps,\r\n ISingleSlideCarouselProps,\r\n NodeTag,\r\n SingleSlideCarousel\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { ProductComponent } from '../../themes/dlvry-adventureworks/views/components/product.component';\r\nimport {\r\n getPriceForProductSearchResult,\r\n PriceForProductSearchResultInput,\r\n OrderTemplate,\r\n QueryResultSettingsProxy,\r\n GetOrderTemplatesInput,\r\n getOrderTemplates\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ProductList, ProductSearchResult, SimpleProduct, UnitOfMeasureConversion } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { IDlvryRecentlyViewedProductsData } from './dlvry-recently-viewed-products.data';\r\nimport { IDlvryRecentlyViewedProductsProps, layout } from './dlvry-recently-viewed-products.props.autogenerated';\r\nimport { GetFullProductsByIdsInput } from './actions/get-full-products-by-ids';\r\nimport PQueue from 'p-queue';\r\nimport { getByIdsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { getProductUnitOfMeasureOptionsAsync } from '../../actions/get-product-unit-of-measure-options.action';\r\nimport { onBuyHasAccessValidator } from '../../shared-utils/attributes/on-buy-access-validator';\r\nimport { hasAgreementProducts } from '../../shared-utils/agreement-product-utils';\r\n\r\nexport interface IProductCollectionViewProps extends IDlvryRecentlyViewedProductsProps<{}> {\r\n heading?: React.ReactNode;\r\n ProductCollectionContainer: IModuleProps;\r\n SingleSlideCarouselComponentProps: INodeProps;\r\n GridComponentProps: INodeProps;\r\n products: IProductComponentViewProps[];\r\n isCarousel: boolean;\r\n}\r\n\r\nexport interface IProductCollectionState {\r\n orderTemplates: OrderTemplate[] | undefined;\r\n retrievingActivePrices: boolean;\r\n simpleProducts: SimpleProduct[];\r\n unitConversions: UnitOfMeasureConversion[];\r\n}\r\n\r\nexport interface IProductComponentViewProps {\r\n ProductContainer: INodeProps;\r\n productComponent: React.ReactNode;\r\n}\r\n\r\n/**\r\n * ProductCollection component\r\n */\r\nclass ProductCollection extends React.PureComponent, IProductCollectionState> {\r\n\r\n private readonly _cartQueue: PQueue;\r\n\r\n constructor(props: IDlvryRecentlyViewedProductsProps) {\r\n super(props);\r\n this.state = {\r\n orderTemplates: undefined,\r\n retrievingActivePrices: true,\r\n simpleProducts: [],\r\n unitConversions: []\r\n };\r\n this._cartQueue = new PQueue({ concurrency: 1 });\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n void this._getActivePrices();\r\n void this._getSimpleProducts();\r\n void this._getUnitConversions();\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { heading, className } = this.props.config;\r\n const { fullProductsSearchResultsWithCount } = this.props.data;\r\n const { resources } = this.props;\r\n const isCarousel = this.props.config.layout === layout.carousel;\r\n const headingComponent = heading && (\r\n \r\n );\r\n\r\n const productCollectionViewProps = {\r\n ...this.props,\r\n heading: headingComponent,\r\n SingleSlideCarouselComponentProps: {\r\n tag: SingleSlideCarousel,\r\n className: '',\r\n flipperPrevLabel: resources.flipperPrevious,\r\n flipperNextLabel: resources.flipperNext,\r\n parentId: this.props.id\r\n } as IComponentNodeProps,\r\n ProductCollectionContainer: {\r\n moduleProps: this.props,\r\n className: classnames('ms-product-collection', className)\r\n },\r\n GridComponentProps: {\r\n tag: 'ul' as NodeTag,\r\n className: 'ms-product-collection__items'\r\n },\r\n isCarousel: isCarousel,\r\n // tslint:disable-next-line: max-line-length\r\n products:\r\n fullProductsSearchResultsWithCount &&\r\n fullProductsSearchResultsWithCount.result &&\r\n fullProductsSearchResultsWithCount.result.products.length > 0 &&\r\n fullProductsSearchResultsWithCount.result.products.map((item: ProductSearchResult, index: number) =>\r\n this._getProduct(item, index)\r\n )\r\n };\r\n return this.props.renderView(productCollectionViewProps) as React.ReactElement;\r\n }\r\n\r\n private _retrieveOrderTemplates: () => Promise = async () => {\r\n return this.state.orderTemplates || this._onUpdateOrderTemplates();\r\n };\r\n\r\n private _onUpdateOrderTemplates: (newOrderTemplate?: ProductList) => Promise = async (newOrderTemplate) => {\r\n let newOrderTemplates;\r\n\r\n if (newOrderTemplate) {\r\n newOrderTemplates = [...(this.state.orderTemplates ? this.state.orderTemplates : [])];\r\n\r\n // Add new order template if it doesn't exist\r\n if (newOrderTemplates.every(x => x.productList.Id !== newOrderTemplate.Id)) {\r\n newOrderTemplates.splice(0, 0, new OrderTemplate(newOrderTemplate, [], 0));\r\n }\r\n } else {\r\n // Refresh order templates incase new order template was created\r\n const queryResultSettings = QueryResultSettingsProxy.fromInputData({\r\n requestContext: this.props.context.request,\r\n config: this.props.config\r\n }).QueryResultSettings;\r\n const input = new GetOrderTemplatesInput('', queryResultSettings);\r\n newOrderTemplates = (await getOrderTemplates(input, this.props.context.actionContext)).map(x => new OrderTemplate(x, [], 0));\r\n }\r\n\r\n this.setState({ orderTemplates: newOrderTemplates });\r\n return newOrderTemplates;\r\n };\r\n\r\n private _getProduct = (product: ProductSearchResult, index: number): IProductComponentViewProps | null => {\r\n if (!product || !product.Name) {\r\n this.props.telemetry.trace('[product-collection] Product or product name is null');\r\n return null;\r\n }\r\n const {\r\n context,\r\n config: { imageSettings },\r\n data: { orgInformation },\r\n resources\r\n } = this.props;\r\n\r\n return {\r\n ProductContainer: {\r\n tag: 'li' as NodeTag,\r\n className: 'ms-product-collection__item',\r\n role: 'listitem',\r\n key: index\r\n },\r\n productComponent: (\r\n x.RecordId === product.RecordId),\r\n unitConversions: this.state.unitConversions.filter(x => x.ProductRecordId === product.RecordId)\r\n }}\r\n cartQueue={this._cartQueue}\r\n buyAlwaysAdd\r\n disableBuyButton={this.state.retrievingActivePrices}\r\n showPrice={!this.state.retrievingActivePrices}\r\n showAgreementProduct={hasAgreementProducts(context, orgInformation.result)}\r\n retrieveOrderTemplates={this._retrieveOrderTemplates}\r\n onUpdateOrderTemplates={this._onUpdateOrderTemplates}\r\n addToCartText={resources.addToCartText}\r\n updateCartText={resources.updateCartText}\r\n removeFromCartText={resources.removeFromCartText}\r\n outOfStockText={resources.outOfStockText}\r\n priceErrorText={resources.priceErrorText}\r\n toastStrings={{\r\n errorHeader: resources.toastErrorHeader,\r\n productsAddedToCart: resources.productsAddedToCart,\r\n productsRemovedFromCart: resources.productsRemovedFromCart,\r\n productsUpdatedInCart: resources.productsUpdatedInCart,\r\n goToCart: resources.toastGoToCart,\r\n noAccessToProduct: resources.toastNoAccessToProduct\r\n }}\r\n addToOrderTemplateResources={{\r\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\r\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\r\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\r\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\r\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\r\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\r\n selectTemplatesText: resources.selectTemplatesText,\r\n addToTemplateButtonText: resources.addToTemplateButtonText,\r\n lineItemsText: resources.lineItemsText,\r\n createOrderTemplateHeader: resources.createOrderTemplateHeader,\r\n orderTemplateTitle: resources.orderTemplateTitle,\r\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\r\n createOrderTemplateDescription: resources.createOrderTemplateDescription,\r\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\r\n createOrderTemplateButtonText: resources.createOrderTemplateButtonText,\r\n cancelNewOrderTemplateCreationButtonText: resources.cancelNewOrderTemplateCreationButtonText,\r\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\r\n continueShoppingButtonText: resources.continueShoppingButtonText,\r\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\r\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\r\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\r\n priceFree: resources.priceFree,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText,\r\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\r\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\r\n updateQuantityButtonText: resources.updateQuantityButtonText,\r\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText,\r\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\r\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip\r\n }}\r\n onBuyValidate={(product) => onBuyHasAccessValidator(\r\n this.props.context,\r\n this.props.data.customerInformation.result,\r\n product,\r\n this.props.resources.toastNoAccessToProduct\r\n )}\r\n />\r\n )\r\n };\r\n };\r\n\r\n private _getActivePrices = async (): Promise => {\r\n const { context } = this.props;\r\n const fullProductsSearchResultsWithCount = await this.props.data.fullProductsSearchResultsWithCount;\r\n const maxRecentlyViewedItemsCount = this.props.context.app.config.maxRecentlyViewedItemsCount;\r\n\r\n const productsList = fullProductsSearchResultsWithCount.products ?? [];\r\n const products = await getPriceForProductSearchResult(new PriceForProductSearchResultInput(productsList), context.actionContext);\r\n fullProductsSearchResultsWithCount.products = products;\r\n context.actionContext.update(new GetFullProductsByIdsInput(maxRecentlyViewedItemsCount), fullProductsSearchResultsWithCount);\r\n\r\n this.setState({ retrievingActivePrices: false });\r\n };\r\n\r\n private _getSimpleProducts = async(): Promise => {\r\n const { context } = this.props;\r\n const fullProductsSearchResultsWithCount = await this.props.data.fullProductsSearchResultsWithCount;\r\n const simpleProducts = await getByIdsAsync({ callerContext: context.actionContext },\r\n context.request.apiSettings.channelId,\r\n fullProductsSearchResultsWithCount.products.map(x => x.RecordId));\r\n this.setState({ simpleProducts });\r\n };\r\n\r\n private _getUnitConversions = async(): Promise => {\r\n const { actionContext, request, app } = this.props.context;\r\n\r\n if (!request.user.isAuthenticated || app.config.unitOfMeasureConversions !== true) {\r\n return;\r\n }\r\n\r\n const products = (await this.props.data.fullProductsSearchResultsWithCount).products;\r\n const ids = products.map(x => x.RecordId);\r\n\r\n if (!ids || ids.length === 0) {\r\n return;\r\n }\r\n\r\n const conversions = await getProductUnitOfMeasureOptionsAsync({ callerContext: actionContext }, ids);\r\n\r\n this.setState({ unitConversions: conversions });\r\n };\r\n}\r\n\r\nexport default ProductCollection;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IProductCollectionViewProps, IProductComponentViewProps } from './dlvry-recently-viewed-products';\r\n\r\nconst ProductCollectionView: React.FC = props => {\r\n const { heading, ProductCollectionContainer, products, SingleSlideCarouselComponentProps, GridComponentProps, isCarousel } = props;\r\n if (products) {\r\n return (\r\n \r\n {heading}\r\n {isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps, products) : _renderGrid(GridComponentProps, products)}\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n\r\nconst _renderCarousel = (carouselContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\r\n return {items && items.map(_renderProduct)};\r\n};\r\n\r\nconst _renderGrid = (gridContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\r\n return {items && items.map(_renderProduct)};\r\n};\r\n\r\nconst _renderProduct = (product: IProductComponentViewProps): JSX.Element => {\r\n const { ProductContainer, productComponent } = product;\r\n\r\n return {productComponent};\r\n};\r\n\r\nexport default ProductCollectionView;\r\n","import { ICoreContext } from \"@msdyn365-commerce/core\";\r\nimport { AttributeValue, Customer } from \"@msdyn365-commerce/retail-proxy\";\r\nimport { getLocale } from \"./attributes/locale\";\r\nimport { getAttributeBooleanOrDefault } from \"./attributes\";\r\n\r\nexport function hasAgreementProducts(context: ICoreContext, customer: Customer | undefined): boolean {\r\n const agreementProductAttributeRecordIds: Number[] | undefined = context.request.app.config?.agreementProductAttributeRecordId?.split(',').map(Number).filter(Boolean);\r\n // Check if customer has any product agreement that should be shown\r\n const shouldShowAgreementProducts = agreementProductAttributeRecordIds && agreementProductAttributeRecordIds.length > 0\r\n ? agreementProductAttributeRecordIds.some(x => customer?.Attributes?.find(y => y.RecordId === x)?.AttributeValue?.BooleanValue)\r\n : false;\r\n return shouldShowAgreementProducts;\r\n}\r\n\r\nexport function getAgreementProductRefinersToHide(context: ICoreContext, customer: Customer | undefined): number[] | undefined {\r\n const refinerIds = context.request.app.config?.agreementProductAttributeRecordId\r\n ?.split(',')\r\n .map(Number)\r\n .filter(Boolean) as number[] | undefined;\r\n\r\n // Hide all refiners if customer is not available\r\n if (!customer) {\r\n return refinerIds;\r\n }\r\n\r\n const refinersToHide = refinerIds?.filter(refinerId => {\r\n const attribute = customer.Attributes?.find(x => x.RecordId === refinerId);\r\n return !attribute?.AttributeValue?.BooleanValue;\r\n });\r\n\r\n return refinersToHide;\r\n}\r\n\r\nlet cachedAttributesMap: ReturnType | undefined;\r\n\r\nexport function isAgreementProduct(contextOrLocale: ICoreContext | string, attributes: AttributeValue[] | undefined): boolean {\r\n if (!cachedAttributesMap) {\r\n cachedAttributesMap = getLocale(contextOrLocale);\r\n }\r\n\r\n const helseNord = getAttributeBooleanOrDefault(attributes, cachedAttributesMap.helseNord, false);\r\n const municipalityNorth = getAttributeBooleanOrDefault(attributes, cachedAttributesMap.municipalityNorth, false);\r\n\r\n return helseNord || municipalityNorth;\r\n}\r\n","import { ICoreContext } from '@msdyn365-commerce/core';\r\nimport nbNO from './nb-NO.json';\r\nimport enUS from './en-US.json';\r\n\r\nexport function getLocale(langOrContext: string | ICoreContext): typeof nbNO {\r\n const lang = typeof langOrContext === 'string' ? langOrContext : langOrContext.request.locale;\r\n\r\n switch (lang) {\r\n case 'nb-NO':\r\n return nbNO;\r\n case 'en-US':\r\n return {...nbNO, ...enUS};\r\n default:\r\n return nbNO;\r\n }\r\n}\r\n","import { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { ProductSearchResultExt } from \"../../modules/dlvry-search-result-container/components\";\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport { hasAccessToBuy } from '.';\r\n\r\nexport interface OnBuyHasAccessValidatorResult {\r\n isValid: boolean;\r\n message?: string;\r\n}\r\n\r\nexport async function onBuyHasAccessValidator(\r\n context: ICoreContext,\r\n customer: Customer | undefined,\r\n product: ProductSearchResultExt,\r\n validationMessage: string | undefined\r\n): Promise {\r\n if (!product || !product.AttributeValues) {\r\n return { isValid: true };\r\n }\r\n\r\n const hasAccess = hasAccessToBuy(context, customer, product.AttributeValues);\r\n\r\n return {\r\n isValid: hasAccess,\r\n message: hasAccess ? undefined : validationMessage\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { ICookieValue, ICookieContext } from '@msdyn365-commerce/core';\r\n\r\nexport const GetCookie = (cookies: ICookieContext, cookieName: string): string | undefined => {\r\n const marketCookie = cookies.get(cookieName) as ICookieValue | undefined;\r\n\r\n if (marketCookie && marketCookie.value && marketCookie.value.length > 0) {\r\n return marketCookie.value;\r\n } else {\r\n return undefined;\r\n }\r\n};\r\n\r\nexport const SetCookie = (cookies: ICookieContext, value: string, cookieName: string, exp: number): void => {\r\n if (value) {\r\n cookies.set(cookieName, value, { path: '/', maxAge: exp });\r\n }\r\n};\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['dlvry-recently-viewed-products'] = {\n c: () => require('partner/modules/dlvry-recently-viewed-products/dlvry-recently-viewed-products.tsx'),\n $type: 'contentModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'fullProductsSearchResultsWithCount', path:'modules/dlvry-recently-viewed-products/actions/get-full-products-by-ids', runOn: 1},{name:'orgInformation', path:'actions/get-organization-customer', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'dlvry-recently-viewed-products',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/dlvry-recently-viewed-products'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/get-organization-customer';\n let dataAction = require('partner/actions/get-organization-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/dlvry-recently-viewed-products/actions/get-full-products-by-ids';\n let dataAction = require('partner/modules/dlvry-recently-viewed-products/actions/get-full-products-by-ids');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|dlvry-recently-viewed-products|dlvry-recently-viewed-products'] = {\n c: () => require('partner/modules/dlvry-recently-viewed-products/dlvry-recently-viewed-products.view.tsx'),\n cn: '__local__-__local__-dlvry-recently-viewed-products'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["GetOrganizationCustomerInput","constructor","apiSettings","user","getDataServiceRequest","this","query","createDataServiceRequestForOperation","Entities","bypassCache","returnEntity","shouldCacheOutput","getCacheKey","getCacheObjectType","dataCacheType","DataServiceQuery","getOrganizationCustomerAction","async","input","ctx","requestContext","isAuthenticated","callActionOrExecute","getOrganizationCustomer","createObservableDataAction","id","action","inputData","_user$customerAccount","customerAccountNumber","getProductUnitOfMeasureOptionsInput","queryResultSettings","productIds","resultSettings","top","getProductUnitOfMeasureOptionsAsync","context","request","callerContext","GetFullProductsByIdsInput","maxRecentlyViewedItemsCount","getFullProductsByIds","searchCriteriaInput","Context","ChannelId","channelId","CatalogId","getCatalogId","IncludeAttributes","cookieValue","GetCookie","cookies","split","map","x","Ids","promise","searchByCriteriaAsync","mappedProducts","productSearchResult","newImageUrl","generateProductImageUrl","PrimaryImageUrl","refinedProductSearchResult","newproductSearchResult","splitPathName","url","requestUrl","pathname","lastPathName","length","indexOf","productId","index","Number","splice","productById","filter","product","RecordId","push","refineProductSearchResults","reverse","forEach","Price","BasePrice","MaxVariantPrice","MinVariantPrice","products","count","metadata","createInput","layout","HeadingTag","ProductCollection","React","props","super","_retrieveOrderTemplates","state","orderTemplates","_onUpdateOrderTemplates","newOrderTemplates","newOrderTemplate","every","productList","Id","OrderTemplate","QueryResultSettingsProxy","config","QueryResultSettings","GetOrderTemplatesInput","getOrderTemplates","actionContext","setState","_getProduct","Name","telemetry","trace","imageSettings","data","orgInformation","resources","ProductContainer","tag","className","role","key","productComponent","ProductComponent","freePriceText","priceFree","originalPriceText","currentPriceText","ratingAriaLabel","format","AverageRating","typeName","cart","result","customerInformation","simpleProduct","simpleProducts","find","unitConversions","ProductRecordId","cartQueue","_cartQueue","buyAlwaysAdd","disableBuyButton","retrievingActivePrices","showPrice","showAgreementProduct","hasAgreementProducts","retrieveOrderTemplates","onUpdateOrderTemplates","addToCartText","updateCartText","removeFromCartText","outOfStockText","priceErrorText","toastStrings","errorHeader","toastErrorHeader","productsAddedToCart","productsRemovedFromCart","productsUpdatedInCart","goToCart","toastGoToCart","noAccessToProduct","toastNoAccessToProduct","addToOrderTemplateResources","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","createOrderTemplateHeader","orderTemplateTitle","orderTemplateNameAriaLabel","createOrderTemplateDescription","defaultOrderTemplateName","createOrderTemplateButtonText","cancelNewOrderTemplateCreationButtonText","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","onBuyValidate","onBuyHasAccessValidator","_getActivePrices","_fullProductsSearchRe","fullProductsSearchResultsWithCount","app","productsList","getPriceForProductSearchResult","PriceForProductSearchResultInput","update","_getSimpleProducts","getByIdsAsync","_getUnitConversions","unitOfMeasureConversions","ids","conversions","undefined","PQueue","concurrency","render","heading","isCarousel","carousel","headingComponent","Heading","headingTag","text","productCollectionViewProps","_objectSpread","SingleSlideCarouselComponentProps","SingleSlideCarousel","flipperPrevLabel","flipperPrevious","flipperNextLabel","flipperNext","parentId","ProductCollectionContainer","moduleProps","classnames","GridComponentProps","item","renderView","_renderCarousel","carouselContainer","items","Node","Object","assign","_renderProduct","_renderGrid","gridContainer","Module","customer","_context$request$app$","_context$request$app$2","agreementProductAttributeRecordIds","agreementProductAttributeRecordId","Boolean","some","_customer$Attributes","_customer$Attributes$","_customer$Attributes$2","Attributes","y","AttributeValue","BooleanValue","getAgreementProductRefinersToHide","_context$request$app$3","_context$request$app$4","refinerIds","refinerId","_customer$Attributes2","_attribute$AttributeV","attribute","cachedAttributesMap","isAgreementProduct","contextOrLocale","attributes","getLocale","helseNord","getAttributeBooleanOrDefault","municipalityNorth","langOrContext","locale","nbNO","enUS","validationMessage","AttributeValues","isValid","hasAccess","hasAccessToBuy","message","cookieName","marketCookie","get","value","SetCookie","exp","set","path","maxAge","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","name","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}