{"version":3,"file":"static/js/f2a56fc45f8c04d2795a.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/actions/get-attributes-for-selected-variant.ts?32ae","webpack://Msdyn365.Commerce.Online/./src/actions/entities/validate-alcohol-license.ts?763b","webpack://Msdyn365.Commerce.Online/./src/actions/validate-alcohol-license.action.ts?c46b","webpack://Msdyn365.Commerce.Online/./src/components/allergens-icon-grid/allergens-icon-grid.tsx?097a","webpack://Msdyn365.Commerce.Online/./src/components/allergens-icon-grid/get-icon.tsx?6936","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/toast/toast.ts?c1fc","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":["/*!\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 {\r\n CacheType,\r\n createObservableDataAction,\r\n getCatalogId,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { AttributeValue, ProductsDataActions, SimpleProduct, StoreOperationsDataActions, QueryResultSettings } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getAttributeValuesByConfiguration,\r\n getSelectedProductIdFromActionInput,\r\n getSelectedVariant,\r\n // @ts-ignore\r\n QueryResultSettingsProxy,\r\n SelectedVariantInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Chains getting the SelectedVariant with GetActivePrice.\r\n */\r\nexport class AttributesForSelectedVariantInput implements IActionInput {\r\n public locale: string;\r\n\r\n public productId: number;\r\n\r\n public channelId: number;\r\n\r\n public catalogId: number;\r\n\r\n public selectedProduct: SimpleProduct | undefined;\r\n\r\n constructor(locale: string, productId: number, channelId: number, selectedProduct?: SimpleProduct, catalogId?: number) {\r\n this.locale = locale;\r\n this.productId = productId;\r\n this.channelId = channelId;\r\n this.selectedProduct = selectedProduct;\r\n this.catalogId = catalogId || 0;\r\n }\r\n\r\n public getCacheKey = () => `AttributesForSelectedVariant-Locale:${this.locale.toLowerCase()}-ChannelId:${this.channelId}-CatalogId:${this.catalogId}-ProductId:${this.productId}`;\r\n\r\n public getCacheObjectType = () => 'ProductAttributeValue';\r\n\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\nexport const createAttributesForSelectedVariantInput = (\r\n inputData: ICreateActionContext>\r\n): AttributesForSelectedVariantInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n const catalogId = getCatalogId(inputData.requestContext);\r\n\r\n if (productId) {\r\n return new AttributesForSelectedVariantInput(inputData.requestContext.locale, +productId, +inputData.requestContext.apiSettings.channelId, undefined, catalogId);\r\n }\r\n throw new Error('Unable to create PriceForSelectedVariantInput, no productId found on module config or query');\r\n};\r\n\r\n/**\r\n * Calls the Retail API a get a list of dimension values for a given product.\r\n * @param input - The input.\r\n * @param context - The context.\r\n * @returns The attribute values.\r\n */\r\nexport async function getAttributesForSelectedVariantAction(\r\n input: AttributesForSelectedVariantInput,\r\n context: IActionContext\r\n): Promise {\r\n return Promise.resolve()\r\n .then(() => {\r\n const activeProduct: SimpleProduct | undefined = input.selectedProduct;\r\n\r\n if (!activeProduct) {\r\n const selectedVariantInput = new SelectedVariantInput(\r\n input.productId,\r\n input.channelId,\r\n undefined,\r\n undefined,\r\n context.requestContext\r\n );\r\n\r\n return getSelectedVariant(selectedVariantInput, context);\r\n }\r\n\r\n return activeProduct;\r\n })\r\n .then((productResult: SimpleProduct | null) => {\r\n const activeProduct: SimpleProduct | undefined = productResult;\r\n\r\n if (activeProduct) {\r\n const queryResultSettings = {\r\n Paging: undefined,\r\n Sorting: undefined\r\n } as QueryResultSettings;\r\n return ProductsDataActions.getAttributeValuesAsync(\r\n {\r\n callerContext: context,\r\n queryResultSettings: queryResultSettings // QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\r\n },\r\n activeProduct.RecordId,\r\n input.channelId,\r\n input.catalogId\r\n );\r\n }\r\n\r\n return null;\r\n })\r\n .then(async (attributeValues: AttributeValue[] | null) => {\r\n const channelInventoryConfiguration = await StoreOperationsDataActions.getInventoryConfigurationAsync({\r\n callerContext: context\r\n });\r\n\r\n return { attributeValues, channelInventoryConfiguration };\r\n })\r\n .then(result => {\r\n return getAttributeValuesByConfiguration(result.attributeValues, result.channelInventoryConfiguration);\r\n })\r\n .catch((error: Error) => {\r\n context.trace(error.message);\r\n throw new Error('[getPriceForSelectedVariantAction]Error executing action');\r\n });\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/product-info/get-attributes-for-selected-variant',\r\n action: >getAttributesForSelectedVariantAction,\r\n input: createAttributesForSelectedVariantInput\r\n});\r\n","import * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\n\r\n/**\r\n * AlcoholLicenseValidationDetails entity interface.\r\n */\r\nexport interface IAlcoholLicenseValidationDetails {\r\n Message?: string;\r\n LicenseNeeded?: number;\r\n ProductId?: number;\r\n}\r\n\r\n/**\r\n * AlcoholValidationCriteria entity interface.\r\n */\r\nexport interface IAlcoholValidationCriteria {\r\n ProductIds: number[];\r\n CatalogId: number;\r\n}\r\n\r\n/**\r\n * ValidateAlcoholLicenseResult entity interface.\r\n */\r\nexport interface IValidateAlcoholLicenseResult {\r\n ValidationResult?: boolean;\r\n CustomerLicense?: number;\r\n Details?: IAlcoholLicenseValidationDetails[];\r\n}\r\n\r\n/**\r\n * AlcoholValidationCriteria entity class.\r\n */\r\nexport class AlcoholValidationCriteriaExtensionClass implements IAlcoholValidationCriteria {\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ProductIds: number[];\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public CatalogId: number;\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.CatalogId = odataObject.CatalogId;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ProductIds = undefined;\r\n if (odataObject.ProductIds) {\r\n this.ProductIds = [];\r\n for (var i = 0; i < odataObject.ProductIds.length; i++) {\r\n if (odataObject.ProductIds[i]) {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ProductIds[i] =\r\n parseInt(odataObject.ProductIds[i], 10);\r\n\r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ProductIds[i] = undefined;\r\n }\r\n }\r\n }\r\n\r\n }\r\n}\r\n\r\n/**\r\n * AlcoholLicenseValidationDetails entity class.\r\n */\r\nexport class AlcoholLicenseValidationDetailsExtensionClass implements IAlcoholLicenseValidationDetails {\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Message: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public LicenseNeeded: number;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ProductId: number;\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Message = odataObject.Message;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.LicenseNeeded = odataObject.LicenseNeeded;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ProductId = (odataObject.ProductId) ? parseInt(odataObject.ProductId, 10) : 0;\r\n }\r\n}\r\n\r\n/**\r\n * ValidateAlcoholLicenseResult entity class.\r\n */\r\nexport class ValidateAlcoholLicenseResultExtensionClass implements IValidateAlcoholLicenseResult {\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ValidationResult: boolean;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public CustomerLicense: number;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Details: IAlcoholLicenseValidationDetails[];\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ValidationResult = odataObject.ValidationResult;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.CustomerLicense = odataObject.CustomerLicense;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Details = undefined;\r\n if (odataObject.Details) {\r\n this.Details = [];\r\n for (var i = 0; i < odataObject.Details.length; i++) {\r\n if (odataObject.Details[i]) {\r\n if (odataObject.Details[i]['@odata.type']) {\r\n var className: string = odataObject.Details[i]['@odata.type'];\r\n className = className.substr(className.lastIndexOf('.') + 1).concat(\"Class\");\r\n if (EntityClasses[className]) {\r\n this.Details[i] = new EntityClasses[className](odataObject.Details[i]);\r\n }\r\n } else {\r\n this.Details[i] = new AlcoholLicenseValidationDetailsExtensionClass(odataObject.Details[i]);\r\n }\r\n\r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Details[i] = undefined;\r\n }\r\n }\r\n }\r\n\r\n }\r\n}","import { IActionContext } from '@msdyn365-commerce/core';\r\nimport { DataServiceQuery, IDataServiceRequest, callActionOrExecute } from \"@msdyn365-commerce/retail-proxy\";\r\nimport { ValidateAlcoholLicenseResultExtensionClass, IValidateAlcoholLicenseResult, IAlcoholValidationCriteria } from './entities/validate-alcohol-license';\r\n\r\nfunction validateAlcoholLicenseQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n}\r\n\r\nexport function validateAlcoholLicenseInput(validationCriteria: IAlcoholValidationCriteria): IDataServiceRequest {\r\n const query = validateAlcoholLicenseQuery();\r\n return query.createDataServiceRequestForOperation(\r\n 'ValidateAlcoholLicense',\r\n true,\r\n ValidateAlcoholLicenseResultExtensionClass,\r\n 'false',\r\n { bypassCache: 'get', returnEntity: 'IValidateAlcoholLicenseResult' },\r\n {\r\n validationCriteria: validationCriteria\r\n }\r\n );\r\n}\r\n\r\nexport async function validateAlcoholLicenseAsync(ctx: IActionContext, validationCriteria: IAlcoholValidationCriteria): Promise {\r\n const request = validateAlcoholLicenseInput(validationCriteria);\r\n const result = await callActionOrExecute(request, ctx);\r\n return result;\r\n}\r\n","import React from 'react';\r\nimport classnames from 'classnames';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { getIcon } from './get-icon';\r\nimport { IParsedAttribute, getAttributesLocale, parseAttributesMap } from '../../shared-utils/attributes';\r\n\r\nexport interface IAllergensIconGridProps {\r\n className?: string;\r\n context: ICoreContext;\r\n attributes: AttributeValue[] | undefined;\r\n type: 'contains' | 'contains-traces';\r\n}\r\n\r\nfunction sortParsedAttributes(a: IParsedAttribute, b: IParsedAttribute) {\r\n return a.name.localeCompare(b.name);\r\n}\r\n\r\nexport const AllergensIconGrid = (props: IAllergensIconGridProps) => {\r\n const { className, context, attributes, type } = props;\r\n\r\n if (!attributes) {\r\n return null;\r\n }\r\n\r\n const parsed = parseAttributesMap(context, attributes);\r\n const attributeLocale = getAttributesLocale(props.context.request.locale);\r\n const allergens = parsed.find(x => x.name === attributeLocale.groups.allergens)?.attributes?.sort(sortParsedAttributes);\r\n\r\n if (!allergens) {\r\n return null;\r\n }\r\n\r\n const contains = allergens.filter(x => x.value === attributeLocale.labels.yes);\r\n const containsTraces = allergens.filter(x => x.value === attributeLocale.labels.canContains);\r\n\r\n if (type === 'contains' && contains.length === 0 || type === 'contains-traces' && containsTraces.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n

{type === 'contains' ? attributeLocale.labels.contains : attributeLocale.labels.canContains}

\r\n
\r\n
    \r\n {(type === 'contains' ? contains : containsTraces).map(x => (\r\n
  • \r\n
    \r\n {getIcon(x.name, props.context.request)}\r\n
    \r\n
    {x.name}
    \r\n
  • \r\n ))}\r\n
\r\n
\r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { getAsset, IRequestContext } from '@msdyn365-commerce/core';\r\n\r\nexport const getIcon = (name: string | undefined, context: IRequestContext): JSX.Element => {\r\n switch (name) {\r\n case 'Gluten':\r\n case 'Spelt gluten':\r\n case 'Bygg gluten':\r\n case 'Havre gluten':\r\n case 'Hvete gluten':\r\n case 'Rug gluten':\r\n case 'Khorasanhvete gluten':\r\n case 'Barley gluten':\r\n case 'Oat gluten':\r\n case 'Wheat gluten':\r\n case 'Rye gluten':\r\n case 'Khorasan wheat gluten':\r\n return ;\r\n case 'Nøtter':\r\n case 'Hasselnøtter':\r\n case 'Valnøtter':\r\n case 'Macademiannøtter':\r\n case 'Mandler':\r\n case 'Paranøtter':\r\n case 'Peanøtter':\r\n case 'Pekannøtter':\r\n case 'Pistasienøtter':\r\n case 'Kasjunøtter':\r\n case 'Nuts':\r\n case 'Hazelnuts':\r\n case 'Walnuts':\r\n case 'Macadamia nuts':\r\n case 'Almonds':\r\n case 'Brazil nuts':\r\n case 'Peanuts':\r\n case 'Pecan nuts':\r\n case 'Pistachio nuts':\r\n case 'Cashew nuts':\r\n return ;\r\n case 'Sesamfrø':\r\n case 'Soya':\r\n case 'Sesame seeds':\r\n case 'Soy':\r\n return ;\r\n case 'Selleri':\r\n case 'Celery':\r\n return ;\r\n case 'Egg':\r\n return ;\r\n case 'Fisk':\r\n case 'Fish':\r\n return ;\r\n case 'Melk':\r\n case 'Milk':\r\n return ;\r\n case 'Sennep':\r\n case 'Mustard':\r\n return ;\r\n default:\r\n return ;\r\n }\r\n};\r\n","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 } 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' | 'large' | 'x-large';\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","export interface IToastViewProps {\r\n header?: string;\r\n text: string;\r\n footer?: string;\r\n autoClose: number;\r\n position: string;\r\n onClose?(): void;\r\n canClose: boolean;\r\n showProgress: boolean;\r\n type?: 'success' | 'error' | 'warning' | 'info';\r\n link?: string;\r\n linkLabel?: string;\r\n}\r\n\r\nexport const toast = (props: IToastViewProps) => {\r\n new Toast(props);\r\n};\r\n\r\nclass Toast {\r\n\r\n private readonly _props: IToastViewProps;\r\n private _toastElem: HTMLElement;\r\n private _headElem: HTMLElement | undefined;\r\n private _textElem: HTMLElement;\r\n private _footElem: HTMLElement | undefined;\r\n // @ts-ignore\r\n private _removeBinded(): void;\r\n // @ts-ignore\r\n private _unpause(): void;\r\n // @ts-ignore\r\n private _pause(): void;\r\n // @ts-ignore\r\n private _visibilityChange(): void;\r\n private _isPaused: boolean = false;\r\n private _shouldUnPause: boolean = true;\r\n private _timeVisible: number = 0;\r\n private _autoCloseInterval: number = 0;\r\n private _progressInterval: number = 0;\r\n\r\n constructor(input: IToastViewProps) {\r\n this._props = input;\r\n\r\n this._toastElem = document.createElement(\"div\");\r\n this._textElem = document.createElement(\"span\");\r\n\r\n if (this._props.header) {\r\n this._headElem = document.createElement(\"h4\");\r\n this._headElem.textContent = this._props.header;\r\n this._toastElem.appendChild(this._headElem);\r\n } else {\r\n this._textElem.classList.add(\"no-header\");\r\n }\r\n\r\n this._toastElem.appendChild(this._textElem);\r\n\r\n if (this._props.link) {\r\n // Cart button\r\n const cartButton = document.createElement(\"a\");\r\n cartButton.classList.add(\"toast-button\");\r\n cartButton.setAttribute('aria-label', this._props.linkLabel || this._props.link);\r\n cartButton.textContent = this._props.linkLabel || this._props.link;\r\n cartButton.href = this._props.link;\r\n this._toastElem.appendChild(cartButton);\r\n }\r\n\r\n if (this._props.footer) {\r\n this._footElem = document.createElement(\"div\");\r\n this._footElem.classList.add(\"footer\");\r\n this._footElem.textContent = this._props.footer;\r\n this._toastElem.appendChild(this._footElem);\r\n }\r\n\r\n this._toastElem.classList.add(\"toast\");\r\n this._toastElem.classList.add(this._props.type || 'info');\r\n requestAnimationFrame(() => {\r\n this._toastElem.classList.add(\"show\");\r\n });\r\n this._removeBinded = this._remove.bind(this);\r\n this._unpause = () => (this._isPaused = false);\r\n this._pause = () => (this._isPaused = true);\r\n this._visibilityChange = () => {\r\n this._shouldUnPause = document.visibilityState === \"visible\";\r\n };\r\n this._setup();\r\n }\r\n\r\n private readonly _autoClose = () => {\r\n if (this._props.autoClose === 0) {\r\n return;\r\n }\r\n this._timeVisible = 0;\r\n let lastTime: number | null = null;\r\n const func = (time: number) => {\r\n if (this._shouldUnPause) {\r\n lastTime = null;\r\n this._shouldUnPause = false;\r\n }\r\n if (lastTime === null) {\r\n lastTime = time;\r\n this._autoCloseInterval = requestAnimationFrame(func);\r\n return;\r\n }\r\n if (!this._isPaused) {\r\n this._timeVisible += time - lastTime;\r\n if (this._timeVisible >= this._props.autoClose) {\r\n this._remove();\r\n return;\r\n }\r\n }\r\n lastTime = time;\r\n this._autoCloseInterval = requestAnimationFrame(func);\r\n };\r\n this._autoCloseInterval = requestAnimationFrame(func);\r\n };\r\n\r\n private readonly _position = () => {\r\n const currentContainer = this._toastElem.parentElement;\r\n const selector = `.toast-container[data-position=\"${this._props.position}\"]`;\r\n const container = document.querySelector(selector) || this._createContainer(this._props.position);\r\n container.append(this._toastElem);\r\n if (currentContainer === null || currentContainer.hasChildNodes()) {\r\n return;\r\n }\r\n currentContainer.remove();\r\n };\r\n\r\n private readonly _text = () => {\r\n this._textElem.textContent = this._props.text;\r\n };\r\n\r\n private readonly _canClose = () => {\r\n this._toastElem.classList.toggle(\"can-close\", this._props.canClose);\r\n /* if (this._props.canClose) {\r\n this._toastElem.addEventListener(\"click\", this._removeBinded);\r\n } else {\r\n this._toastElem.removeEventListener(\"click\", this._removeBinded);\r\n } */\r\n\r\n if (this._props.canClose) {\r\n const closeButton = document.createElement(\"button\");\r\n closeButton.classList.add(\"close-button\");\r\n closeButton.addEventListener(\"click\", this._removeBinded);\r\n\r\n const closeIcon = document.createElement(\"i\");\r\n closeIcon.classList.add(\"fa-solid\", \"fa-xmark\");\r\n closeButton.appendChild(closeIcon);\r\n\r\n this._toastElem.appendChild(closeButton);\r\n }\r\n };\r\n\r\n private readonly _showProgress = () => {\r\n this._toastElem.classList.toggle(\"progress\", this._props.showProgress);\r\n // @ts-ignore\r\n this._toastElem.style.setProperty(\"--progress\", 1);\r\n\r\n if (this._props.showProgress) {\r\n const func = () => {\r\n if (!this._isPaused) {\r\n this._toastElem.style.setProperty(\r\n \"--progress\",\r\n // @ts-ignore\r\n 1 - this._timeVisible / this._props.autoClose\r\n );\r\n }\r\n this._progressInterval = requestAnimationFrame(func);\r\n };\r\n this._progressInterval = requestAnimationFrame(func);\r\n }\r\n };\r\n\r\n private readonly _pauseOnHover = () => {\r\n this._toastElem.addEventListener(\"mouseenter\", this._pause);\r\n this._toastElem.addEventListener(\"mouseleave\", this._unpause);\r\n };\r\n\r\n private readonly _setup = () => {\r\n this._autoClose();\r\n this._position();\r\n this._text();\r\n this._canClose();\r\n this._showProgress();\r\n this._pauseOnHover();\r\n };\r\n\r\n private readonly _remove = () => {\r\n cancelAnimationFrame(this._autoCloseInterval);\r\n cancelAnimationFrame(this._progressInterval);\r\n const container = this._toastElem.parentElement;\r\n this._toastElem.classList.remove(\"show\");\r\n this._toastElem.addEventListener(\"transitionend\", () => {\r\n this._toastElem.remove();\r\n if (container?.hasChildNodes()) {\r\n return;\r\n }\r\n container?.remove();\r\n });\r\n this._props.onClose?.();\r\n };\r\n\r\n private readonly _createContainer = (position: string): Element => {\r\n const container = document.createElement(\"div\");\r\n container.classList.add(\"toast-container\");\r\n container.dataset.position = position;\r\n document.body.append(container);\r\n return container;\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 { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { 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}\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\nconst getOriginalPrice = (props: IPriceComponentProps): number => {\r\n return Math.max(\r\n props.data.price.BasePrice ?? defaultPrice,\r\n props.data.price.TradeAgreementPrice ?? defaultPrice,\r\n props.data.price.AdjustedPrice ?? defaultPrice\r\n );\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);\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);\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 return originalPrice > props.data.price.CustomerContextualPrice;\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);\r\n const initialPrice: string = formatCurrency(props, originalPrice, true);\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 \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 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":["AttributesForSelectedVariantInput","constructor","locale","productId","channelId","selectedProduct","catalogId","getCacheKey","this","toLowerCase","getCacheObjectType","dataCacheType","createAttributesForSelectedVariantInput","inputData","getSelectedProductIdFromActionInput","getCatalogId","requestContext","apiSettings","undefined","Error","async","getAttributesForSelectedVariantAction","input","context","Promise","resolve","then","activeProduct","selectedVariantInput","SelectedVariantInput","getSelectedVariant","productResult","queryResultSettings","Paging","Sorting","ProductsDataActions","callerContext","RecordId","attributeValues","channelInventoryConfiguration","StoreOperationsDataActions","result","getAttributeValuesByConfiguration","catch","error","trace","message","createObservableDataAction","id","action","AlcoholLicenseValidationDetailsExtensionClass","odataObject","Message","LicenseNeeded","ProductId","parseInt","ValidateAlcoholLicenseResultExtensionClass","ValidationResult","CustomerLicense","Details","i","length","className","substr","lastIndexOf","concat","EntityClasses","validateAlcoholLicenseInput","validationCriteria","DataServiceQuery","createDataServiceRequestForOperation","bypassCache","returnEntity","validateAlcoholLicenseAsync","ctx","request","callActionOrExecute","sortParsedAttributes","a","b","name","localeCompare","AllergensIconGrid","props","_parsed$find","attributes","type","parsed","parseAttributesMap","attributeLocale","getAttributesLocale","allergens","find","x","groups","sort","contains","filter","value","labels","yes","containsTraces","canContains","React","classnames","map","key","trim","getIcon","src","getAsset","_ref","label","checked","onChange","mini","miniLabel","internalChecked","setInternalChecked","Boolean","title","event","target","ProductListOrderQuantity","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","unitConversions","DefaultUnitOfMeasure","conversions","_this$props$product2","FromUnitOfMeasureSymbol","conversion","getMostRelevantConversion","getRoundedFactor","toLocaleString","minimumFractionDigits","getMinimumDecimals","ToUnitOfMeasureSymbol","maximumFractionDigits","useGrouping","defaultUOM","humanizeUnitOfMeasure","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","_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","amount","productDefaultQuantity","calcTotal","change","newAmount","newTotal","_onIncrementalChange","Switch","decrementButtonAriaLabel","onClick","tabIndex","color","pattern","onBlur","onKeyPress","e","fieldValue","fieldHasCommaOrDot","keyIsCommaOrDot","test","preventDefault","separator","_Intl$NumberFormat$fo","Intl","NumberFormat","formatToParts","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","badge","baseImageUrl","endsWith","slice","size","toast","Toast","_isPaused","_shouldUnPause","_timeVisible","_autoCloseInterval","_progressInterval","_autoClose","_props","autoClose","lastTime","func","time","requestAnimationFrame","_remove","_position","currentContainer","_toastElem","parentElement","selector","position","document","querySelector","_createContainer","append","hasChildNodes","remove","_text","_textElem","textContent","text","_canClose","classList","toggle","canClose","closeButton","createElement","add","addEventListener","_removeBinded","closeIcon","appendChild","_showProgress","showProgress","style","setProperty","_pauseOnHover","_pause","_unpause","_setup","_this$_props$onClose","_this$_props","cancelAnimationFrame","container","onClose","dataset","body","header","_headElem","link","cartButton","setAttribute","linkLabel","href","footer","_footElem","_visibilityChange","visibilityState","translations","unitOfMeasure","_translations$locale","_props$simpleProduct","disableTranslate","app","config","disableUnitReplace","url","requestUrl","searchParams","get","acceptedToUnits","unit","getKilogramConversion","defaultUnitOfMeasure","getPcsConversion","acceptedFromUnits","Factor","getOriginalPrice","_props$data$price$Bas","_props$data$price$Tra","_props$data$price$Adj","data","price","BasePrice","TradeAgreementPrice","AdjustedPrice","formatCurrency","shouldUseFreePriceText","currencyCode","freePriceText","cultureFormatter","showPriceRangeForMasterProduct","_props$isPriceMinMaxE","_props$product","_props$product2","isPriceMinMaxEnabled","ProductTypeValue","ProductType","Master","KitMaster","MinVariantPrice","MaxVariantPrice","renderCurrentPrice","maxVariantPrice","minVariantPrice","_props$priceResources","itemProp","priceResources","priceRangeSeparator","CustomerContextualPrice","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","user","isAuthenticated","isSalesAgreementPriceFeatureEnabled","useLegacySalesAgreementHTMLFeature","salesAgreementPrice","_props$data$price$Sal","_props$priceResources8","_props$priceResources9","isExpanded","setIsExpanded","Button","_props$data$price$Att","_props$priceResources2","_props$priceResources3","_props$priceResources4","_props$priceResources5","_props$priceResources6","_props$priceResources7","renderSalesAgreementDetail"],"sourceRoot":""}