{"version":3,"file":"static/js/6b352ce0cb6d422b2d06.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/discount-badge/discount-badge.tsx?6e5c","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/attributes/get-temperature-zone.ts?a94a","webpack://Msdyn365.Commerce.Online/./src/shared-utils/unit-conversion-utils.ts?1560","webpack://Msdyn365.Commerce.Online/./src/themes/dlvry-adventureworks/views/components/price.component.tsx?b372"],"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 hideUnitConversion?: 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 breakoffAvailable(): boolean {\r\n return this.productMultipleOfQuantity !== undefined && this.productMultipleOfQuantity > 1;\r\n }\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 (this.breakoffAvailable) {\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 (this.breakoffAvailable) {\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, hideUnitConversion } = 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 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 && this.breakoffAvailable && (\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 {!hideUnitConversion && (\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 }\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 * as React from 'react';\r\nimport classnames from 'classnames';\r\nimport { ICoreContext, Image, IImageSettings } from '@msdyn365-commerce/core';\r\n\r\ninterface IDiscountBadgeProps {\r\n context: ICoreContext;\r\n className?: string;\r\n badge: string | undefined;\r\n size: 'small' | 'medium' | 'large' | 'x-large';\r\n}\r\n\r\nfunction getDiscountBadgeSize(size: 'small' | 'medium' | 'large' | 'x-large'): { w: number, h: number } {\r\n switch (size) {\r\n case 'small':\r\n return { w: 48, h: 48 };\r\n case 'medium':\r\n return { w: 56, h: 56 };\r\n case 'large':\r\n return { w: 72, h: 72 };\r\n case 'x-large':\r\n default:\r\n return { w: 72, h: 72 };\r\n }\r\n}\r\n\r\nfunction getImageSettings(size: 'small' | 'medium' | 'large' | 'x-large'): IImageSettings {\r\n const { w, h } = getDiscountBadgeSize(size);\r\n\r\n return {\r\n viewports: {\r\n xs: { w, h, q: `w=${w}&h=${h}&q=80&m=0&f=png` },\r\n lg: { w, h, q: `w=${w}&h=${h}&q=80&m=0&f=png` },\r\n xl: { w, h, q: `w=${w}&h=${h}&q=80&m=0&f=png` }\r\n },\r\n quality: 80\r\n };\r\n}\r\n\r\nconst DiscountBadge = (props: IDiscountBadgeProps) => {\r\n const baseClassName = 'dlvry-discount-badge';\r\n\r\n if (!props.badge) {\r\n return null;\r\n }\r\n\r\n let baseImageUrl = props.context.request.apiSettings.baseImageUrl;\r\n\r\n if (baseImageUrl.endsWith('/')) {\r\n baseImageUrl = baseImageUrl.slice(0, -1);\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default DiscountBadge;\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 { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nimport { getAttributesLocale, getAttributeNumberOrDefault } from '../../shared-utils/attributes';\r\n\r\nexport function getTemperatureZone(lang: string, productSpecificationData: AttributeValue[] | undefined): string | undefined {\r\n if (!productSpecificationData) {\r\n return undefined;\r\n }\r\n\r\n const locale = getAttributesLocale(lang);\r\n // Use 10 as default value if no temperature is set\r\n const maxTemp = getAttributeNumberOrDefault(productSpecificationData, locale.temperatureMax, 10);\r\n\r\n if (maxTemp < 0) {\r\n return locale.frozen;\r\n } else if (maxTemp <= 4) {\r\n return locale.cool;\r\n } else {\r\n return locale.dry;\r\n }\r\n}\r\n\r\nexport function getTemperatureZoneIcon(context: ICoreContext, temperatureZone: string): string | undefined {\r\n const locale = getAttributesLocale(context.request.locale);\r\n\r\n switch (temperatureZone) {\r\n case locale.frozen:\r\n return 'frozen';\r\n case locale.cool:\r\n return 'cool';\r\n default:\r\n return undefined;\r\n }\r\n}\r\n","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 { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { DiscountLine, PriceLine, ProductPrice, ProductType, SalesAgreementPriceLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { Button, Collapse, format, ICollapseProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { ProductPriceExt } from '../../../../shared-utils/types';\r\n\r\nconst defaultPrice: number = 0;\r\nconst freePrice: number = 0;\r\n\r\n/**\r\n * Interface for price component resources.\r\n * @param {string} priceRangeSeparator - The price range separator.\r\n */\r\nexport interface IPriceComponentResources {\r\n priceRangeSeparator?: string;\r\n salesAgreementPricePrompt?: string;\r\n salesAgreementExpirationDatePrompt?: string;\r\n salesAgreementCommittedQuantityPrompt?: string;\r\n salesAgreementRemainingQuantityPrompt?: string;\r\n}\r\n\r\n/**\r\n * Interface for price component props.\r\n * @param {boolean} isPriceMinMaxEnabled - Whether the price range feature is enabled or not.\r\n * @param {IPriceComponentResources} priceResources - The price range resources.\r\n */\r\nexport interface IPriceComponentProps extends IComponentProps<{ price: ProductPrice }> {\r\n className?: string;\r\n product?: SimpleProduct;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n isPriceMinMaxEnabled?: boolean;\r\n isSalesAgreementPriceFeatureEnabled?: boolean;\r\n useLegacySalesAgreementHTMLFeature?: boolean;\r\n salesAgreementLineId?: number;\r\n priceResources?: IPriceComponentResources;\r\n salesAgreementDetailCollapseProps?: ICollapseProps;\r\n currencyCode?: string;\r\n salesAgreementDetailOnClick?(event: React.MouseEvent | React.KeyboardEvent): void;\r\n discountPercentageSide?: 'left' | 'right';\r\n}\r\n\r\n/**\r\n * The interface of price component.\r\n */\r\nexport interface IPriceComponent extends IComponent {}\r\n\r\nconst priceComponentActions = {};\r\n\r\n/**\r\n * Get the original price from price component props.\r\n * @param props - The IPriceComponentProps.\r\n * @returns The original price.\r\n */\r\nexport const getOriginalPrice = (price: ProductPrice): number => {\r\n let originalPrice = Math.max(\r\n price.TradeAgreementPrice || defaultPrice,\r\n price.AdjustedPrice || defaultPrice\r\n ) || price.BasePrice || defaultPrice;\r\n\r\n // Go through each discount line and apply discounts without \"Show\" in it\r\n getBaseDiscountLines(price.DiscountLines).forEach(discount => {\r\n originalPrice -= discount.EffectiveAmount ?? 0;\r\n });\r\n\r\n return originalPrice;\r\n};\r\n\r\nexport const getDiscountLines = (discountLines: DiscountLine[] | undefined) => {\r\n if (!discountLines || discountLines.length === 0) {\r\n return [];\r\n }\r\n\r\n // Go through each discount line and find lines with Show in it\r\n const discounts = discountLines.filter(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 && parts.includes('show');\r\n });\r\n\r\n return discounts;\r\n};\r\n\r\nexport const getBaseDiscountLines = (discountLines: DiscountLine[] | undefined) => {\r\n if (!discountLines || discountLines.length === 0) {\r\n return [];\r\n }\r\n\r\n // Go through each discount line and apply discounts without \"Show\" in it\r\n const baseDiscounts = discountLines.filter(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 || parts.length === 0 || !parts.includes('show');\r\n });\r\n\r\n return baseDiscounts;\r\n};\r\n\r\nexport const getDiscountPercentage = (price: ProductPriceExt): number => {\r\n if (price.OverrideDiscountPercentage) {\r\n return price.OverrideDiscountPercentage;\r\n }\r\n\r\n if (!price.CustomerContextualPrice) {\r\n return 0;\r\n }\r\n\r\n const originalPrice = getOriginalPrice(price);\r\n const percentage = 1 - (price.CustomerContextualPrice / originalPrice);\r\n\r\n return Math.floor(percentage * 100);\r\n\r\n // Go through each discount line and find lines with Show in it\r\n // METHOD: Shows the percentage defined in F&O directly\r\n /* const discounts = price.DiscountLines?.filter(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 && parts.includes('show');\r\n });\r\n\r\n return discounts?.reduce((acc, discount) => {\r\n // First use 'Percentage' if it exists, then 'EffectivePercentage' if it exists, then 0\r\n return acc + (discount.Percentage || Math.floor(discount.EffectivePercentage || 0) || 0);\r\n }, 0) ?? 0; */\r\n\r\n // Go through each discount line and find lines with Show in it\r\n // METHOD: Tries to get the percentage defined in F&O. Inaccurate\r\n /* const originalPrice = Math.max(\r\n price.BasePrice ?? defaultPrice,\r\n price.TradeAgreementPrice ?? defaultPrice,\r\n price.AdjustedPrice ?? defaultPrice\r\n );\r\n const discounts = price.DiscountLines?.filter(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 && parts.includes('show');\r\n });\r\n\r\n return discounts?.reduce((acc, discount) => {\r\n if (!discount.EffectiveAmount) {\r\n return acc;\r\n }\r\n\r\n return acc + Math.round(((discount.EffectiveAmount / originalPrice) * 100) + 0.2);\r\n }, 0) ?? 0; */\r\n};\r\n\r\nconst getActivePrice = (props: IPriceComponentProps): number => {\r\n if (showPriceRangeForMasterProduct(props) && props.data.price.MinVariantPrice !== undefined) {\r\n return props.data.price.MinVariantPrice;\r\n }\r\n\r\n if (props.data.price.CustomerContextualPrice !== undefined) {\r\n return props.data.price.CustomerContextualPrice;\r\n }\r\n\r\n return getOriginalPrice(props.data.price);\r\n};\r\n\r\n/**\r\n * Get the formatted currency.\r\n * @param props - The props.\r\n * @param price - The price.\r\n * @param shouldUseFreePriceText - The shouldUseFreePriceText.\r\n * @returns The formatted currency.\r\n */\r\nconst formatCurrency = (\r\n props: IPriceComponentProps,\r\n price: number | undefined,\r\n shouldUseFreePriceText: boolean | undefined,\r\n currencyCode?: string | undefined\r\n): string => {\r\n if (price === undefined) {\r\n return '';\r\n }\r\n\r\n if (shouldUseFreePriceText && price === freePrice && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n\r\n return props.context.cultureFormatter.formatCurrency(price, currencyCode);\r\n};\r\n\r\nconst showPriceRangeForMasterProduct = (props: IPriceComponentProps): boolean => {\r\n return (\r\n (props.isPriceMinMaxEnabled ?? false) &&\r\n (props.product?.ProductTypeValue === ProductType.Master || props.product?.ProductTypeValue === ProductType.KitMaster) &&\r\n props.data.price.MinVariantPrice !== undefined &&\r\n props.data.price.MaxVariantPrice !== undefined\r\n );\r\n};\r\n\r\n/**\r\n * ShowStrikethroughPricing.\r\n * @param props - The props.\r\n * @returns True if showStrikethroughPricing, false otherwise.\r\n */\r\n// @ts-ignore\r\nconst showStrikethroughPricing = (props: IPriceComponentProps): boolean => {\r\n const price = props.data.price as ProductPriceExt;\r\n const overrideDiscountPercentage = price.OverrideDiscountPercentage;\r\n\r\n if (!overrideDiscountPercentage && getDiscountLines(price.DiscountLines).length === 0) {\r\n return false;\r\n }\r\n\r\n if (overrideDiscountPercentage) {\r\n return overrideDiscountPercentage > 0;\r\n }\r\n\r\n const originalPrice = getOriginalPrice(price);\r\n\r\n if (originalPrice && price.CustomerContextualPrice) {\r\n const originalPriceFixed = parseFloat(originalPrice.toFixed(2));\r\n const customerContextualPriceFixed = parseFloat(price.CustomerContextualPrice.toFixed(2));\r\n return originalPriceFixed > customerContextualPriceFixed;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Render current price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\nconst renderCurrentPrice = (props: IPriceComponentProps): JSX.Element => {\r\n const maxVariantPrice: string = formatCurrency(props, props.data.price.MaxVariantPrice, false, props.currencyCode);\r\n const minVariantPrice: string = formatCurrency(props, props.data.price.MinVariantPrice, false, props.currencyCode);\r\n if (\r\n props.isPriceMinMaxEnabled &&\r\n props.data.price.MaxVariantPrice &&\r\n props.data.price.MinVariantPrice &&\r\n props.data.price.MaxVariantPrice > props.data.price.MinVariantPrice\r\n ) {\r\n return (\r\n \r\n \r\n {minVariantPrice}\r\n \r\n \r\n {props.priceResources?.priceRangeSeparator}\r\n \r\n \r\n {maxVariantPrice}\r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {formatCurrency(props, getActivePrice(props), true, props.currencyCode)}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render current price with original price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\n// @ts-ignore\r\nconst renderCurrentPriceWithOriginalPrice = (props: IPriceComponentProps): JSX.Element => {\r\n const originalPrice: number = getOriginalPrice(props.data.price);\r\n const initialPrice: string = formatCurrency(props, originalPrice, true);\r\n const discountPercentage = getDiscountPercentage(props.data.price);\r\n\r\n return (\r\n <>\r\n \r\n {` `}\r\n {props.originalPriceText}\r\n {` `}\r\n {initialPrice}\r\n {` `}\r\n {props.currentPriceText}\r\n {` `}\r\n {renderCurrentPrice(props)}\r\n \r\n \r\n {discountPercentage > 0 && -{discountPercentage}%}\r\n {props.savingsText && {props.savingsText}}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * The state of sales agreement details.\r\n * @deprecated This will be removed with SalesAgreementPrice class soon.\r\n */\r\nexport interface ISalesAgreementDetailState {\r\n isOpen: boolean;\r\n}\r\n\r\n/**\r\n * The SalesAgreementPrice class.\r\n * @deprecated This implementation is deprecated. It will be removed soon. Please use the implementation in the Price function component.\r\n */\r\n// eslint-disable-next-line react/require-optimization -- Not needed.\r\nclass SalesAgreementPrice extends React.Component {\r\n public constructor(props: IPriceComponentProps) {\r\n super(props);\r\n this._toggle = this._toggle.bind(this);\r\n this.state = {\r\n isOpen: true\r\n } as ISalesAgreementDetailState;\r\n }\r\n\r\n public render(): React.ReactElement {\r\n const priceLines: PriceLine[] = this.props.data.price.AttainablePriceLines ?? [];\r\n const firstPriceLine: SalesAgreementPriceLine = priceLines[0] as SalesAgreementPriceLine;\r\n if (this.props.salesAgreementDetailCollapseProps) {\r\n this.props.salesAgreementDetailCollapseProps.isOpen = this.state.isOpen;\r\n }\r\n return (\r\n \r\n

\r\n {formatCurrency(\r\n this.props,\r\n this.props.data.price.SalesAgreementPrice ?? this.props.data.price.CustomerContextualPrice,\r\n true\r\n )}\r\n

\r\n \r\n {this.props.priceResources?.salesAgreementPricePrompt}\r\n

\r\n \r\n

\r\n \r\n {/* Available date */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n this.props.priceResources?.salesAgreementExpirationDatePrompt ?? '',\r\n this.props.context.cultureFormatter.formatDate(firstPriceLine.EffectiveDate as Date),\r\n this.props.context.cultureFormatter.formatDate(firstPriceLine.ExpirationDate as Date)\r\n )}\r\n \r\n \r\n {/* Quantity commitment */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n this.props.priceResources?.salesAgreementCommittedQuantityPrompt ?? '',\r\n firstPriceLine.CommittedQuantity\r\n )}\r\n \r\n \r\n {/* Remaining quantity to qualify */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n this.props.priceResources?.salesAgreementRemainingQuantityPrompt ?? '',\r\n firstPriceLine.RemainingQuantity\r\n )}\r\n \r\n

\r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Callback which toggles collapse mode.\r\n * @param event - The mouse or keyboard event.\r\n */\r\n private _toggle(event: React.MouseEvent | React.KeyboardEvent): void {\r\n event.preventDefault();\r\n console.log(this.state.isOpen);\r\n // eslint-disable-next-line react/no-access-state-in-setstate -- Copied from other class.\r\n this.setState({ isOpen: !this.state.isOpen });\r\n console.log(this.state.isOpen);\r\n }\r\n}\r\n\r\nconst renderSalesAgreementDetail = (props: IPriceComponentProps): JSX.Element => {\r\n // In most cases there should be only one sales agreement line.\r\n // If there are more than one, only the first one will be shown.\r\n const firstPriceLine: SalesAgreementPriceLine = (props.data.price.AttainablePriceLines ?? [])[0] as SalesAgreementPriceLine;\r\n return (\r\n

\r\n

\r\n {/* Available date */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n props.priceResources?.salesAgreementExpirationDatePrompt ?? '',\r\n props.context.cultureFormatter.formatDate(firstPriceLine.EffectiveDate as Date),\r\n props.context.cultureFormatter.formatDate(firstPriceLine.ExpirationDate as Date)\r\n )}\r\n

\r\n

\r\n {/* Quantity commitment */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' + format(props.priceResources?.salesAgreementCommittedQuantityPrompt ?? '', firstPriceLine.CommittedQuantity)}\r\n

\r\n

\r\n {/* Remaining quantity to qualify */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' + format(props.priceResources?.salesAgreementRemainingQuantityPrompt ?? '', firstPriceLine.RemainingQuantity)}\r\n

\r\n

\r\n );\r\n};\r\n\r\n/**\r\n * Price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\nconst Price: React.FC = (props: IPriceComponentProps): JSX.Element | null => {\r\n // CustomerContextualPrice could be zero\r\n if (props.data.price.CustomerContextualPrice === undefined) {\r\n return null;\r\n }\r\n\r\n if (!props.context.request.user.isAuthenticated) {\r\n return null;\r\n }\r\n\r\n // Determine if contract price is avaiable/applied by:\r\n // isFeatureEnabled and SA price != 0, for PDP.\r\n // SA line id != 0, for cart line.\r\n if (props.isSalesAgreementPriceFeatureEnabled && props.data.price.SalesAgreementPrice !== 0) {\r\n if (props.useLegacySalesAgreementHTMLFeature) {\r\n const salesAgreementPrice = new SalesAgreementPrice(props);\r\n return {salesAgreementPrice.render()};\r\n } else {\r\n const [isExpanded, setIsExpanded] = React.useState(false);\r\n const toggle = () => {\r\n setIsExpanded(!isExpanded);\r\n };\r\n return (\r\n \r\n \r\n

\r\n {formatCurrency(props, props.data.price.SalesAgreementPrice ?? props.data.price.CustomerContextualPrice, true)}\r\n

\r\n \r\n {props.priceResources?.salesAgreementPricePrompt}\r\n \r\n {isExpanded && renderSalesAgreementDetail(props)}\r\n
\r\n
\r\n );\r\n }\r\n }\r\n\r\n const discountPercentageSide = props.discountPercentageSide ?? 'right';\r\n\r\n return (\r\n \r\n {showStrikethroughPricing(props) ? renderCurrentPriceWithOriginalPrice(props) : renderCurrentPrice(props)}\r\n {/* {renderCurrentPrice(props)} */}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * The PriceComponent.\r\n */\r\nexport const PriceComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride('Price', {\r\n component: Price,\r\n ...priceComponentActions\r\n});\r\n\r\n\r\nexport default PriceComponent;"],"names":["_ref","className","label","checked","onChange","mini","miniLabel","internalChecked","setInternalChecked","React","Boolean","classnames","title","type","event","target","ProductListOrderQuantity","constructor","props","super","inputRef","_getInitialBreakoff","initialValue","product","_product$Behavior","multiplier","Behavior","MultipleOfQuantity","factor","Math","round","Number","EPSILON","breakoff","_getUnitOfMeasureConversion","_this$props$product","_this$props$unitConve","_this$props$product3","this","unitConversions","DefaultUnitOfMeasure","conversions","filter","x","_this$props$product2","FromUnitOfMeasureSymbol","conversion","getMostRelevantConversion","getRoundedFactor","toLocaleString","locale","minimumFractionDigits","getMinimumDecimals","ToUnitOfMeasureSymbol","maximumFractionDigits","useGrouping","defaultUOM","humanizeUnitOfMeasure","context","conversionUOM","toLocaleLowerCase","_convertIncomingQuantity","quantity","multipleOf","_convertOutgoingQuantity","outgoing","_onToggleBreakoff","_this$props$onBreakof","_this$props","setState","onBreakoffChange","call","_clamp","total","productMinimumQuantity","productMaximumQuantity","_isValidNewQuantity","newQuantity","allowZero","isNaN","minimum","maximum","currentCount","_this$productMinimumQ","breakoffAvailable","breakoffState","state","currentInput","parsedCurrentInput","parseFloat","bind","_handleChange","_validateQuantity","undefined","productMultipleOfQuantity","_this$props$product4","_this$props$product5","DefaultQuantity","_this$props$product6","MaximumQuantity","_this$props$product7","MinimumQuantity","_this$props$product8","_this$props$product9","_this$props$product10","uom","includes","componentDidMount","when","_this$productMinimumQ2","multipler","reaction","_this$props$currentCo","replace","oldQuantity","newValue","_this$props$currentCo2","newInput","_this$props$product11","showDecimals","toString","render","hideUnitConversion","disabled","incDisabled","currentValue","baseClassName","miniBreakoff","legacyBreakoff","extraClass","getChangeHandler","action","amount","productDefaultQuantity","calcTotal","change","newAmount","newTotal","_onIncrementalChange","Switch","decrementButtonAriaLabel","onClick","tabIndex","color","pattern","value","onBlur","onKeyPress","e","fieldValue","fieldHasCommaOrDot","keyIsCommaOrDot","key","test","preventDefault","separator","_Intl$NumberFormat$fo","Intl","NumberFormat","formatToParts","find","part","getDecimalSeparator","inputQuantityAriaLabel","role","ref","incrementButtonAriaLabel","totalFormatted","UnitOfMeasure","simpleProduct","updatedQuantity","_this$props$onChange","_this$props2","persist","_this$props$onChange2","_this$props3","_this$_clamp","max","_this$props$onChange3","_this$props4","defaultProps","decrementGlyphClass","incrementGlyphClass","__decorate","computed","observer","getImageSettings","size","w","h","getDiscountBadgeSize","viewports","xs","q","lg","xl","quality","badge","baseImageUrl","request","apiSettings","endsWith","slice","Image","requestContext","src","gridSettings","imageSettings","loadFailureBehavior","translations","unitOfMeasure","_translations$locale","_props$simpleProduct","disableTranslate","app","config","disableUnitReplace","url","requestUrl","searchParams","get","toLowerCase","getTemperatureZone","lang","productSpecificationData","getAttributesLocale","maxTemp","getAttributeNumberOrDefault","temperatureMax","frozen","cool","dry","getTemperatureZoneIcon","temperatureZone","acceptedToUnits","unit","getKilogramConversion","defaultUnitOfMeasure","getPcsConversion","acceptedFromUnits","Factor","getOriginalPrice","price","originalPrice","TradeAgreementPrice","AdjustedPrice","BasePrice","getBaseDiscountLines","DiscountLines","forEach","discount","_discount$EffectiveAm","EffectiveAmount","getDiscountLines","discountLines","length","_x$OfferName","matches","OfferName","match","parts","split","map","trim","_x$OfferName2","getDiscountPercentage","OverrideDiscountPercentage","CustomerContextualPrice","percentage","floor","formatCurrency","shouldUseFreePriceText","currencyCode","freePriceText","cultureFormatter","showPriceRangeForMasterProduct","_props$isPriceMinMaxE","_props$product","_props$product2","isPriceMinMaxEnabled","ProductTypeValue","ProductType","Master","KitMaster","data","MinVariantPrice","MaxVariantPrice","renderCurrentPrice","maxVariantPrice","minVariantPrice","_props$priceResources","itemProp","priceResources","priceRangeSeparator","getActivePrice","SalesAgreementPrice","_toggle","isOpen","_this$props$data$pric","_this$props$data$pric2","_this$props$priceReso","_this$props$priceReso2","_this$props$priceReso3","_this$props$priceReso4","_this$props$priceReso5","_this$props$priceReso6","_this$props$priceReso7","firstPriceLine","AttainablePriceLines","salesAgreementDetailCollapseProps","salesAgreementPricePrompt","Collapse","Object","assign","format","salesAgreementExpirationDatePrompt","formatDate","EffectiveDate","ExpirationDate","salesAgreementCommittedQuantityPrompt","CommittedQuantity","salesAgreementRemainingQuantityPrompt","RemainingQuantity","console","log","PriceComponent","msdyn365Commerce","createComponentOverride","_objectSpread","component","_props$discountPercen","user","isAuthenticated","isSalesAgreementPriceFeatureEnabled","useLegacySalesAgreementHTMLFeature","salesAgreementPrice","_props$data$price$Sal","_props$priceResources8","_props$priceResources9","isExpanded","setIsExpanded","toggle","Button","_props$data$price$Att","_props$priceResources2","_props$priceResources3","_props$priceResources4","_props$priceResources5","_props$priceResources6","_props$priceResources7","renderSalesAgreementDetail","discountPercentageSide","overrideDiscountPercentage","toFixed","showStrikethroughPricing","initialPrice","discountPercentage","originalPriceText","currentPriceText","savingsText","renderCurrentPriceWithOriginalPrice"],"sourceRoot":""}