{"version":3,"file":"static/js/a59ed87f043d911338e0.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, 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\nimport { toast, IToastViewProps, toasts } 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\nimport { getTemperatureZoneIcon } from '../../shared-utils/attributes/get-temperature-zone';\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 wishlists?: CommerceList[];\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 const temperatureZoneIcon = product.TemperatureZone ? getTemperatureZoneIcon(this.props.context, product.TemperatureZone) : undefined;\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 {actionsAvailable?.addToWishlistAction && this._getWishlistActionButton()}\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?.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 = (): React.ReactNode => {\r\n const { resources } = this.props;\r\n const { product, wishlists } = this.props.data;\r\n const isWishlisted = wishlists?.[0]?.CommerceListLines?.some(x => x.ProductId === product.RecordId);\r\n const buttonText = isWishlisted\r\n ? resources.removeFromWishlistText || 'Fjern fra huskelisten'\r\n : resources.addToWishlistText || 'Legg til i huskelisten';\r\n const onClick = isWishlisted ? this.removeItemFromWishlist : this.moveItemToWishlist;\r\n\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 const footer = error?.data?.CorrelationId ? `Correlation Id: ${error?.data?.CorrelationId}` : undefined;\r\n toasts.error(this.locale.toastStrings.errorHeader, error, { footer });\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 if (context.request.user.isAuthenticated) {\r\n const customer = await this.getCustomerAccount();\r\n\r\n let wishlists = this.props.data.wishlists;\r\n\r\n if (!wishlists) {\r\n wishlists = await getWishlistByCustomerId(createGetByCustomerInput({}, null), context.actionContext);\r\n }\r\n\r\n if (!wishlists || wishlists.length === 0) {\r\n const wishlistName = this.props.defaultWishlistName || 'My wishlist';\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(product.RecordId!, commerceList.Id);\r\n } catch (err) {\r\n const error = err as unknown as any;\r\n const footer = error?.data?.CorrelationId ? `Correlation Id: ${error?.data?.CorrelationId}` : undefined;\r\n toasts.error(this.locale.toastStrings.errorHeader, error, { footer });\r\n }\r\n }\r\n } else {\r\n await this.callAddWishlistLine(product.RecordId!, wishlists[0].Id);\r\n\r\n toast({\r\n text: `${product.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 removeItemFromWishlist = 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 || !context.request.user.isAuthenticated) {\r\n return Promise.resolve();\r\n }\r\n\r\n let wishlists = this.props.data.wishlists;\r\n\r\n if (!wishlists) {\r\n wishlists = await getWishlistByCustomerId(createGetByCustomerInput({}, null), context.actionContext);\r\n }\r\n\r\n if (wishlists.length > 0) {\r\n const commerceLineToRemove = wishlists[0].CommerceListLines?.find(x => x.ProductId === product.RecordId);\r\n const updatedCommerceList = await removeLinesAsync({ callerContext: context.actionContext },\r\n wishlists[0].Id,\r\n [commerceLineToRemove!]);\r\n context.actionContext.update(createGetByCustomerInput({}, null), [updatedCommerceList]);\r\n\r\n toast({\r\n text: `${product.Name} fjernet fra 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 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 (err) {\r\n const error = err as unknown as any;\r\n const footer = error?.data?.CorrelationId ? `Correlation Id: ${error?.data?.CorrelationId}` : undefined;\r\n toasts.error(this.locale.toastStrings.errorHeader, error, { footer });\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 const quantity = this.state.orderQuantity || (this.props.initialBreakoffEnabled\r\n ? 1\r\n : simpleProduct.Behavior?.MultipleOfQuantity || 1);\r\n\r\n if (userHasAccess && this.props.onBuyValidate) {\r\n const result = await this.props.onBuyValidate(\r\n product,\r\n quantity\r\n );\r\n userHasAccess = result.isValid;\r\n validationError = result.message;\r\n }\r\n\r\n if (userHasAccess !== true) {\r\n toasts.error(this.locale.toastStrings.errorHeader, validationError || 'Unknown error');\r\n return Promise.resolve();\r\n }\r\n\r\n const addProductToCartInput = {\r\n product: simpleProduct,\r\n count: quantity,\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 toAddCount = (!cartLine || !cartLine.LineId)\r\n ? addProductToCartInput.count\r\n : quantity;\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) + toAddCount\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}', toAddCount.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 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 toasts.error(this.locale.toastStrings.errorHeader, text);\r\n }\r\n }\r\n catch (err) {\r\n const error = err as unknown as any;\r\n const footer = error?.data?.CorrelationId ? `Correlation Id: ${error?.data?.CorrelationId}` : undefined;\r\n toasts.error(this.locale.toastStrings.errorHeader, error, { footer });\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 const quantity = this.state.orderQuantity || (this.props.initialBreakoffEnabled\r\n ? 1\r\n : simpleProduct.Behavior?.MultipleOfQuantity || 0);\r\n\r\n if (userHasAccess && this.props.onBuyValidate) {\r\n const result = await this.props.onBuyValidate(\r\n product,\r\n quantity\r\n );\r\n userHasAccess = result.isValid;\r\n validationError = result.message;\r\n }\r\n\r\n if (userHasAccess !== true) {\r\n toasts.error(this.locale.toastStrings.errorHeader, validationError || 'Unknown error');\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: quantity,\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: this.state.orderQuantity });\r\n if (result.status === \"SUCCESS\") {\r\n const msg: IToastViewProps = {\r\n text: this.locale.toastStrings.productsAddedToCart\r\n .replace('{0}', quantity.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 (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 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 toasts.error(this.locale.toastStrings.errorHeader, text);\r\n }\r\n }\r\n catch (err) {\r\n const error = err as unknown as any;\r\n const footer = error?.data?.CorrelationId ? `Correlation Id: ${error?.data?.CorrelationId}` : undefined;\r\n toasts.error(this.locale.toastStrings.errorHeader, error, { footer });\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 toasts.error(this.locale.toastStrings.errorHeader, this.locale.toastStrings.errorCartNotFound);\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 const 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 toasts.error(this.locale.toastStrings.errorHeader, text);\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, CommerceList, 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\nimport { getTemperatureZone } from '../../shared-utils/attributes/get-temperature-zone';\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 public TemperatureZone?: string | 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 temperatureZone?: string | 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 this.TemperatureZone = temperatureZone;\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 addToWishlistText?: string;\r\n removeFromWishlistText?: 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 wishlists?: CommerceList[];\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 wishlists,\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 wishlists\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 getTemperatureZone(context.request.locale, searchResult.AttributeValues)\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 let temperatureZone;\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 if ((fullProduct.ProductDetails as SimpleProductExt).TemperatureZone) {\r\n temperatureZone = (fullProduct.ProductDetails as SimpleProductExt).TemperatureZone;\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 temperatureZone\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 product?.TemperatureZone\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 let temperatureZone: string | 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 if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.TemperatureZone) {\r\n temperatureZone = (line.fullProduct?.ProductDetails as SimpleProductExt).TemperatureZone;\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 temperatureZone\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\nimport { getTemperatureZone } from '../../../shared-utils/attributes/get-temperature-zone';\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 const temperatureZone = getTemperatureZone(context.requestContext.locale, attributes?.find(x => x.RecordId === line.fullProduct!.ProductDetails.RecordId)?.AttributeValues);\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 if (temperatureZone) {\r\n (line.fullProduct.ProductDetails as SimpleProductExt).TemperatureZone = temperatureZone;\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","_wishlists$","wishlists","isWishlisted","CommerceListLines","some","removeFromWishlistText","addToWishlistText","removeItemFromWishlist","moveItemToWishlist","_removeItem","removeItemClickHandler","_cartLine$data2","wishlistItemsProps","_this$props$wishlistI","wishlistLineId","getWishlistLineIdFromProductId","result","removeLinesAsync","callerContext","Id","then","commerceList","window","location","reload","catch","error","_error$data","_error$data2","footer","CorrelationId","toasts","toastStrings","errorHeader","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","foundWishlistItem","commerceListLine","catalogId","productInput","ProductInput","push","customer","getCustomerAccount","getWishlistByCustomerId","createGetByCustomerInput","callAddWishlistLine","toast","type","autoClose","position","canClose","showProgress","wishlistName","defaultWishlistName","AccountNumber","listData","CustomerId","CommerceListTypeValue","createCommerceListAsync","err","_error$data3","_error$data4","_wishlists$0$Commerce","commerceLineToRemove","updatedCommerceList","wishlistId","createdCommerceList","addLinesAsync","buildWishlistLine","_error$data5","_error$data6","customerInput","GetCustomerInput","getCustomer","_simpleProduct$Behavi","_cart$cart$CartLines2","getCartStateData","GetCartStateDataInput","status","console","log","header","validationError","userHasAccess","validateAlcoholLicenseAsync","CatalogId","ProductIds","ValidationResult","noAccessToProduct","quantity","Behavior","MultipleOfQuantity","onBuyValidate","isValid","message","addProductToCartInput","count","customPrice","Price","toAddCount","updateCartLineQuantity","cartLineId","addProductToCart","_simpleProduct$Name","msg","productsAddedToCart","replace","toString","link","linkLabel","goToCart","_this$props$onSelectC","_this$props2","_result$errorDetails$","_result$errorDetails","validationResults","LocalizedMessage","errorDetails","_error$data7","_error$data8","resetQuantiyOnSuccess","_simpleProduct$Behavi2","_simpleProduct$Name2","_this$props$onUpdateQ","_this$props3","_this$props$onUpdateQ2","_this$props4","_result$errorDetails$2","_result$errorDetails2","_error$data9","_error$data10","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","temperatureZoneIcon","TemperatureZone","getTemperatureZoneIcon","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","IsB2b","showButtonTooltip","onSuccess","retrieveOrderTemplates","ProductInformationModal","productInformationTitle","addToWishlistAction","Badge","DiscountBadge","badge","size","Transit","transitTooltip","style","verticalAlign","Brand","Manufacturer","removeAction","getRoundedFactor","Factor","showTotalPrices","showCartCount","addToCartAction","getCatalogId","values","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","temperatureZone","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","getTemperatureZone","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$fullProduct13","_line$productListLine","_line$fullProduct16","_line$fullProduct17","_line$fullProduct18","_line$fullProduct19","_line$fullProduct20","_line$fullProduct21","_line$fullProduct2","_line$fullProduct4","_line$fullProduct6","_line$fullProduct8","_line$fullProduct10","_line$fullProduct12","_line$fullProduct14","_line$fullProduct15","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","_attributes$find4","discountBadge","categoryPath","CategoryPath","_attributes$find5","generateImageUrl","getActiveOrderTemplateLinesDataAction","searchCriteria","productRefiners","getProductSearchRefinersAsync","productRefiner","langOrContext","nbNO","enUS","DiscountLines","discountLineWithBadge","_x$OfferName","matches","OfferName","toLowerCase","match","parts","split","trim","startsWith","offerName","exec"],"sourceRoot":""}