{"version":3,"file":"static/js/c87b69428669966650a1.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","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","_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","_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","fromInputData","QueryResultSettings","input","GetOrderTemplatesInput","getOrderTemplates","map","handleDrop","overUnder","dragData","parse","getData","dragProduct","targetProduct","grouped","RequestedDeliveryDate","Date","getTime","createdGroupFor","getCartState","emptyCartButtonText","cartState","lineItemIdsToRemove","_cartLine$data2","_cartLine$data3","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","productAvailability","ProductAvailableQuantity","getInventoryLabel","attributeValues","shippingInventory","shipping","ArrayExtensions","hasElements","inventoryAttribute","attribute","TextValue","AttributeValues","getTemperatureZone","fullProducts2ProductList","fullProducts","productAvailabilities","fullProduct","_productAvailabilitie","ProductDetails","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$fullProduct","_line$fullProduct3","_line$fullProduct5","_line$fullProduct7","_line$fullProduct9","_line$fullProduct11","_line$fullProduct13","_line$fullProduct15","_line$productListLine","_line$fullProduct18","_line$fullProduct19","_line$fullProduct20","_line$fullProduct21","_line$fullProduct22","_line$fullProduct23","_line$fullProduct24","_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$","agreementProductAttributeRecordIds","agreementProductAttributeRecordId","split","_customer$Attributes","Attributes","y","AttributeValue","BooleanValue","getAgreementProductRefinersToHide","_context$request$app$2","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":""}