{"version":3,"file":"static/js/e6cfad0d418738707510.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/product-list-component/components/allergens-modal/allergens-modal.tsx?35b5","webpack://Msdyn365.Commerce.Online/./src/components/product-list-component/components/modal.tsx?d916","webpack://Msdyn365.Commerce.Online/./src/components/product-list-component/components/product-information-modal/product-information-modal.tsx?baa8","webpack://Msdyn365.Commerce.Online/./src/components/product-list-component/components/use-get-attributes.ts?9d9e","webpack://Msdyn365.Commerce.Online/./src/components/product-list-component/locale/locale.ts?3b29","webpack://Msdyn365.Commerce.Online/./src/components/toast/toast.ts?c1fc","webpack://Msdyn365.Commerce.Online/./src/themes/dlvry-adventureworks/views/components/addtoordertemplate.component.tsx?f2a6"],"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 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\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 { ICoreContext } from '@msdyn365-commerce/core';\r\nimport React from 'react';\r\nimport { ModalComponent } from '../modal';\r\nimport { ProductListProduct } from '../../product-list-component';\r\nimport { AllergensIconGrid } from '../../../allergens-icon-grid';\r\nimport { useGetAttributes } from '../use-get-attributes';\r\nimport { getLocale } from '../../locale';\r\nimport { sortAttributes } from '../../../../shared-utils/attributes';\r\n\r\nexport interface IAllergensModalProps {\r\n className: string;\r\n onClose: () => void;\r\n product: ProductListProduct;\r\n context: ICoreContext;\r\n}\r\n\r\nexport const AllergensModal = (props: IAllergensModalProps) => {\r\n const { className, onClose, product, context } = props;\r\n const { loading, attributes } = useGetAttributes(product, context);\r\n const locale = getLocale(context.actionContext.requestContext.locale);\r\n\r\n if (loading) {\r\n return (\r\n \r\n

{locale.loading}...

\r\n
\r\n );\r\n }\r\n\r\n const allergens = attributes\r\n ?.filter(x => x.ExtensionProperties\r\n ?.some(prop => prop.Key === 'ATTRGROUPNAME' && prop.Value?.StringValue === locale.allergens))\r\n .sort(sortAttributes);\r\n const contains = allergens.filter(x => x.TextValue === locale.contains);\r\n const containsTraces = allergens.filter(x => x.TextValue === locale.canContainTracesAttribute);\r\n\r\n return (\r\n \r\n {contains.length === 0 && containsTraces.length === 0 && (\r\n <>\r\n

{locale.allergens}

\r\n
\r\n {locale.noAllergensDefined}\r\n
\r\n \r\n )}\r\n\r\n \r\n\r\n \r\n \r\n );\r\n};\r\n","import React, { useEffect } from \"react\";\r\nimport { Portal } from 'react-portal';\r\nimport classname from \"classnames\";\r\n\r\nexport interface IModalProps {\r\n className?: string;\r\n children: React.ReactNode;\r\n onClose?: () => void;\r\n}\r\n\r\nexport const ModalComponent: React.FC = (props: IModalProps) => {\r\n const { className, children, onClose } = props;\r\n const [mouseDontClose, setMouseDontClose] = React.useState(false);\r\n\r\n useEffect(() => {\r\n const handleKeyupEvent = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n onClose?.();\r\n }\r\n };\r\n\r\n document.addEventListener('keyup', handleKeyupEvent);\r\n\r\n const body = document.querySelector('body');\r\n if (body) {\r\n body.style.overflow = 'hidden';\r\n }\r\n return () => {\r\n document.removeEventListener('keyup', handleKeyupEvent);\r\n\r\n if (body) {\r\n body.style.overflow = 'auto';\r\n }\r\n };\r\n }, [onClose]);\r\n\r\n const handleMouseUpOutside = (e: React.MouseEvent) => {\r\n if (mouseDontClose) {\r\n setMouseDontClose(false);\r\n return;\r\n }\r\n onClose?.();\r\n };\r\n\r\n const handleMouseDownInside = (e: React.MouseEvent) => {\r\n setMouseDontClose(true);\r\n };\r\n\r\n const handleMouseUpInside = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n setMouseDontClose(false);\r\n };\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n {children}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nimport { ProductListProduct } from '../../product-list-component';\r\nimport classnames from 'classnames';\r\nimport { ModalComponent } from '../modal';\r\nimport { useGetAttributes } from '../use-get-attributes';\r\nimport { AllergensIconGrid } from '../../../allergens-icon-grid';\r\nimport { getLocale } from '../../locale';\r\nimport { IAttributeGroupMap, addCelsiusSign, getAttributeStringOrDefault, getAttributesLocale, parseAttributesMap } from '../../../../shared-utils/attributes';\r\n\r\nexport interface IProductInformationModalProps {\r\n className: string;\r\n onClose: () => void;\r\n product: ProductListProduct;\r\n context: ICoreContext;\r\n}\r\n\r\nexport interface IProductInformationTabProps {\r\n className: string;\r\n attributes: AttributeValue[];\r\n productInformation: {\r\n name: string,\r\n value: string\r\n }[] | undefined;\r\n context: ICoreContext;\r\n}\r\n\r\nexport interface INutritionalInformationTabProps {\r\n className: string;\r\n ingredients: string;\r\n nutritionalInformation: {\r\n name: string,\r\n value: string\r\n }[] | undefined;\r\n context: ICoreContext;\r\n}\r\n\r\nconst createProductInformationAttributesMap = (attributesLocale: any): IAttributeGroupMap[] => [\r\n {\r\n type: 'default',\r\n group: `${attributesLocale.groups.productInformation}`,\r\n attributes: [\r\n {\r\n name: attributesLocale.temperatureMin,\r\n transform: addCelsiusSign\r\n },\r\n {\r\n name: attributesLocale.temperatureMax,\r\n transform: addCelsiusSign\r\n },\r\n attributesLocale.gtin,\r\n attributesLocale.countryOfOrigin,\r\n attributesLocale.quantity,\r\n {\r\n name: attributesLocale.temperatureMax,\r\n label: attributesLocale.labels.temperatureZone,\r\n transform: (value) => {\r\n const maxTemp = Number(value);\r\n\r\n if (Number.isNaN(maxTemp)) {\r\n return 'Error';\r\n }\r\n\r\n if (maxTemp < 0) {\r\n return attributesLocale.frozen;\r\n } else if (maxTemp <= 4) {\r\n return attributesLocale.cool;\r\n } else {\r\n return attributesLocale.dry;\r\n }\r\n }\r\n },\r\n {\r\n name: attributesLocale.alcoholpercentage,\r\n hideIfEmpty: true,\r\n transform: value => value ? `${value}%` : value\r\n }\r\n ]\r\n }\r\n];\r\n\r\nconst ProductInformationTab = (props: IProductInformationTabProps) => {\r\n const { className, attributes, productInformation, context } = props;\r\n const locale = getLocale(context.actionContext.requestContext.locale);\r\n\r\n return (\r\n
\r\n \r\n\r\n \r\n\r\n

{locale.productInformationTitle}

\r\n \r\n {productInformation?.map((x) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n
{x.name}:{x.value}
\r\n
\r\n );\r\n};\r\n\r\nconst NutritionalInformationTab = (props: INutritionalInformationTabProps) => {\r\n const { className, ingredients, nutritionalInformation, context } = props;\r\n const locale = getLocale(context.actionContext.requestContext.locale);\r\n\r\n return (\r\n
\r\n {ingredients && (\r\n <>\r\n

{locale.ingredients}

\r\n
\r\n {ingredients}\r\n
\r\n \r\n )}\r\n\r\n {nutritionalInformation && nutritionalInformation.length > 0 && (\r\n <>\r\n

{locale.nutritionalContent}

\r\n \r\n {nutritionalInformation.map((x) => (\r\n \r\n \r\n \r\n \r\n ))}\r\n
{x.name}:{x.value}
\r\n \r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport const ProductInformationModal = (props: IProductInformationModalProps) => {\r\n const { className, product, context } = props;\r\n const [tab, setTab] = React.useState(0);\r\n const { loading, attributes } = useGetAttributes(product, context);\r\n const locale = getLocale(context.actionContext.requestContext.locale);\r\n\r\n if (loading) {\r\n return (\r\n \r\n

{locale.loading}...

\r\n
\r\n );\r\n }\r\n\r\n const ingredients = getAttributeStringOrDefault(attributes, locale.ingredients, '');\r\n const attributesLocale = getAttributesLocale(context.actionContext.requestContext.locale);\r\n\r\n const productInformationAttributesMap = parseAttributesMap(context, attributes, createProductInformationAttributesMap(attributesLocale));\r\n const productInformation = productInformationAttributesMap.find(x => x.name === `${attributesLocale.groups.productInformation}`);\r\n\r\n const attributesMap = parseAttributesMap(context, attributes);\r\n const nutrients = attributesMap.find(x => x.name === attributesLocale.groups.nutrients);\r\n const hasNutritionalInformation = ingredients || nutrients && nutrients.attributes.length > 0;\r\n\r\n return (\r\n \r\n

{product.Name} - {product.ItemId}

\r\n\r\n
\r\n setTab(0)}\r\n >\r\n {locale.productInformationTitle}\r\n \r\n {hasNutritionalInformation && (\r\n setTab(1)}\r\n >\r\n {locale.nutritionalContent}\r\n \r\n )}\r\n
\r\n\r\n {tab === 0 && (\r\n \r\n )}\r\n\r\n {tab === 1 && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n","import { useEffect, useState } from 'react';\r\nimport { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { ProductListProduct } from '../product-list-component';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nimport getSelectedVariantActionDataAction, { SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\r\nimport { getAttributesForSelectedVariantAction, AttributesForSelectedVariantInput } from '../../../actions/get-attributes-for-selected-variant';\r\n\r\nexport const useGetAttributes = (product: ProductListProduct, context: ICoreContext) => {\r\n const [loading, setLoading] = useState(true);\r\n const [attributes, setAttributes] = useState([]);\r\n\r\n useEffect(() => {\r\n const retrieveAttributes = async () => {\r\n if (!product.RecordId) {\r\n return;\r\n }\r\n\r\n const selectedVariantInput = new SelectedVariantInput(\r\n product.RecordId,\r\n context.actionContext.requestContext.apiSettings.channelId,\r\n undefined,\r\n undefined,\r\n context.request);\r\n const variant = await getSelectedVariantActionDataAction(selectedVariantInput, context.actionContext);\r\n\r\n if (!variant) {\r\n return;\r\n }\r\n\r\n const attributesInput = new AttributesForSelectedVariantInput(\r\n context.request.locale,\r\n product.RecordId,\r\n context.actionContext.requestContext.apiSettings.channelId,\r\n variant,\r\n undefined\r\n );\r\n const attributes: AttributeValue[] = await getAttributesForSelectedVariantAction(attributesInput, context.actionContext);\r\n\r\n setAttributes(attributes);\r\n setLoading(false);\r\n };\r\n retrieveAttributes().catch((error) => console.error(error));\r\n }, []);\r\n\r\n return { loading, attributes };\r\n};\r\n","import { ICoreContext } from '@msdyn365-commerce/core';\r\nimport nbNO from './nb-NO.json';\r\nimport enUS from './en-US.json';\r\n\r\nexport function getLocale(langOrContext: string | ICoreContext): typeof nbNO {\r\n const lang = typeof langOrContext === 'string' ? langOrContext : langOrContext.request.locale;\r\n\r\n switch (lang) {\r\n case 'nb-NO':\r\n return nbNO;\r\n case 'en-US':\r\n return {...nbNO, ...enUS};\r\n default:\r\n return nbNO;\r\n }\r\n}\r\n\r\nexport const formatString = (...args: any[]) => {\r\n const str = args[0];\r\n const params = args.filter((arg, index) => index !== 0);\r\n if (!str) {\r\n return \"\";\r\n }\r\n return str.replace(/%s[0-9]+/g, (matchedStr: { replace: (arg0: string, arg1: string) => number; }) => {\r\n const variableIndex = matchedStr.replace(\"%s\", \"\") - 1;\r\n return params[variableIndex];\r\n });\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\nexport const toasts = {\r\n error: (header: string | undefined, text: string, props: Partial = {}) => {\r\n toast({\r\n ...{\r\n autoClose: 30000,\r\n canClose: true,\r\n position: 'bottom-right',\r\n showProgress: true\r\n },\r\n ...props as IToastViewProps,\r\n header,\r\n text,\r\n type: 'error'\r\n });\r\n }\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}","/*!\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, isChannelTypeB2B, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { AsyncResult, Customer, ProductDimension, ProductList, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n addItemToOrderTemplate,\r\n AddItemToOrderTemplateInput,\r\n OrderTemplate,\r\n updateOrderTemplateAction,\r\n UpdateOrderTemplateInput,\r\n validateCatalogId\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Alert, UncontrolledTooltip } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as Popper from 'popper.js';\r\nimport React, { useState } from 'react';\r\nimport {\r\n AddToOrderTemplateDialog,\r\n IAddToOrderTemplateDialogResources,\r\n DuplicateItemsWhenAddingToOrderTemplateDialog,\r\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources,\r\n ItemAddedToOrderTemplateDialog,\r\n IOrderTemplateNameDialogResources\r\n} from '@msdyn365-commerce/components';\r\n\r\nexport interface IAddToOrderTemplateComponentProps extends IComponentProps {\r\n className?: string;\r\n\r\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\r\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\r\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\r\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\r\n\r\n addToOrderTemplateButtonText: string;\r\n addToOrderTemplateButtonTooltip: string;\r\n\r\n addToOrderTemplateMessage?: string;\r\n addItemToOrderTemplateError?: string;\r\n\r\n showButtonText?: boolean;\r\n showButtonTooltip?: boolean;\r\n shouldShowButtonFailedTooltip?: boolean;\r\n disableButton?: boolean;\r\n tooltipPosition?: Popper.Placement;\r\n showStatusMessage?: boolean;\r\n disabled?: boolean;\r\n canAddMasterProduct?: boolean;\r\n isMultipleCatalogFeatureEnabledInHq?: boolean;\r\n catalogId?: number;\r\n\r\n imageSettings?: IImageSettings;\r\n\r\n onSuccess?(orderTemplate?: ProductList): void;\r\n onError?(result: IOrderTemplateActionErrorResult): void;\r\n retrieveOrderTemplates?(): Promise;\r\n}\r\n\r\nexport interface IOrderTemplateActionErrorResult {\r\n status: 'FAILED' | 'MISSING_DIMENSION';\r\n\r\n missingDimensions?: ProductDimension[];\r\n}\r\n\r\ninterface IAddToOrderTemplateStateManager {\r\n waiting: boolean;\r\n content: IAddToOrderTemplateContentState;\r\n\r\n setWaiting(newWaiting: boolean): void;\r\n setContent(newContent: IAddToOrderTemplateContentState): void;\r\n}\r\n\r\ninterface IAddToOrderTemplateContentState {\r\n showAlert?: boolean;\r\n orderTemplateTextMessage?: string;\r\n color?: string;\r\n}\r\n\r\ninterface IAddToOrderTemplateData {\r\n orderTemplates?: OrderTemplate[];\r\n\r\n product: SimpleProduct;\r\n quantity: number;\r\n\r\n customerInformation?: Customer;\r\n isChannelTypeB2B?: boolean;\r\n}\r\n\r\nexport interface IAddToOrderTemplateComponent extends IComponent {\r\n onClick(): (\r\n event: React.MouseEvent,\r\n props: IAddToOrderTemplateComponentProps,\r\n state: IAddToOrderTemplateStateManager\r\n ) => void;\r\n}\r\n\r\nconst onClick = async (\r\n _event: React.MouseEvent,\r\n props: IAddToOrderTemplateComponentProps,\r\n state: IAddToOrderTemplateStateManager,\r\n orderTemplates: OrderTemplate[] | undefined,\r\n setOrderTemplates: (orderTemplates: OrderTemplate[] | undefined) => void,\r\n retrieveOrderTemplates: (() => Promise) | undefined,\r\n openModal: (opened: boolean) => void\r\n): Promise => {\r\n const { user } = props.context.request;\r\n\r\n if (state.waiting) {\r\n return;\r\n }\r\n\r\n if (!user.isAuthenticated && user.signInUrl && window) {\r\n window.location.assign(user.signInUrl);\r\n return;\r\n }\r\n\r\n if (!orderTemplates && retrieveOrderTemplates) {\r\n const result = await retrieveOrderTemplates();\r\n setOrderTemplates(result);\r\n }\r\n\r\n addToOrderTemplate(props, openModal);\r\n state.setWaiting(false);\r\n};\r\n\r\nconst onDismiss = (state: IAddToOrderTemplateStateManager): void => {\r\n state.setContent({ color: 'success', showAlert: false });\r\n};\r\n\r\nconst AddToOrderTemplateComponentActions = {\r\n onClick,\r\n onDismiss\r\n};\r\n\r\nconst hasProductInOrderTemplates = (productToFind: SimpleProduct) => {\r\n /*\r\n TODO: Currently API does not support filtering by products.\r\n await getProductListLinesAsync(context, '',)\r\n return orderTemplates.filter(orderTemplate =>\r\n orderTemplate.orderTemplateLines.filter(\r\n product => product.productListLine.ProductId === productToFind.RecordId).length !== 0).length !== 0;\r\n */\r\n return false;\r\n};\r\n\r\nconst AddToOrderTemplate: React.FC = (props: IAddToOrderTemplateComponentProps) => {\r\n if (!isChannelTypeB2B(props.context.actionContext.requestContext)) {\r\n return null;\r\n }\r\n\r\n const [waiting, setWaiting] = useState(false);\r\n const [content, setContent] = useState({});\r\n const state: IAddToOrderTemplateStateManager = {\r\n waiting,\r\n content,\r\n\r\n setWaiting,\r\n setContent\r\n };\r\n\r\n const [addToOrderTemplateModalOpen, setAddToOrderTemplateModalOpen] = useState(false);\r\n\r\n const [chosenOrderTemplateId, setChosenOrderTemplateId] = useState(undefined);\r\n // @ts-ignore\r\n const [itemAddedToOrderTemplateDialogOpen, setItemAddedToOrderTemplateDialogOpen] = useState(false);\r\n const [duplicateItemsWhenAddingToOrderTemplateDialogOpen, setDuplicateItemsWhenAddingToOrderTemplateDialogOpen] = useState(false);\r\n const catalogId = props.catalogId;\r\n validateCatalogId(catalogId);\r\n const isMultipleCatalogFeatureEnabledInHq = props.isMultipleCatalogFeatureEnabledInHq || false;\r\n const [orderTemplates, setOrderTemplates] = useState(props.data.orderTemplates);\r\n\r\n const reset = () => {\r\n setWaiting(false);\r\n setContent({});\r\n setChosenOrderTemplateId(undefined);\r\n };\r\n\r\n const executeAddItemToOrderTemplate = async (orderTemplate: ProductList) => {\r\n setChosenOrderTemplateId(orderTemplate.Id);\r\n\r\n const input = isMultipleCatalogFeatureEnabledInHq\r\n ? new AddItemToOrderTemplateInput(\r\n orderTemplate.Id,\r\n props.data.product.RecordId,\r\n props.data.quantity,\r\n props.data.product.DefaultUnitOfMeasure || 'ea',\r\n isMultipleCatalogFeatureEnabledInHq,\r\n catalogId\r\n )\r\n : new AddItemToOrderTemplateInput(\r\n orderTemplate.Id,\r\n props.data.product.RecordId,\r\n props.data.quantity,\r\n props.data.product.DefaultUnitOfMeasure || 'ea'\r\n );\r\n\r\n await addItemToOrderTemplate(input, props.context.actionContext)\r\n .then(async result => {\r\n setAddToOrderTemplateModalOpen(false);\r\n if (props.onSuccess) {\r\n reset();\r\n props.onSuccess(orderTemplate);\r\n } else {\r\n setTimeout(() => {\r\n setItemAddedToOrderTemplateDialogOpen(true);\r\n }, 500);\r\n }\r\n })\r\n .catch(error => {\r\n if (error.error?.name !== 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\r\n return AsyncResult.reject(error);\r\n }\r\n setAddToOrderTemplateModalOpen(false);\r\n setTimeout(() => {\r\n setDuplicateItemsWhenAddingToOrderTemplateDialogOpen(true);\r\n }, 500);\r\n return AsyncResult.resolve();\r\n });\r\n };\r\n\r\n const onDuplicateDialogCancel = () => {\r\n setDuplicateItemsWhenAddingToOrderTemplateDialogOpen(false);\r\n setTimeout(() => {\r\n setAddToOrderTemplateModalOpen(true);\r\n }, 500);\r\n };\r\n\r\n const overrideQuantity = async () => {\r\n const input = isMultipleCatalogFeatureEnabledInHq\r\n ? new UpdateOrderTemplateInput(\r\n chosenOrderTemplateId!,\r\n props.data.product.RecordId,\r\n props.data.quantity,\r\n props.data.product.DefaultUnitOfMeasure || 'ea',\r\n isMultipleCatalogFeatureEnabledInHq,\r\n catalogId\r\n )\r\n : new UpdateOrderTemplateInput(\r\n chosenOrderTemplateId!,\r\n props.data.product.RecordId,\r\n props.data.quantity,\r\n props.data.product.DefaultUnitOfMeasure || 'ea'\r\n );\r\n await updateOrderTemplateAction(input, props.context.actionContext);\r\n setDuplicateItemsWhenAddingToOrderTemplateDialogOpen(false);\r\n if (props.onSuccess) {\r\n reset();\r\n props.onSuccess();\r\n } else {\r\n setTimeout(() => {\r\n setItemAddedToOrderTemplateDialogOpen(true);\r\n }, 500);\r\n }\r\n };\r\n\r\n const {\r\n addToOrderTemplateButtonText,\r\n showStatusMessage,\r\n showButtonText,\r\n className,\r\n disabled,\r\n showButtonTooltip,\r\n shouldShowButtonFailedTooltip,\r\n disableButton,\r\n tooltipPosition,\r\n addToOrderTemplateButtonTooltip,\r\n addToOrderTemplateDialogResources,\r\n createOrderTemplateDialogResources\r\n } = props;\r\n\r\n const onDismissHandler = () => {\r\n AddToOrderTemplateComponentActions.onDismiss(state);\r\n };\r\n const ariaLabel = addToOrderTemplateButtonText;\r\n const addToOrderTemplateRef: React.RefObject = React.createRef();\r\n const showMessage = showStatusMessage !== undefined ? showStatusMessage : true;\r\n const showTooltip = showButtonTooltip !== undefined ? showButtonTooltip : true;\r\n const tooltipPos = showButtonTooltip !== undefined ? tooltipPosition : 'top-end';\r\n\r\n const onClickHandler = (event: React.MouseEvent) => {\r\n return AddToOrderTemplateComponentActions.onClick(event, props, state, orderTemplates, setOrderTemplates, props.retrieveOrderTemplates, setAddToOrderTemplateModalOpen);\r\n };\r\n\r\n return (\r\n <>\r\n <>\r\n \r\n {showButtonText ? ariaLabel : ''}\r\n \r\n {showTooltip && (\r\n \r\n {shouldShowButtonFailedTooltip ? addToOrderTemplateButtonTooltip : ariaLabel}\r\n \r\n )}\r\n \r\n {state.content.showAlert && showMessage ? (\r\n
\r\n \r\n {state.content.orderTemplateTextMessage}\r\n \r\n
\r\n ) : (\r\n ''\r\n )}\r\n {orderTemplates ? (\r\n \r\n ) : null}\r\n {chosenOrderTemplateId && (\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nconst addToOrderTemplate = (props: IAddToOrderTemplateComponentProps, openModal: (opened: boolean) => void): void => {\r\n const { canAddMasterProduct } = props;\r\n\r\n if (props.data.product.Dimensions && !canAddMasterProduct) {\r\n const missingDimensions = props.data.product.Dimensions.filter(\r\n dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value)\r\n );\r\n\r\n if (missingDimensions.length > 0) {\r\n // At least one dimension with no value exists on the product, won't be able to proceed.\r\n propagateError(props, { status: 'MISSING_DIMENSION', missingDimensions });\r\n return;\r\n }\r\n }\r\n\r\n openModal(true);\r\n};\r\n\r\nconst propagateError = (props: IAddToOrderTemplateComponentProps, result: IOrderTemplateActionErrorResult): void => {\r\n const { onError } = props;\r\n\r\n if (onError) {\r\n onError(result);\r\n }\r\n};\r\n\r\nexport const AddToOrderTemplateComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\r\n // @ts-expect-error\r\n IAddToOrderTemplateComponent\r\n>('AddToOrderTemplate', { component: AddToOrderTemplate, ...AddToOrderTemplateComponentActions });\r\n\r\n\r\nexport default AddToOrderTemplateComponent;"],"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","AllergensModal","onClose","product","loading","useGetAttributes","getLocale","actionContext","ModalComponent","_x$ExtensionPropertie","ExtensionProperties","some","prop","_prop$Value","Key","Value","StringValue","sortAttributes","TextValue","canContainTracesAttribute","noAllergensDefined","children","mouseDontClose","setMouseDontClose","useEffect","handleKeyupEvent","e","document","addEventListener","body","querySelector","style","overflow","removeEventListener","Portal","classname","onMouseUp","onMouseDown","stopPropagation","onClick","ProductInformationTab","productInformation","productInformationTitle","NutritionalInformationTab","ingredients","nutritionalInformation","nutritionalContent","ProductInformationModal","tab","setTab","getAttributeStringOrDefault","attributesLocale","group","temperatureMin","transform","addCelsiusSign","temperatureMax","gtin","countryOfOrigin","quantity","label","temperatureZone","maxTemp","Number","isNaN","frozen","cool","dry","alcoholpercentage","hideIfEmpty","createProductInformationAttributesMap","nutrients","hasNutritionalInformation","Name","ItemId","selected","setLoading","useState","setAttributes","variant","getSelectedVariantActionDataAction","attributesInput","retrieveAttributes","console","langOrContext","nbNO","_objectSpread","enUS","toast","Toast","toasts","header","text","arguments","autoClose","canClose","position","showProgress","_isPaused","_shouldUnPause","_timeVisible","_autoCloseInterval","_progressInterval","_autoClose","_props","lastTime","func","time","requestAnimationFrame","_remove","_position","currentContainer","_toastElem","parentElement","selector","_createContainer","append","hasChildNodes","remove","_text","_textElem","textContent","_canClose","classList","toggle","closeButton","createElement","add","_removeBinded","closeIcon","appendChild","_showProgress","setProperty","_pauseOnHover","_pause","_unpause","_setup","_this$_props$onClose","_this$_props","cancelAnimationFrame","container","call","dataset","_headElem","link","cartButton","setAttribute","linkLabel","href","footer","_footElem","bind","_visibilityChange","visibilityState","AddToOrderTemplateComponentActions","_event","state","orderTemplates","setOrderTemplates","retrieveOrderTemplates","openModal","user","waiting","isAuthenticated","signInUrl","window","location","assign","addToOrderTemplate","setWaiting","onDismiss","setContent","color","showAlert","canAddMasterProduct","data","Dimensions","missingDimensions","dimension","DimensionValue","propagateError","status","onError","AddToOrderTemplateComponent","msdyn365Commerce","createComponentOverride","component","isChannelTypeB2B","content","addToOrderTemplateModalOpen","setAddToOrderTemplateModalOpen","chosenOrderTemplateId","setChosenOrderTemplateId","itemAddedToOrderTemplateDialogOpen","setItemAddedToOrderTemplateDialogOpen","duplicateItemsWhenAddingToOrderTemplateDialogOpen","setDuplicateItemsWhenAddingToOrderTemplateDialogOpen","validateCatalogId","isMultipleCatalogFeatureEnabledInHq","reset","addToOrderTemplateButtonText","showStatusMessage","showButtonText","disabled","showButtonTooltip","shouldShowButtonFailedTooltip","disableButton","tooltipPosition","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","ariaLabel","addToOrderTemplateRef","showMessage","showTooltip","tooltipPos","event","ref","UncontrolledTooltip","placement","trigger","target","Alert","isOpen","onDismissHandler","orderTemplateTextMessage","AddToOrderTemplateDialog","Object","modalOpen","setModalOpen","typeName","onOrderTemplateSelected","orderTemplate","Id","AddItemToOrderTemplateInput","DefaultUnitOfMeasure","addItemToOrderTemplate","onSuccess","setTimeout","_error$error","AsyncResult","reject","ItemAddedToOrderTemplateDialog","dialogStrings","itemAddedToOrderTemplateDialogResources","imageSettings","orderTemplateId","productPrice","DuplicateItemsWhenAddingToOrderTemplateDialog","duplicateItemsWhenAddingToOrderTemplateDialogResources","executeOverrideQuantity","UpdateOrderTemplateInput","updateOrderTemplateAction","onCancel","onDuplicateDialogCancel"],"sourceRoot":""}