{"version":3,"file":"static/js/97194897dcd128f8e372.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/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 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 * 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 { 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\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.BasePrice ?? defaultPrice,\r\n price.TradeAgreementPrice ?? defaultPrice,\r\n price.AdjustedPrice ?? defaultPrice\r\n );\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: ProductPrice): number => {\r\n if ((price as any).OverrideDiscountPercentage) {\r\n return (price as any).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 originalPrice = getOriginalPrice(props.data.price);\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 props.data.price.MinVariantPrice < originalPrice;\r\n }\r\n\r\n if (originalPrice && props.data.price.CustomerContextualPrice) {\r\n const originalPriceFixed = parseFloat(originalPrice.toFixed(2));\r\n const customerContextualPriceFixed = parseFloat(props.data.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","_product$Behavior2","breakoffState","state","currentInput","parsedCurrentInput","parseFloat","bind","_handleChange","_validateQuantity","_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","undefined","_this$productMinimumQ2","_product$Behavior3","multipler","reaction","_this$props$currentCo","replace","oldQuantity","newValue","_this$props$currentCo2","newInput","_this$props$product11","showDecimals","toString","render","_product$Behavior4","_product$Behavior5","_product$Behavior6","_product$Behavior7","_product$Behavior8","disabled","incDisabled","currentValue","baseClassName","breakoffEnabled","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","acceptedToUnits","unit","getKilogramConversion","defaultUnitOfMeasure","getPcsConversion","acceptedFromUnits","Factor","getOriginalPrice","price","_price$BasePrice","_price$TradeAgreement","_price$AdjustedPrice","originalPrice","BasePrice","TradeAgreementPrice","AdjustedPrice","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","toFixed","showStrikethroughPricing","initialPrice","discountPercentage","originalPriceText","currentPriceText","savingsText","renderCurrentPriceWithOriginalPrice"],"sourceRoot":""}