{"version":3,"file":"static/js/613ebb5f366edaae6e0d.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/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 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 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\n\r\n// Modules where the ProductListComponent is used:\r\n// - Cart\r\n// - Search Result Container\r\n// - Wishlist\r\n// - Order Template\r\n\r\nexport class ProductListProduct {\r\n public RecordId?: number;\r\n public ItemId?: string;\r\n public Name?: string;\r\n public PrimaryImageUrl?: string;\r\n public DefaultUnitOfMeasure?: string;\r\n public Price?: number;\r\n public BasePrice?: number;\r\n public InventoryLabel?: string | undefined;\r\n public CurrentQuantity?: number | undefined;\r\n public CartLine?: CartLine | undefined;\r\n public DiscountAmount?: number | undefined;\r\n public LineAmount?: number | undefined;\r\n public Availability?: IProductInventoryInformation;\r\n public Brand?: string | undefined;\r\n public Manufacturer?: string | undefined;\r\n public PriceFailed?: boolean | undefined;\r\n public LineCreatedDateTime?: Date | undefined;\r\n public DisplayOrder?: number;\r\n public CategoryPaths?: CategoryPath[] | undefined;\r\n public Badge?: string | undefined;\r\n public ProductPrice?: ProductPrice | undefined;\r\n public RequestedDeliveryDate?: Date | undefined;\r\n public Transit?: boolean | undefined;\r\n public TemperatureZone?: string | undefined;\r\n\r\n public constructor(\r\n recordId?: number,\r\n itemId?: string,\r\n name?: string,\r\n primaryImageUrl?: string,\r\n defaultUnitOfMeasure?: string,\r\n price?: number,\r\n inventoryLabel?: string | undefined,\r\n currentQuantity?: number | undefined,\r\n cartLine?: CartLine | undefined,\r\n DiscountAmount?: number | undefined,\r\n LineAmount?: number | undefined,\r\n availability?: IProductInventoryInformation,\r\n brand?: string | undefined,\r\n manufacturer?: string | undefined,\r\n priceFailed?: boolean | undefined,\r\n displayOrder?: number | undefined,\r\n categoryPaths?: CategoryPath[] | undefined,\r\n badge?: string | undefined,\r\n productPrice?: ProductPrice | undefined,\r\n transit?: boolean | undefined,\r\n temperatureZone?: string | undefined\r\n ) {\r\n this.RecordId = recordId;\r\n this.ItemId = itemId;\r\n this.Name = name;\r\n this.PrimaryImageUrl = primaryImageUrl;\r\n this.DefaultUnitOfMeasure = defaultUnitOfMeasure;\r\n this.Price = price;\r\n this.InventoryLabel = inventoryLabel;\r\n this.CurrentQuantity = currentQuantity;\r\n this.CartLine = cartLine;\r\n this.DiscountAmount = DiscountAmount;\r\n this.LineAmount = LineAmount;\r\n this.Availability = availability;\r\n this.Brand = brand;\r\n this.Manufacturer = manufacturer;\r\n this.PriceFailed = priceFailed;\r\n this.DisplayOrder = displayOrder || 0;\r\n this.CategoryPaths = categoryPaths;\r\n this.Badge = badge;\r\n this.ProductPrice = productPrice;\r\n this.Transit = transit;\r\n this.TemperatureZone = temperatureZone;\r\n }\r\n}\r\n\r\nexport interface IProductListResources {\r\n productListItemText: string;\r\n productListItemNumberText: string;\r\n productListItemNameText: string;\r\n productListUnitNameText: string;\r\n productListPriceText: string;\r\n productListOrderQuantityLabel: string;\r\n productListTotalPriceText: string;\r\n productListActionsLabel: string;\r\n productListRemoveLabel?: string | undefined;\r\n buyNowButtonText: string;\r\n discount: string;\r\n lineAmount: string;\r\n emptyCartButtonText?: string;\r\n removeSelectedToCartText?: string;\r\n removeButtonText?: string;\r\n priceErrorText?: string;\r\n inCartTooltipText?: string;\r\n deliveryDateLabel?: string;\r\n transitTooltip?: string;\r\n addToWishlistText?: string;\r\n removeFromWishlistText?: string;\r\n}\r\n\r\nexport interface IActionsAvailable {\r\n addToCartAction?: boolean;\r\n 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 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 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 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 )\r\n );\r\n\r\n productList[productList.length - 1].BasePrice = searchResult.BasePrice;\r\n });\r\n\r\n return productList;\r\n};\r\n\r\nexport const fullProducts2ProductList = (\r\n fullProducts: FullProduct[] | undefined,\r\n productAvailabilities: IProductInventoryInformation[] | undefined\r\n): ProductListProduct[] => {\r\n const productList: ProductListProduct[] = [];\r\n\r\n if (!fullProducts) {\r\n return productList;\r\n }\r\n\r\n fullProducts.map((fullProduct, index) => {\r\n let brand;\r\n let manufacturer;\r\n let transit;\r\n let temperatureZone;\r\n\r\n if ((fullProduct.ProductDetails as SimpleProductExt).Brand) {\r\n brand = (fullProduct.ProductDetails as SimpleProductExt).Brand;\r\n }\r\n\r\n if ((fullProduct.ProductDetails as SimpleProductExt).Manufacturer) {\r\n manufacturer = (fullProduct.ProductDetails as SimpleProductExt).Manufacturer;\r\n }\r\n\r\n if ((fullProduct.ProductDetails as SimpleProductExt).Transit) {\r\n transit = (fullProduct.ProductDetails as SimpleProductExt).Transit;\r\n }\r\n\r\n if ((fullProduct.ProductDetails as SimpleProductExt).TemperatureZone) {\r\n temperatureZone = (fullProduct.ProductDetails as SimpleProductExt).TemperatureZone;\r\n }\r\n\r\n productList.push(\r\n new ProductListProduct(\r\n fullProduct.ProductDetails.RecordId,\r\n fullProduct.ProductDetails.ItemId,\r\n fullProduct.ProductDetails.Name,\r\n fullProduct.ProductDetails.PrimaryImageUrl,\r\n fullProduct.ProductDetails.DefaultUnitOfMeasure,\r\n fullProduct.ProductDetails.Price,\r\n productAvailabilities?.find(\r\n avail => avail.ProductAvailableQuantity.ProductId === fullProduct.ProductDetails.RecordId\r\n )?.StockLevelLabel,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n productAvailabilities?.find(avail => avail.ProductAvailableQuantity.ProductId === fullProduct.ProductDetails.RecordId),\r\n brand,\r\n manufacturer,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n transit,\r\n temperatureZone\r\n )\r\n );\r\n });\r\n\r\n return productList;\r\n};\r\n\r\nexport const cartLines2ProductList = (\r\n cartLines: ICartlinesViewProps[],\r\n productAvailabilities: IProductInventoryInformation[] | undefined,\r\n context: ICoreContext,\r\n activePrices: ProductPrice[] | undefined\r\n): ProductListProduct[] => {\r\n const productList: ProductListProduct[] = [];\r\n\r\n if (!cartLines) {\r\n return productList;\r\n }\r\n\r\n cartLines.map((cartLine, index) => {\r\n const product = cartLine.data?.product as SimpleProductExt | undefined;\r\n /* const price = cartLine.data?.cartline.Price || 0; */\r\n const price = cartLine.data?.cartline?.NetAmountWithoutTax ?\r\n cartLine.data?.cartline.NetAmountWithoutTax / (cartLine.data?.cartline?.Quantity || 1) :\r\n cartLine.data?.cartline.Price || 0;\r\n const fallImageUrl = getFallbackImageUrl(product?.ItemId, context.request.apiSettings);\r\n const productPrice = activePrices?.find(x => x.ProductId === product?.RecordId);\r\n const availability = productAvailabilities?.find(\r\n avail => avail.ProductAvailableQuantity.ProductId === product?.RecordId\r\n );\r\n\r\n productList.push(\r\n new ProductListProduct(\r\n product?.RecordId,\r\n product?.ItemId,\r\n product?.Name,\r\n product?.PrimaryImageUrl || fallImageUrl,\r\n product?.DefaultUnitOfMeasure,\r\n price,\r\n availability?.StockLevelLabel,\r\n cartLine.data?.cartline.Quantity,\r\n cartLine.data?.cartline,\r\n cartLine.data?.cartline.DiscountAmount,\r\n cartLine.data?.cartline.NetAmountWithoutTax,\r\n availability,\r\n product?.Brand,\r\n product?.Manufacturer,\r\n undefined,\r\n undefined,\r\n product?.CategoryPaths,\r\n getDiscountBadge(productPrice),\r\n productPrice,\r\n product?.Transit,\r\n product?.TemperatureZone\r\n )\r\n );\r\n });\r\n\r\n return productList;\r\n};\r\n\r\nexport const orderTemplateLines2ProductList = (\r\n lines: CountingListLine[],\r\n productAvailabilities: IProductInventoryInformation[] | undefined\r\n): ProductListProduct[] => {\r\n const productList: ProductListProduct[] = [];\r\n\r\n if (!lines) {\r\n return productList;\r\n }\r\n\r\n lines.map((line, index) => {\r\n let brand: string | undefined;\r\n let manufacturer: string | undefined;\r\n let categoryPaths: CategoryPath[] | undefined;\r\n let badge: string | undefined;\r\n let productPrice: ProductPrice | undefined;\r\n let transit: boolean | undefined;\r\n let temperatureZone: string | undefined;\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.Brand) {\r\n brand = (line.fullProduct?.ProductDetails as SimpleProductExt).Brand;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.Manufacturer) {\r\n manufacturer = (line.fullProduct?.ProductDetails as SimpleProductExt).Manufacturer;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.CategoryPaths) {\r\n categoryPaths = (line.fullProduct?.ProductDetails as SimpleProductExt).CategoryPaths;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.Badge) {\r\n badge = (line.fullProduct?.ProductDetails as SimpleProductExt).Badge;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.ProductPrice) {\r\n productPrice = (line.fullProduct?.ProductDetails as SimpleProductExt).ProductPrice;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.Transit) {\r\n transit = (line.fullProduct?.ProductDetails as SimpleProductExt).Transit;\r\n }\r\n\r\n if ((line.fullProduct?.ProductDetails as SimpleProductExt)?.TemperatureZone) {\r\n temperatureZone = (line.fullProduct?.ProductDetails as SimpleProductExt).TemperatureZone;\r\n }\r\n\r\n const availability = productAvailabilities?.find(\r\n avail => avail.ProductAvailableQuantity.ProductId === line.fullProduct?.ProductDetails.RecordId\r\n );\r\n\r\n const displayOrder = line.productListLine.ExtensionProperties?.find(prop => prop.Key === 'DISPLAYORDER')?.Value?.DecimalValue;\r\n\r\n const product = new ProductListProduct(\r\n line.fullProduct?.ProductDetails.RecordId,\r\n line.fullProduct?.ProductDetails.ItemId,\r\n line.fullProduct?.ProductDetails.Name,\r\n line.fullProduct?.ProductDetails.PrimaryImageUrl,\r\n line.productListLine.UnitOfMeasure,\r\n line.fullProduct?.ProductDetails.Price,\r\n availability?.StockLevelLabel,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n availability,\r\n brand,\r\n manufacturer,\r\n undefined,\r\n displayOrder,\r\n categoryPaths,\r\n badge,\r\n productPrice,\r\n transit,\r\n temperatureZone\r\n );\r\n\r\n product.CurrentQuantity = line.productListLine.Quantity;\r\n product.LineCreatedDateTime = line.productListLine.CreatedDateTime || line.productListLine.LastUpdated;\r\n\r\n if (typeof product.LineCreatedDateTime === 'string') {\r\n product.LineCreatedDateTime = new Date(product.LineCreatedDateTime);\r\n }\r\n\r\n product.BasePrice = line.fullProduct?.ProductDetails.BasePrice;\r\n product.PriceFailed = (line as any).PriceFailed;\r\n\r\n productList.push(product);\r\n });\r\n\r\n return productList;\r\n};\r\n","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","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","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","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$productListLine","_line$fullProduct16","_line$fullProduct17","_line$fullProduct18","_line$fullProduct19","_line$fullProduct20","_line$fullProduct21","_line$fullProduct2","_line$fullProduct4","_line$fullProduct6","_line$fullProduct8","_line$fullProduct10","_line$fullProduct12","_line$fullProduct14","_line$fullProduct15","productListLine","ExtensionProperties","prop","Key","Value","DecimalValue","LineCreatedDateTime","CreatedDateTime","LastUpdated","langOrContext","nbNO","enUS","DiscountLines","discountLineWithBadge","_x$OfferName","matches","OfferName","toLowerCase","match","parts","split","trim","startsWith","offerName","exec"],"sourceRoot":""}