{"version":3,"file":"static/js/fdfeb312485af122e867.bundle.js","mappings":"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","sources":["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/shared-utils/agreement-product-utils.ts?ee0a","webpack://Msdyn365.Commerce.Online/./src/shared-utils/attributes/locale/locale.ts?bf3e","webpack://Msdyn365.Commerce.Online/./src/shared-utils/badge-utils.ts?ae14"],"sourcesContent":["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 { 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 { 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 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 showAgreementProduct?: 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 onProductRemove?: (product: ProductListProduct) => 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 showAgreementProduct,\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 stockLevelLabel = product.Availability?.StockLevelLabel?.startsWith('!')\r\n ? product.Availability?.StockLevelLabel?.substring(1)\r\n : product.Availability?.StockLevelLabel;\r\n const availabilityText = stockLevelLabel || (availabilityClass === 'error' ? 'ERROR' : '');\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 const shouldUseAlternativeProducer = (product.AgentImporter?.length || 0) > 3 || (product.Producer?.length || 0) > 3;\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 {shouldUseAlternativeProducer === false ? (\r\n <>\r\n {product.Manufacturer && (\r\n
{product.Manufacturer}
\r\n )}\r\n \r\n ) : (\r\n <>\r\n {product.Producer && product.Producer.length > 3 && (\r\n
{product.Producer}
\r\n )}\r\n {product.AgentImporter && product.AgentImporter.length > 3 && (\r\n
{product.AgentImporter}
\r\n )}\r\n \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 this._getCartButton()\r\n )}\r\n {actionsAvailable?.addToCartOrderTemplate && (\r\n this._getOrderTemplateBuyButton()\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.StockLevelLabel?.startsWith('!')) {\r\n return 'available';\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 = async (): Promise => {\r\n await this.props.onProductRemove?.(this.props.data.product);\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 { useEffect, useMemo, useState } from 'react';\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\nimport { isAgreementProduct } from '../../shared-utils/agreement-product-utils';\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 public IsAgreementProduct?: boolean | undefined;\r\n public AgentImporter?: string;\r\n public Producer?: string;\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 isAgreementProduct?: boolean | undefined,\r\n agentImporter?: string,\r\n producer?: string\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 this.IsAgreementProduct = isAgreementProduct;\r\n this.AgentImporter = agentImporter;\r\n this.Producer = producer;\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 agreementProductTooltip?: string;\r\n addToWishlistText?: string;\r\n removeFromWishlistText?: string;\r\n}\r\n\r\nexport interface IActionsAvailable {\r\n addToCartAction?: boolean;\r\n addToCartOrderTemplate?: 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 showAgreementProduct?: 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 selectOnQuantityChange?: boolean;\r\n breakoffProducts?: { [key: number]: boolean };\r\n selectedProducts?: IProductSelection;\r\n wishlists?: CommerceList[];\r\n onProductRemove?: (product: ProductListProduct) => Promise;\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 showAgreementProduct,\r\n buyAlwaysAdd,\r\n resetSelectedQuantities,\r\n onResetSelectedQuantities,\r\n validatedProductAccess,\r\n productsDimensionAvailabilities,\r\n actionsAvailable,\r\n cartViewProps,\r\n selectOnQuantityChange,\r\n breakoffProducts,\r\n selectedProducts: selectedProductsProp,\r\n wishlists,\r\n onProductRemove,\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-expect-error\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 // @ts-ignore\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 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 showAgreementProduct={showAgreementProduct}\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 retrieveOrderTemplates={async () => {\r\n return orderTemplates || updateOrderTemplatesAsync();\r\n }}\r\n onProductRemove={onProductRemove}\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 isAgreementProduct(context, searchResult.AttributeValues),\r\n searchResult.AttributeValues?.find(x => x.Name === attributeLocale.agentImporter)?.TextValue,\r\n searchResult.AttributeValues?.find(x => x.Name === attributeLocale.producer)?.TextValue\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 let isAgreementProduct;\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 if ((fullProduct.ProductDetails as SimpleProductExt).IsAgreementProduct) {\r\n isAgreementProduct = (fullProduct.ProductDetails as SimpleProductExt).IsAgreementProduct;\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 isAgreementProduct,\r\n (fullProduct.ProductDetails as SimpleProductExt).AgentImporter,\r\n (fullProduct.ProductDetails as SimpleProductExt).Producer\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 product?.IsAgreementProduct,\r\n product?.AgentImporter,\r\n product?.Producer\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 let isAgreementProduct: boolean | undefined;\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.Brand) {\r\n brand = (line.fullProduct?.ProductDetails as SimpleProductExt).Brand;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.Manufacturer) {\r\n manufacturer = (line.fullProduct?.ProductDetails as SimpleProductExt).Manufacturer;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.CategoryPaths) {\r\n categoryPaths = (line.fullProduct?.ProductDetails as SimpleProductExt).CategoryPaths;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.Badge) {\r\n badge = (line.fullProduct?.ProductDetails as SimpleProductExt).Badge;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.ProductPrice) {\r\n productPrice = (line.fullProduct?.ProductDetails as SimpleProductExt).ProductPrice;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.Transit) {\r\n transit = (line.fullProduct?.ProductDetails as SimpleProductExt).Transit;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.TemperatureZone) {\r\n temperatureZone = (line.fullProduct?.ProductDetails as SimpleProductExt).TemperatureZone;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.IsAgreementProduct) {\r\n isAgreementProduct = (line.fullProduct?.ProductDetails as SimpleProductExt).IsAgreementProduct;\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 isAgreementProduct,\r\n (line.fullProduct?.ProductDetails as SimpleProductExt)?.AgentImporter,\r\n (line.fullProduct?.ProductDetails as SimpleProductExt)?.Producer\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","import { ICoreContext } from \"@msdyn365-commerce/core\";\r\nimport { AttributeValue, Customer } from \"@msdyn365-commerce/retail-proxy\";\r\nimport { getLocale } from \"./attributes/locale\";\r\nimport { getAttributeBooleanOrDefault } from \"./attributes\";\r\n\r\nexport function hasAgreementProducts(context: ICoreContext, customer: Customer | undefined): boolean {\r\n const agreementProductAttributeRecordIds: Number[] | undefined = context.request.app.config?.agreementProductAttributeRecordId?.split(',').map(Number).filter(Boolean);\r\n // Check if customer has any product agreement that should be shown\r\n const shouldShowAgreementProducts = agreementProductAttributeRecordIds && agreementProductAttributeRecordIds.length > 0\r\n ? agreementProductAttributeRecordIds.some(x => customer?.Attributes?.find(y => y.RecordId === x)?.AttributeValue?.BooleanValue)\r\n : false;\r\n return shouldShowAgreementProducts;\r\n}\r\n\r\nexport function getAgreementProductRefinersToHide(context: ICoreContext, customer: Customer | undefined): number[] | undefined {\r\n const refinerIds = context.request.app.config?.agreementProductAttributeRecordId\r\n ?.split(',')\r\n .map(Number)\r\n .filter(Boolean) as number[] | undefined;\r\n\r\n // Hide all refiners if customer is not available\r\n if (!customer) {\r\n return refinerIds;\r\n }\r\n\r\n const refinersToHide = refinerIds?.filter(refinerId => {\r\n const attribute = customer.Attributes?.find(x => x.RecordId === refinerId);\r\n return !attribute?.AttributeValue?.BooleanValue;\r\n });\r\n\r\n return refinersToHide;\r\n}\r\n\r\nlet cachedAttributesMap: ReturnType | undefined;\r\n\r\nexport function isAgreementProduct(contextOrLocale: ICoreContext | string, attributes: AttributeValue[] | undefined): boolean {\r\n if (!cachedAttributesMap) {\r\n cachedAttributesMap = getLocale(contextOrLocale);\r\n }\r\n\r\n const helseNord = getAttributeBooleanOrDefault(attributes, cachedAttributesMap.helseNord, false);\r\n const municipalityNorth = getAttributeBooleanOrDefault(attributes, cachedAttributesMap.municipalityNorth, false);\r\n\r\n return helseNord || municipalityNorth;\r\n}\r\n","import { ICoreContext } from '@msdyn365-commerce/core';\r\nimport nbNO from './nb-NO.json';\r\nimport enUS from './en-US.json';\r\n\r\nexport function getLocale(langOrContext: string | ICoreContext): typeof nbNO {\r\n const lang = typeof langOrContext === 'string' ? langOrContext : langOrContext.request.locale;\r\n\r\n switch (lang) {\r\n case 'nb-NO':\r\n return nbNO;\r\n case 'en-US':\r\n return {...nbNO, ...enUS};\r\n default:\r\n return nbNO;\r\n }\r\n}\r\n","import { 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":["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","constructor","props","_props$data$product$C","super","getLocale","this","context","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","className","price","request","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","_product$Availability","showAvailability","Availability","StockLevelLabel","startsWith","IsProductAvailable","StockLevelCode","_getOrderTemplateBuyButton","working","text","cartButton","buy","disabled","disableBuyButton","orderQuantity","Button","title","onClick","async","_addItemToCart","undefined","_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$data$produc","cartline","quantityOnChange","CurrentQuantity","_renderProductImage","heading","image","fallbackImage","lazyLoadImages","_context$request$app","_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","tabIndex","_getAddToCartActionButton","buttonText","_getRemoveActionButton","_getWishlistActionButton","_wishlists$","_wishlists$$CommerceL","wishlists","isWishlisted","CommerceListLines","some","removeFromWishlistText","addToWishlistText","removeItemFromWishlist","moveItemToWishlist","_removeItem","_this$props$onProduct","_this$props2","onProductRemove","catalogId","Promise","resolve","productInput","ProductInput","push","customer","getCustomerAccount","getWishlistByCustomerId","createGetByCustomerInput","length","callAddWishlistLine","Id","toast","type","autoClose","position","canClose","showProgress","wishlistName","defaultWishlistName","AccountNumber","listData","CustomerId","CommerceListTypeValue","commerceList","createCommerceListAsync","callerContext","err","_error$data","_error$data2","error","footer","CorrelationId","toasts","toastStrings","errorHeader","_wishlists$0$Commerce","commerceLineToRemove","updatedCommerceList","removeLinesAsync","productId","wishlistId","createdCommerceList","addLinesAsync","buildWishlistLine","_error$data3","_error$data4","customerInput","GetCustomerInput","getCustomer","_simpleProduct$Behavi","_cart$cart$CartLines2","getCartStateData","GetCartStateDataInput","status","console","log","setTimeout","header","validationError","userHasAccess","validateAlcoholLicenseAsync","CatalogId","ProductIds","ValidationResult","noAccessToProduct","quantity","Behavior","MultipleOfQuantity","onBuyValidate","result","isValid","message","addProductToCartInput","count","customPrice","Price","toAddCount","updateCartLineQuantity","cartLineId","addProductToCart","_simpleProduct$Name","msg","productsAddedToCart","replace","toString","link","linkLabel","goToCart","_this$props$onSelectC","_this$props3","_result$errorDetails$","_result$errorDetails","validationResults","LocalizedMessage","errorDetails","_error$data5","_error$data6","resetQuantiyOnSuccess","_simpleProduct$Behavi2","_simpleProduct$Name2","_this$props$onUpdateQ","_this$props4","_this$props$onUpdateQ2","_this$props5","_result$errorDetails$2","_result$errorDetails2","_error$data7","_error$data8","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$Availability2","_product$Availability3","_product$Availability4","_product$Availability5","_product$Availability6","_this$props$data$unit","_this$props$data$prod3","_product$AgentImporte","_product$Producer","actionsAvailable","allowMultiSelect","draggable","showPrices","showAgreementProduct","onUpdateOrderTemplates","PrimaryImageUrl","productUrl","getProductPageUrlSync","availabilityClass","availabilityText","substring","conversions","_this$props$data$prod2","FromUnitOfMeasureSymbol","kilogramConversion","getKilogramConversion","pcsConversion","getPcsConversion","temperatureZoneIcon","TemperatureZone","getTemperatureZoneIcon","shouldUseAlternativeProducer","AgentImporter","Producer","key","isDragOver","onDrop","_this$props$onDrop","_this$props6","onDragOver","disableReorder","types","includes","_this$props$onDragOve","_this$props7","preventDefault","rect","currentTarget","overOrUnder","height","onDragStart","onDragEnd","_this$props$onDragOve2","_this$props8","checked","href","AllergensModal","onClose","allergens","AddToOrderTemplateComponent","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","moduleId","customerInformation","disableButton","IsB2b","showButtonTooltip","onSuccess","orderTemplate","retrieveOrderTemplates","ProductInformationModal","productInformationTitle","addToWishlistAction","Badge","DiscountBadge","badge","size","Transit","transitTooltip","IsAgreementProduct","agreementProductTooltip","style","verticalAlign","Brand","Manufacturer","removeAction","getRoundedFactor","Factor","showTotalPrices","showCartCount","addToCartAction","addToCartOrderTemplate","getCatalogId","values","removeButtonText","_this$props$onMove","_this$props9","onMove","_this$props$onMove2","_this$props10","ProductListProduct","recordId","itemId","name","primaryImageUrl","defaultUnitOfMeasure","inventoryLabel","currentQuantity","DiscountAmount","LineAmount","availability","brand","manufacturer","priceFailed","displayOrder","categoryPaths","productPrice","transit","temperatureZone","isAgreementProduct","agentImporter","producer","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","productList","splice","OrderTemplate","queryResultSettings","QueryResultSettingsProxy","QueryResultSettings","input","GetOrderTemplatesInput","getOrderTemplates","map","handleDrop","overUnder","dragData","parse","getData","dragProduct","targetProduct","grouped","RequestedDeliveryDate","Date","getTime","createdGroupFor","getCartState","emptyCartButtonText","cartState","lineItemIdsToRemove","_cartLine$data2","_cartLine$data2$produ","_cartLine$data3","_cartLine$data3$produ","removeSelectedToCartText","_listItem","firstItem","querySelector","margin","parseFloat","window","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","_searchResult$Attribu4","_searchResult$Attribu5","_searchResult$Attribu6","_searchResult$Attribu7","_searchResult$Attribu8","_searchResult$Attribu9","_searchResult$Attribu10","productAvailability","ProductAvailableQuantity","getInventoryLabel","attributeValues","shippingInventory","shipping","ArrayExtensions","inventoryAttribute","attribute","TextValue","AttributeValues","getTemperatureZone","fullProducts2ProductList","fullProducts","productAvailabilities","fullProduct","_productAvailabilitie","ProductDetails","avail","cartLines2ProductList","cartLines","activePrices","_cartLine$data4","_cartLine$data5","_cartLine$data5$cartl","_cartLine$data6","_cartLine$data7","_cartLine$data7$cartl","_cartLine$data8","_cartLine$data9","_cartLine$data10","_cartLine$data11","_cartLine$data12","NetAmountWithoutTax","getDiscountBadge","orderTemplateLines2ProductList","lines","_line$fullProduct","_line$fullProduct$Pro","_line$fullProduct3","_line$fullProduct3$Pr","_line$fullProduct5","_line$fullProduct5$Pr","_line$fullProduct7","_line$fullProduct7$Pr","_line$fullProduct9","_line$fullProduct9$Pr","_line$fullProduct11","_line$fullProduct11$P","_line$fullProduct13","_line$fullProduct13$P","_line$fullProduct15","_line$fullProduct15$P","_line$productListLine","_line$productListLine2","_line$productListLine3","_line$fullProduct18","_line$fullProduct19","_line$fullProduct20","_line$fullProduct21","_line$fullProduct22","_line$fullProduct23","_line$fullProduct23$P","_line$fullProduct24","_line$fullProduct24$P","_line$fullProduct25","_line$fullProduct2","_line$fullProduct4","_line$fullProduct6","_line$fullProduct8","_line$fullProduct10","_line$fullProduct12","_line$fullProduct14","_line$fullProduct16","_line$fullProduct17","productListLine","ExtensionProperties","prop","Key","Value","DecimalValue","LineCreatedDateTime","CreatedDateTime","LastUpdated","hasAgreementProducts","_context$request$app$2","agreementProductAttributeRecordIds","agreementProductAttributeRecordId","split","_customer$Attributes","_customer$Attributes$","_customer$Attributes$2","Attributes","y","AttributeValue","BooleanValue","getAgreementProductRefinersToHide","_context$request$app$3","_context$request$app$4","refinerIds","refinerId","_customer$Attributes2","_attribute$AttributeV","cachedAttributesMap","contextOrLocale","attributes","helseNord","getAttributeBooleanOrDefault","municipalityNorth","langOrContext","nbNO","enUS","DiscountLines","discountLineWithBadge","_x$OfferName","matches","OfferName","toLowerCase","match","parts","trim","offerName","exec"],"sourceRoot":""}