{"version":3,"file":"static/js/feb2236217dae6cbf9a9.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/components/switch/switch.tsx?ec26","webpack://Msdyn365.Commerce.Online/./src/components/common/product-list-order-quantity.tsx?cd94","webpack://Msdyn365.Commerce.Online/./src/components/unit-of-measure/utils/humanize-unit-of-measure.ts?110c","webpack://Msdyn365.Commerce.Online/./src/components/unit-of-measure/unit-of-measure.tsx?45a5","webpack://Msdyn365.Commerce.Online/./src/shared-utils/unit-conversion-utils.ts?1560","webpack://Msdyn365.Commerce.Online/./src/themes/dlvry-adventureworks/views/cart-icon.view.tsx?f662","webpack://Msdyn365.Commerce.Online/./src/themes/dlvry-adventureworks/views/components/carticon.component.tsx?c30e","webpack://Msdyn365.Commerce.Online/./lib/cart-icon/module-registration.js?4d28","webpack://Msdyn365.Commerce.Online/./src/validate-cart.ts?cd50","webpack://Msdyn365.Commerce.Online/./src/Common/get-product.ts?0a21","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/cart-icon.view.tsx?f9dd","webpack://Msdyn365.Commerce.Online/../../src/search-org-unit-locations.ts?d18d","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/cart-icon.view.tsx?7ec9","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["import * as React from 'react';\r\nimport classnames from 'classnames';\r\n\r\ninterface ISwitchProps {\r\n className?: string;\r\n label?: string;\r\n checked?: boolean;\r\n onChange?: (value: boolean) => void;\r\n mini?: boolean;\r\n miniLabel?: string;\r\n}\r\n\r\nconst Switch: React.FC = ({\r\n className,\r\n label,\r\n checked,\r\n onChange,\r\n mini,\r\n miniLabel\r\n}) => {\r\n const [internalChecked, setInternalChecked] = React.useState(Boolean(checked));\r\n\r\n React.useEffect(() => {\r\n setInternalChecked(Boolean(checked));\r\n }, [checked]);\r\n\r\n const onChangeHandler = (event: React.ChangeEvent) => {\r\n setInternalChecked(event.target.checked);\r\n onChange?.(event.target.checked);\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default Switch;\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 { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct, UnitOfMeasureConversion } from '@msdyn365-commerce/retail-proxy';\r\nimport { reaction, computed, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport classnames from 'classnames';\r\nimport { UnitOfMeasure, humanizeUnitOfMeasure } from '../unit-of-measure';\r\nimport Switch from '../switch/switch';\r\nimport { getMinimumDecimals, getMostRelevantConversion, getRoundedFactor } from '../../shared-utils/unit-conversion-utils';\r\n\r\ninterface IQuantityProps {\r\n context: ICoreContext;\r\n locale: string;\r\n product: SimpleProduct | undefined;\r\n unitConversions?: UnitOfMeasureConversion[];\r\n currentCount?: number;\r\n allowZero?: boolean;\r\n disabled?: boolean;\r\n incrementGlyphClass?: string;\r\n decrementGlyphClass?: string;\r\n decrementButtonAriaLabel?: string;\r\n incrementButtonAriaLabel?: string;\r\n inputQuantityAriaLabel?: string;\r\n id?: string;\r\n min?: number;\r\n breakoff?: boolean;\r\n legacyBreakoff?: boolean;\r\n onChange?(newValue: number): void;\r\n onBreakoffChange?(enabled: boolean): void;\r\n}\r\n\r\ninterface IQuantityState {\r\n currentInput: string | number;\r\n parsedCurrentInput: number;\r\n breakoff: boolean;\r\n}\r\n\r\nfunction getDecimalSeparator(locale: string) {\r\n const numberWithDecimalSeparator = 1.1;\r\n const separator = Intl.NumberFormat(locale)\r\n .formatToParts(numberWithDecimalSeparator)\r\n .find(part => part.type === 'decimal')\r\n ?.value;\r\n return separator ?? ',';\r\n}\r\n\r\n/**\r\n * Quantity Component - This component is used to add or remove quantity.\r\n */\r\n@observer\r\nexport default class ProductListOrderQuantity extends React.PureComponent {\r\n public static defaultProps: Partial = {\r\n allowZero: true,\r\n decrementGlyphClass: 'fas fa-minus',\r\n incrementGlyphClass: 'fas fa-plus'\r\n };\r\n\r\n private readonly inputRef: React.RefObject = React.createRef();\r\n\r\n @computed get minimum(): number {\r\n return (this.productMinimumQuantity || Number(!this.props.allowZero)) / this.multipleOf;\r\n }\r\n\r\n @computed get maximum(): number {\r\n const max = this.productMaximumQuantity || 999_999_999;\r\n return max / this.multipleOf;\r\n }\r\n\r\n @computed get multipleOf(): number {\r\n return this.state.breakoff ? 1 : this.props.product?.Behavior?.MultipleOfQuantity || 1;\r\n }\r\n\r\n @computed get productDefaultQuantity(): number | undefined {\r\n return this.props.product?.Behavior?.DefaultQuantity;\r\n }\r\n\r\n @computed get productMaximumQuantity(): number | undefined {\r\n return this.props.product?.Behavior?.MaximumQuantity;\r\n }\r\n\r\n @computed get productMinimumQuantity(): number | undefined {\r\n return this.props.product?.Behavior?.MinimumQuantity;\r\n }\r\n\r\n @computed get productMultipleOfQuantity(): number | undefined {\r\n return this.props.product?.Behavior?.MultipleOfQuantity;\r\n }\r\n\r\n @computed get total(): number {\r\n return this.state.parsedCurrentInput * this.multipleOf;\r\n }\r\n\r\n @computed get totalFormatted(): string {\r\n return this.total.toLocaleString(this.props.locale, {\r\n minimumFractionDigits: getMinimumDecimals(this.props.product?.DefaultUnitOfMeasure),\r\n maximumFractionDigits: 2,\r\n useGrouping: false\r\n });\r\n }\r\n\r\n @computed get showDecimals(): boolean {\r\n const units = [\r\n 'kg',\r\n 'Kilogram'\r\n ];\r\n const uom = this.props.product?.DefaultUnitOfMeasure;\r\n\r\n return !!uom && units.includes(uom);\r\n }\r\n\r\n constructor(props: IQuantityProps) {\r\n super(props);\r\n\r\n const { allowZero, currentCount, product } = this.props;\r\n let breakoff = false;\r\n let initialValue: number | string = '';\r\n\r\n if (product) {\r\n initialValue = currentCount || (allowZero ? 0 : this.productMinimumQuantity ?? 1);\r\n\r\n if (product.Behavior?.MultipleOfQuantity) {\r\n if (props.breakoff) {\r\n breakoff = true;\r\n } else {\r\n const breakoffState = this._getInitialBreakoff(initialValue, product);\r\n\r\n if (breakoffState.factor) {\r\n initialValue = breakoffState.factor;\r\n } else {\r\n breakoff = breakoffState.breakoff;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.state = {\r\n currentInput: initialValue,\r\n parsedCurrentInput: typeof initialValue === 'number' ? initialValue : Number.parseFloat(initialValue) || 0,\r\n breakoff\r\n };\r\n this._clamp = this._clamp.bind(this);\r\n this._handleChange = this._handleChange.bind(this);\r\n this._validateQuantity = this._validateQuantity.bind(this);\r\n this._onToggleBreakoff = this._onToggleBreakoff.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n when(\r\n () => this.props.product !== undefined && (this.state.currentInput === '' || this.state.currentInput === 0),\r\n () => {\r\n const { allowZero, currentCount, product } = this.props;\r\n const initialValue = currentCount || (allowZero ? 0 : this.productMinimumQuantity ?? 1);\r\n\r\n if (product?.Behavior?.MultipleOfQuantity) {\r\n const multipler = product.Behavior.MultipleOfQuantity;\r\n const factor = initialValue / multipler;\r\n const remainder = initialValue % multipler;\r\n\r\n if (remainder === 0) {\r\n this.setState({ currentInput: factor });\r\n } else {\r\n this.setState({ breakoff: true });\r\n }\r\n } else {\r\n this.setState({ currentInput: initialValue });\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.breakoff,\r\n (breakoff) => {\r\n this.setState({ breakoff: Boolean(breakoff) });\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.currentCount,\r\n () => {\r\n const currentInput = typeof this.state.currentInput === 'string'\r\n ? Number.parseFloat(this.state.currentInput.replace(',', '.') || '0')\r\n : this.state.currentInput;\r\n const oldQuantity = this._convertOutgoingQuantity(currentInput);\r\n const newQuantity = this._convertIncomingQuantity(this.props.currentCount ?? 0);\r\n\r\n // Only allow the change from props if it's meaningfully different\r\n if (this.props.currentCount !== oldQuantity) {\r\n this.setState({\r\n currentInput: newQuantity\r\n });\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.state.breakoff,\r\n (newValue) => {\r\n if (newValue) {\r\n const newInput = this.props.currentCount ?? 0;\r\n\r\n this.setState({\r\n currentInput: newInput,\r\n parsedCurrentInput: newInput\r\n });\r\n } else {\r\n // const multiplier = this.productMultipleOfQuantity || 1;\r\n const multiplier = this.multipleOf;\r\n const newInput = this.state.parsedCurrentInput / multiplier;\r\n\r\n this.setState({\r\n currentInput: newInput,\r\n parsedCurrentInput: newInput\r\n });\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.state.currentInput,\r\n () => {\r\n this.setState({\r\n currentInput: this.showDecimals ? this.state.currentInput.toLocaleString(this.props.locale, {\r\n minimumFractionDigits: getMinimumDecimals(this.props.product?.DefaultUnitOfMeasure),\r\n maximumFractionDigits: 2,\r\n useGrouping: false\r\n }).replace('.', ',') : this.state.currentInput,\r\n parsedCurrentInput: Number.parseFloat(this.state.currentInput.toString().replace(',', '.') || '0')\r\n });\r\n }\r\n );\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { allowZero, context, product } = this.props;\r\n const disabled = this.state.parsedCurrentInput === (allowZero ? 0 : this.minimum);\r\n const incDisabled = this.state.parsedCurrentInput === this.maximum;\r\n const currentValue = this.state.currentInput;\r\n const baseClassName = 'dlvry-quantity';\r\n const breakoffEnabled = !!product?.Behavior?.MultipleOfQuantity;\r\n const miniBreakoff = !this.props.legacyBreakoff;\r\n\r\n let extraClass = '';\r\n if (disabled) {\r\n // The quantity has reached its boundaries (max or min)\r\n extraClass = 'disabled';\r\n } else if (this.props.disabled) {\r\n // This.props.disabled shows if the state is not succeded yet\r\n extraClass = 'transition';\r\n }\r\n const getChangeHandler = (action: 'increment' | 'decrement') => () => {\r\n let amount = action === 'increment' ? 1 : -1;\r\n\r\n if (action === 'increment' && this.state.parsedCurrentInput === 0 && this.productDefaultQuantity) {\r\n amount = this.productDefaultQuantity / this.multipleOf;\r\n }\r\n\r\n const calcTotal = (change: number): number => {\r\n const newAmount = this.state.parsedCurrentInput + change;\r\n return this.multipleOf * newAmount;\r\n };\r\n\r\n let newTotal = calcTotal(amount);\r\n\r\n if (action === 'increment' && newTotal > 0) {\r\n if (this.productMinimumQuantity && newTotal < this.productMinimumQuantity) {\r\n amount = (this.productMinimumQuantity - this.total) / this.multipleOf;\r\n }\r\n\r\n newTotal = calcTotal(amount);\r\n\r\n if (this.productMaximumQuantity && newTotal > this.productMaximumQuantity) {\r\n amount = (this.productMaximumQuantity - this.total) / this.multipleOf;\r\n }\r\n }\r\n\r\n if (action === 'decrement' && newTotal > 0) {\r\n if (this.productMinimumQuantity && newTotal < this.productMinimumQuantity) {\r\n if (allowZero) {\r\n amount = -this.state.parsedCurrentInput;\r\n } else {\r\n amount = this.minimum - this.state.parsedCurrentInput;\r\n }\r\n }\r\n if (this.productMaximumQuantity && newTotal > this.productMaximumQuantity) {\r\n amount = this.maximum - this.state.parsedCurrentInput;\r\n }\r\n }\r\n\r\n this._onIncrementalChange(amount);\r\n };\r\n\r\n return (\r\n
\r\n {!miniBreakoff && (\r\n \r\n )}\r\n
\r\n
\r\n {miniBreakoff && breakoffEnabled && (\r\n <>\r\n \r\n\r\n \r\n {`${this.multipleOf} `}\r\n  x\r\n \r\n \r\n )}\r\n \r\n {\r\n const NUMBER_DOT_COMMA = /^[\\d,.]*$/;\r\n const fieldValue = (e.target as any).value;\r\n const fieldHasCommaOrDot = fieldValue.includes('.') || fieldValue.includes(',');\r\n const keyIsCommaOrDot = e.key === '.' || e.key === ',';\r\n\r\n if (!NUMBER_DOT_COMMA.test(e.key) || (keyIsCommaOrDot && fieldHasCommaOrDot)) {\r\n e.preventDefault();\r\n }\r\n\r\n const separator = getDecimalSeparator(this.props.locale);\r\n const replace = separator === '.' ? ',' : '.';\r\n (e as any).target.value = fieldValue.replace(replace, separator);\r\n }}\r\n aria-live='polite'\r\n aria-label={`${this.props.inputQuantityAriaLabel}`}\r\n role='spinbutton'\r\n aria-valuemin={1}\r\n aria-valuemax={this.maximum}\r\n aria-valuenow={Number.parseFloat(currentValue.toString()) || 0}\r\n ref={this.inputRef}\r\n disabled={this.props.disabled}\r\n data-nomodalcss\r\n />\r\n \r\n
\r\n \r\n = {this.totalFormatted} \r\n \r\n \r\n
\r\n
\r\n 1 = \r\n {`${this.multipleOf} `}\r\n \r\n
\r\n
\r\n {this._getUnitOfMeasureConversion()}\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _getInitialBreakoff = (initialValue: number, product: SimpleProduct): { factor?: number, breakoff: boolean } => {\r\n const multiplier = product.Behavior?.MultipleOfQuantity || 1;\r\n const factor = Math.round(((initialValue / multiplier) + Number.EPSILON) * 1000) / 1000;\r\n const remainder = (initialValue * 1000) % (multiplier * 1000);\r\n\r\n if (remainder === 0) {\r\n return { factor, breakoff: false };\r\n } else {\r\n return { breakoff: true };\r\n }\r\n };\r\n\r\n private _getUnitOfMeasureConversion = (): JSX.Element | undefined => {\r\n if (!this.props.unitConversions || !this.props.product?.DefaultUnitOfMeasure) {\r\n return undefined;\r\n }\r\n\r\n const conversions = this.props.unitConversions?.filter(x => x.FromUnitOfMeasureSymbol === this.props.product?.DefaultUnitOfMeasure);\r\n const conversion = getMostRelevantConversion(conversions);\r\n\r\n if (!conversion) {\r\n return undefined;\r\n }\r\n\r\n const factor = getRoundedFactor(conversion).toLocaleString(this.props.locale, {\r\n minimumFractionDigits: getMinimumDecimals(conversion.ToUnitOfMeasureSymbol),\r\n maximumFractionDigits: 2,\r\n useGrouping: false\r\n });\r\n const defaultUOM = humanizeUnitOfMeasure(this.props.context, this.props.product?.DefaultUnitOfMeasure);\r\n const conversionUOM = humanizeUnitOfMeasure(this.props.context, conversion.ToUnitOfMeasureSymbol).toLocaleLowerCase();\r\n\r\n return (\r\n
\r\n 1 {defaultUOM} = {`${factor} ${conversionUOM}`}\r\n
\r\n );\r\n };\r\n\r\n private _convertIncomingQuantity = (quantity: number): number => {\r\n return quantity / this.multipleOf;\r\n };\r\n\r\n private _convertOutgoingQuantity = (quantity: number): number => {\r\n const outgoing = quantity * this.multipleOf;\r\n\r\n // We need to always round to nearest 2 decimal places to avoid floating point errors in quantity validation\r\n return Math.round((outgoing + Number.EPSILON) * 1000) / 1000;\r\n };\r\n\r\n private _onToggleBreakoff = (checked: boolean): void => {\r\n this.setState({ breakoff: checked });\r\n this.props.onBreakoffChange?.(checked);\r\n };\r\n\r\n private _onIncrementalChange(amount: number): void {\r\n const updatedQuantity = this.state.parsedCurrentInput + amount;\r\n\r\n if (this._isValidNewQuantity(updatedQuantity)) {\r\n this.props.onChange?.(this._convertOutgoingQuantity(updatedQuantity));\r\n }\r\n }\r\n\r\n private readonly _clamp = (total: number): number => {\r\n if (this.productMinimumQuantity && total >= 1 && total < this.productMinimumQuantity) {\r\n return this.productMinimumQuantity / this.multipleOf;\r\n } else if (this.productMaximumQuantity && total > this.productMaximumQuantity) {\r\n return this.productMaximumQuantity / this.multipleOf;\r\n } else {\r\n return total / this.multipleOf;\r\n }\r\n };\r\n\r\n private readonly _isValidNewQuantity = (newQuantity: number): boolean => {\r\n if (newQuantity === 0 && this.props.allowZero) {\r\n return true;\r\n }\r\n return !isNaN(newQuantity) && newQuantity >= this.minimum && newQuantity <= this.maximum;\r\n };\r\n\r\n private _handleChange(e: React.ChangeEvent): void {\r\n let newValue: string | number = e.target.value;\r\n\r\n e.persist();\r\n this.setState({ currentInput: newValue }, () => {\r\n if (typeof newValue === 'string') {\r\n newValue = Number.parseFloat(newValue.replace(',', '.'));\r\n }\r\n\r\n if (this._isValidNewQuantity(newValue)) {\r\n this.props.onChange?.(this._convertOutgoingQuantity(newValue));\r\n }\r\n });\r\n }\r\n\r\n private _validateQuantity(e: React.FocusEvent): void {\r\n const currentValue = Number.parseFloat(e.target.value.replace(',', '.') || '0');\r\n const total = this.multipleOf * currentValue;\r\n const newValue = Math.max(this._clamp(total) ?? 0, Number(!this.props.allowZero));\r\n\r\n e.persist();\r\n this.setState({ currentInput: newValue }, () => {\r\n this.props.onChange?.(this._convertOutgoingQuantity(newValue));\r\n });\r\n }\r\n}\r\n","import { ICoreContext } from '@msdyn365-commerce/core';\r\n\r\nconst translations = {\r\n 'nb-NO': {\r\n 'Flaske-BS': 'Stk',\r\n 'Stk-BS': 'Stk',\r\n 'Stk-M1': 'Krt',\r\n 'Boks-BS': 'Stk',\r\n 'Krt-BS': 'Stk',\r\n 'Krt-M1': 'Krt',\r\n 'Krt-M2': 'Krt',\r\n 'Pose-BS': 'Stk',\r\n 'Kanne-BS': 'Stk',\r\n 'Fat-BS': 'Stk',\r\n 'Glass-BS': 'Stk',\r\n 'Rull-BS': 'Stk',\r\n 'Brett-BS': 'Stk',\r\n 'Brett-M1': 'Brt',\r\n 'Brett-M2': 'Brt',\r\n 'Tube-BS': 'Stk',\r\n 'Sekk-BS': 'Stk',\r\n 'Bunt-BS': 'Stk'\r\n },\r\n 'en-US': {\r\n 'Flaske-BS': 'Pcs',\r\n 'Stk-BS': 'Pcs',\r\n 'Stk-M1': 'Box',\r\n 'Boks-BS': 'Pcs',\r\n 'Krt-BS': 'Pcs',\r\n 'Krt-M1': 'Box',\r\n 'Krt-M2': 'Box',\r\n 'Pose-BS': 'Pcs',\r\n 'Kanne-BS': 'Pcs',\r\n 'Fat-BS': 'Pcs',\r\n 'Glass-BS': 'Pcs',\r\n 'Rull-BS': 'Pcs',\r\n 'Brett-BS': 'Pcs',\r\n 'Brett-M1': 'Try',\r\n 'Brett-M2': 'Try',\r\n 'Tube-BS': 'Pcs',\r\n 'Sekk-BS': 'Pcs',\r\n 'Bunt-BS': 'Pcs'\r\n }\r\n};\r\n\r\nexport function humanizeUnitOfMeasure(locale: ICoreContext | string, unitOfMeasure: string | undefined): string {\r\n if (!unitOfMeasure) {\r\n return '';\r\n }\r\n\r\n // Check if locale is a string or an ICoreContext object\r\n if (typeof locale === 'object') {\r\n locale = locale.request.locale;\r\n }\r\n return translations[locale]?.[unitOfMeasure] || unitOfMeasure;\r\n}\r\n","import * as React from 'react';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { humanizeUnitOfMeasure } from './utils';\r\n\r\ninterface IUnitOfMeasureProps {\r\n context: ICoreContext;\r\n className?: string;\r\n simpleProduct?: SimpleProduct;\r\n unitOfMeasure?: string;\r\n disableTranslate?: boolean;\r\n}\r\n\r\nconst UnitOfMeasure = (props: IUnitOfMeasureProps) => {\r\n const { context } = props;\r\n let { disableTranslate } = props;\r\n\r\n const className = classnames('dlvry-unit-of-measure', props.className);\r\n\r\n // Check if already disabled\r\n if (!disableTranslate) {\r\n // @ts-expect-error\r\n if (context.app.config.humanizeUnitOfMeasure !== true) {\r\n disableTranslate = true;\r\n } else {\r\n // Disable if disableUnitReplace is present and not 1 or 'true'\r\n const disableUnitReplace = context.request.url.requestUrl.searchParams.get('disableUnitReplace');\r\n disableTranslate = disableUnitReplace === '' || disableUnitReplace === '1' || disableUnitReplace?.toLowerCase() === 'true';\r\n }\r\n }\r\n\r\n let unitOfMeasure = props.unitOfMeasure || props.simpleProduct?.DefaultUnitOfMeasure || '';\r\n unitOfMeasure = disableTranslate\r\n ? unitOfMeasure\r\n : humanizeUnitOfMeasure(context, unitOfMeasure);\r\n\r\n return (\r\n \r\n {unitOfMeasure}\r\n \r\n );\r\n};\r\n\r\n\r\nexport default UnitOfMeasure;","import { UnitOfMeasureConversion } from \"@msdyn365-commerce/retail-proxy\";\r\n\r\nexport function getMostRelevantConversion(conversions: UnitOfMeasureConversion[]): UnitOfMeasureConversion | undefined {\r\n // Accepted units, sorted by priority\r\n const acceptedToUnits = [\r\n 'stk',\r\n 'Stykk',\r\n 'Stk-BS',\r\n 'Kilogram',\r\n 'kg',\r\n 'Liter',\r\n '100_meter'\r\n ];\r\n\r\n for (const unit of acceptedToUnits) {\r\n const find = conversions?.find(conversion => conversion.ToUnitOfMeasureSymbol === unit);\r\n if (find) {\r\n return find;\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function getKilogramConversion(defaultUnitOfMeasure: string | undefined, conversions: UnitOfMeasureConversion[]): UnitOfMeasureConversion | undefined {\r\n if (!defaultUnitOfMeasure) {\r\n return undefined;\r\n }\r\n\r\n const acceptedToUnits = [\r\n 'Kilogram',\r\n 'kg'\r\n ];\r\n return conversions?.find(conversion =>\r\n conversion.FromUnitOfMeasureSymbol === defaultUnitOfMeasure &&\r\n conversion.ToUnitOfMeasureSymbol && acceptedToUnits.includes(conversion.ToUnitOfMeasureSymbol));\r\n}\r\n\r\nexport function getPcsConversion(conversions: UnitOfMeasureConversion[]): UnitOfMeasureConversion | undefined {\r\n const acceptedFromUnits = [\r\n 'Krt-M1',\r\n 'Krt-BS'\r\n ];\r\n const acceptedToUnits = [\r\n 'stk',\r\n 'Stykk',\r\n 'Stk-BS',\r\n 'Pose-BS'\r\n ];\r\n\r\n return conversions?.find(conversion =>\r\n (conversion.FromUnitOfMeasureSymbol && acceptedFromUnits.includes(conversion.FromUnitOfMeasureSymbol)) &&\r\n (conversion.ToUnitOfMeasureSymbol && acceptedToUnits.includes(conversion.ToUnitOfMeasureSymbol)));\r\n}\r\n\r\nexport function getRoundedFactor(conversion: UnitOfMeasureConversion): number {\r\n // Only round if the conversion is kg/Kilogram\r\n if (conversion.Factor && (conversion.ToUnitOfMeasureSymbol === 'kg' || conversion.ToUnitOfMeasureSymbol === 'Kilogram')) {\r\n return Math.round((conversion.Factor + Number.EPSILON) * 100) / 100;\r\n } else {\r\n return conversion.Factor || 0;\r\n }\r\n}\r\n\r\nexport function getMinimumDecimals(unitOfMeasure: string | undefined): number {\r\n const units = [\r\n 'kg',\r\n 'Kilogram'\r\n ];\r\n return units.includes(unitOfMeasure || '') ? 2 : 0;\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 { AddToCartBehavior } from '@msdyn365-commerce/components';\r\nimport MsDyn365, {\r\n // @ts-ignore\r\n getUrlSync,\r\n /* isOboRequest */\r\n} from '@msdyn365-commerce/core';\r\nimport { ICartIconViewProps, ICartViewProps, IFlyoutCartLineItemViewProps } from '@msdyn365-commerce-modules/cart';\r\nimport { Button, getPayloadObject, INodeProps, KeyCodes, Modal, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\nimport { ICartIconProps as ICartIconExtensionProps } from '../definition-extensions/cart-icon.ext.props.autogenerated';\r\nimport CartIconComponent from './components/carticon.component';\r\nimport CartLineItemComponent from './components/cartlineitem.component';\r\n\r\n/**\r\n * ICartIconViewState: Interface for Cart Icon View State.\r\n */\r\ninterface ICartIconViewState {\r\n isModalOpen: boolean;\r\n}\r\n\r\n/**\r\n * Render Cart lines.\r\n * @param cartLines - Flyout cart line view props.\r\n * @param props - Cart icon view props.-\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\r\n if (!cartLines) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n\r\n return cartLines.map((cartLine, index) => {\r\n const cartLineIndex = index;\r\n\r\n // Component override stopped working in mini-cart after 9.48, force it here\r\n const cartLineProps = (cartLine.cartline as React.ReactElement).props;\r\n const cartLineComp = ;\r\n\r\n return (\r\n \r\n \r\n {cartLineComp}\r\n {/* {cartLine.cartline} */}\r\n \r\n {cartLine.storeLocation}\r\n {cartLine.remove}\r\n \r\n );\r\n });\r\n};\r\n\r\n/**\r\n * Initiate total price.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\r\n /* const cart = props.data.cart.result ?? undefined;\r\n const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\r\n const totalPrice = price\r\n ? props.context.cultureFormatter.formatCurrency(price)\r\n : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice); */\r\n\r\n const cart = props.data.cart.result ?? undefined;\r\n // Calculate total price from cart lines instead of cart object\r\n const sumPrice = props.data.cart.result?.cart.CartLines\r\n ?.map(x => (x.Price! * (x.Quantity || 1)))\r\n .reduce((sum, price) => sum + price, 0);\r\n const sumPriceFormatString = sumPrice\r\n ? props.context.cultureFormatter.formatCurrency(sumPrice) \r\n : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\r\n\r\n return cart && !cart.hasInvoiceLine ? (\r\n
\r\n \r\n {props.resources.totalPriceFormatString}\r\n {sumPriceFormatString}\r\n \r\n
\r\n ) : (\r\n <>\r\n );\r\n};\r\n\r\n/**\r\n *\r\n * CartIconView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class CartIconView extends React.PureComponent<\r\n ICartViewProps & ICartIconViewProps & ICartIconExtensionProps<{}>,\r\n ICartIconViewState\r\n> {\r\n private isAutoDisplayTriggered: boolean;\r\n\r\n private readonly cartIconRef: React.RefObject = React.createRef();\r\n\r\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\r\n super(props);\r\n this.isAutoDisplayTriggered = false;\r\n this.state = {\r\n isModalOpen: false\r\n };\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('keydown', this._escFunction, false);\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.removeEventListener('keydown', this._escFunction, false);\r\n }\r\n }\r\n\r\n /**\r\n * Render Cart Item count.\r\n * @returns JSX Element.\r\n */\r\n public render(): JSX.Element | null {\r\n const cart = this.props.data.cart.result ?? undefined;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\r\n const shouldShowMiniCart =\r\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\r\n if (shouldShowMiniCart) {\r\n if (!this.isAutoDisplayTriggered) {\r\n // First time trigger auto mini cart.\r\n this.setState({ isModalOpen: true });\r\n this.isAutoDisplayTriggered = true;\r\n } else if (!this.state.isModalOpen) {\r\n // If modal is closed, reset the flag.\r\n this.isAutoDisplayTriggered = false;\r\n }\r\n }\r\n const totalItemsInCart = this.props.data.cart.result && this.props.data.cart.result.cart.CartLines ? this.props.data.cart.result.cart.CartLines.length : 0;\r\n const goToCartButtonText = this.props.resources.goToCartButtonTitle.replace('{count}', totalItemsInCart.toString());\r\n /* Removed per Task 4253\r\n const _isCheckoutBlockedDueToUnavailableFunds=(): boolean=> {\r\n if (isOboRequest(this.props.context.request)) {\r\n const customerInfo = this.props.data.customerInformation && this.props.data.customerInformation?.result;\r\n return !!customerInfo && (!customerInfo.AllowOnAccountPayment || customerInfo.CreditLimit === 0);\r\n }\r\n\r\n return false;\r\n }\r\n const hasError = _isCheckoutBlockedDueToUnavailableFunds() || this.props.cartlines?.some(x => x.data?.cartline.NetAmountWithoutTax === 0); */\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {this.props.flyoutTitle}\r\n {this._renderCartItemCount(this.props)}\r\n {this._renderCartCloseIcon()}\r\n \r\n \r\n {cart?.isEmpty ? this.props.slots.emptyCart : null}\r\n \r\n {cart?.isEmpty\r\n ? null\r\n : \r\n }\r\n {renderCartlines(this.props.cartlines, this.props)}\r\n \r\n \r\n \r\n {this.props.slots.promoContentItem}\r\n {renderTotalPrice(this.props)}\r\n

{this.props.resources.subTotalMessage}

\r\n {/* Removed per Task 4253\r\n {this.props.checkoutAsSignInUserButton &&\r\n React.cloneElement(this.props.checkoutAsSignInUserButton as React.ReactElement,{disabled:hasError})} */}\r\n {this.props.checkoutAsGuestButton}\r\n {this.props.goToCartButton && React.cloneElement(this.props.goToCartButton as React.ReactElement, {\r\n 'children': goToCartButtonText\r\n })}\r\n {/* Removed per Task 5216 */}\r\n {/* \r\n {this.props.data.cart.result?.isEmpty ? (\r\n \r\n {this.props.resources.continueShoppingButtonTitle}\r\n \r\n ) : null}\r\n */}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Initiate modal container.\r\n * @returns Inode props.\r\n */\r\n private readonly _modalContainer = (): INodeProps => {\r\n return {\r\n tag: Modal,\r\n placement: 'bottom-end',\r\n hideArrow: true,\r\n className: 'ms-cart-icon__minicartmodal-container',\r\n wrapClassName: 'ms-cart-icon__minicartmodal',\r\n isOpen: this.state.isModalOpen,\r\n toggle: this.closeModal\r\n };\r\n };\r\n\r\n /**\r\n * Initiate open modal.\r\n */\r\n private readonly _openModal = (): void => {\r\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\r\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\r\n this.setState({\r\n isModalOpen: true\r\n });\r\n };\r\n\r\n /**\r\n * Initiate close modal.\r\n */\r\n private readonly closeModal = (): void => {\r\n this.cartIconRef.current?.focus();\r\n this.setState({\r\n isModalOpen: false\r\n });\r\n };\r\n\r\n /**\r\n * Initiate cart close Icon.\r\n * @returns JSX Element.\r\n */\r\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\r\n return \n \n \n {this.props.flyoutTitle}\n {this._renderCartItemCount(this.props)}\n {this._renderCartCloseIcon()}\n \n \n {this.props.data.cart.result?.isEmpty ? this.props.slots.emptyCart : null}\n {this.props.checkoutBlockedDueToUnavailableFunds}\n {renderCartlines(this.props.cartlines, this.props)}\n \n \n {this.props.slots.promoContentItem}\n {renderTotalPrice(this.props)}\n {renderSubtotalMessage(this.props)}\n {this.props.checkoutAsSignInUserButton}\n {this.props.checkoutAsGuestButton}\n {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton}\n \n {this.props.data.cart.result?.isEmpty ? (\n \n {this.props.resources.continueShoppingButtonTitle}\n \n ) : null}\n \n \n \n \n );\n }\n\n /**\n * Initiate modal container.\n * @returns Inode props.\n */\n private readonly _modalContainer = (): INodeProps => {\n return {\n tag: Modal,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__minicartmodal-container',\n wrapClassName: 'ms-cart-icon__minicartmodal',\n isOpen: this.state.isModalOpen,\n toggle: this.closeModal\n };\n };\n\n /**\n * Initiate open modal.\n */\n private readonly _openModal = (): void => {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\n this.setState({\n isModalOpen: true\n });\n };\n\n /**\n * Initiate close modal.\n */\n private readonly closeModal = (): void => {\n this.cartIconRef.current?.focus();\n this.setState({\n isModalOpen: false\n });\n };\n\n /**\n * Initiate cart close Icon.\n * @returns JSX Element.\n */\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\n return