{"version":3,"file":"static/js/55b83dc830901687bf5b.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/actions/entities/product-list-count.ts?0ed7","webpack://Msdyn365.Commerce.Online/./src/actions/get-product-list-counts.ts?8f40","webpack://Msdyn365.Commerce.Online/./src/components/product-list-component/locale/add-to-order-template-resources.ts?ff2c","webpack://Msdyn365.Commerce.Online/./src/components/product-list-component/product-list-row.tsx?b6d3","webpack://Msdyn365.Commerce.Online/./src/components/product-list-component/product-list-component.tsx?3007","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-order-template/actions/get-dlvry-full-order-template.ts?c1bf","webpack://Msdyn365.Commerce.Online/./src/actions/get-paginated-order-template-lines.ts?0a71","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-order-template/actions/get-dlvry-order-template.ts?1d72","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-search-result-container/actions/get-product-refiner-hierarchy.ts?67ba","webpack://Msdyn365.Commerce.Online/./src/shared-utils/attributes/locale/locale.ts?bf3e","webpack://Msdyn365.Commerce.Online/./src/shared-utils/badge-utils.ts?ae14"],"sourcesContent":["import * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\nimport { CommerceProperty } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\n/**\r\n * ProductListCount entity interface.\r\n */\r\nexport interface IProductListCount {\r\n ProductListId?: string;\r\n RowCount?: number;\r\n ExtensionProperties?: CommerceProperty[];\r\n}\r\n\r\n/**\r\n * ProductListCount entity class.\r\n */\r\nexport class ProductListCountExtensionClass implements IProductListCount {\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ProductListId: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public RowCount: number;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ExtensionProperties: CommerceProperty[];\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ProductListId = odataObject.ProductListId;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.RowCount = odataObject.RowCount;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties = undefined;\r\n if (odataObject.ExtensionProperties) {\r\n this.ExtensionProperties = [];\r\n for (var i = 0; i < odataObject.ExtensionProperties.length; i++) {\r\n if (odataObject.ExtensionProperties[i]) {\r\n if (odataObject.ExtensionProperties[i]['@odata.type']) {\r\n var className: string = odataObject.ExtensionProperties[i]['@odata.type'];\r\n className = className.substr(className.lastIndexOf('.') + 1).concat(\"Class\");\r\n if (EntityClasses[className]) {\r\n this.ExtensionProperties[i] =\r\n new EntityClasses[className](odataObject.ExtensionProperties[i]);\r\n }\r\n } else {\r\n this.ExtensionProperties[i] = new EntityClasses.CommercePropertyClass(odataObject.ExtensionProperties[i]);\r\n }\r\n\r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties[i] = undefined;\r\n }\r\n }\r\n }\r\n }\r\n}","import { IActionContext } from \"@msdyn365-commerce/core\";\r\nimport { callActionOrExecute, DataServiceQuery, IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\r\nimport { IProductListCount, ProductListCountExtensionClass } from './entities/product-list-count';\r\n\r\nexport function getProductListCountsInput(productListIds: string[]): IDataServiceRequest {\r\n const query = new DataServiceQuery(\"DlvryProductLists\", \"DlvryProductList\");\r\n\r\n return query.createDataServiceRequestForOperation('GetProductListCounts',\r\n true,\r\n ProductListCountExtensionClass,\r\n 'true',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.IProductListCount' },\r\n { productListIds: productListIds });\r\n}\r\n\r\nexport async function getProductListCountsAsync(context: IActionContext, productListIds: string[]): Promise {\r\n const request = getProductListCountsInput(productListIds);\r\n const result = await callActionOrExecute(request, context);\r\n return result;\r\n}","import {\r\n IAddToOrderTemplateDialogResources,\r\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources,\r\n IOrderTemplateNameDialogResources\r\n} from '@msdyn365-commerce/components';\r\n\r\nexport function generateAddToOrderTemplateDialogResources(locale: any): IAddToOrderTemplateDialogResources {\r\n return {\r\n addToOrderTemplateHeader: locale.addToOrderTemplate.addToOrderTemplateHeader,\r\n\r\n noOrderTemplatesMessage: locale.addToOrderTemplate.noOrderTemplatesMessage,\r\n noOrderTemplatesDescription: locale.addToOrderTemplate.noOrderTemplatesDescription,\r\n\r\n createAnOrderTemplateButtonText: locale.addToOrderTemplate.createAnOrderTemplateButtonText,\r\n createNewOrderTemplateButtonText: locale.addToOrderTemplate.createNewOrderTemplateButtonText,\r\n cancelOrderTemplateCreationButtonText: locale.addToOrderTemplate.cancelOrderTemplateCreationButtonText,\r\n\r\n selectTemplatesText: locale.addToOrderTemplate.selectTemplatesText,\r\n addToTemplateButtonText: locale.addToOrderTemplate.addToTemplateButtonText,\r\n lineItemsText: locale.addToOrderTemplate.lineItemsText\r\n };\r\n}\r\n\r\nexport function generateOrderTemplateNameDialogResources(locale: any): IOrderTemplateNameDialogResources {\r\n return {\r\n orderTemplateHeaderLabel: locale.addToOrderTemplate.createOrderTemplateHeader,\r\n orderTemplateTitleLabel: locale.addToOrderTemplate.orderTemplateTitle,\r\n orderTemplateNameAriaLabel: locale.addToOrderTemplate.orderTemplateNameAriaLabel,\r\n orderTemplateDescription: locale.addToOrderTemplate.createOrderTemplateDescription,\r\n\r\n defaultOrderTemplateName: locale.addToOrderTemplate.defaultOrderTemplateName,\r\n\r\n orderTemplateButtonLabel: locale.addToOrderTemplate.createOrderTemplateButtonText,\r\n orderTemplateCancelButtonLabel: locale.addToOrderTemplate.cancelNewOrderTemplateCreationButtonText\r\n };\r\n}\r\n\r\nexport function generateItemAddedToOrderTemplateDialogResources(locale: any): IItemAddedToOrderTemplateDialogResources {\r\n return {\r\n viewOrderTemplateButtonText: locale.addToOrderTemplate.viewOrderTemplateButtonText,\r\n continueShoppingButtonText: locale.addToOrderTemplate.continueShoppingButtonText,\r\n itemAddedToOrderTemplateHeaderItemOneText: locale.addToOrderTemplate.itemAddedToOrderTemplateHeaderItemOneText,\r\n itemAddedToOrderTemplateHeaderItemFormatText: locale.addToOrderTemplate.itemAddedToOrderTemplateHeaderItemFormatText,\r\n itemAddedToOrderTemplateHeaderMessageText: locale.addToOrderTemplate.itemAddedToOrderTemplateHeaderMessageText,\r\n freePriceText: locale.addToOrderTemplate.priceFree,\r\n originalPriceText: locale.addToOrderTemplate.originalPriceText,\r\n currentPriceText: locale.addToOrderTemplate.currentPriceText\r\n };\r\n}\r\n\r\nexport function generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(locale: any): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\r\n return {\r\n duplicatedProductsHeader: locale.addToOrderTemplate.duplicatedProductsHeader,\r\n duplicatedProductsDescription: locale.addToOrderTemplate.duplicatedProductsDescription,\r\n updateQuantityButtonText: locale.addToOrderTemplate.updateQuantityButtonText,\r\n cancelDuplicateItemsButtonText: locale.addToOrderTemplate.cancelDuplicateItemsButtonText\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 { getCatalogId, IComponentProps, ICoreContext, Image, getUrlSync, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { ImageFetchPriority } from '@msdyn365-commerce/core-internal';\r\nimport {\r\n getProductPageUrlSync, getSimpleProducts, ProductInput,\r\n GetCustomerInput, getCustomer, buildWishlistLine, getWishlistByCustomerId,\r\n OrderTemplate, getFallbackImageUrl\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getCartStateData, GetCartStateDataInput, ICartState } from '@msdyn365-commerce/global-state';\r\nimport { format, Tooltip } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\nimport { reaction } from 'mobx';\r\nimport ProductListOrderQuantity from '../common/product-list-order-quantity';\r\nimport { Button, ButtonProps } from 'reactstrap';\r\nimport classnames from 'classnames';\r\n// @ts-ignore\r\nimport { toast, IToastViewProps } from '../toast/toast';\r\nimport { ProductListProduct, IActionsAvailable, IProductListResources, BuyValidationResult } from './product-list-component';\r\nimport { AsyncResult, CommerceList, Customer, ProductList, SimpleProduct, UnitOfMeasureConversion } from '@msdyn365-commerce/retail-proxy';\r\nimport { addLinesAsync, createCommerceListAsync, createGetByCustomerInput, removeLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CommerceListsDataActions.g';\r\nimport { IWishlistItemsProps } from '../../themes/dlvry-adventureworks/definition-extensions/wishlist-items.ext.props.autogenerated';\r\nimport { IWishlistItemsData } from '@msdyn365-commerce-modules/wishlist/src/modules/wishlist-items/wishlist-items.data';\r\nimport { AllergensModal } from './components/allergens-modal';\r\nimport { ProductInformationModal } from './components/product-information-modal';\r\nimport { getLocale } from './locale';\r\nimport {\r\n generateAddToOrderTemplateDialogResources,\r\n generateOrderTemplateNameDialogResources,\r\n generateItemAddedToOrderTemplateDialogResources,\r\n generateDuplicateItemsWhenAddingToOrderTemplateDialogResources\r\n} from './locale/add-to-order-template-resources';\r\nimport AddToOrderTemplateComponent from '../../themes/dlvry-adventureworks/views/components/addtoordertemplate.component';\r\nimport { removeProductListLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\r\nimport { IOrderTemplateViewProps } from '../../modules/dlvry-order-template/dlvry-order-template';\r\nimport { ActiveOrderTemplateLinesInput } from '../../modules/dlvry-order-template/actions/get-dlvry-order-template';\r\nimport { validateAlcoholLicenseAsync } from '../../actions/validate-alcohol-license.action';\r\nimport PQueue from 'p-queue';\r\nimport PriceComponent from '../../themes/dlvry-adventureworks/views/components/price.component';\r\nimport { UnitOfMeasure } from '../unit-of-measure';\r\nimport { getKilogramConversion, getPcsConversion, getRoundedFactor } from '../../shared-utils/unit-conversion-utils';\r\nimport DiscountBadge from '../discount-badge/discount-badge';\r\nimport { ICartViewProps } from '../../modules/dlvry-cart/dlvry-cart';\r\n\r\n/**\r\n * Data required to render each order history row.\r\n */\r\nexport interface IProductListRowData {\r\n cart?: ICartState;\r\n product: ProductListProduct;\r\n simpleProduct: SimpleProduct | undefined;\r\n orderTemplate?: OrderTemplate;\r\n customerInformation?: Customer;\r\n unitConversions?: UnitOfMeasureConversion[];\r\n}\r\n\r\n/**\r\n * Configuration for the order history rows.\r\n */\r\nexport interface IProductListRowProps extends IComponentProps {\r\n context: ICoreContext;\r\n className: string;\r\n cartQueue: PQueue;\r\n actionsAvailable?: IActionsAvailable;\r\n resources: IProductListResources;\r\n cartViewProps?: ICartViewProps | undefined;\r\n wishlistItemsProps?: IWishlistItemsProps | undefined;\r\n orderTemplateViewProps?: IOrderTemplateViewProps;\r\n defaultWishlistName?: string;\r\n productComparisonButton?: {} | null | undefined;\r\n moduleId: string;\r\n moduleType: string;\r\n error?: string;\r\n allowMultiSelect?: boolean;\r\n min?: number;\r\n isDragOver?: 'over' | 'under' | undefined;\r\n isSelected?: boolean;\r\n readOnly?: boolean;\r\n disableBuyButton?: boolean;\r\n disableReorder?: boolean;\r\n disableQuantityInput?: boolean;\r\n draggable?: boolean;\r\n lazyLoadImages?: boolean;\r\n showAvailability?: boolean;\r\n showPrices?: boolean;\r\n showTotalPrices?: boolean;\r\n showCartCount?: boolean;\r\n userHasAccess?: boolean;\r\n selectOnQuantityChange?: boolean;\r\n initialBreakoffEnabled?: boolean;\r\n buyAlwaysAdd?: boolean;\r\n resetSelectedQuantities?: boolean;\r\n retrieveOrderTemplates?(): Promise;\r\n onSelectCartHandler?: () => void;\r\n onUpdateOrderTemplates?: (orderTemplate?: ProductList) => Promise;\r\n onUpdateQuantity?: (quantity: number) => void;\r\n onBreakoffChange?: (product: ProductListProduct, enabled: boolean) => void;\r\n onDrop?: (event: React.DragEvent, recordId: number | undefined, overUnder: 'over' | 'under' | undefined) => void;\r\n onDragOver?: (recordId: number | undefined, overUnder: 'over' | 'under' | undefined) => void;\r\n onMove?: (recordId: number | undefined, direction: 'up' | 'down') => void;\r\n onBuyValidate?: (product: ProductListProduct, quantity: number) => Promise;\r\n}\r\n\r\nexport interface IProductListRowState {\r\n orderQuantity: number;\r\n allergensModal: boolean;\r\n productInformationModal: boolean;\r\n working: boolean;\r\n showCartCountTooltip: boolean;\r\n}\r\n\r\n/**\r\n * Renders rows for desktop view.\r\n * @param props - Configuration for the rows.\r\n * @returns A react node with a list of order history rows for desktop view.\r\n */\r\nexport class ProductListRow extends React.Component {\r\n\r\n private readonly locale = getLocale(this.props.context);\r\n private readonly cartUrl = getUrlSync('cart', this.props.context.actionContext);\r\n\r\n public constructor(props: IProductListRowProps) {\r\n super(props);\r\n this.state = {\r\n orderQuantity: props.buyAlwaysAdd\r\n ? 0\r\n : props.data.product.CurrentQuantity ?? 0,\r\n allergensModal: false,\r\n productInformationModal: false,\r\n working: false,\r\n showCartCountTooltip: false\r\n };\r\n }\r\n\r\n public componentDidMount(): void {\r\n reaction(\r\n () => this.props.data.cart?.cart,\r\n () => {\r\n // Force update to fix cart count lagging behind\r\n this.forceUpdate();\r\n }\r\n );\r\n\r\n if (this.props.buyAlwaysAdd) {\r\n return;\r\n }\r\n\r\n reaction(\r\n () => this.props.data.cart?.cart.CartLines,\r\n () => {\r\n const { cart, product } = this.props.data;\r\n\r\n if ((product.CartLine?.Quantity ?? 0) > 0 && !cart?.cart.CartLines?.find(x => x.ProductId === product?.RecordId)) {\r\n // This product was removed from cart, reset quantity\r\n this.setState({\r\n orderQuantity: 0\r\n });\r\n }\r\n }\r\n );\r\n }\r\n\r\n private renderProductComparisonButton(\r\n productComparisonButton: React.ReactNode,\r\n product: any,\r\n catalogId: number\r\n ): JSX.Element | undefined {\r\n return React.cloneElement(productComparisonButton as React.ReactElement, { product, catalogId });\r\n }\r\n\r\n public componentDidUpdate(prevProps: Readonly, prevState: Readonly, snapshot?: any): void {\r\n if (this.props.buyAlwaysAdd) {\r\n if (this.props.isSelected && this.props.resetSelectedQuantities) {\r\n this.setState({ orderQuantity: 0 });\r\n }\r\n return;\r\n }\r\n\r\n if (this.props.data.product.CurrentQuantity !== prevProps.data.product.CurrentQuantity) {\r\n this.setState({\r\n orderQuantity: this.props.data.product.CurrentQuantity ?? this.state.orderQuantity\r\n });\r\n }\r\n }\r\n\r\n public render(): JSX.Element | undefined {\r\n const {\r\n className,\r\n data: { product },\r\n actionsAvailable,\r\n allowMultiSelect,\r\n draggable,\r\n readOnly,\r\n showAvailability,\r\n showPrices,\r\n onUpdateOrderTemplates\r\n } = this.props;\r\n const { PrimaryImageUrl } = product;\r\n const productUrl = product ? getProductPageUrlSync(product.Name ?? '', product.RecordId!, this.props.context.actionContext, undefined) : '';\r\n const isAuthenticated = this.props.context.request.user.isAuthenticated;\r\n const price = showPrices !== false\r\n ? (product.Price && product.Price !== 0.00)\r\n ? product.Price : undefined\r\n : undefined;\r\n const availabilityClass = this._getAvailabilityClassName();\r\n const availabilityText = availabilityClass === 'error' ? product.Availability?.StockLevelLabel || 'ERROR' : product.Availability?.StockLevelLabel || '';\r\n\r\n const conversions = this.props.data.unitConversions?.filter(x => x.FromUnitOfMeasureSymbol === this.props.data.product?.DefaultUnitOfMeasure);\r\n const kilogramConversion = conversions && getKilogramConversion(this.props.data.product?.DefaultUnitOfMeasure, conversions);\r\n const pcsConversion = conversions && getPcsConversion(conversions);\r\n\r\n return (\r\n {\r\n e.stopPropagation(); // Prevent onDrop handler on parent from firing\r\n this.props.onDrop?.(e, product.RecordId, this.props.isDragOver);\r\n }}\r\n onDragOver={(e) => {\r\n e.stopPropagation();\r\n\r\n if (!this.props.disableReorder && e.dataTransfer.types.includes('product')) {\r\n e.preventDefault();\r\n\r\n const rect = (e.currentTarget as Element).getBoundingClientRect();\r\n const y = e.clientY - rect.top;\r\n const halfHeight = rect.height / 2;\r\n const overOrUnder: 'over' | 'under' = y > halfHeight ? 'under' : 'over';\r\n\r\n this.props.onDragOver?.(product.RecordId, overOrUnder);\r\n }\r\n }}\r\n >\r\n {draggable && (\r\n this.props.onDragOver?.(undefined, undefined)}\r\n onDragOver={draggable ? (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n } : undefined} />\r\n )}\r\n {isAuthenticated && allowMultiSelect && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n {this._renderProductImage(\r\n 'product-image',\r\n this.props.context,\r\n product.Name || '',\r\n PrimaryImageUrl,\r\n undefined,\r\n this.props.lazyLoadImages\r\n )}\r\n \r\n {isAuthenticated && (\r\n
\r\n {this.state.allergensModal && (\r\n this.setState({ allergensModal: false })}\r\n context={this.props.context}\r\n product={product} />\r\n )}\r\n {\r\n this.setState({ allergensModal: true });\r\n }\r\n } />\r\n\r\n {\r\n await onUpdateOrderTemplates?.(orderTemplate);\r\n toast({\r\n text: `${this.props.data.product.Name}${this.locale.addToOrderTemplate.itemAddedToOrderTemplateHeaderMessageText}`,\r\n autoClose: 3000,\r\n canClose: true,\r\n position: 'bottom-right',\r\n type: 'success',\r\n showProgress: true\r\n });\r\n }}\r\n retrieveOrderTemplates={this.props.retrieveOrderTemplates}\r\n />\r\n\r\n {this.state.productInformationModal && (\r\n this.setState({ productInformationModal: false })}\r\n context={this.props.context}\r\n product={product} />\r\n )}\r\n {\r\n this.setState({ productInformationModal: true });\r\n }\r\n } />\r\n
\r\n )}\r\n\r\n {product.Badge && (\r\n \r\n )}\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n {product.ItemId}\r\n
\r\n {product.Brand && (\r\n
{product.Brand}
\r\n )}\r\n {product.Manufacturer && (\r\n
{product.Manufacturer}
\r\n )}\r\n {showAvailability && (\r\n
\r\n \r\n {availabilityText}\r\n \r\n
\r\n )}\r\n
\r\n
\r\n {isAuthenticated && (\r\n <>\r\n
\r\n {this._renderPrice(className, price)}\r\n
\r\n\r\n {price && kilogramConversion && getRoundedFactor(kilogramConversion) > 0 && (\r\n
\r\n \r\n  \r\n pr. kg\r\n
\r\n )}\r\n\r\n {price && pcsConversion && (\r\n
\r\n \r\n  \r\n pr. stk\r\n
\r\n )}\r\n\r\n {this.props.showTotalPrices &&\r\n <>\r\n
Totalt
\r\n
\r\n \r\n
\r\n \r\n }\r\n \r\n )}\r\n
\r\n
\r\n\r\n {isAuthenticated && (\r\n
\r\n
\r\n {this._getSearchResultOrderQuantity(readOnly)}\r\n
\r\n {actionsAvailable && (\r\n
\r\n {this.props.showCartCount && this._renderCartCount(className)}\r\n {actionsAvailable?.addToCartAction && (\r\n <>\r\n {!this.props.orderTemplateViewProps && this._getCartButton()}\r\n {this.props.orderTemplateViewProps && this._getOrderTemplateBuyButton()}\r\n \r\n )}\r\n {actionsAvailable?.addToWishlistAction && this._getWishlistActionButton(\r\n 'btn-add-to-wishlist',\r\n 'Flytt til huskelisten',\r\n this.moveItemToWishlist)}\r\n {actionsAvailable?.productComparisonButton && this.props.productComparisonButton && this.renderProductComparisonButton(\r\n this.props.productComparisonButton,\r\n product,\r\n getCatalogId(this.props.context.request))}\r\n
\r\n )}\r\n
\r\n )}\r\n\r\n {isAuthenticated && ((actionsAvailable && Object.values(actionsAvailable).some(Boolean)) || draggable) && (\r\n
\r\n {actionsAvailable?.removeAction && this._getRemoveActionButton(\r\n 'btn-remove',\r\n this.props.resources.removeButtonText || 'Fjern',\r\n this._removeItem)}\r\n\r\n {draggable && (\r\n
\r\n
\r\n )}\r\n
\r\n )}\r\n \r\n );\r\n }\r\n\r\n private readonly _handleDragStart = (e: React.DragEvent) => {\r\n e.stopPropagation();\r\n\r\n const { product } = this.props.data;\r\n const offsetX = e.clientX - (e.target as Element).getBoundingClientRect().left;\r\n const offsetY = e.clientY - (e.target as Element).getBoundingClientRect().top;\r\n\r\n e.dataTransfer.setData('product', JSON.stringify({\r\n ProductName: product.Name || '',\r\n ProductRecordId: product.RecordId || 0,\r\n ProductUnitOfMeasure: product.DefaultUnitOfMeasure || ''\r\n }));\r\n e.dataTransfer.setDragImage((e.target as Element).parentElement as Element, offsetX, offsetY);\r\n e.dataTransfer.effectAllowed = 'copyMove';\r\n };\r\n\r\n private _renderPrice = (className: string, price: number | undefined): React.ReactNode => {\r\n if (!this.props.context.request.user.isAuthenticated) {\r\n return undefined;\r\n }\r\n\r\n if (this.props.data.product.PriceFailed) {\r\n return {this.props.resources.priceErrorText || 'Pris n/a'};\r\n }\r\n\r\n if (!price) {\r\n return -;\r\n }\r\n\r\n const basePrice = this.props.data.product.BasePrice;\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n private _renderCartCount = (baseClassName: string): React.ReactNode => {\r\n const { cart, product } = this.props.data;\r\n // const cartQuantity = cart?.cart.CartLines?.find(x => x.ProductId === product.RecordId)?.Quantity;\r\n const cartQuantity = cart?.cart.CartLines?.filter(x => x.ProductId === product.RecordId).reduce((acc, val) => acc + (val.Quantity || 0), 0);\r\n\r\n if (!cartQuantity) {\r\n return undefined;\r\n }\r\n\r\n const cartCountId = `cart-count-${product.RecordId}`;\r\n const tooltipString = this.props.resources.inCartTooltipText || '{0} i handlekurven';\r\n const tooltipText = format(tooltipString, cartQuantity);\r\n\r\n return (\r\n this.setState({ showCartCountTooltip: true })}\r\n onMouseOut={() => this.setState({ showCartCountTooltip: false })}\r\n onTouchStart={() => this.setState({ showCartCountTooltip: true })}\r\n >\r\n {cartQuantity}\r\n \r\n {tooltipText}\r\n \r\n \r\n );\r\n };\r\n\r\n private _getAvailabilityClassName = (): 'hidden' | 'retrieving' | 'available' | 'error' | 'not-available' => {\r\n const { product } = this.props.data;\r\n const { showAvailability } = this.props;\r\n\r\n if (!showAvailability) {\r\n return 'hidden';\r\n }\r\n\r\n if (!product.Availability) {\r\n return 'retrieving';\r\n }\r\n\r\n if (product.Availability.IsProductAvailable) {\r\n return 'available';\r\n }\r\n\r\n if (product.Availability.StockLevelCode === 'ERR') {\r\n return 'error';\r\n }\r\n\r\n return 'not-available';\r\n };\r\n\r\n private _getOrderTemplateBuyButton = (): React.ReactNode => {\r\n const { working } = this.state;\r\n const text = this.locale.cartButton.buy;\r\n const disabled = this.props.disableBuyButton || working || this.state.orderQuantity < 1;\r\n const clickHandler = async () => {\r\n await this._addItemToCart(undefined, true);\r\n };\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n private _getCartButton = (): React.ReactNode => {\r\n const { data: { product }, cartQueue, disableBuyButton } = this.props;\r\n const { orderQuantity, working } = this.state;\r\n\r\n const className = classnames('btn-cart-button', { working });\r\n const icon = working ? null : ;\r\n const disabled = disableBuyButton || working;\r\n const clickHandler = (action: 'buy' | 'buy_always' | 'remove' | 'update') => {\r\n return async () => {\r\n this.setState({ working: true });\r\n await cartQueue.add(async () => {\r\n switch (action) {\r\n case 'buy':\r\n await this._addItemToCart(undefined);\r\n break;\r\n case 'buy_always':\r\n await this._addItemToCartAlways();\r\n break;\r\n case 'remove':\r\n await this._removeItemFromCart();\r\n break;\r\n case 'update':\r\n await this._addItemToCart(product.CartLine?.LineId);\r\n break;\r\n }\r\n });\r\n this.setState({ working: false });\r\n };\r\n };\r\n const baseProps: ButtonProps = {\r\n className,\r\n disabled\r\n };\r\n\r\n if (this.props.buyAlwaysAdd) {\r\n const text = this.locale.cartButton.buy;\r\n return (\r\n \r\n );\r\n } else {\r\n if (!product.CartLine || !product.CartLine.Quantity) {\r\n const text = this.locale.cartButton.buy;\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (product.CartLine.Quantity > 0 && orderQuantity < 1) {\r\n const text = this.locale.cartButton.remove;\r\n return (\r\n \r\n );\r\n }\r\n\r\n if (product.CartLine.Quantity !== orderQuantity) {\r\n const text = this.locale.cartButton.update;\r\n return (\r\n \r\n );\r\n }\r\n }\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n private readonly _getSearchResultOrderQuantity = (readOnly?: boolean): React.ReactNode => {\r\n const { product, simpleProduct } = this.props.data;\r\n\r\n if (readOnly) {\r\n return (\r\n
\r\n \r\n {this.state.orderQuantity}\r\n  \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n this.props.onBreakoffChange?.(this.props.data.product, enabled)}\r\n inputQuantityAriaLabel=''\r\n incrementButtonAriaLabel=''\r\n decrementButtonAriaLabel=''\r\n disabled={this.props.disableQuantityInput || !this.props.data.simpleProduct}\r\n min={this.props.min || 0}\r\n />\r\n );\r\n };\r\n\r\n private readonly _onUpdateQuantity = (newQuantity: number) => {\r\n const {\r\n cartViewProps,\r\n moduleType,\r\n selectOnQuantityChange,\r\n isSelected,\r\n onSelectCartHandler,\r\n onUpdateQuantity,\r\n data: {\r\n product\r\n }\r\n } = this.props;\r\n\r\n this.setState({ orderQuantity: newQuantity });\r\n\r\n if (cartViewProps && cartViewProps.cartlines && moduleType === 'dlvry-cart') {\r\n const line: any = cartViewProps.cartlines.find(cartLine => cartLine?.data?.product?.RecordId === product.RecordId);\r\n if (line && line.cartline && line.cartline.props.quantityOnChange) {\r\n onUpdateQuantity?.(newQuantity);\r\n return line.cartline.props.quantityOnChange(line.data.cartline, newQuantity);\r\n }\r\n }\r\n\r\n if (selectOnQuantityChange) {\r\n if (this.props.buyAlwaysAdd && newQuantity === 0) {\r\n onSelectCartHandler?.();\r\n } else if (!this.props.buyAlwaysAdd && (product.CurrentQuantity || 0) === newQuantity && isSelected) {\r\n onSelectCartHandler?.();\r\n } else if (!isSelected) {\r\n onSelectCartHandler?.();\r\n }\r\n }\r\n onUpdateQuantity?.(newQuantity);\r\n };\r\n\r\n private readonly _renderProductImage = (\r\n className: string,\r\n context: ICoreContext,\r\n heading: string,\r\n image?: string,\r\n fallbackImage?: string,\r\n lazyLoadImages?: boolean\r\n ): JSX.Element | null => {\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { w: 64, h: 64, q: 'w=64&h=64&q=80&m=0&f=webp', qe: 't=64h64qhigh' },\r\n lg: { w: 64, h: 64, q: 'w=64&h=64&q=80&m=0&f=webp', qe: 't=64h64qhigh' },\r\n xl: { w: 64, h: 64, q: 'w=64&h=64&q=80&m=0&f=webp', qe: 't=64h64qhigh' }\r\n },\r\n disableLazyLoad: !Boolean(lazyLoadImages),\r\n lazyload: Boolean(lazyLoadImages),\r\n quality: 80\r\n };\r\n\r\n const fallImageUrl = getFallbackImageUrl(this.props.data.product.ItemId, context.request.apiSettings, context.request.app?.config?.OmniChannelMedia);\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n // @ts-ignore\r\n private readonly _getAddToCartActionButton = (className: string, buttonText: string, clickHandler: (event: React.MouseEvent) => void): React.ReactNode => {\r\n return (\r\n \r\n );\r\n };\r\n\r\n private readonly _getRemoveActionButton = (className: string, buttonText: string, clickHandler: (event: React.MouseEvent) => void): React.ReactNode => {\r\n return (\r\n \r\n );\r\n };\r\n\r\n private readonly _getWishlistActionButton = (className: string, buttonText: string, clickHandler: (event: React.MouseEvent) => void): React.ReactNode => {\r\n return (\r\n \r\n );\r\n };\r\n\r\n private readonly _removeItem = (): void => {\r\n if (this.props.cartViewProps &&\r\n this.props.cartViewProps.removeItemClickHandler &&\r\n this.props.cartViewProps.cartlines) {\r\n const line =\r\n this.props.cartViewProps.cartlines.find(cartLine => cartLine?.data?.product?.RecordId ===\r\n this.props.data.product.RecordId);\r\n if (line && line.data) {\r\n this.props.cartViewProps.removeItemClickHandler(line.data.cartline);\r\n }\r\n } else if (this.props.wishlistItemsProps) {\r\n const wishlists = this.props.wishlistItemsProps?.data.wishlists;\r\n const wishlistLineId = this.getWishlistLineIdFromProductId(this.props.data.product.RecordId);\r\n if (wishlists.result && wishlists.result[0] && wishlistLineId) {\r\n removeLinesAsync({ callerContext: this.props.context.actionContext },\r\n wishlists.result[0].Id,\r\n [{ LineId: wishlistLineId }])\r\n .then(commerceList => {\r\n window.location.reload();\r\n })\r\n .catch(error => {\r\n toast({\r\n header: this.locale.toastStrings.errorHeader,\r\n text: error,\r\n footer: error?.data?.CorrelationId ? `Correlation Id: ${error?.data?.CorrelationId}` : undefined,\r\n type: \"error\",\r\n autoClose: 30000,\r\n position: \"bottom-right\",\r\n canClose: true,\r\n showProgress: true\r\n });\r\n });\r\n }\r\n } else if (this.props.orderTemplateViewProps) {\r\n const { context, data: { product, orderTemplate } } = this.props;\r\n const { telemetry } = this.props.orderTemplateViewProps;\r\n\r\n if (context && context.actionContext) {\r\n const maxWaitTimeInMilliSeconds = 1000;\r\n const line = orderTemplate?.orderTemplateLines.find(x => x.productListLine.ProductId === product.RecordId);\r\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\r\n\r\n if (userToken && orderTemplate && line) {\r\n // Quantity needs to be at least 1 for some reason\r\n line.productListLine.Quantity = line.productListLine.Quantity || 1;\r\n\r\n removeProductListLinesAsync({ callerContext: context.actionContext }, line.productListLine.ProductListId!, [line.productListLine])\r\n .then(async () => {\r\n // eslint-disable-next-line no-promise-executor-return -- fix\r\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\r\n\r\n orderTemplate.orderTemplateLines.splice(orderTemplate.orderTemplateLines.findIndex(x => x.productListLine.ProductId === product.RecordId), 1);\r\n orderTemplate.productList.ProductListLines!.splice(orderTemplate.productList.ProductListLines!.findIndex(x => x.ProductId === product.RecordId), 1);\r\n orderTemplate.totalLines--;\r\n\r\n this.props.orderTemplateViewProps!.onUpdateQuantity?.({\r\n RecordId: line?.fullProduct?.ProductDetails.RecordId\r\n } as any, 0);\r\n\r\n context.actionContext.update(new ActiveOrderTemplateLinesInput(context.request, this.props.config as any), orderTemplate);\r\n })\r\n .catch(error => {\r\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\r\n telemetry.error(error);\r\n });\r\n } else {\r\n telemetry.warning(\r\n '[order-template-lines] Unable remove items from the order template lines user token or lineItemID was not found'\r\n );\r\n }\r\n }\r\n }\r\n };\r\n\r\n private readonly getWishlistLineIdFromProductId = (productId: number | undefined): number | null => {\r\n const wishlists = this.props.wishlistItemsProps?.data.wishlists;\r\n\r\n if (!wishlists ||\r\n !wishlists.result ||\r\n !productId ||\r\n wishlists.result.length === 0 ||\r\n !wishlists.result[0].CommerceListLines ||\r\n wishlists.result[0].CommerceListLines.length === 0) {\r\n return null;\r\n }\r\n\r\n const foundWishlistItem = wishlists.result[0].CommerceListLines.filter(commerceListLine => {\r\n return commerceListLine.ProductId === productId;\r\n });\r\n\r\n if (foundWishlistItem && foundWishlistItem[0].LineId) {\r\n return foundWishlistItem[0].LineId;\r\n }\r\n return null;\r\n };\r\n\r\n private readonly moveItemToWishlist = async(): Promise => {\r\n const { context } = this.props;\r\n const { product } = this.props.data;\r\n\r\n if (!context || !product || !context.request.user.catalogId) {\r\n return Promise.resolve();\r\n }\r\n\r\n const productInputs: ProductInput[] = [];\r\n const productInput = new ProductInput(\r\n product.RecordId!,\r\n context.request.apiSettings,\r\n undefined, undefined,\r\n context.request,\r\n +context.request.user.catalogId\r\n );\r\n productInputs.push(productInput);\r\n\r\n const simpleProduct = await getSimpleProducts(productInputs, context.actionContext);\r\n\r\n if (context.request.user.isAuthenticated && simpleProduct && simpleProduct.length >= 0) {\r\n const customer = await this.getCustomerAccount();\r\n const wishlists = await getWishlistByCustomerId(createGetByCustomerInput({}, null), context.actionContext);\r\n if (!wishlists || wishlists.length === 0) {\r\n const wishlistName = this.props.defaultWishlistName;\r\n if (customer && customer.AccountNumber) {\r\n const listData: CommerceList = {\r\n CustomerId: customer.AccountNumber,\r\n Name: wishlistName,\r\n CommerceListTypeValue: 1,\r\n Id: 0\r\n };\r\n try {\r\n const commerceList = await createCommerceListAsync({\r\n callerContext: this.props.context.actionContext\r\n },\r\n listData);\r\n await this.callAddWishlistLine(simpleProduct[0].RecordId, commerceList.Id);\r\n if (this.props.cartViewProps) {\r\n this._removeItem();\r\n }\r\n } catch (error) {\r\n toast({\r\n header: this.locale.toastStrings.errorHeader,\r\n // @ts-ignore\r\n text: error,\r\n // @ts-ignore\r\n footer: error?.data?.CorrelationId ? `Correlation Id: ${error?.data?.CorrelationId}` : undefined,\r\n type: \"error\",\r\n autoClose: 30000,\r\n position: \"bottom-right\",\r\n canClose: true,\r\n showProgress: true\r\n });\r\n }\r\n }\r\n } else {\r\n await this.callAddWishlistLine(simpleProduct[0].RecordId, wishlists[0].Id);\r\n if (this.props.cartViewProps) {\r\n this._removeItem();\r\n }\r\n toast({\r\n text: `${simpleProduct[0].Name} lagt i huskelisten`,\r\n type: \"success\",\r\n autoClose: 3000,\r\n position: \"bottom-right\",\r\n canClose: true,\r\n showProgress: false\r\n });\r\n }\r\n }\r\n };\r\n\r\n private readonly callAddWishlistLine = async (productId: number, wishlistId: number): Promise => {\r\n const { context } = this.props;\r\n\r\n try {\r\n const customer = await this.getCustomerAccount();\r\n if (customer && customer.AccountNumber) {\r\n const createdCommerceList = await addLinesAsync({ callerContext: context.actionContext },\r\n wishlistId,\r\n [\r\n buildWishlistLine(productId, customer.AccountNumber, wishlistId)\r\n ]);\r\n context.actionContext.update(createGetByCustomerInput({}, null), [createdCommerceList]);\r\n }\r\n } catch (error) {\r\n toast({\r\n header: this.locale.toastStrings.errorHeader,\r\n // @ts-ignore\r\n text: error,\r\n // @ts-ignore\r\n footer: error?.data?.CorrelationId ? `Correlation Id: ${error?.data?.CorrelationId}` : undefined,\r\n type: \"error\",\r\n autoClose: 30000,\r\n position: \"bottom-right\",\r\n canClose: true,\r\n showProgress: true\r\n });\r\n }\r\n };\r\n\r\n private readonly getCustomerAccount = (): AsyncResult => {\r\n const customerInput = new GetCustomerInput(this.props.context.actionContext.requestContext.apiSettings);\r\n return getCustomer(customerInput, this.props.context.actionContext);\r\n };\r\n\r\n private readonly _addItemToCartAlways = async (): Promise => {\r\n const { context } = this.props;\r\n const { product, simpleProduct } = this.props.data;\r\n\r\n if (!context || !product || !simpleProduct || !context.request.user.catalogId) {\r\n return Promise.resolve();\r\n }\r\n\r\n let cart = await getCartStateData(new GetCartStateDataInput(context.request.apiSettings, context.request), context.actionContext);\r\n\r\n if (!cart) {\r\n return;\r\n }\r\n\r\n while (cart.status === 'UPDATING') {\r\n console.log('Cart is updating, waiting for it to finish...');\r\n await new Promise((resolve) => setTimeout(resolve, 1000));\r\n cart = await getCartStateData(new GetCartStateDataInput(context.request.apiSettings, context.request), context.actionContext);\r\n\r\n if (!cart) {\r\n // Shouldn't happen, but just in case\r\n toast({\r\n header: 'Error',\r\n text: 'Cart is undefined. Please try again later.',\r\n autoClose: 30000,\r\n canClose: true,\r\n position: 'bottom-right',\r\n showProgress: true\r\n });\r\n return Promise.resolve();\r\n }\r\n }\r\n\r\n let userHasAccess: boolean | undefined = this.props.userHasAccess || true; // TODO: Remove 'true' default here to re-enable alcohol license check\r\n let validationError: string | undefined;\r\n\r\n if (userHasAccess === undefined) {\r\n const result = await validateAlcoholLicenseAsync(context.actionContext, {\r\n CatalogId: context.request.apiSettings.catalogId,\r\n ProductIds: [simpleProduct.RecordId]\r\n });\r\n userHasAccess = result.ValidationResult;\r\n validationError = this.locale.toastStrings.noAccessToProduct;\r\n }\r\n\r\n if (userHasAccess && this.props.onBuyValidate) {\r\n const result = await this.props.onBuyValidate(\r\n product,\r\n this.state.orderQuantity || simpleProduct.Behavior?.DefaultQuantity || 0\r\n );\r\n userHasAccess = result.isValid;\r\n validationError = result.message;\r\n }\r\n\r\n if (userHasAccess !== true) {\r\n toast({\r\n header: this.locale.toastStrings.errorHeader,\r\n text: validationError || 'Unknown error',\r\n type: 'error',\r\n autoClose: 30000,\r\n canClose: true,\r\n position: 'bottom-right',\r\n showProgress: true\r\n });\r\n return Promise.resolve();\r\n }\r\n\r\n const addProductToCartInput = {\r\n product: simpleProduct,\r\n count: this.state.orderQuantity || simpleProduct.Behavior?.DefaultQuantity || 0,\r\n customPrice: product.Price\r\n };\r\n\r\n const cartLine = cart.cart.CartLines?.find(x => x.ProductId === simpleProduct.RecordId);\r\n\r\n try {\r\n const result = (!cartLine || !cartLine.LineId)\r\n ? await cart.addProductToCart(addProductToCartInput)\r\n : await cart.updateCartLineQuantity({\r\n cartLineId: cartLine.LineId,\r\n newQuantity: (cartLine.Quantity || 0) + (this.state.orderQuantity || 1)\r\n });\r\n\r\n if (result.status === 'SUCCESS') {\r\n const msg: IToastViewProps = {\r\n text: this.locale.toastStrings.productsAddedToCart\r\n .replace('{0}', (this.state.orderQuantity || 1).toString())\r\n .replace('{1}', simpleProduct.Name ?? ''),\r\n type: 'success',\r\n autoClose: 3000,\r\n position: 'bottom-right',\r\n canClose: true,\r\n showProgress: true,\r\n link: this.cartUrl,\r\n linkLabel: this.locale.toastStrings.goToCart\r\n };\r\n toast(msg);\r\n\r\n if (this.props.isSelected) {\r\n this.props.onSelectCartHandler?.();\r\n }\r\n this.setState({ orderQuantity: 0 });\r\n }\r\n else if (result.status === 'FAILED') {\r\n const err: IToastViewProps = {\r\n header: this.locale.toastStrings.errorHeader,\r\n text: result.validationResults && result.validationResults.length > 0\r\n ? result.validationResults[0].LocalizedMessage!\r\n : (result.errorDetails?.LocalizedMessage ?? 'Unknown error adding items to cart'),\r\n type: 'error',\r\n autoClose: 10000,\r\n position: 'bottom-right',\r\n canClose: true,\r\n showProgress: true\r\n };\r\n toast(err);\r\n }\r\n }\r\n catch (reason) {\r\n toast({\r\n header: this.locale.toastStrings.errorHeader,\r\n // @ts-ignore\r\n text: reason,\r\n // @ts-ignore\r\n footer: reason?.data?.CorrelationId ? `Correlation Id: ${reason?.data?.CorrelationId}` : undefined,\r\n type: 'error',\r\n autoClose: 30000,\r\n position: 'bottom-right',\r\n canClose: true,\r\n showProgress: true\r\n });\r\n }\r\n };\r\n\r\n private readonly _addItemToCart = async (cartLineId: string | undefined, resetQuantiyOnSuccess?: boolean): Promise => {\r\n const { context } = this.props;\r\n const { product, simpleProduct } = this.props.data;\r\n\r\n if (!context || !product || !simpleProduct || !context.request.user.catalogId) {\r\n return Promise.resolve();\r\n }\r\n\r\n let cart = await getCartStateData(new GetCartStateDataInput(context.request.apiSettings, context.request), context.actionContext);\r\n\r\n if (cart) {\r\n while (cart.status === 'UPDATING') {\r\n console.log('Cart is updating, waiting for it to finish...');\r\n await new Promise((resolve) => setTimeout(resolve, 1000));\r\n cart = await getCartStateData(new GetCartStateDataInput(context.request.apiSettings, context.request), context.actionContext);\r\n\r\n if (!cart) {\r\n // Shouldn't happen, but just in case\r\n toast({\r\n header: 'Error',\r\n text: 'Cart is undefined. Please try again later.',\r\n autoClose: 30000,\r\n canClose: true,\r\n position: 'bottom-right',\r\n showProgress: true\r\n });\r\n return Promise.resolve();\r\n }\r\n }\r\n\r\n let userHasAccess: boolean | undefined = this.props.userHasAccess || true; // TODO: Remove 'true' default here to re-enable alcohol license check\r\n let validationError: string | undefined;\r\n\r\n if (userHasAccess === undefined) {\r\n const result = await validateAlcoholLicenseAsync(context.actionContext, {\r\n CatalogId: context.request.apiSettings.catalogId,\r\n ProductIds: [simpleProduct.RecordId]\r\n });\r\n userHasAccess = result.ValidationResult;\r\n validationError = this.locale.toastStrings.noAccessToProduct;\r\n }\r\n\r\n if (userHasAccess && this.props.onBuyValidate) {\r\n const result = await this.props.onBuyValidate(\r\n product,\r\n this.state.orderQuantity || simpleProduct.Behavior?.DefaultQuantity || 0\r\n );\r\n userHasAccess = result.isValid;\r\n validationError = result.message;\r\n }\r\n\r\n if (userHasAccess !== true) {\r\n toast({\r\n header: this.locale.toastStrings.errorHeader,\r\n text: validationError || 'Unknown error',\r\n type: 'error',\r\n autoClose: 30000,\r\n canClose: true,\r\n position: 'bottom-right',\r\n showProgress: true\r\n });\r\n return Promise.resolve();\r\n }\r\n\r\n /* if (!cartLineId) {\r\n cartLineId = cart.cart.CartLines?.find(x => x.ProductId === simpleProduct.RecordId)?.LineId;\r\n }\r\n const cartQuantity = cartLineId ? cart.cart.CartLines?.find(x => x.LineId === cartLineId)?.Quantity || 0 : 0; */\r\n\r\n const addProductToCartInput = {\r\n product: simpleProduct,\r\n count: this.state.orderQuantity || simpleProduct.Behavior?.DefaultQuantity || 0,\r\n /* isPriceKeyedIn: true, */\r\n customPrice: product.Price\r\n };\r\n\r\n try {\r\n const result = !cartLineId\r\n ? await cart.addProductToCart(addProductToCartInput)\r\n /* : await cart.updateCartLineQuantity({ cartLineId, newQuantity: (cartQuantity + this.state.orderQuantity) }); */\r\n : await cart.updateCartLineQuantity({ cartLineId, newQuantity: this.state.orderQuantity });\r\n if (result.status === \"SUCCESS\") {\r\n const msg: IToastViewProps = {\r\n text: this.locale.toastStrings.productsAddedToCart.replace('{0}', this.state.orderQuantity.toString()).replace('{1}', simpleProduct.Name ?? ''),\r\n type: \"success\",\r\n autoClose: 3000,\r\n position: \"bottom-right\",\r\n canClose: true,\r\n showProgress: true,\r\n link: this.cartUrl,\r\n linkLabel: this.locale.toastStrings.goToCart\r\n };\r\n toast(msg);\r\n\r\n if (resetQuantiyOnSuccess) {\r\n // Reset quantity to 0 after successfully adding to cart\r\n this.setState({ orderQuantity: 0 });\r\n this.props.onUpdateQuantity?.(0);\r\n } else if (this.state.orderQuantity === 0) {\r\n // Make sure product has at least 1 quantity after being successfully added to cart\r\n this.setState({ orderQuantity: 1 });\r\n this.props.onUpdateQuantity?.(1);\r\n }\r\n }\r\n else if (result.status === \"FAILED\") {\r\n const err: IToastViewProps = {\r\n header: this.locale.toastStrings.errorHeader,\r\n text: result.validationResults && result.validationResults.length > 0\r\n ? result.validationResults[0].LocalizedMessage!\r\n : (result.errorDetails?.LocalizedMessage ?? 'Unknown error adding items to cart'),\r\n type: \"error\",\r\n autoClose: 10000,\r\n position: \"bottom-right\",\r\n canClose: true,\r\n showProgress: true\r\n };\r\n toast(err);\r\n }\r\n }\r\n catch (reason) {\r\n toast({\r\n header: this.locale.toastStrings.errorHeader,\r\n // @ts-ignore\r\n text: reason,\r\n // @ts-ignore\r\n footer: reason?.data?.CorrelationId ? `Correlation Id: ${reason?.data?.CorrelationId}` : undefined,\r\n type: \"error\",\r\n autoClose: 30000,\r\n position: \"bottom-right\",\r\n canClose: true,\r\n showProgress: true\r\n });\r\n }\r\n }\r\n };\r\n\r\n private readonly _removeItemFromCart = async (): Promise => {\r\n const { context } = this.props;\r\n const { product } = this.props.data;\r\n\r\n if (!product.CartLine || !product.CartLine.LineId) {\r\n return Promise.resolve();\r\n }\r\n\r\n const cart = await getCartStateData(new GetCartStateDataInput(context.request.apiSettings, context.request), context.actionContext);\r\n\r\n if (!cart) {\r\n toast({\r\n header: this.locale.toastStrings.errorHeader,\r\n text: this.locale.toastStrings.errorCartNotFound,\r\n type: \"error\",\r\n autoClose: 30000,\r\n position: \"bottom-right\",\r\n canClose: true,\r\n showProgress: true\r\n });\r\n return Promise.resolve();\r\n }\r\n\r\n const result = await cart.removeCartLines({\r\n cartLineIds: [product.CartLine.LineId]\r\n });\r\n\r\n if (result.status === \"SUCCESS\") {\r\n toast({\r\n text: this.locale.toastStrings.productsRemovedFromCart.replace('{0}', product.Name ?? ''),\r\n type: \"success\",\r\n autoClose: 3000,\r\n position: \"bottom-right\",\r\n canClose: true,\r\n showProgress: true,\r\n link: this.cartUrl,\r\n linkLabel: this.locale.toastStrings.goToCart\r\n });\r\n } else if (result.status === \"FAILED\") {\r\n toast({\r\n header: this.locale.toastStrings.errorHeader,\r\n text: result.validationResults && result.validationResults.length > 0\r\n ? result.validationResults[0].LocalizedMessage!\r\n : (result.errorDetails?.LocalizedMessage ?? 'Unknown error removing items from cart'),\r\n type: \"error\",\r\n autoClose: 30000,\r\n position: \"bottom-right\",\r\n canClose: true,\r\n showProgress: true\r\n });\r\n }\r\n };\r\n}\r\n","import * as React from 'react';\r\nimport classnames from 'classnames';\r\nimport { IProductsDimensionsAvailabilities, FullProduct } from '@msdyn365-commerce/commerce-entities';\r\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\r\nimport { ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { AttributeValue, CartLine, CategoryPath, Customer, ProductList, ProductPrice, SimpleProduct, UnitOfMeasureConversion } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n IProductInventoryInformation,\r\n OrderTemplate,\r\n QueryResultSettingsProxy,\r\n GetOrderTemplatesInput,\r\n getOrderTemplates,\r\n getFallbackImageUrl\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { ICartlinesViewProps } from '@msdyn365-commerce-modules/cart';\r\nimport { ProductListRow } from './product-list-row';\r\nimport { IWishlistItemsProps } from '../../themes/dlvry-adventureworks/definition-extensions/wishlist-items.ext.props.autogenerated';\r\nimport { IWishlistItemsData } from '@msdyn365-commerce-modules/wishlist';\r\nimport { useEffect, useMemo, useState } from 'react';\r\nimport { IOrderTemplateViewProps } from '../../modules/dlvry-order-template/dlvry-order-template';\r\nimport PQueue from 'p-queue';\r\nimport { ValidateProductAccessResult } from '../../shared-utils/validate-product-access';\r\nimport { getLocale } from '../../shared-utils/attributes/locale';\r\nimport { ProductError, SimpleProductExt } from '../../shared-utils/types';\r\nimport { ProductSearchResultExt } from '../../modules/dlvry-search-result-container/components';\r\nimport { CountingListLine } from '../../actions/entities/counting-list';\r\nimport { getDiscountBadge } from '../../shared-utils/badge-utils';\r\nimport { ICartViewProps } from '../../modules/dlvry-cart/dlvry-cart';\r\n\r\n// Modules where the ProductListComponent is used:\r\n// - Cart\r\n// - Search Result Container\r\n// - Wishlist\r\n// - Order Template\r\n\r\nexport class ProductListProduct {\r\n public RecordId?: number;\r\n public ItemId?: string;\r\n public Name?: string;\r\n public PrimaryImageUrl?: string;\r\n public DefaultUnitOfMeasure?: string;\r\n public Price?: number;\r\n public BasePrice?: number;\r\n public InventoryLabel?: string | undefined;\r\n public CurrentQuantity?: number | undefined;\r\n public CartLine?: CartLine | undefined;\r\n public DiscountAmount?: number | undefined;\r\n public LineAmount?: number | undefined;\r\n public Availability?: IProductInventoryInformation;\r\n public Brand?: string | undefined;\r\n public Manufacturer?: string | undefined;\r\n public PriceFailed?: boolean | undefined;\r\n public LineCreatedDateTime?: Date | undefined;\r\n public DisplayOrder?: number;\r\n public CategoryPaths?: CategoryPath[] | undefined;\r\n public Badge?: string | undefined;\r\n public ProductPrice?: ProductPrice | undefined;\r\n public RequestedDeliveryDate?: Date | undefined;\r\n public Transit?: boolean | undefined;\r\n\r\n public constructor(\r\n recordId?: number,\r\n itemId?: string,\r\n name?: string,\r\n primaryImageUrl?: string,\r\n defaultUnitOfMeasure?: string,\r\n price?: number,\r\n inventoryLabel?: string | undefined,\r\n currentQuantity?: number | undefined,\r\n cartLine?: CartLine | undefined,\r\n DiscountAmount?: number | undefined,\r\n LineAmount?: number | undefined,\r\n availability?: IProductInventoryInformation,\r\n brand?: string | undefined,\r\n manufacturer?: string | undefined,\r\n priceFailed?: boolean | undefined,\r\n displayOrder?: number | undefined,\r\n categoryPaths?: CategoryPath[] | undefined,\r\n badge?: string | undefined,\r\n productPrice?: ProductPrice | undefined,\r\n transit?: boolean | undefined\r\n ) {\r\n this.RecordId = recordId;\r\n this.ItemId = itemId;\r\n this.Name = name;\r\n this.PrimaryImageUrl = primaryImageUrl;\r\n this.DefaultUnitOfMeasure = defaultUnitOfMeasure;\r\n this.Price = price;\r\n this.InventoryLabel = inventoryLabel;\r\n this.CurrentQuantity = currentQuantity;\r\n this.CartLine = cartLine;\r\n this.DiscountAmount = DiscountAmount;\r\n this.LineAmount = LineAmount;\r\n this.Availability = availability;\r\n this.Brand = brand;\r\n this.Manufacturer = manufacturer;\r\n this.PriceFailed = priceFailed;\r\n this.DisplayOrder = displayOrder || 0;\r\n this.CategoryPaths = categoryPaths;\r\n this.Badge = badge;\r\n this.ProductPrice = productPrice;\r\n this.Transit = transit;\r\n }\r\n}\r\n\r\nexport interface IProductListResources {\r\n productListItemText: string;\r\n productListItemNumberText: string;\r\n productListItemNameText: string;\r\n productListUnitNameText: string;\r\n productListPriceText: string;\r\n productListOrderQuantityLabel: string;\r\n productListTotalPriceText: string;\r\n productListActionsLabel: string;\r\n productListRemoveLabel?: string | undefined;\r\n buyNowButtonText: string;\r\n discount: string;\r\n lineAmount: string;\r\n emptyCartButtonText?: string;\r\n removeSelectedToCartText?: string;\r\n removeButtonText?: string;\r\n priceErrorText?: string;\r\n inCartTooltipText?: string;\r\n deliveryDateLabel?: string;\r\n transitTooltip?: string;\r\n}\r\n\r\nexport interface IActionsAvailable {\r\n addToCartAction?: boolean;\r\n addToOrderTemplate?: boolean;\r\n addToWishlistAction?: boolean;\r\n removeAction?: boolean;\r\n productComparisonButton?: boolean;\r\n}\r\n\r\ninterface IProductListItems {\r\n type?: 'default' | 'cart';\r\n cart?: ICartState;\r\n products: ProductListProduct[];\r\n simpleProducts: SimpleProduct[];\r\n unitConversions?: UnitOfMeasureConversion[];\r\n productErrors?: ProductError[];\r\n context: ICoreContext;\r\n config?: { [x: string]: any };\r\n resources: IProductListResources;\r\n imageSettings?: IImageSettings;\r\n moduleType: string;\r\n moduleId: string;\r\n allowBackNavigation?: boolean;\r\n allowMultiSelect?: boolean;\r\n telemetryContent: ITelemetryContent;\r\n orderTemplate?: OrderTemplate;\r\n customerInformation?: Customer;\r\n quickviewSlot?: {} | null | undefined;\r\n productComparisonButton?: {} | null | undefined;\r\n channelInventoryConfigurationId?: number;\r\n isLoading?: boolean;\r\n isPriceMinMaxEnabled?: boolean;\r\n disableBuyButtons?: boolean;\r\n disableReorder?: boolean;\r\n disableQuantityInput?: boolean;\r\n draggable?: boolean;\r\n showAvailability?: boolean;\r\n showPrices?: boolean;\r\n showTotalPrices?: boolean;\r\n showCartCount?: boolean;\r\n showGroups?: boolean;\r\n readOnly?: boolean;\r\n buyAlwaysAdd?: boolean;\r\n resetSelectedQuantities?: Set;\r\n onResetSelectedQuantities?: () => void;\r\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\r\n validatedProductAccess?: ValidateProductAccessResult[];\r\n actionsAvailable?: IActionsAvailable;\r\n cartViewProps?: ICartViewProps | undefined;\r\n wishlistItemsProps?: IWishlistItemsProps | undefined;\r\n orderTemplateViewProps?: IOrderTemplateViewProps;\r\n selectOnQuantityChange?: boolean;\r\n breakoffProducts?: { [key: number]: boolean };\r\n selectedProducts?: IProductSelection;\r\n onUpdateQuantity?: (product: ProductListProduct, quantity: number) => void;\r\n onUpdateSelection?: (selection: IProductSelection) => void;\r\n onBreakoffChange?: (product: ProductListProduct, enabled: boolean) => void;\r\n onDrop?: (productRecId: number | undefined, targetRecId: number | undefined, direction: 'over' | 'under') => void;\r\n onMove?: (recordId: number | undefined, direction: 'up' | 'down') => void;\r\n onBuyValidate?: (product: ProductListProduct, quantity: number) => Promise;\r\n}\r\n\r\nexport interface IProductSelection {\r\n isAllSelected: boolean;\r\n isDisabled: boolean;\r\n [key: string]: boolean;\r\n}\r\n\r\nexport interface BuyValidationResult {\r\n isValid: boolean;\r\n message?: string;\r\n}\r\n\r\nexport const ProductListComponent: React.FC = ({\r\n type = 'default',\r\n cart,\r\n products,\r\n simpleProducts,\r\n unitConversions,\r\n productErrors,\r\n orderTemplate,\r\n customerInformation,\r\n context,\r\n config,\r\n imageSettings,\r\n resources,\r\n moduleType,\r\n moduleId,\r\n allowBackNavigation,\r\n allowMultiSelect,\r\n telemetryContent,\r\n quickviewSlot,\r\n productComparisonButton,\r\n channelInventoryConfigurationId,\r\n isLoading,\r\n isPriceMinMaxEnabled,\r\n readOnly,\r\n disableBuyButtons,\r\n disableReorder,\r\n disableQuantityInput,\r\n draggable,\r\n showAvailability,\r\n showPrices,\r\n showTotalPrices,\r\n showCartCount,\r\n showGroups,\r\n buyAlwaysAdd,\r\n resetSelectedQuantities,\r\n onResetSelectedQuantities,\r\n validatedProductAccess,\r\n productsDimensionAvailabilities,\r\n actionsAvailable,\r\n cartViewProps,\r\n wishlistItemsProps,\r\n orderTemplateViewProps,\r\n selectOnQuantityChange,\r\n breakoffProducts,\r\n selectedProducts: selectedProductsProp,\r\n onUpdateQuantity,\r\n onUpdateSelection,\r\n onBreakoffChange,\r\n onDrop,\r\n onMove,\r\n onBuyValidate\r\n}) => {\r\n const [selectedProducts, setSelectedProducts] = useState(selectedProductsProp || { isAllSelected: false, isDisabled: true });\r\n const [orderTemplates, setOrderTemplates] = useState(undefined);\r\n const [dragOverProduct, setDragOverProduct] = useState(undefined);\r\n const [dragOverUnder, setDragOverUnder] = useState<'over' | 'under' | undefined>(undefined);\r\n const cartQueue = useMemo(() => new PQueue({ concurrency: 1 }), []);\r\n\r\n useEffect(() => {\r\n setSelectedProducts(selectedProductsProp || { isAllSelected: false, isDisabled: true });\r\n }, [selectedProductsProp]);\r\n\r\n useEffect(() => {\r\n onUpdateSelection?.(selectedProducts);\r\n }, [selectedProducts]);\r\n\r\n React.useEffect(() => {\r\n document.querySelectorAll('.msc-add-to-order-template-icon').forEach(element => {\r\n element.setAttribute('title', element.getAttribute('aria-label') || '');\r\n });\r\n\r\n // Remove selection from products that are no longer available (for example on another page)\r\n Object.keys(selectedProducts).forEach(key => {\r\n const id = Number(key);\r\n\r\n // Will also skip isAllSelected and isDisabled\r\n if (isNaN(id)) {\r\n return;\r\n }\r\n\r\n if (products.every(x => x.RecordId !== id)) {\r\n delete selectedProducts[key];\r\n }\r\n });\r\n }, [products]);\r\n\r\n // Setup navigation with Enter and Shift+Enter for quantity inputs\r\n React.useEffect(() => {\r\n const inputs = document.querySelectorAll('.dlvry-quantity__quantity-input');\r\n const keyDownHandler = (e: Event) => {\r\n const event = e as KeyboardEvent;\r\n const index = Number((event.currentTarget as HTMLElement).getAttribute('data-index'));\r\n\r\n if (event.key === 'Enter') {\r\n if (event.shiftKey) {\r\n if (index === 0) {\r\n return;\r\n }\r\n (inputs.item(index - 1) as HTMLInputElement).select();\r\n } else {\r\n if (index === inputs.length - 1) {\r\n return;\r\n }\r\n (inputs.item(index + 1) as HTMLInputElement).select();\r\n }\r\n }\r\n };\r\n\r\n inputs.forEach((element, index) => {\r\n element.setAttribute('data-index', index.toString());\r\n element.addEventListener('keydown', keyDownHandler);\r\n });\r\n\r\n return () => {\r\n inputs.forEach(element => {\r\n element.removeEventListener('keydown', keyDownHandler);\r\n });\r\n };\r\n }, [products]);\r\n\r\n React.useEffect(() => {\r\n if (resetSelectedQuantities) {\r\n resetSelectedQuantities.forEach(id => {\r\n if (products.find(x => x.RecordId === id)) {\r\n products.find(x => x.RecordId === id)!.CurrentQuantity = 0;\r\n }\r\n });\r\n\r\n onResetSelectedQuantities?.();\r\n }\r\n }, [resetSelectedQuantities]);\r\n\r\n const changeSelection = (id: number | undefined) => {\r\n if (id) {\r\n setSelectedProducts((prevState: any) => {\r\n prevState[id] = !prevState[id];\r\n return { ...prevState };\r\n });\r\n }\r\n checkIsAllSelect();\r\n };\r\n const checkIsAllSelect = () => {\r\n const selectedCartItem = products.filter(product => {\r\n return product.RecordId && selectedProducts[product.RecordId];\r\n });\r\n if (selectedCartItem.length === products.length) {\r\n setSelectedProducts((prv: any) => {\r\n return { ...prv, isAllSelected: true, isDisabled: false };\r\n });\r\n } else {\r\n setSelectedProducts((prv: any) => {\r\n return { ...prv, isAllSelected: false, isDisabled: selectedCartItem.length === 0 };\r\n });\r\n }\r\n };\r\n // @ts-ignore\r\n const selectAll = () => {\r\n const allProductsSelection = { isAllSelected: !selectedProducts['isAllSelected'], isDisabled: selectedProducts['isAllSelected'] };\r\n products.forEach(product => {\r\n if (product.RecordId) {\r\n allProductsSelection[product.RecordId] = !selectedProducts['isAllSelected'];\r\n }\r\n });\r\n setSelectedProducts(allProductsSelection);\r\n };\r\n const emptyCart = async () => {\r\n const cart = await getCartState(context.actionContext);\r\n await cart.removeCartLines({ cartLineIds: cart.cart.CartLines!.map(x => x.LineId!) });\r\n };\r\n const removeAllSelectedCarts = async () => {\r\n if (cartViewProps && cartViewProps.cartlines) {\r\n try {\r\n const cartState = await getCartState(context.actionContext);\r\n const lineItemIdsToRemove: any[] = [];\r\n cartViewProps.cartlines.forEach(cartLine => {\r\n if (cartLine?.data?.product?.RecordId && selectedProducts[cartLine?.data?.product?.RecordId]) {\r\n delete selectedProducts[cartLine?.data?.product?.RecordId];\r\n lineItemIdsToRemove.push(cartLine.data.cartline.LineId);\r\n }\r\n });\r\n if (lineItemIdsToRemove.length > 0) {\r\n await cartState.removeCartLines({ cartLineIds: lineItemIdsToRemove });\r\n checkIsAllSelect();\r\n }\r\n } catch (error) {\r\n throw error;\r\n }\r\n }\r\n };\r\n const updateOrderTemplatesAsync = async (newOrderTemplate?: ProductList) => {\r\n let newOrderTemplates;\r\n\r\n if (newOrderTemplate) {\r\n newOrderTemplates = [...(orderTemplates ? 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: context.request,\r\n config: config\r\n }).QueryResultSettings;\r\n const input = new GetOrderTemplatesInput('', queryResultSettings);\r\n newOrderTemplates = (await getOrderTemplates(input, context.actionContext)).map(x => new OrderTemplate(x, [], 0));\r\n }\r\n\r\n setOrderTemplates(newOrderTemplates);\r\n return newOrderTemplates;\r\n };\r\n const handleDrop = async (e: React.DragEvent, recordId: number | undefined, overUnder: \"over\" | \"under\" | undefined) => {\r\n const dragData = JSON.parse(e.dataTransfer.getData('product'));\r\n const dragProduct = products.find(product => product.RecordId === dragData.ProductRecordId);\r\n const targetProduct = products.find(product => product.RecordId === recordId);\r\n\r\n if (!dragProduct || !targetProduct || !overUnder) {\r\n return;\r\n }\r\n\r\n onDrop?.(dragProduct?.RecordId, targetProduct?.RecordId, overUnder);\r\n };\r\n\r\n const grouped = products.reduce((acc, product) => {\r\n const key = showGroups && product.RequestedDeliveryDate ? new Date(product.RequestedDeliveryDate).getTime().toString() : 'default';\r\n if (!acc[key]) {\r\n acc[key] = [];\r\n }\r\n acc[key].push(product);\r\n return acc;\r\n }, {} as { [key: string]: ProductListProduct[] });\r\n const createdGroupFor: string[] = [];\r\n\r\n return (\r\n
\r\n {moduleType === 'dlvry-cart' && (\r\n
\r\n \r\n\r\n \r\n {resources.removeSelectedToCartText}\r\n \r\n
\r\n )}\r\n\r\n {\r\n await handleDrop(e, dragOverProduct, 'under');\r\n }}\r\n onDragOver={e => {\r\n e.stopPropagation();\r\n\r\n if (!disableReorder && e.dataTransfer.types.includes('product')) {\r\n e.preventDefault();\r\n\r\n const firstItem = document.querySelector('.product-list-component > li:first-of-type');\r\n const margin = firstItem ? parseFloat(window.getComputedStyle(firstItem).marginBottom) + 6 : 22;\r\n const item = document.elementFromPoint(e.clientX, e.clientY - margin);\r\n\r\n let listItem = item?.parentElement;\r\n while (listItem) {\r\n if (listItem.tagName === 'LI') {\r\n break;\r\n }\r\n listItem = listItem.parentElement;\r\n }\r\n\r\n if (!listItem) {\r\n return;\r\n }\r\n\r\n const productId = listItem?.getAttribute('data-product-id') ? parseFloat(listItem.getAttribute('data-product-id')!) : undefined;\r\n\r\n setDragOverProduct(productId);\r\n setDragOverUnder('under');\r\n }\r\n }}\r\n >\r\n {/* */}\r\n {Object.keys(grouped).map((key, index) => {\r\n const items: React.ReactNode[] = [];\r\n\r\n if (key !== 'default' && !createdGroupFor.includes(key)) {\r\n items.push(\r\n
  • \r\n {resources.deliveryDateLabel}: {context.cultureFormatter.formatDate(new Date(parseFloat(key)), { day: 'numeric', month: 'long' })}\r\n
  • \r\n );\r\n createdGroupFor.push(key);\r\n }\r\n\r\n for (const product of grouped[key]) {\r\n items.push((\r\n changeSelection(product.RecordId)}\r\n data={{\r\n cart,\r\n product,\r\n simpleProduct: simpleProducts.find(simpleProduct => simpleProduct.RecordId === product.RecordId),\r\n orderTemplate,\r\n customerInformation,\r\n unitConversions: unitConversions?.filter(x => x.ProductRecordId === product.RecordId)\r\n }}\r\n productComparisonButton={productComparisonButton}\r\n actionsAvailable={actionsAvailable}\r\n cartViewProps={cartViewProps}\r\n wishlistItemsProps={wishlistItemsProps}\r\n moduleId={moduleId}\r\n moduleType={moduleType}\r\n error={productErrors?.find(x => x.RecordId === product.RecordId)?.Error}\r\n allowMultiSelect={allowMultiSelect}\r\n min={type === 'cart' ? 1 : undefined}\r\n readOnly={readOnly}\r\n disableBuyButton={disableBuyButtons}\r\n disableReorder={disableReorder}\r\n disableQuantityInput={disableQuantityInput}\r\n draggable={draggable}\r\n lazyLoadImages={imageSettings?.lazyload}\r\n showAvailability={showAvailability}\r\n showPrices={showPrices}\r\n showTotalPrices={showTotalPrices}\r\n showCartCount={showCartCount}\r\n buyAlwaysAdd={buyAlwaysAdd}\r\n resetSelectedQuantities={!!product.RecordId && resetSelectedQuantities?.has(product.RecordId)}\r\n initialBreakoffEnabled={Boolean(product.RecordId && breakoffProducts?.[product.RecordId])}\r\n userHasAccess={validatedProductAccess?.find(x => x.RecordId === product.RecordId)?.HasAccess}\r\n onUpdateOrderTemplates={updateOrderTemplatesAsync}\r\n orderTemplateViewProps={orderTemplateViewProps}\r\n retrieveOrderTemplates={async () => {\r\n return orderTemplates || updateOrderTemplatesAsync();\r\n }}\r\n onUpdateQuantity={quantity => {\r\n onUpdateQuantity?.(product, quantity);\r\n }}\r\n onBreakoffChange={onBreakoffChange}\r\n onDrop={handleDrop}\r\n onDragOver={(recordId, overUnder) => {\r\n setDragOverProduct(recordId);\r\n setDragOverUnder(overUnder);\r\n }}\r\n onMove={onMove}\r\n onBuyValidate={onBuyValidate}\r\n />\r\n ));\r\n }\r\n\r\n return items;\r\n })}\r\n \r\n\r\n {isLoading && (\r\n
    \r\n
    \r\n
    \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nconst getInventoryLabel = (\r\n channelInventoryConfigurationId: number | undefined,\r\n attributeValues: AttributeValue[] | undefined,\r\n recordId: number,\r\n productInventoryStatus?: any\r\n): string | undefined => {\r\n if (productInventoryStatus) {\r\n const shippingInventory = productInventoryStatus.find((shipping: any) => shipping.ProductAvailableQuantity.ProductId === recordId);\r\n if (shippingInventory && shippingInventory.StockLevelLabel) {\r\n return shippingInventory.StockLevelLabel;\r\n }\r\n }\r\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(attributeValues)) {\r\n return undefined;\r\n }\r\n const inventoryAttribute = attributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\r\n if (inventoryAttribute) {\r\n return inventoryAttribute.TextValue;\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const productSearchResults2ProductList = (\r\n context: ICoreContext,\r\n searchResults: ProductSearchResultExt[],\r\n channelInventoryConfigurationId: number | undefined,\r\n cart?: ICartState,\r\n productInventoryStatus?: IProductInventoryInformation[]\r\n): ProductListProduct[] => {\r\n const productList: ProductListProduct[] = [];\r\n const attributeLocale = getLocale(context);\r\n\r\n if (!searchResults) {\r\n return productList;\r\n }\r\n\r\n searchResults.map((searchResult, index) => {\r\n const cartLine = cart?.cart.CartLines?.find(x => x.ProductId === searchResult.RecordId);\r\n const productAvailability = productInventoryStatus?.find(x => x.ProductAvailableQuantity.ProductId === searchResult.RecordId);\r\n\r\n productList.push(\r\n new ProductListProduct(\r\n searchResult.RecordId,\r\n searchResult.ItemId,\r\n searchResult.Name,\r\n searchResult.PrimaryImageUrl,\r\n searchResult.DefaultUnitOfMeasure,\r\n searchResult.Price,\r\n getInventoryLabel(\r\n channelInventoryConfigurationId,\r\n searchResult.AttributeValues,\r\n searchResult.RecordId,\r\n productInventoryStatus\r\n ),\r\n cartLine?.Quantity,\r\n cartLine,\r\n undefined,\r\n undefined,\r\n productAvailability,\r\n searchResult.AttributeValues?.find(x => x.Name === attributeLocale.brand)?.TextValue,\r\n searchResult.AttributeValues?.find(x => x.Name === attributeLocale.manufacturer)?.TextValue,\r\n searchResult.PriceFailed,\r\n undefined,\r\n undefined,\r\n searchResult.Badge,\r\n searchResult.ProductPrice,\r\n searchResult.AttributeValues?.find(x => x.Name === attributeLocale.transit)?.TextValue === '1'\r\n )\r\n );\r\n\r\n productList[productList.length - 1].BasePrice = searchResult.BasePrice;\r\n });\r\n\r\n return productList;\r\n};\r\n\r\nexport const fullProducts2ProductList = (\r\n fullProducts: FullProduct[] | undefined,\r\n productAvailabilities: IProductInventoryInformation[] | undefined\r\n): ProductListProduct[] => {\r\n const productList: ProductListProduct[] = [];\r\n\r\n if (!fullProducts) {\r\n return productList;\r\n }\r\n\r\n fullProducts.map((fullProduct, index) => {\r\n let brand;\r\n let manufacturer;\r\n let transit;\r\n\r\n if ((fullProduct.ProductDetails as SimpleProductExt).Brand) {\r\n brand = (fullProduct.ProductDetails as SimpleProductExt).Brand;\r\n }\r\n\r\n if ((fullProduct.ProductDetails as SimpleProductExt).Manufacturer) {\r\n manufacturer = (fullProduct.ProductDetails as SimpleProductExt).Manufacturer;\r\n }\r\n\r\n if ((fullProduct.ProductDetails as SimpleProductExt).Transit) {\r\n transit = (fullProduct.ProductDetails as SimpleProductExt).Transit;\r\n }\r\n\r\n productList.push(\r\n new ProductListProduct(\r\n fullProduct.ProductDetails.RecordId,\r\n fullProduct.ProductDetails.ItemId,\r\n fullProduct.ProductDetails.Name,\r\n fullProduct.ProductDetails.PrimaryImageUrl,\r\n fullProduct.ProductDetails.DefaultUnitOfMeasure,\r\n fullProduct.ProductDetails.Price,\r\n productAvailabilities?.find(\r\n avail => avail.ProductAvailableQuantity.ProductId === fullProduct.ProductDetails.RecordId\r\n )?.StockLevelLabel,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n productAvailabilities?.find(avail => avail.ProductAvailableQuantity.ProductId === fullProduct.ProductDetails.RecordId),\r\n brand,\r\n manufacturer,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n transit\r\n )\r\n );\r\n });\r\n\r\n return productList;\r\n};\r\n\r\nexport const cartLines2ProductList = (\r\n cartLines: ICartlinesViewProps[],\r\n productAvailabilities: IProductInventoryInformation[] | undefined,\r\n context: ICoreContext,\r\n activePrices: ProductPrice[] | undefined\r\n): ProductListProduct[] => {\r\n const productList: ProductListProduct[] = [];\r\n\r\n if (!cartLines) {\r\n return productList;\r\n }\r\n\r\n cartLines.map((cartLine, index) => {\r\n const product = cartLine.data?.product as SimpleProductExt | undefined;\r\n /* const price = cartLine.data?.cartline.Price || 0; */\r\n const price = cartLine.data?.cartline?.NetAmountWithoutTax ?\r\n cartLine.data?.cartline.NetAmountWithoutTax / (cartLine.data?.cartline?.Quantity || 1) :\r\n cartLine.data?.cartline.Price || 0;\r\n const fallImageUrl = getFallbackImageUrl(product?.ItemId, context.request.apiSettings);\r\n const productPrice = activePrices?.find(x => x.ProductId === product?.RecordId);\r\n const availability = productAvailabilities?.find(\r\n avail => avail.ProductAvailableQuantity.ProductId === product?.RecordId\r\n );\r\n\r\n productList.push(\r\n new ProductListProduct(\r\n product?.RecordId,\r\n product?.ItemId,\r\n product?.Name,\r\n product?.PrimaryImageUrl || fallImageUrl,\r\n product?.DefaultUnitOfMeasure,\r\n price,\r\n availability?.StockLevelLabel,\r\n cartLine.data?.cartline.Quantity,\r\n cartLine.data?.cartline,\r\n cartLine.data?.cartline.DiscountAmount,\r\n cartLine.data?.cartline.NetAmountWithoutTax,\r\n availability,\r\n product?.Brand,\r\n product?.Manufacturer,\r\n undefined,\r\n undefined,\r\n product?.CategoryPaths,\r\n getDiscountBadge(productPrice),\r\n productPrice,\r\n product?.Transit\r\n )\r\n );\r\n });\r\n\r\n return productList;\r\n};\r\n\r\nexport const orderTemplateLines2ProductList = (\r\n lines: CountingListLine[],\r\n productAvailabilities: IProductInventoryInformation[] | undefined\r\n): ProductListProduct[] => {\r\n const productList: ProductListProduct[] = [];\r\n\r\n if (!lines) {\r\n return productList;\r\n }\r\n\r\n lines.map((line, index) => {\r\n let brand: string | undefined;\r\n let manufacturer: string | undefined;\r\n let categoryPaths: CategoryPath[] | undefined;\r\n let badge: string | undefined;\r\n let productPrice: ProductPrice | undefined;\r\n let transit: boolean | undefined;\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.Brand) {\r\n brand = (line.fullProduct?.ProductDetails as SimpleProductExt).Brand;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.Manufacturer) {\r\n manufacturer = (line.fullProduct?.ProductDetails as SimpleProductExt).Manufacturer;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.CategoryPaths) {\r\n categoryPaths = (line.fullProduct?.ProductDetails as SimpleProductExt).CategoryPaths;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.Badge) {\r\n badge = (line.fullProduct?.ProductDetails as SimpleProductExt).Badge;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.ProductPrice) {\r\n productPrice = (line.fullProduct?.ProductDetails as SimpleProductExt).ProductPrice;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.Transit) {\r\n transit = (line.fullProduct?.ProductDetails as SimpleProductExt).Transit;\r\n }\r\n\r\n const availability = productAvailabilities?.find(\r\n avail => avail.ProductAvailableQuantity.ProductId === line.fullProduct?.ProductDetails.RecordId\r\n );\r\n\r\n const displayOrder = line.productListLine.ExtensionProperties?.find(prop => prop.Key === 'DISPLAYORDER')?.Value?.DecimalValue;\r\n\r\n const product = new ProductListProduct(\r\n line.fullProduct?.ProductDetails.RecordId,\r\n line.fullProduct?.ProductDetails.ItemId,\r\n line.fullProduct?.ProductDetails.Name,\r\n line.fullProduct?.ProductDetails.PrimaryImageUrl,\r\n line.productListLine.UnitOfMeasure,\r\n line.fullProduct?.ProductDetails.Price,\r\n availability?.StockLevelLabel,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n availability,\r\n brand,\r\n manufacturer,\r\n undefined,\r\n displayOrder,\r\n categoryPaths,\r\n badge,\r\n productPrice,\r\n transit\r\n );\r\n\r\n product.CurrentQuantity = line.productListLine.Quantity;\r\n product.LineCreatedDateTime = line.productListLine.CreatedDateTime || line.productListLine.LastUpdated;\r\n\r\n if (typeof product.LineCreatedDateTime === 'string') {\r\n product.LineCreatedDateTime = new Date(product.LineCreatedDateTime);\r\n }\r\n\r\n product.BasePrice = line.fullProduct?.ProductDetails.BasePrice;\r\n product.PriceFailed = (line as any).PriceFailed;\r\n\r\n productList.push(product);\r\n });\r\n\r\n return productList;\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { IQueryResultSettings, ProductList } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport {\r\n OrderTemplate,\r\n getOrderTemplates,\r\n GetOrderTemplatesInput,\r\n QueryResultSettingsProxy\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getProductListCountsAsync } from '../../../actions/get-product-list-counts';\r\n\r\n/**\r\n * Input class for the GetOrderTemplates data action.\r\n */\r\nexport class GetFullOrderTemplateInput implements IActionInput {\r\n public orderTemplateId: string;\r\n\r\n public queryResultSettings: IQueryResultSettings;\r\n\r\n constructor(orderTemplateId: string, queryResultSettings: IQueryResultSettings) {\r\n this.orderTemplateId = orderTemplateId;\r\n this.queryResultSettings = queryResultSettings;\r\n }\r\n\r\n public getCacheKey = () => `GetFullOrderTemplate|${this.orderTemplateId}`;\r\n\r\n public getCacheObjectType = () => 'GetFullOrderTemplate';\r\n\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\n/**\r\n * CreateInput method for the GetOrderTemplate method.\r\n * @param inputData The input data passed to the createInput method.\r\n * @param orderTemplateId\r\n */\r\nexport const createGetFullOrderTemplateInput = (inputData: ICreateActionContext, orderTemplateId: string): GetFullOrderTemplateInput => {\r\n const { requestContext } = inputData;\r\n if (!requestContext.user.isAuthenticated) {\r\n throw new Error('Unable to get full order templates. User is not authenticated.');\r\n }\r\n const queryResultSettings: IQueryResultSettings = QueryResultSettingsProxy.fromInputData(inputData).QueryResultSettings;\r\n queryResultSettings.count = true;\r\n\r\n return new GetFullOrderTemplateInput(orderTemplateId, queryResultSettings);\r\n};\r\n\r\n/**\r\n * The action method for the GetFullOrderTemplate data action.\r\n * @param input The action input.\r\n * @param ctx The action context.\r\n */\r\nexport async function getFullOrderTemplateAction(input: GetFullOrderTemplateInput, ctx: IActionContext): Promise {\r\n if (!ctx.requestContext.user.isAuthenticated) {\r\n throw new Error('Unable to get full order template. User is not authenticated.');\r\n }\r\n\r\n const inputParams = new GetOrderTemplatesInput(input.orderTemplateId);\r\n const productLists: ProductList[] = await getOrderTemplates(inputParams, ctx);\r\n\r\n if (!productLists || productLists.length !== 1) {\r\n throw new Error('Unable to get full order template. Order template was not found.');\r\n }\r\n\r\n /* const inputLines = new GetPaginatedOrderTemplateLinesInput(productLists[0].Id, input.queryResultSettings);\r\n inputLines.getPrice = false;\r\n inputLines.getRating = false;\r\n const linesState = await getPaginatedOrderTemplateLinesAction(inputLines, ctx);\r\n return new OrderTemplate(productLists[0], linesState.lines, linesState.totalCount); */\r\n\r\n const count = (await getProductListCountsAsync(ctx, [productLists[0].Id])).find(x => x.ProductListId === productLists[0].Id)?.RowCount;\r\n\r\n return new OrderTemplate(productLists[0], [], count || 0);\r\n}\r\n\r\n/**\r\n * The GetFullOrderTemplate Data Action\r\n * Returns order templates.\r\n */\r\nexport const getFullOrderTemplateActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/get-full-order-template',\r\n action: >getFullOrderTemplateAction,\r\n input: createGetFullOrderTemplateInput\r\n});\r\n\r\nexport default getFullOrderTemplateActionDataAction;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport { convertToString, IQueryResultSettings } from '@msdyn365-commerce/retail-proxy';\nimport { getProductListLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport {\n ArrayExtensions,\n IOrderTemplateLinesState,\n OrderTemplateLine,\n ProductDetailsCriteria,\n QueryResultSettingsProxy\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { LocalCache } from '../shared-utils/local-cache';\nimport { observable } from 'mobx';\nimport { getByIdsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\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 public getPrice: boolean = true;\n public getRating: boolean = true;\n public localCache: LocalCache | undefined;\n\n constructor(\n orderTemplateId: string,\n queryResultSettings: IQueryResultSettings,\n searchText?: string,\n getPrice: boolean = true,\n getRating: boolean = true,\n localCache?: LocalCache\n ) {\n this.orderTemplateId = orderTemplateId;\n this.queryResultSettings = queryResultSettings;\n this.searchText = searchText || '';\n this.getPrice = getPrice;\n this.getRating = getRating;\n this.localCache = localCache;\n }\n\n public getCacheKey = () =>\n `GetPaginatedOrderTemplateLines|${this.orderTemplateId}|${convertToString(this.queryResultSettings)}|${\n this.searchText\n }|${convertToString(this.getPrice)}|${convertToString(this.getRating)}`;\n\n public getCacheObjectType = () => 'GetPaginatedOrderTemplateLines';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetOrderTemplate method.\n * @param inputData The input data passed to the createInput method.\n * @param orderTemplateId\n * @param searchText\n */\nexport const createGetPaginatedOrderTemplateLinesInput = (\n inputData: ICreateActionContext,\n orderTemplateId: string,\n searchText?: string,\n localCache?: LocalCache\n): GetPaginatedOrderTemplateLinesInput => {\n const queryResultSettings: IQueryResultSettings = QueryResultSettingsProxy.fromInputData(inputData).QueryResultSettings;\n queryResultSettings.count = true;\n return new GetPaginatedOrderTemplateLinesInput(orderTemplateId, queryResultSettings, searchText, true, true, localCache);\n};\n\nexport const getProductDetailsCriteriaFromActionInput = (inputData: GetPaginatedOrderTemplateLinesInput): ProductDetailsCriteria => {\n return {\n getPrice: inputData.getPrice ?? true,\n getRating: inputData.getRating ?? true\n };\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(\n input: GetPaginatedOrderTemplateLinesInput,\n context: IActionContext\n): 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 {\n callerContext: context,\n queryResultSettings: input.queryResultSettings,\n bypassCache: 'get'\n },\n input.orderTemplateId,\n input.searchText\n );\n const productListLines = await promise;\n\n if (ArrayExtensions.hasElements(productListLines)) {\n orderTemplateLinesState.totalCount = promise.metadata.count || productListLines.length;\n\n let ids = productListLines.map(x => x.ProductId).filter(Boolean) as number[];\n let simpleProducts = await input.localCache?.getProducts(ids);\n\n if (!simpleProducts || simpleProducts.length !== ids.length) {\n // Filter out cached prices\n ids = ids.filter(x => !simpleProducts?.find(y => y.RecordId === x));\n const moreSimpleProducts = await getByIdsAsync(\n { callerContext: context },\n context.requestContext.apiSettings.channelId,\n ids,\n null,\n context.requestContext.apiSettings.catalogId);\n\n if (!simpleProducts) {\n simpleProducts = observable.array();\n }\n simpleProducts.push(...moreSimpleProducts);\n\n if (input.localCache) {\n await input.localCache.putProducts(simpleProducts);\n }\n }\n\n productListLines.forEach(listLine => {\n if (listLine.ProductId) {\n orderTemplateLinesState.lines.push(new OrderTemplateLine(listLine));\n }\n });\n\n if (ArrayExtensions.hasElements(simpleProducts)) {\n orderTemplateLinesState.lines.forEach(line => {\n const simpleProduct = simpleProducts!.find(\n product => product.RecordId === line.productListLine.ProductId\n );\n if (!simpleProduct) {\n context.telemetry.error(\n '[getPaginatedOrderTemplateLinesAction] Unable to find product info for an order template line.'\n );\n return;\n }\n line.fullProduct = { ProductDetails: simpleProduct };\n });\n\n return orderTemplateLinesState;\n }\n context.trace(orderTemplateLinesState.lines.length.toString());\n return orderTemplateLinesState;\n }\n\n return orderTemplateLinesState;\n}\n\n/**\n * The GetPaginatedOrderTemplateLines Data Action\n * Returns order templates.\n */\nexport const getPaginatedOrderTemplateLinesActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/order-templates/get-paginated-order-template-lines',\n action: getPaginatedOrderTemplateLinesAction as IAction,\n input: createGetPaginatedOrderTemplateLinesInput\n});\n\nexport default getPaginatedOrderTemplateLinesActionDataAction;\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICreateActionContext,\r\n IRequestContext,\r\n getCatalogId\r\n} from '@msdyn365-commerce/core';\r\nimport { AsyncResult, CategoryPathResult, IQueryResultSettings, ProductPrice, ProductSearchResult, ProjectionDomain } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n buildCacheKeyWithUrlTokens,\r\n IQueryResultSettingsModuleConfig,\r\n OrderTemplate,\r\n QueryResultSettingsProxy,\r\n generateImageUrl\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n getFullOrderTemplateActionDataAction as getFullOrderTemplate,\r\n GetFullOrderTemplateInput\r\n} from './get-dlvry-full-order-template';\r\nimport { getPaginatedOrderTemplateLinesAction, GetPaginatedOrderTemplateLinesInput } from '../../../actions/get-paginated-order-template-lines';\r\nimport { getProductRefinerHierarchy } from '../../dlvry-search-result-container/actions/get-product-refiner-hierarchy';\r\nimport { getActivePricesAsync, getCategoryPathsAsync, searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { getLocale } from '../../../shared-utils/attributes/locale';\r\nimport { getDiscountBadge } from '../../../shared-utils/badge-utils';\r\nimport { SimpleProductExt } from '../../../shared-utils/types';\r\n\r\n/**\r\n * Input class for getActiveOrderTemplateLines data action.\r\n */\r\nexport class ActiveOrderTemplateLinesInput implements IActionInput {\r\n public requestContext: IRequestContext;\r\n\r\n public orderTemplateId: string;\r\n\r\n public queryResultSettings: IQueryResultSettings;\r\n\r\n constructor(requestContext: IRequestContext, config: IQueryResultSettingsModuleConfig) {\r\n if (!requestContext.query?.id) {\r\n throw new Error('Failed to get order template id from the query.');\r\n }\r\n if (!config) {\r\n throw new Error('Failed to get order template module configuration');\r\n }\r\n this.orderTemplateId = requestContext.query.id;\r\n this.queryResultSettings = QueryResultSettingsProxy.fromModuleData(requestContext, config).QueryResultSettings;\r\n\r\n this.queryResultSettings.count = true;\r\n this.requestContext = requestContext;\r\n }\r\n\r\n public getCacheKey = (): string => `${buildCacheKeyWithUrlTokens('ActiveOrderTemplateLines', this.requestContext)}-${this.orderTemplateId}`;\r\n\r\n public getCacheObjectType = (): string => 'ActiveOrderTemplateLines';\r\n\r\n public dataCacheType = (): CacheType => 'none';\r\n\r\n public shouldCacheOutput = () => false;\r\n}\r\n\r\n/**\r\n * Calls the Retail API and returns a ProductList object based on the passed GetCartInput.\r\n * @param input\r\n * @param context\r\n */\r\nexport async function getActiveOrderTemplateLines(input: ActiveOrderTemplateLinesInput, context: IActionContext): Promise {\r\n const orderTemplate = await getFullOrderTemplate(new GetFullOrderTemplateInput(input.orderTemplateId, input.queryResultSettings), context);\r\n const inputLines = new GetPaginatedOrderTemplateLinesInput(orderTemplate.productList.Id, {});\r\n inputLines.getPrice = false;\r\n inputLines.getRating = false;\r\n const lines = await getPaginatedOrderTemplateLinesAction(inputLines, context);\r\n\r\n // Filter out products that are out of assortment and sort by name\r\n orderTemplate.orderTemplateLines = lines.lines\r\n .filter((line) => line.fullProduct);\r\n // Update total lines after filtering\r\n orderTemplate.totalLines = orderTemplate.orderTemplateLines.length;\r\n\r\n const catalogId = getCatalogId(context.requestContext);\r\n const projectDomain: ProjectionDomain = { ChannelId: +context.requestContext.apiSettings.channelId, CatalogId: catalogId };\r\n const ids = orderTemplate.orderTemplateLines.map((line) => line.fullProduct?.ProductDetails.RecordId).filter(Boolean) as number[];\r\n\r\n let refinersPromise: Promise | undefined;\r\n let attributesPromise: AsyncResult | undefined;\r\n let productPricesPromise: Promise | undefined;\r\n let categoryPathsPromise: Promise | undefined;\r\n\r\n if (ids.length > 0) {\r\n refinersPromise = getProductRefinerHierarchy(\r\n {\r\n Ids: ids,\r\n Context: {\r\n ChannelId: input.requestContext.apiSettings.channelId,\r\n CatalogId: input.requestContext.apiSettings.catalogId\r\n }\r\n },\r\n input.queryResultSettings,\r\n context\r\n );\r\n\r\n attributesPromise = searchByCriteriaAsync({ callerContext: context }, {\r\n Context: {\r\n ChannelId: input.requestContext.apiSettings.channelId,\r\n CatalogId: input.requestContext.apiSettings.catalogId\r\n },\r\n Ids: ids,\r\n IncludeAttributes: true\r\n });\r\n\r\n // Get available cached active prices. If not available client will have to retrieve it\r\n productPricesPromise = getActivePricesAsync({ callerContext: context },\r\n projectDomain,\r\n lines.lines.map((line) => line.fullProduct?.ProductDetails.RecordId).filter(Boolean).slice(0, input.queryResultSettings.Paging?.Top || 10) as number[],\r\n new Date(),\r\n null,\r\n null,\r\n true,\r\n false,\r\n false);\r\n\r\n categoryPathsPromise = getCategoryPathsAsync({ callerContext: context },\r\n context.requestContext.apiSettings.channelId,\r\n context.requestContext.apiSettings.catalogId,\r\n ids.map(id => ({ ProductId: id }))\r\n );\r\n }\r\n\r\n const [refiners, attributes, productPrices, categoryPaths] = await Promise.all([refinersPromise, attributesPromise, productPricesPromise, categoryPathsPromise]);\r\n\r\n (orderTemplate as any).refiners = refiners;\r\n\r\n orderTemplate.orderTemplateLines.forEach((line) => {\r\n if (!line.fullProduct) {\r\n return;\r\n }\r\n\r\n const price = productPrices?.find((price) => price.ProductId === line.fullProduct?.ProductDetails.RecordId);\r\n const discountBadge = getDiscountBadge(price);\r\n\r\n // Set Price to 0 if price wasn't found in cache and client will have to retrieve it\r\n line.fullProduct.ProductDetails.Price = price?.CustomerContextualPrice || 0;\r\n line.fullProduct.ProductDetails.BasePrice = price?.BasePrice || 0;\r\n\r\n const attributeLocale = getLocale(context.requestContext.locale);\r\n const brand = attributes?.find(x => x.RecordId === line.fullProduct!.ProductDetails.RecordId)?.AttributeValues?.find(x => x.Name === attributeLocale.brand)?.TextValue;\r\n const manufacturer = attributes?.find(x => x.RecordId === line.fullProduct!.ProductDetails.RecordId)?.AttributeValues?.find(x => x.Name === attributeLocale.manufacturer)?.TextValue;\r\n const transit = attributes?.find(x => x.RecordId === line.fullProduct!.ProductDetails.RecordId)?.AttributeValues?.find(x => x.Name === attributeLocale.transit)?.TextValue;\r\n\r\n if (brand) {\r\n (line.fullProduct.ProductDetails as SimpleProductExt).Brand = brand;\r\n }\r\n\r\n if (manufacturer) {\r\n (line.fullProduct.ProductDetails as SimpleProductExt).Manufacturer = manufacturer;\r\n }\r\n\r\n const categoryPath = categoryPaths?.find(x => x.ProductId === line.fullProduct?.ProductDetails.RecordId);\r\n\r\n if (categoryPath) {\r\n (line.fullProduct.ProductDetails as SimpleProductExt).CategoryPaths = categoryPath.CategoryPath;\r\n }\r\n\r\n if (discountBadge) {\r\n (line.fullProduct.ProductDetails as SimpleProductExt).Badge = discountBadge;\r\n }\r\n\r\n if (price) {\r\n (line.fullProduct.ProductDetails as SimpleProductExt).ProductPrice = price;\r\n }\r\n\r\n if (transit) {\r\n (line.fullProduct.ProductDetails as SimpleProductExt).Transit = transit === '1';\r\n }\r\n\r\n // Get primary image url from attributes search results if it's not already set\r\n if (!line.fullProduct.ProductDetails.PrimaryImageUrl) {\r\n let primaryImageUrl = attributes?.find(x => x.RecordId === line.fullProduct!.ProductDetails.RecordId)?.PrimaryImageUrl;\r\n if (primaryImageUrl) {\r\n primaryImageUrl = generateImageUrl(primaryImageUrl, context.requestContext.apiSettings);\r\n }\r\n\r\n line.fullProduct.ProductDetails.PrimaryImageUrl = primaryImageUrl;\r\n }\r\n });\r\n return orderTemplate;\r\n}\r\n\r\nexport const getActiveOrderTemplateLinesDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/order-template/order-template/get-order-template-lines',\r\n action: >getActiveOrderTemplateLines,\r\n input: (context: ICreateActionContext) => {\r\n if (!context.config) {\r\n throw new Error('Failed to get order template module configuration');\r\n }\r\n return new ActiveOrderTemplateLinesInput(context.requestContext, context.config);\r\n }\r\n});\r\n\r\nexport default getActiveOrderTemplateLinesDataAction;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { IQueryResultSettings, ProductRefiner, ProductSearchCriteria } from '@msdyn365-commerce/retail-proxy';\r\nimport { getProductSearchRefinersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\n/**\r\n * Uses Bulk refiner API to get refiners and child refiner values.\r\n * @param searchCriteria Product search criteria.\r\n * @param maxItems Max items.\r\n * @param queryResultSettings\r\n * @param ctx Action context.\r\n */\r\nexport async function getProductRefinerHierarchy(\r\n searchCriteria: ProductSearchCriteria,\r\n queryResultSettings: IQueryResultSettings,\r\n ctx: IActionContext\r\n): Promise {\r\n const productRefiners = await getProductSearchRefinersAsync({ callerContext: ctx, queryResultSettings }, searchCriteria);\r\n\r\n if (!productRefiners) {\r\n ctx.trace('[getRefinersByCriteriaAction] returned no refiners');\r\n return [];\r\n }\r\n\r\n const result = (productRefiners || []).map((productRefiner: ProductRefiner) => productRefiner);\r\n\r\n if (result.length === 0) {\r\n ctx.trace('[getRefinersByCriteriaAction] returned no IProductRefinerHierarchy objects');\r\n return [];\r\n }\r\n\r\n return result;\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 { ProductPrice } from \"@msdyn365-commerce/retail-proxy\";\r\n\r\nexport function getDiscountBadge(productPrice: ProductPrice | undefined): string | undefined {\r\n if (!productPrice || !productPrice.DiscountLines || productPrice.DiscountLines.length === 0) {\r\n return;\r\n }\r\n\r\n const discountLineWithBadge = productPrice.DiscountLines.find(x => {\r\n const matches = x.OfferName?.toLowerCase().match(/\\{(.*?)\\}/i) || '';\r\n const parts = matches.length > 1 ? matches[1].split(';').map(x => x.trim()) : undefined;\r\n return parts?.find(x => x.startsWith('badge:'));\r\n });\r\n const offerName = discountLineWithBadge?.OfferName;\r\n\r\n if (!offerName) {\r\n return undefined;\r\n }\r\n\r\n const badge = /\\{.*Badge\\s*:\\s*(.*?)[};]/i.exec(offerName);\r\n\r\n if (badge && badge.length > 1) {\r\n return badge[1].trim();\r\n }\r\n\r\n return undefined;\r\n}"],"names":["ProductListCountExtensionClass","constructor","odataObject","this","ProductListId","RowCount","ExtensionProperties","undefined","i","length","className","substr","lastIndexOf","concat","EntityClasses","async","getProductListCountsAsync","context","productListIds","request","DataServiceQuery","createDataServiceRequestForOperation","bypassCache","returnEntity","getProductListCountsInput","callActionOrExecute","generateAddToOrderTemplateDialogResources","locale","addToOrderTemplateHeader","addToOrderTemplate","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","generateOrderTemplateNameDialogResources","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","freePriceText","priceFree","originalPriceText","currentPriceText","generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","ProductListRow","React","props","_props$data$product$C","super","getLocale","cartUrl","getUrlSync","actionContext","_handleDragStart","e","stopPropagation","product","data","offsetX","clientX","target","getBoundingClientRect","left","offsetY","clientY","top","dataTransfer","setData","JSON","stringify","ProductName","Name","ProductRecordId","RecordId","ProductUnitOfMeasure","DefaultUnitOfMeasure","setDragImage","parentElement","effectAllowed","_renderPrice","price","user","isAuthenticated","PriceFailed","resources","priceErrorText","basePrice","BasePrice","PriceComponent","ProductPrice","CustomerContextualPrice","id","typeName","discountPercentageSide","_renderCartCount","baseClassName","_cart$cart$CartLines","cart","cartQuantity","CartLines","filter","x","ProductId","reduce","acc","val","Quantity","cartCountId","tooltipString","inCartTooltipText","tooltipText","format","onMouseOver","setState","showCartCountTooltip","onMouseOut","onTouchStart","Tooltip","isOpen","state","_getAvailabilityClassName","showAvailability","Availability","IsProductAvailable","StockLevelCode","_getOrderTemplateBuyButton","working","text","cartButton","buy","disabled","disableBuyButton","orderQuantity","Button","title","onClick","_addItemToCart","_getCartButton","cartQueue","classnames","icon","clickHandler","action","add","_product$CartLine","_addItemToCartAlways","_removeItemFromCart","CartLine","LineId","baseProps","buyAlwaysAdd","Object","assign","remove","update","disabledTooltip","_getSearchResultOrderQuantity","readOnly","simpleProduct","UnitOfMeasure","unitOfMeasure","ProductListOrderQuantity","allowZero","moduleType","_objectSpread","unitConversions","currentCount","onChange","_onUpdateQuantity","breakoff","initialBreakoffEnabled","onBreakoffChange","enabled","_this$props$onBreakof","_this$props","call","inputQuantityAriaLabel","incrementButtonAriaLabel","decrementButtonAriaLabel","disableQuantityInput","min","newQuantity","cartViewProps","selectOnQuantityChange","isSelected","onSelectCartHandler","onUpdateQuantity","cartlines","line","find","cartLine","_cartLine$data","cartline","quantityOnChange","CurrentQuantity","_renderProductImage","heading","image","fallbackImage","lazyLoadImages","_context$request$app","defaultImageSettings","viewports","xs","w","h","q","qe","lg","xl","disableLazyLoad","Boolean","lazyload","quality","fallImageUrl","getFallbackImageUrl","ItemId","apiSettings","app","config","OmniChannelMedia","Image","requestContext","altText","src","fallBackSrc","gridSettings","imageSettings","loadFailureBehavior","fetchPriority","ImageFetchPriority","High","tabIndex","_getAddToCartActionButton","buttonText","_getRemoveActionButton","_getWishlistActionButton","_removeItem","removeItemClickHandler","_cartLine$data2","wishlistItemsProps","_this$props$wishlistI","wishlists","wishlistLineId","getWishlistLineIdFromProductId","result","removeLinesAsync","callerContext","Id","then","commerceList","window","location","reload","catch","error","_error$data","_error$data2","toast","header","toastStrings","errorHeader","footer","CorrelationId","type","autoClose","position","canClose","showProgress","orderTemplateViewProps","orderTemplate","telemetry","maxWaitTimeInMilliSeconds","orderTemplateLines","productListLine","token","removeProductListLinesAsync","_this$props$orderTemp","_this$props$orderTemp2","_line$fullProduct","Promise","resolve","setTimeout","splice","findIndex","productList","ProductListLines","totalLines","fullProduct","ProductDetails","ActiveOrderTemplateLinesInput","warning","productId","_this$props$wishlistI2","CommerceListLines","foundWishlistItem","commerceListLine","moveItemToWishlist","catalogId","productInputs","productInput","ProductInput","push","getSimpleProducts","customer","getCustomerAccount","getWishlistByCustomerId","createGetByCustomerInput","callAddWishlistLine","wishlistName","defaultWishlistName","AccountNumber","listData","CustomerId","CommerceListTypeValue","createCommerceListAsync","_error$data3","_error$data4","wishlistId","createdCommerceList","addLinesAsync","buildWishlistLine","_error$data5","_error$data6","customerInput","GetCustomerInput","getCustomer","_simpleProduct$Behavi2","_cart$cart$CartLines2","getCartStateData","GetCartStateDataInput","status","console","log","validationError","userHasAccess","validateAlcoholLicenseAsync","CatalogId","ProductIds","ValidationResult","noAccessToProduct","onBuyValidate","_simpleProduct$Behavi","Behavior","DefaultQuantity","isValid","message","addProductToCartInput","count","customPrice","Price","updateCartLineQuantity","cartLineId","addProductToCart","_simpleProduct$Name","msg","productsAddedToCart","replace","toString","link","linkLabel","goToCart","_this$props$onSelectC","_this$props2","_result$errorDetails$","_result$errorDetails","err","validationResults","LocalizedMessage","errorDetails","reason","_reason$data","_reason$data2","resetQuantiyOnSuccess","_simpleProduct$Behavi4","_simpleProduct$Behavi3","_simpleProduct$Name2","_this$props$onUpdateQ","_this$props3","_this$props$onUpdateQ2","_this$props4","_result$errorDetails$2","_result$errorDetails2","_reason$data3","_reason$data4","errorCartNotFound","removeCartLines","cartLineIds","_product$Name","productsRemovedFromCart","_result$errorDetails$3","_result$errorDetails3","allergensModal","productInformationModal","componentDidMount","reaction","_this$props$data$cart","forceUpdate","_this$props$data$cart2","_product$CartLine$Qua","_product$CartLine2","_cart$cart$CartLines3","renderProductComparisonButton","productComparisonButton","componentDidUpdate","prevProps","prevState","snapshot","_this$props$data$prod","resetSelectedQuantities","render","_product$Name2","_product$Availability","_product$Availability2","_this$props$data$unit","_this$props$data$prod3","actionsAvailable","allowMultiSelect","draggable","showPrices","onUpdateOrderTemplates","PrimaryImageUrl","productUrl","getProductPageUrlSync","availabilityClass","availabilityText","StockLevelLabel","conversions","_this$props$data$prod2","FromUnitOfMeasureSymbol","kilogramConversion","getKilogramConversion","pcsConversion","getPcsConversion","key","isDragOver","onDrop","_this$props$onDrop","_this$props5","onDragOver","disableReorder","types","includes","_this$props$onDragOve","_this$props6","preventDefault","rect","currentTarget","overOrUnder","height","onDragStart","onDragEnd","_this$props$onDragOve2","_this$props7","checked","href","AllergensModal","onClose","allergens","AddToOrderTemplateComponent","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","moduleId","customerInformation","disableButton","quantity","IsB2b","showButtonTooltip","onSuccess","retrieveOrderTemplates","ProductInformationModal","productInformationTitle","Badge","DiscountBadge","badge","size","Transit","transitTooltip","style","verticalAlign","Brand","Manufacturer","removeAction","getRoundedFactor","Factor","showTotalPrices","showCartCount","addToCartAction","addToWishlistAction","getCatalogId","values","some","removeButtonText","_this$props$onMove","_this$props8","onMove","_this$props$onMove2","_this$props9","ProductListProduct","recordId","itemId","name","primaryImageUrl","defaultUnitOfMeasure","inventoryLabel","currentQuantity","DiscountAmount","LineAmount","availability","brand","manufacturer","priceFailed","displayOrder","categoryPaths","productPrice","transit","InventoryLabel","DisplayOrder","CategoryPaths","ProductListComponent","_ref","products","simpleProducts","productErrors","allowBackNavigation","telemetryContent","quickviewSlot","channelInventoryConfigurationId","isLoading","isPriceMinMaxEnabled","disableBuyButtons","showGroups","onResetSelectedQuantities","validatedProductAccess","productsDimensionAvailabilities","breakoffProducts","selectedProducts","selectedProductsProp","onUpdateSelection","setSelectedProducts","useState","isAllSelected","isDisabled","orderTemplates","setOrderTemplates","dragOverProduct","setDragOverProduct","dragOverUnder","setDragOverUnder","useMemo","PQueue","concurrency","useEffect","document","querySelectorAll","forEach","element","setAttribute","getAttribute","keys","Number","isNaN","every","inputs","keyDownHandler","event","index","shiftKey","item","select","addEventListener","removeEventListener","checkIsAllSelect","selectedCartItem","prv","updateOrderTemplatesAsync","newOrderTemplates","newOrderTemplate","OrderTemplate","queryResultSettings","QueryResultSettingsProxy","fromInputData","QueryResultSettings","input","GetOrderTemplatesInput","getOrderTemplates","map","handleDrop","overUnder","dragData","parse","getData","dragProduct","targetProduct","grouped","RequestedDeliveryDate","Date","getTime","createdGroupFor","getCartState","emptyCartButtonText","cartState","lineItemIdsToRemove","_cartLine$data3","removeSelectedToCartText","_listItem","firstItem","querySelector","margin","parseFloat","getComputedStyle","marginBottom","elementFromPoint","listItem","tagName","items","deliveryDateLabel","cultureFormatter","formatDate","day","month","_productErrors$find","_validatedProductAcce","changeSelection","Error","has","HasAccess","productSearchResults2ProductList","searchResults","productInventoryStatus","attributeLocale","searchResult","_searchResult$Attribu","_searchResult$Attribu2","_searchResult$Attribu3","productAvailability","ProductAvailableQuantity","getInventoryLabel","attributeValues","shippingInventory","shipping","ArrayExtensions","hasElements","inventoryAttribute","attribute","TextValue","AttributeValues","fullProducts2ProductList","fullProducts","productAvailabilities","_productAvailabilitie","avail","cartLines2ProductList","cartLines","activePrices","_cartLine$data4","_cartLine$data5","_cartLine$data6","_cartLine$data7","_cartLine$data8","_cartLine$data9","_cartLine$data10","_cartLine$data11","_cartLine$data12","NetAmountWithoutTax","getDiscountBadge","orderTemplateLines2ProductList","lines","_line$fullProduct3","_line$fullProduct5","_line$fullProduct7","_line$fullProduct9","_line$fullProduct11","_line$productListLine","_line$fullProduct14","_line$fullProduct15","_line$fullProduct16","_line$fullProduct17","_line$fullProduct18","_line$fullProduct19","_line$fullProduct2","_line$fullProduct4","_line$fullProduct6","_line$fullProduct8","_line$fullProduct10","_line$fullProduct12","_line$fullProduct13","prop","Key","Value","DecimalValue","LineCreatedDateTime","CreatedDateTime","LastUpdated","GetFullOrderTemplateInput","orderTemplateId","getCacheKey","getCacheObjectType","dataCacheType","getFullOrderTemplateActionDataAction","createObservableDataAction","ctx","_await$getProductList","inputParams","productLists","createGetFullOrderTemplateInput","inputData","GetPaginatedOrderTemplateLinesInput","searchText","getPrice","arguments","getRating","localCache","convertToString","getPaginatedOrderTemplateLinesAction","orderTemplateLinesState","totalCount","promise","getProductListLinesAsync","productListLines","_input$localCache","metadata","ids","getProducts","_simpleProducts","y","moreSimpleProducts","getByIdsAsync","channelId","observable","array","putProducts","listLine","OrderTemplateLine","trace","createGetPaginatedOrderTemplateLinesInput","_requestContext$query","buildCacheKeyWithUrlTokens","shouldCacheOutput","query","fromModuleData","getActiveOrderTemplateLines","getFullOrderTemplate","inputLines","projectDomain","ChannelId","refinersPromise","attributesPromise","productPricesPromise","categoryPathsPromise","_input$queryResultSet","getProductRefinerHierarchy","Ids","Context","searchByCriteriaAsync","IncludeAttributes","getActivePricesAsync","slice","Paging","Top","getCategoryPathsAsync","refiners","attributes","productPrices","all","_attributes$find","_attributes$find2","_attributes$find3","discountBadge","categoryPath","CategoryPath","_attributes$find4","generateImageUrl","getActiveOrderTemplateLinesDataAction","searchCriteria","productRefiners","getProductSearchRefinersAsync","productRefiner","langOrContext","nbNO","enUS","DiscountLines","discountLineWithBadge","_x$OfferName","matches","OfferName","toLowerCase","match","parts","split","trim","startsWith","offerName","exec"],"sourceRoot":""}