{"version":3,"file":"static/js/b785d78c8b011a952119.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/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/modules/product-sheet/product-sheet.tsx?6298","webpack://Msdyn365.Commerce.Online/./src/modules/product-sheet/product-sheet.view.tsx?a0f5","webpack://Msdyn365.Commerce.Online/./src/shared-utils/attributes/get-temperature-zone.ts?a94a","webpack://Msdyn365.Commerce.Online/./lib/product-sheet/module-registration.js?c5ba","webpack://Msdyn365.Commerce.Online/./src/modules/quickview/utilities/helper.ts?f31d","webpack://Msdyn365.Commerce.Online/./src/modules/quickview/utilities/get-valid-product-images.ts?78b7","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"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 { 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;","/*!\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 JsBarcode from 'jsbarcode';\r\nimport jsPDF from 'jspdf';\r\nimport * as React from 'react';\r\n\r\nimport { IProductSheetData } from './product-sheet.data';\r\nimport { IProductSheetProps, IProductSheetResources } from './product-sheet.props.autogenerated';\r\nimport { getValidProductImages } from '@msdyn365-commerce-modules/buybox/dist/lib/modules/quickview/utilities/get-valid-product-images';\r\nimport { getAttributesLocale, parseAttributesMap } from '../../shared-utils/attributes';\r\nimport { getTemperatureZone } from '../../shared-utils/attributes/get-temperature-zone';\r\nimport { humanizeUnitOfMeasure } from '../../components/unit-of-measure';\r\n\r\nexport interface IProductSheetViewProps extends IProductSheetProps {\r\n resources: IProductSheetResources;\r\n onDownloadProductSheet: () => void;\r\n}\r\n\r\nexport interface IProductSheetState {\r\n imageUrl: string;\r\n retrievedImageUrl: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * ProductSheet component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass ProductSheet extends React.PureComponent, IProductSheetState> {\r\n private defaultThumbnailImageSettings: {\r\n viewports: {\r\n xs: { q: string; w: number; h: number; };\r\n lg: { q: string; w: number; h: number; };\r\n };\r\n lazyload: boolean;\r\n cropFocalRegion: boolean;\r\n };\r\n constructor(props: IProductSheetProps) {\r\n super(props);\r\n\r\n this.state = {\r\n imageUrl: '',\r\n retrievedImageUrl: false\r\n };\r\n\r\n this.__downloadProductSheet = this.__downloadProductSheet.bind(this);\r\n this.__createProductSheet = this.__createProductSheet.bind(this);\r\n this.__getAttributeValueAsString = this.__getAttributeValueAsString.bind(this);\r\n\r\n this.defaultThumbnailImageSettings = {\r\n viewports: {\r\n xs: { q: '100', w: 60, h: 60 },\r\n lg: { q: '100', w: 60, h: 60 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n getValidProductImages(\r\n this.props.data.product.result?.RecordId || 0,\r\n +this.props.context.request.apiSettings.channelId,\r\n this.props.context.actionContext,\r\n this.defaultThumbnailImageSettings,\r\n this.props.data.product?.result?.productVariant)\r\n .then((result: any[]) => {\r\n if (result.length === 0) {\r\n this.setState({\r\n retrievedImageUrl: true\r\n });\r\n return;\r\n }\r\n this.setState({\r\n imageUrl: `${result[0]?.src}&w=230&h=230&m=1&cropfocalregion=true` || '',\r\n retrievedImageUrl: true\r\n });\r\n });\r\n }\r\n\r\n public componentDidUpdate(prevProps: Readonly>, prevState: Readonly, snapshot?: any): void {\r\n if (prevState.retrievedImageUrl === false && !this.state.retrievedImageUrl) {\r\n return;\r\n }\r\n\r\n const params = new URLSearchParams(window.location.search);\r\n const downloadpdf = params.get('downloadpdf');\r\n\r\n // Allow either empty value, 'true' or '1' to download pdf\r\n if (downloadpdf === null || downloadpdf && downloadpdf.toLowerCase() !== 'true' && downloadpdf !== '1') {\r\n return;\r\n }\r\n\r\n this.__downloadProductSheet();\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const productSheetViewProps: IProductSheetViewProps = {\r\n ...this.props,\r\n onDownloadProductSheet: this.__downloadProductSheet\r\n };\r\n return this.props.renderView(productSheetViewProps);\r\n }\r\n\r\n private __downloadProductSheet() {\r\n try {\r\n const { productNumber, pdf } = this.__createProductSheet();\r\n\r\n pdf.save(`DLVRY - ${productNumber}.pdf`);\r\n } catch (error) {\r\n console.error(error);\r\n alert(this.props.resources.productSheetErrorText);\r\n }\r\n }\r\n\r\n private __getAttributeValueAsString(name: string): string | undefined {\r\n const attribute = this.props.data.productSpecificationData.result?.find(x => x.Name === name);\r\n\r\n switch (attribute?.DataTypeValue) {\r\n case 0: // None\r\n return `-`;\r\n case 1: // Currency\r\n return attribute.CurrencyValue?.toString();\r\n case 2: // DateTime\r\n return attribute.DateTimeOffsetValue?.toUTCString();\r\n case 3: // Decimal\r\n return attribute.FloatValue?.toString();\r\n case 4: // Integer\r\n return attribute.IntegerValue?.toString();\r\n case 5: // Text\r\n return attribute.TextValue?.toString();\r\n case 6: // TrueFalse\r\n return attribute.BooleanValue?.toString();\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n private __createProductSheet(): ({\r\n productNumber: string,\r\n pdf: jsPDF\r\n }) {\r\n if (!(window as any).jspdf) {\r\n throw new Error('jsPDF not found');\r\n }\r\n\r\n const { resources } = this.props;\r\n const productSpecificationData = this.props.data.productSpecificationData.result;\r\n const locale = getAttributesLocale(this.props.context.request.locale);\r\n // Use 'jsPDF' from 'window' object instead of NPM package because package isn't working atm\r\n const { jsPDF } = (window as any).jspdf;\r\n\r\n const doc: jsPDF = new jsPDF();\r\n const originalFontSize = doc.getFontSize();\r\n const originalFillColor = doc.getFillColor();\r\n\r\n // Attributes\r\n const productNumber = this.props.data.product.result?.ProductNumber || '-';\r\n const productName = this.props.data.product.result?.Name || locale.notFound;\r\n const brand = this.__getAttributeValueAsString(locale.brand);\r\n const manufacturerProductNumber = this.__getAttributeValueAsString(locale.manufacturerProductNumber) || locale.notFound;\r\n const manufacturer = this.__getAttributeValueAsString(locale.manufacturer) || locale.notFound;\r\n const salesUnit = humanizeUnitOfMeasure(this.props.context, this.props.data.product.result?.DefaultUnitOfMeasure);\r\n const temperatureZone = productSpecificationData\r\n ? getTemperatureZone(this.props.context.request.locale, productSpecificationData)\r\n : '-';\r\n const ingredients = this.__getAttributeValueAsString(locale.ingredients) || '-';\r\n const quantity = this.__getAttributeValueAsString(locale.quantity) || locale.notFound;\r\n\r\n const parsedAttributes = parseAttributesMap(this.props.context, productSpecificationData);\r\n const nutritionalContent = parsedAttributes.find(x => x.name === locale.groups.nutrients);\r\n const allergens = parsedAttributes.find(x => x.name === locale.groups.allergens);\r\n const productInformation = parsedAttributes.find(x => x.name === locale.groups.productInformation);\r\n const specialBadges = this.__getAttributeValueAsString(locale.specialBadges)\r\n ?.split('|')\r\n .map(x => ({\r\n name: x,\r\n value: locale.labels.yes\r\n }))\r\n .filter(x => x.name);\r\n const url = window.location.origin;\r\n const timestamp = this.__getFormattedDate();\r\n\r\n // Print header\r\n doc.setFontSize(9);\r\n doc.text(resources.productSheetHeader.replace('{productNumber}', productNumber), 5, 5);\r\n doc.text(resources.productSheetHeaderRight.replace('{url}', url).replace('{timestamp}', timestamp), doc.internal.pageSize.width - 5, 5, {\r\n align: 'right'\r\n });\r\n doc.line(5, 7, doc.internal.pageSize.width - 5, 7);\r\n\r\n doc.setDrawColor('#CECECE');\r\n\r\n // Product details\r\n doc.setFontSize(originalFontSize);\r\n doc.text(productName, 5, 18);\r\n\r\n doc.setFontSize(originalFontSize - 6);\r\n if (brand) {\r\n doc.text(brand, 5, 26);\r\n }\r\n\r\n const textLines = (\r\n lines: {[key: string]: string},\r\n xPos1: number,\r\n xPos2:number,\r\n yPos: number,\r\n maxLen: number | undefined,\r\n lineHeight: number,\r\n boldKeys: boolean\r\n ) => {\r\n let y = yPos;\r\n Object.keys(lines).forEach(key => {\r\n const line = lines[key];\r\n\r\n if (boldKeys) {\r\n doc.setFont(doc.getFont().fontName, 'bold');\r\n }\r\n\r\n doc.text(key, xPos1, y);\r\n\r\n if (boldKeys) {\r\n doc.setFont(doc.getFont().fontName, 'normal');\r\n }\r\n\r\n if (maxLen) {\r\n doc.splitTextToSize(line, maxLen).forEach((x: string) => {\r\n doc.text(x, xPos2, y);\r\n y += lineHeight;\r\n });\r\n } else {\r\n doc.text(line, xPos2, y);\r\n y += lineHeight;\r\n }\r\n });\r\n };\r\n\r\n textLines({\r\n [resources.productSheetProductNumber]: productNumber,\r\n [locale.labels.manufacturerProductNumber]: manufacturerProductNumber,\r\n [locale.labels.manufacturer]: manufacturer,\r\n [resources.productSheetSalesUnit]: salesUnit,\r\n [resources.productSheetTemperatureZone]: temperatureZone || '-'\r\n }, 5, 46, 34, 80, 4, true);\r\n\r\n if (this.state.imageUrl) {\r\n const productImg = document.createElement('img');\r\n productImg.src = this.state.imageUrl;\r\n doc.addImage(productImg, 'JPEG', doc.internal.pageSize.width - 65, 10, 60, 60);\r\n //doc.rect(doc.internal.pageSize.width - 65, 10, 60, 60);\r\n }\r\n\r\n doc.line(5, 74, doc.internal.pageSize.width - 5, 74);\r\n\r\n doc.setFontSize(doc.getFontSize() - 1);\r\n doc.setFont(doc.getFont().fontName, 'bold');\r\n doc.text(locale.labels.ingredients, 5, 78);\r\n doc.setFont(doc.getFont().fontName, 'normal');\r\n if (ingredients) {\r\n (doc.splitTextToSize(ingredients, doc.internal.pageSize.width - 10) as string[]).forEach((x, i) => {\r\n doc.text(x, 5, 82 + (i * 3.5));\r\n });\r\n }\r\n doc.line(5, 87, doc.internal.pageSize.width - 5, 87);\r\n\r\n //doc.setFontSize(doc.getFontSize() - 1);\r\n\r\n doc.setFont(doc.getFont().fontName, 'bold');\r\n doc.text(locale.groups.nutrients, 5, 92);\r\n doc.setFont(doc.getFont().fontName, 'normal');\r\n\r\n const halfWidth = doc.internal.pageSize.width / 2;\r\n\r\n let nutritionalContentY = 96;\r\n nutritionalContent?.attributes.forEach((x, i) => {\r\n if ((i + 1) % 2 === 0) {\r\n doc.setFillColor('#F2F2F0');\r\n doc.rect(5, nutritionalContentY - 2.6, halfWidth - 10, 3, 'F');\r\n }\r\n doc.text(x.name, 5, nutritionalContentY);\r\n doc.text(x.value || '-', 65, nutritionalContentY);\r\n nutritionalContentY += 3.5;\r\n });\r\n\r\n doc.setFont(doc.getFont().fontName, 'bold');\r\n doc.text(locale.groups.allergens, halfWidth, 92);\r\n doc.setFont(doc.getFont().fontName, 'normal');\r\n\r\n let allergensY = 96;\r\n allergens?.attributes.forEach((x, i) => {\r\n if ((i + 1) % 2 === 0) {\r\n doc.setFillColor('#F2F2F0');\r\n doc.rect(halfWidth, allergensY - 2.6, halfWidth - 10, 3, 'F');\r\n }\r\n\r\n doc.text(x.name, halfWidth, allergensY);\r\n doc.text(x.value || '-', halfWidth + 55, allergensY);\r\n allergensY += 3.5;\r\n });\r\n\r\n doc.line(5, 193, doc.internal.pageSize.width - 5, 193);\r\n\r\n doc.setFont(doc.getFont().fontName, 'bold');\r\n doc.text(resources.productSheetSpecialBrands, 5, 198);\r\n doc.setFont(doc.getFont().fontName, 'normal');\r\n\r\n let specialBadgesY = 202;\r\n specialBadges?.forEach((x, i) => {\r\n if ((i + 1) % 2 === 0) {\r\n doc.setFillColor('#F2F2F0');\r\n doc.rect(5, specialBadgesY - 2.6, halfWidth - 10, 3, 'F');\r\n }\r\n doc.text(x.name, 5, specialBadgesY);\r\n doc.text(x.value, 60, specialBadgesY);\r\n specialBadgesY += 3.5;\r\n });\r\n\r\n doc.setFont(doc.getFont().fontName, 'bold');\r\n doc.text(resources.productSheetProductInformation, halfWidth, 198);\r\n doc.setFont(doc.getFont().fontName, 'normal');\r\n\r\n let productInformationY = 202;\r\n productInformation?.attributes.forEach((x, i) => {\r\n if ((i + 1) % 2 === 0) {\r\n doc.setFillColor('#F2F2F0');\r\n doc.rect(halfWidth + 5, productInformationY - 2.6, halfWidth - 10, 3, 'F');\r\n }\r\n doc.text(x.name, halfWidth, productInformationY);\r\n doc.text(x.value, halfWidth + 55, productInformationY);\r\n productInformationY += 3.5;\r\n });\r\n\r\n doc.line(5, 234, doc.internal.pageSize.width - 5, 234);\r\n doc.setFontSize(doc.getFontSize() - 1);\r\n doc.text(resources.productSheetSpecificationFooterText.replace('{manufacturer}', manufacturer), 5, 239);\r\n\r\n // Next page\r\n doc.addPage();\r\n\r\n // Print header\r\n doc.setDrawColor('black');\r\n doc.setFontSize(9);\r\n doc.text(resources.productSheetHeader.replace('{productNumber}', productNumber), 5, 5);\r\n doc.text(resources.productSheetHeaderRight.replace('{url}', url).replace('{timestamp}', timestamp), doc.internal.pageSize.width - 5, 5, {\r\n align: 'right'\r\n });\r\n doc.line(5, 7, doc.internal.pageSize.width - 5, 7);\r\n\r\n doc.setDrawColor('#CECECE');\r\n\r\n doc.setFont(doc.getFont().fontName, 'bold');\r\n doc.setFontSize(originalFontSize - 6);\r\n doc.text(resources.productSheetExhibitionLabel, 5, 14);\r\n\r\n doc.setFontSize(doc.getFontSize() - 3);\r\n doc.setFont(doc.getFont().fontName, 'normal');\r\n doc.setFillColor('#F0EDE6');\r\n doc.rect(5, 20, 100, 35, 'F');\r\n doc.setFillColor(originalFillColor);\r\n\r\n doc.setFontSize(originalFontSize - 2);\r\n (doc.splitTextToSize(productName, 90) as string[]).forEach((x, i) => {\r\n doc.text(x, 8, 27 + (i * 5));\r\n });\r\n\r\n doc.setFontSize(originalFontSize - 8);\r\n const allergensExcludingFreeFrom = allergens?.attributes\r\n .filter(x => x.value === locale.labels.yes || x.value === locale.labels.canContains);\r\n if (allergensExcludingFreeFrom && allergensExcludingFreeFrom.length > 0) {\r\n doc.text(`${locale.groups.allergens}:`, 8, 36.5);\r\n allergensExcludingFreeFrom?.forEach((x, i) => {\r\n const row = Math.floor(i / 4);\r\n doc.text(x.name, 9 + (row * 22), 41 + ((i - (row * 4)) * 4));\r\n });\r\n }\r\n\r\n doc.setFontSize(doc.getFontSize() + 2);\r\n doc.setFont(doc.getFont().fontName, 'bold');\r\n doc.text(locale.groups.ingredients, 5, 58);\r\n doc.setFont(doc.getFont().fontName, 'normal');\r\n (doc.splitTextToSize(ingredients, 100) as string[]).forEach((x, i) => {\r\n doc.text(x, 5, 62 + (i * 4));\r\n });\r\n\r\n // Nutritional content table on second page\r\n doc.setFont(doc.getFont().fontName, 'bold');\r\n doc.text(locale.groups.nutrients, 100 + 7, 22);\r\n doc.setFont(doc.getFont().fontName, 'normal');\r\n\r\n nutritionalContentY = 26;\r\n nutritionalContent?.attributes.forEach((x, i) => {\r\n const xPos = 100 + 7;\r\n if ((i + 1) % 2 === 0) {\r\n doc.setFillColor('#F2F2F0');\r\n doc.rect(xPos, nutritionalContentY - 2.6, halfWidth - 10, 3, 'F');\r\n }\r\n doc.text(x.name, xPos, nutritionalContentY);\r\n doc.text(x.value || '-', xPos + 60, nutritionalContentY);\r\n nutritionalContentY += 3.5;\r\n });\r\n doc.setFillColor(originalFillColor);\r\n\r\n doc.setFont(doc.getFont().fontName, 'bold');\r\n doc.setFontSize(originalFontSize - 6);\r\n doc.text(resources.productSheetStockLabel, 5, 84);\r\n\r\n doc.setFontSize(originalFontSize - 3);\r\n doc.text(`${productNumber} ${productName}`, 5, 101);\r\n\r\n const canvas = document.createElement('canvas');\r\n // Paint barcode to canvas\r\n JsBarcode(canvas, productNumber, {\r\n displayValue: false, // Don't print any text\r\n height: 40\r\n });\r\n (doc as any).addImage(canvas, 'JPEG', 5, 102);\r\n\r\n doc.setFont(doc.getFont().fontName, 'normal');\r\n doc.setFontSize(originalFontSize - 7);\r\n let warehouseDetails = 107;\r\n\r\n doc.text(resources.productSheetSalesUnit, 60, warehouseDetails);\r\n doc.text(salesUnit, 120, warehouseDetails);\r\n warehouseDetails += 4;\r\n\r\n doc.text(resources.productSheetQuantityInPack, 60, warehouseDetails);\r\n doc.text(quantity, 120, warehouseDetails);\r\n warehouseDetails += 4;\r\n\r\n doc.text(resources.productSheetStorage, 60, warehouseDetails);\r\n doc.text(temperatureZone || '-', 120, warehouseDetails);\r\n warehouseDetails += 4;\r\n\r\n doc.text(locale.labels.brand, 60, warehouseDetails);\r\n doc.text(brand || locale.notFound, 120, warehouseDetails);\r\n warehouseDetails += 4;\r\n\r\n doc.text(locale.labels.manufacturer, 60, warehouseDetails);\r\n (doc.splitTextToSize(manufacturer, 60) as string[]).forEach((x) => {\r\n doc.text(x, 120, warehouseDetails);\r\n warehouseDetails += 3;\r\n });\r\n warehouseDetails += 1;\r\n\r\n doc.text(resources.productSheetSupplierItemNumber, 60, warehouseDetails);\r\n doc.text(manufacturerProductNumber, 120, warehouseDetails);\r\n warehouseDetails += 4;\r\n\r\n doc.setDrawColor('#D9D9D9');\r\n\r\n // Utstillingsetikett guide lines\r\n // Top left\r\n doc.line(5, 15, 5, 19);\r\n doc.line(1, 20, 5, 20);\r\n // Top right\r\n doc.line(doc.internal.pageSize.width - 5, 15, doc.internal.pageSize.width - 5, 19);\r\n doc.line(doc.internal.pageSize.width - 1, 20, doc.internal.pageSize.width - 5, 20);\r\n // Bottom left\r\n doc.line(5, 70, 5, 74);\r\n doc.line(1, 69, 5, 69);\r\n // Bottom right\r\n doc.line(doc.internal.pageSize.width - 5, 70, doc.internal.pageSize.width - 5, 74);\r\n doc.line(doc.internal.pageSize.width - 1, 69, doc.internal.pageSize.width - 5, 69);\r\n\r\n // Vareetikett guide lines\r\n // Top left\r\n doc.line(5, 90, 5, 94);\r\n doc.line(1, 95, 5, 95);\r\n // Top right\r\n doc.line(doc.internal.pageSize.width - 5, 90, doc.internal.pageSize.width - 5, 94);\r\n doc.line(doc.internal.pageSize.width - 1, 95, doc.internal.pageSize.width - 5, 95);\r\n // Bottom left\r\n doc.line(5, 124, 5, 130);\r\n doc.line(1, 123, 5, 123);\r\n // Bottom right\r\n doc.line(doc.internal.pageSize.width - 5, 124, doc.internal.pageSize.width - 5, 130);\r\n doc.line(doc.internal.pageSize.width - 1, 123, doc.internal.pageSize.width - 5, 123);\r\n\r\n return { productNumber, pdf: doc };\r\n }\r\n\r\n private __getFormattedDate(): string {\r\n const date = new Date();\r\n const year = date.getFullYear().toString();\r\n const month = date.getMonth().toString().padStart(2, '0');\r\n const day = date.getDay().toString().padStart(2, '0');\r\n const hour = date.getHours().toString().padStart(2, '0');\r\n const minutes = date.getMinutes().toString().padStart(2, '0');\r\n return `${day}.${month}.${year} kl. ${hour}:${minutes}`;\r\n }\r\n}\r\n\r\nexport default ProductSheet;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\nimport { IProductSheetViewProps } from './product-sheet';\n\nexport default (props: IProductSheetViewProps) => {\n const { resources, onDownloadProductSheet } = props;\n return (\n
\n \n
\n );\n};\n","import { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nimport { getAttributesLocale, getAttributeNumberOrDefault } from '../../shared-utils/attributes';\r\n\r\nexport function getTemperatureZone(lang: string, productSpecificationData: AttributeValue[] | undefined): string | undefined {\r\n if (!productSpecificationData) {\r\n return undefined;\r\n }\r\n\r\n const locale = getAttributesLocale(lang);\r\n // Use 10 as default value if no temperature is set\r\n const maxTemp = getAttributeNumberOrDefault(productSpecificationData, locale.temperatureMax, 10);\r\n\r\n if (maxTemp < 0) {\r\n return locale.frozen;\r\n } else if (maxTemp <= 4) {\r\n return locale.cool;\r\n } else {\r\n return locale.dry;\r\n }\r\n}\r\n\r\nexport function getTemperatureZoneIcon(context: ICoreContext, temperatureZone: string): string | undefined {\r\n const locale = getAttributesLocale(context.request.locale);\r\n\r\n switch (temperatureZone) {\r\n case locale.frozen:\r\n return 'frozen';\r\n case locale.cool:\r\n return 'cool';\r\n default:\r\n return undefined;\r\n }\r\n}\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['product-sheet'] = {\n c: () => require('partner/modules/product-sheet/product-sheet.tsx'),\n $type: 'contentModule',\n da: [{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'productSpecificationData', path:'actions/get-attributes-for-selected-variant', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'product-sheet',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/product-sheet'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/get-attributes-for-selected-variant';\n let dataAction = require('partner/actions/get-attributes-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|product-sheet|product-sheet'] = {\n c: () => require('partner/modules/product-sheet/product-sheet.view.tsx'),\n cn: '__local__-__local__-product-sheet'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContext } from '@msdyn365-commerce/core';\n\n/**\n * Gets correct alt text for image based on configuration of site.\n * @param context Current request context.\n * @param shouldUseCmsAltText Should use CMS alt text.\n * @param productName Product name.\n * @param imageAltText Alt-text from CMS image.\n */\nexport function getAltText(\n context: IRequestContext,\n shouldUseCmsAltText: boolean,\n productName?: string,\n imageAltText?: string\n): string | undefined {\n if (!context?.app?.config?.OmniChannelMedia) {\n return productName;\n }\n if (shouldUseCmsAltText) {\n return imageAltText;\n }\n return productName;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { commerceApiRequest, getCatalogId, IActionContext, IImageData, IImageSettings } from '@msdyn365-commerce/core';\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getMediaLocationsForSelectedVariant, MediaLocationsForSelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { getAltText } from './helper';\n\nexport async function getValidProductImages(\n productId: number,\n channelId: number,\n actionContext: IActionContext,\n imageSettings: IImageSettings,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return Promise.all(mediaLocations.map(async mediaLocation => validateMediaLocaionAsync(mediaLocation, imageSettings))).then(\n pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n }\n );\n }\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unused-vars-experimental -- .\nasync function validateMediaLocaionAsync(mediaLocation: MediaLocation, imageSettings?: IImageSettings): Promise<[IImageData, boolean]> {\n const imageData = {\n src: mediaLocation.Uri || '',\n altText: mediaLocation.AltText || ''\n };\n\n if (imageData.src === '') {\n return [imageData, false];\n }\n\n return new Promise<[IImageData, boolean]>(resolve => {\n try {\n const http = new XMLHttpRequest();\n http.open('HEAD', imageData.src, true);\n\n http.addEventListener('load', () => {\n resolve([imageData, http.status === 200 || http.status === 201]);\n });\n\n http.addEventListener('error', () => {\n resolve([imageData, false]);\n });\n\n http.send();\n } catch {\n resolve([imageData, false]);\n }\n });\n}\n\n/**\n * Gets product variant images on dimension change of buy-box module for Omni scenario.\n * @param productId Product record id.\n * @param shouldUseCmsAltText Alt-text source to use.\n * @param channelId Current channel id.\n * @param actionContext Current action context.\n * @param productName Product name.\n * @param selectedProduct Currently selected variant product.\n * @returns List of images.\n */\n\nexport async function getProductImages(\n productId: number,\n shouldUseCmsAltText: boolean,\n channelId: number,\n actionContext: IActionContext,\n productName?: string,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n if (actionContext.requestContext?.params?.isPreview) {\n const response = await commerceApiRequest(actionContext.requestContext, 'msdyn365-ochannel-product-info', 'post', {\n productId: productId,\n channelId: channelId,\n catalogId: catalogId\n });\n if (response.status !== 200) {\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant for preview scenario');\n return [];\n }\n const previewImageData = response?.data as MediaLocation[];\n if (previewImageData) {\n return previewImageData.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n }\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n","module.exports = React;","module.exports = ReactDOM;"],"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","translations","humanizeUnitOfMeasure","unitOfMeasure","_translations$locale","request","props","_props$simpleProduct","disableTranslate","className","classnames","app","config","disableUnitReplace","url","requestUrl","searchParams","get","simpleProduct","DefaultUnitOfMeasure","React","ProductSheet","_this$props$data$prod","_this$props$data$prod2","super","state","imageUrl","retrievedImageUrl","__downloadProductSheet","bind","__createProductSheet","__getAttributeValueAsString","defaultThumbnailImageSettings","viewports","xs","q","w","h","lg","lazyload","cropFocalRegion","getValidProductImages","data","product","actionContext","productVariant","_result$","length","setState","src","componentDidUpdate","prevProps","prevState","snapshot","downloadpdf","URLSearchParams","window","location","search","render","productSheetViewProps","_objectSpread","onDownloadProductSheet","renderView","productNumber","pdf","save","console","alert","resources","productSheetErrorText","name","_this$props$data$prod3","_attribute$CurrencyVa","_attribute$DateTimeOf","_attribute$FloatValue","_attribute$IntegerVal","_attribute$TextValue","_attribute$BooleanVal","attribute","productSpecificationData","find","x","Name","DataTypeValue","CurrencyValue","toString","DateTimeOffsetValue","toUTCString","FloatValue","IntegerValue","TextValue","BooleanValue","_this$props$data$prod4","_this$props$data$prod5","_this$props$data$prod6","_this$__getAttributeV","jspdf","getAttributesLocale","jsPDF","doc","originalFontSize","getFontSize","originalFillColor","getFillColor","ProductNumber","productName","notFound","brand","manufacturerProductNumber","manufacturer","salesUnit","temperatureZone","getTemperatureZone","ingredients","quantity","parsedAttributes","parseAttributesMap","nutritionalContent","groups","nutrients","allergens","productInformation","specialBadges","split","map","value","labels","yes","filter","origin","timestamp","__getFormattedDate","setFontSize","text","productSheetHeader","replace","productSheetHeaderRight","internal","pageSize","width","align","line","setDrawColor","textLines","lines","xPos1","xPos2","yPos","maxLen","lineHeight","boldKeys","y","Object","keys","forEach","key","setFont","getFont","fontName","splitTextToSize","productSheetProductNumber","productSheetSalesUnit","productSheetTemperatureZone","productImg","document","createElement","addImage","i","halfWidth","nutritionalContentY","attributes","setFillColor","rect","allergensY","productSheetSpecialBrands","specialBadgesY","productSheetProductInformation","productInformationY","productSheetSpecificationFooterText","addPage","productSheetExhibitionLabel","allergensExcludingFreeFrom","canContains","row","Math","floor","xPos","productSheetStockLabel","canvas","JsBarcode","displayValue","height","warehouseDetails","productSheetQuantityInPack","productSheetStorage","productSheetSupplierItemNumber","date","Date","year","getFullYear","month","getMonth","padStart","getDay","getHours","getMinutes","onClick","productSheetButtonText","lang","maxTemp","getAttributeNumberOrDefault","temperatureMax","frozen","cool","dry","getTemperatureZoneIcon","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","path","runOn","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","getAltText","shouldUseCmsAltText","imageAltText","_context$app","OmniChannelMedia","imageSettings","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","mediaLocations","all","mediaLocation","imageData","Uri","altText","AltText","http","XMLHttpRequest","open","addEventListener","status","send","_unused","validateMediaLocaionAsync","pairs","pair","telemetry","exception","debug","getProductImages","_actionContext$reques","params","isPreview","response","commerceApiRequest","previewImageData","_mediaLocation$Uri","additionalProperties","IsApplicableForChildEntities","isApplicableForChildEntities","_mediaLocation$Uri2","module","exports","ReactDOM"],"sourceRoot":""}