{"version":3,"file":"static/js/83755190e823ad78e477.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 availabilityText = availabilityClass === 'error' ? product.Availability?.StockLevelLabel || 'ERROR' : product.Availability?.StockLevelLabel || '';\r\n\r\n const conversions = this.props.data.unitConversions?.filter(x => x.FromUnitOfMeasureSymbol === this.props.data.product?.DefaultUnitOfMeasure);\r\n const kilogramConversion = conversions && getKilogramConversion(this.props.data.product?.DefaultUnitOfMeasure, conversions);\r\n const pcsConversion = conversions && getPcsConversion(conversions);\r\n const temperatureZoneIcon = product.TemperatureZone ? getTemperatureZoneIcon(this.props.context, product.TemperatureZone) : undefined;\r\n\r\n return (\r\n {\r\n e.stopPropagation(); // Prevent onDrop handler on parent from firing\r\n this.props.onDrop?.(e, product.RecordId, this.props.isDragOver);\r\n }}\r\n onDragOver={(e) => {\r\n e.stopPropagation();\r\n\r\n if (!this.props.disableReorder && e.dataTransfer.types.includes('product')) {\r\n e.preventDefault();\r\n\r\n const rect = (e.currentTarget as Element).getBoundingClientRect();\r\n const y = e.clientY - rect.top;\r\n const halfHeight = rect.height / 2;\r\n const overOrUnder: 'over' | 'under' = y > halfHeight ? 'under' : 'over';\r\n\r\n this.props.onDragOver?.(product.RecordId, overOrUnder);\r\n }\r\n }}\r\n >\r\n {draggable && (\r\n this.props.onDragOver?.(undefined, undefined)}\r\n onDragOver={draggable ? (e) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n } : undefined} />\r\n )}\r\n {isAuthenticated && allowMultiSelect && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n {this._renderProductImage(\r\n 'product-image',\r\n this.props.context,\r\n product.Name || '',\r\n PrimaryImageUrl,\r\n undefined,\r\n this.props.lazyLoadImages\r\n )}\r\n \r\n {isAuthenticated && (\r\n
\r\n {this.state.allergensModal && (\r\n this.setState({ allergensModal: false })}\r\n context={this.props.context}\r\n product={product} />\r\n )}\r\n {\r\n this.setState({ allergensModal: true });\r\n }\r\n } />\r\n\r\n {\r\n await onUpdateOrderTemplates?.(orderTemplate);\r\n toast({\r\n text: `${this.props.data.product.Name}${this.locale.addToOrderTemplate.itemAddedToOrderTemplateHeaderMessageText}`,\r\n autoClose: 3000,\r\n canClose: true,\r\n position: 'bottom-right',\r\n type: 'success',\r\n showProgress: true\r\n });\r\n }}\r\n retrieveOrderTemplates={this.props.retrieveOrderTemplates}\r\n />\r\n\r\n {this.state.productInformationModal && (\r\n this.setState({ productInformationModal: false })}\r\n context={this.props.context}\r\n product={product} />\r\n )}\r\n {\r\n this.setState({ productInformationModal: true });\r\n }\r\n } />\r\n\r\n {actionsAvailable?.addToWishlistAction && this._getWishlistActionButton()}\r\n
\r\n )}\r\n\r\n {product.Badge && (\r\n \r\n )}\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n {product.ItemId}\r\n
\r\n {product.Brand && (\r\n
{product.Brand}
\r\n )}\r\n {product.Manufacturer && (\r\n
{product.Manufacturer}
\r\n )}\r\n {showAvailability && (\r\n
\r\n \r\n {availabilityText}\r\n \r\n
\r\n )}\r\n
\r\n
\r\n {isAuthenticated && (\r\n <>\r\n
\r\n {this._renderPrice(className, price)}\r\n
\r\n\r\n {price && kilogramConversion && getRoundedFactor(kilogramConversion) > 0 && (\r\n
\r\n \r\n  \r\n pr. kg\r\n
\r\n )}\r\n\r\n {price && pcsConversion && (\r\n
\r\n \r\n  \r\n pr. stk\r\n
\r\n )}\r\n\r\n {this.props.showTotalPrices &&\r\n <>\r\n
Totalt
\r\n
\r\n \r\n
\r\n \r\n }\r\n \r\n )}\r\n
\r\n
\r\n\r\n {isAuthenticated && (\r\n
\r\n
\r\n {this._getSearchResultOrderQuantity(readOnly)}\r\n
\r\n {actionsAvailable && (\r\n
\r\n {this.props.showCartCount && this._renderCartCount(className)}\r\n {actionsAvailable?.addToCartAction && (\r\n 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.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\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 ) {\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 }\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 )\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 )\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 )\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 );\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","showAvailability","Availability","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$Availability","_product$Availability2","_this$props$data$unit","_this$props$data$prod3","actionsAvailable","allowMultiSelect","draggable","showPrices","showAgreementProduct","onUpdateOrderTemplates","PrimaryImageUrl","productUrl","getProductPageUrlSync","availabilityClass","availabilityText","StockLevelLabel","conversions","_this$props$data$prod2","FromUnitOfMeasureSymbol","kilogramConversion","getKilogramConversion","pcsConversion","getPcsConversion","temperatureZoneIcon","TemperatureZone","getTemperatureZoneIcon","key","isDragOver","onDrop","_this$props$onDrop","_this$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","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","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$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","startsWith","offerName","exec"],"sourceRoot":""}