{"version":3,"file":"static/js/834c860be75789d72cc7.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/loacker/views/product-specification.view.tsx?c2f6","webpack://Msdyn365.Commerce.Online/./lib/product-specification/module-registration.js?26aa","webpack://Msdyn365.Commerce.Online/./src/dataActions/get-attributes-for-selected-variant.ts?e4b6","webpack://Msdyn365.Commerce.Online/./src/modules/product-specification/components/product-specification-table-stucture.tsx?c1c4","webpack://Msdyn365.Commerce.Online/./src/modules/product-specification/product-specification.tsx?6583","webpack://Msdyn365.Commerce.Online/./src/modules/product-specification/product-specification.view.tsx?7490","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\nimport { IProductSpecificationData } from \"../definition-extensions/product-specification.data\";\r\n\r\nimport { IProductSpecificationViewProps } from '@msdyn365-commerce-modules/product-specification/src/modules/product-specification/./product-specification';\r\nimport {INutritionalValue_CAP} from \"../../../actions/DataServiceEntities.g\";\r\nimport { values } from 'mobx';\r\nimport { IProductSpecificationConfig } from '@msdyn365-commerce-modules/product-specification/src/modules/product-specification/product-specification.props.autogenerated';\r\nimport { nutritionValuesLayout } from '../definition-extensions/product-specification.ext.props.autogenerated';\r\nimport {RichTextComponent, Text} from '@msdyn365-commerce/core';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport interface IProductSpecificationConfigExt extends IProductSpecificationConfig {\r\n nutritionValuesLayout?: nutritionValuesLayout;\r\n nutritionValuesHeading?: string;\r\n productSpecificationsBottomInfo?: Msdyn365.RichText;\r\n}\r\nexport interface INutritionalValue_CAP_Ext extends INutritionalValue_CAP {\r\n SpecificationValue: string | false | undefined;\r\n FriendlyName:string | false | undefined;\r\n};\r\nexport interface IProductSpecificationViewPropsExt extends IProductSpecificationViewProps {\r\n data:IProductSpecificationData;\r\n config:IProductSpecificationConfigExt;\r\n}\r\n\r\nconst iconSpecifications = [\r\n 'Non-GMO Project Verified',\r\n 'No preservatives',\r\n 'Natural taste',\r\n 'No added colors',\r\n 'No artificial flavorings',\r\n 'No hydrogenated fats',\r\n 'Vegetarian',\r\n 'Halal',\r\n 'Kosher',\r\n 'No sweeteners',\r\n 'No high fructose corn syrup',\r\n 'With wholegrain flours'\r\n];\r\nconst descSpecifications = ['Product description','Legal description','Ingredients & Allergens', 'Footnote', 'Net weight', 'Width', 'Height', 'Depth/length'];\r\nconst descSpecificationsWithLabel = ['Net weight', 'Width', 'Height', 'Depth/length'];\r\n\r\nconst ProductSpecificationView: React.FC = props => {\r\n const productSpecificationResultExt = props.data.attributesCustom.result && values(props.data.attributesCustom.result);\r\n const productSpecificationResult = props.data.productSpecificationData.result && values(props.data.attributesCustom.result);\r\n\r\n const iconSpecificationsData = productSpecificationResult && productSpecificationResult.filter((row) => iconSpecifications.includes(row.KeyName) && row.TextValue !== '' && row.TextValue !== 'No');\r\n\r\n const descriptionDataExt = productSpecificationResultExt && productSpecificationResultExt.filter((row) => descSpecifications.includes(row.KeyName) && row.TextValue !== '');\r\n const nutitionalValuesResult = props.data.getNutritionalTable.result && values(props.data.getNutritionalTable.result);\r\n const nutitionalValues:INutritionalValue_CAP_Ext[] = [];\r\n nutitionalValuesResult && nutitionalValuesResult.forEach((item:INutritionalValue_CAP_Ext) => {\r\n const data = productSpecificationResultExt && productSpecificationResultExt.filter((row) => row.KeyName === item.TableField);\r\n item.SpecificationValue = data && data.length > 0 && data[0].TextValue;\r\n item.FriendlyName = data && data.length > 0 && data[0].Name;\r\n nutitionalValues.push(item);\r\n });\r\n nutitionalValues.sort((a, b) => {\r\n return a.SortNumber - b.SortNumber;\r\n });\r\n const [nutritionAccordonState, setNutritionAccordonState] = React.useState(false);\r\n\r\n return (\r\n
\r\n
\r\n {iconSpecificationsData && (\r\n iconSpecificationsData.map(item => {\r\n const title = item && item.KeyName;\r\n const titleId = title.replace(/\\s+/g, '').toLowerCase();\r\n const iconSpecificationUrl = title && `${props.context.request.apiSettings.baseImageUrl}Products%2Ficon_${encodeURIComponent(title).toLowerCase()}_${props.context.request.locale}.png`;\r\n\r\n return(\r\n
\r\n {title}/\r\n
\r\n );\r\n })\r\n )}\r\n
\r\n
\r\n
\r\n

setNutritionAccordonState(!nutritionAccordonState)}>{props?.config?.heading?.text}

\r\n
\r\n
\r\n
\r\n {descriptionDataExt && descriptionDataExt.map((item) => {\r\n if (item !== null){\r\n return (\r\n

\r\n {descSpecificationsWithLabel.includes(item.KeyName) && (\r\n {item.Name}: \r\n )}\r\n \r\n

\r\n )\r\n } else {\r\n return;\r\n }\r\n })}\r\n
\r\n
\r\n {props.config.nutritionValuesLayout !== 'table' && nutitionalValues && (\r\n
{props.config.nutritionValuesHeading}
\r\n )\r\n }\r\n
\r\n { props.config.nutritionValuesLayout === 'table' && nutitionalValues && nutitionalValues.map((item:INutritionalValue_CAP_Ext, index:number) => {\r\n const tableFieldSlug = item.TableField && item.TableField.replace(/\\s+/g, '').toLowerCase();\r\n const next = nutitionalValues[index+1];\r\n const percentageField = item.TableField && item.TableField.includes('Percentage');\r\n const nextIsPercentageField = next && next.TableField && next.TableField.includes('Percentage');\r\n return (\r\n
\r\n {tableFieldSlug === 'separator' ? (\r\n
\r\n ) : (\r\n <>\r\n {item.FriendlyName ? item.FriendlyName : item.TableField}\r\n {item.SpecificationValue && item.SpecificationValue}\r\n \r\n )}\r\n\r\n
\r\n )\r\n }\r\n )\r\n }\r\n {props.config.nutritionValuesLayout !== 'table' && nutitionalValues && (\r\n <>\r\n
\r\n {nutitionalValues.map((item:INutritionalValue_CAP_Ext) => {\r\n return (\r\n item.SpecificationValue && item.SpecificationValue !== '' && (\r\n
{item.FriendlyName ? item.FriendlyName : item.TableField}
\r\n )\r\n )\r\n }\r\n )}\r\n
\r\n
\r\n {nutitionalValues.map((item:INutritionalValue_CAP_Ext) => {\r\n return (\r\n item.SpecificationValue && item.SpecificationValue !== '' && (\r\n
{item.SpecificationValue && item.SpecificationValue}
\r\n )\r\n )\r\n }\r\n )}\r\n
\r\n \r\n )\r\n\r\n }\r\n\r\n
\r\n
\r\n {props.config.productSpecificationsBottomInfo && props.config.productSpecificationsBottomInfo !== '' && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ProductSpecificationView;\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-specification'] = {\n c: () => require('@msdyn365-commerce-modules/product-specification/dist/lib/modules/product-specification/product-specification'),\n $type: 'contentModule',\n da: [{name:'additionalMediaLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-additional-media-locations-for-selected-variant', runOn: 0},{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'productSpecificationData', path:'@msdyn365-commerce-modules/product-specification/dist/lib/dataActions/get-attributes-for-selected-variant', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'product-specification',\n p: 'product-specification',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/product-specification/dist/lib/modules/product-specification'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/product-specification/dist/lib/dataActions/get-attributes-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/product-specification/dist/lib/dataActions/get-attributes-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-additional-media-locations-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-additional-media-locations-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\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 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__|themes|loacker|views|product-specification'] = {\n c: () => require('partner/themes/loacker/views/product-specification.view.tsx'),\n cn: '__local__-__local__-product-specification'\n };\nviewDictionary['@msdyn365-commerce-modules|product-specification|modules|product-specification|product-specification'] = {\n c: () => require('@msdyn365-commerce-modules/product-specification/dist/lib/modules/product-specification/product-specification.view.js'),\n cn: '@msdyn365-commerce-modules-product-specification-product-specification'\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 {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { AttributeValue, ProductsDataActions, SimpleProduct, StoreOperationsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport {\n getAttributeValuesByConfiguration,\n getSelectedProductIdFromActionInput,\n getSelectedVariant,\n QueryResultSettingsProxy,\n SelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Chains getting the SelectedVariant with GetActivePrice.\n */\nexport class AttributesForSelectedVariantInput implements IActionInput {\n public productId: number;\n\n public channelId: number;\n\n public catalogId: number;\n\n public selectedProduct: SimpleProduct | undefined;\n\n constructor(productId: number, channelId: number, selectedProduct?: SimpleProduct, catalogId?: number) {\n this.productId = productId;\n this.channelId = channelId;\n this.selectedProduct = selectedProduct;\n this.catalogId = catalogId || 0;\n }\n\n public getCacheKey = () => 'AttributesForSelectedVariant';\n\n public getCacheObjectType = () => 'ProductAttributeValue';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nexport const createAttributesForSelectedVariantInput = (\n inputData: ICreateActionContext>\n): AttributesForSelectedVariantInput => {\n const productId = getSelectedProductIdFromActionInput(inputData);\n const catalogId = getCatalogId(inputData.requestContext);\n\n if (productId) {\n return new AttributesForSelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId, undefined, catalogId);\n }\n throw new Error('Unable to create PriceForSelectedVariantInput, no productId found on module config or query');\n};\n\n/**\n * Calls the Retail API a get a list of dimension values for a given product.\n * @param input - The input.\n * @param context - The context.\n * @returns The attribute values.\n */\nexport async function getAttributesForSelectedVariantAction(\n input: AttributesForSelectedVariantInput,\n context: IActionContext\n): Promise {\n return Promise.resolve()\n .then(() => {\n const activeProduct: SimpleProduct | undefined = input.selectedProduct;\n\n if (!activeProduct) {\n const selectedVariantInput = new SelectedVariantInput(\n input.productId,\n input.channelId,\n undefined,\n undefined,\n context.requestContext\n );\n\n return getSelectedVariant(selectedVariantInput, context);\n }\n\n return activeProduct;\n })\n .then((productResult: SimpleProduct | null) => {\n const activeProduct: SimpleProduct | undefined = productResult;\n\n if (activeProduct) {\n return ProductsDataActions.getAttributeValuesAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n activeProduct.RecordId,\n input.channelId,\n input.catalogId\n );\n }\n\n return null;\n })\n .then(async (attributeValues: AttributeValue[] | null) => {\n const channelInventoryConfiguration = await StoreOperationsDataActions.getInventoryConfigurationAsync({\n callerContext: context\n });\n\n return { attributeValues, channelInventoryConfiguration };\n })\n .then(result => {\n return getAttributeValuesByConfiguration(result.attributeValues, result.channelInventoryConfiguration);\n })\n .catch((error: Error) => {\n context.trace(error.message);\n throw new Error('[getPriceForSelectedVariantAction]Error executing action');\n });\n}\n\nexport default createObservableDataAction({\n id: '@msdyn365-commerce-modules/product-info/get-attributes-for-selected-variant',\n action: >getAttributesForSelectedVariantAction,\n input: createAttributesForSelectedVariantInput\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\n/**\n * Product specification table row.\n */\nexport interface IProductSpecificationTableRow {\n productName?: string;\n cellData?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Product specification table row component.\n * @param props - For product specification table row.\n * @param props.productName - Product name.\n * @param props.cellData - Cell data.\n * @param props.className - Class name.\n * @returns - Returns JSX element.\n */\nexport const ProductSpecificationTableRow: React.FC = ({ productName, cellData, className }) => (\n \n \n {/* eslint-disable-next-line react/no-danger */}\n \n \n {cellData}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { Drawer, IModuleProps, INodeProps, Module } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { AttributesForSelectedVariantInput, getAttributesForSelectedVariant } from '../..';\nimport { ProductSpecificationTableRow } from './components/product-specification-table-stucture';\nimport { IProductSpecificationData } from './product-specification.data';\nimport { displayStyle, IProductSpecificationProps } from './product-specification.props.autogenerated';\n\n/**\n * Maintain Drawer State.\n */\nexport interface IProductSpecificationState {\n isDrawerOpen: boolean;\n isAdditionalMediaDrawerOpen: boolean;\n drawerListId: number | undefined;\n}\n\n/**\n * Product specification view props.\n */\nexport interface IProductSpecificationViewProps extends IProductSpecificationProps<{}> {\n ProductSpecification: IModuleProps;\n ProductSpecificationTableProps: INodeProps;\n ProductSpecificationTableBodyProps: INodeProps;\n productSpecificationResult?: (JSX.Element | null)[];\n\n title?: React.ReactNode;\n isAccrodion?: boolean;\n handleText?(event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * Check for display style either accordion or table.\n */\nexport interface IProductSpecificationExtentedProps extends IProductSpecificationProps {\n displayStyle?: displayStyle;\n}\n\n/**\n *\n * ProductSpecification component.\n * @extends {React.Component>}\n */\n@observer\nclass ProductSpecification extends React.Component {\n public constructor(props: IProductSpecificationExtentedProps) {\n super(props);\n this.state = {\n isDrawerOpen: false,\n isAdditionalMediaDrawerOpen: false,\n drawerListId: undefined\n };\n }\n\n public async componentDidMount(): Promise {\n const { context, data, telemetry } = this.props;\n const catalogId = Msdyn365.getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n reaction(\n () => (data.product.result ? data.product.result.RecordId : null),\n () => {\n if (context && data.product.result) {\n const actionInput = new AttributesForSelectedVariantInput(\n data.product.result.RecordId,\n\n +context.actionContext.requestContext.apiSettings.channelId,\n data.product.result,\n catalogId\n );\n\n getAttributesForSelectedVariant(actionInput, this.props.context.actionContext).catch((error: Error) => {\n telemetry.error(error.message);\n telemetry.debug('Unable to update attributes for Product');\n telemetry.error(error.message);\n });\n }\n }\n );\n }\n\n public shouldComponentUpdate(nextProps: IProductSpecificationExtentedProps, nextState: IProductSpecificationState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n let data: IProductSpecificationData;\n try {\n data = this.props.data;\n } catch (error) {\n this.props.telemetry.error(`Something went wrong ------${error}`);\n return
{error}
;\n }\n\n if (!data.productSpecificationData.result || data.productSpecificationData.result.length <= 0) {\n this.props.telemetry.error('Product specification content is empty, module wont render.');\n return null;\n }\n\n const { heading, className } = this.props.config;\n const { productSpecificationData } = this.props.data;\n const isAccrodion = this.props.config.displayStyle === displayStyle.accordion;\n const viewProps = {\n ...this.props,\n handleText: this.handleHeadingChange,\n ProductSpecification: {\n moduleProps: this.props,\n className: classnames('ms-product-specification', className)\n },\n ProductSpecificationTableProps: isAccrodion\n ? {\n moduleProps: this.props,\n className: classnames('ms-product-specification__accordion', className)\n }\n : {\n className: classnames('ms-product-specification__table table-striped table-bordered'),\n tag: 'table'\n },\n isAccrodion,\n ProductSpecificationTableBodyProps: isAccrodion\n ? {}\n : {\n className: '',\n tag: 'tbody'\n },\n title: heading?.text && (\n \n ),\n productSpecificationResult:\n productSpecificationData.result && (isAccrodion ? this._createDrawerBody(data) : this._createTableBody(data))\n } as IProductSpecificationViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle Heading Text Change.\n * @param event - Current event.\n */\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n private _createTableBody(content: IProductSpecificationData): (JSX.Element | null)[] {\n const tableRows = content.productSpecificationData.result!.map((product, index) => {\n const cellData: JSX.Element | null = this._renderProductCell(product);\n\n if (!cellData) {\n return null;\n }\n\n return (\n <>\n \n \n );\n });\n\n if (this.props.context.request.app?.config?.OmniChannelMedia && this.props.data.additionalMediaLocations.result?.length) {\n tableRows.push(this._createAdditionalMediaDrawer());\n }\n\n return tableRows;\n }\n\n private _createDrawerBody(content: IProductSpecificationData): (JSX.Element | null)[] {\n const accordionItemContainer: IModuleProps = {\n moduleProps: this.props,\n className: 'ms-product-specification-title'\n };\n\n const drawers = content.productSpecificationData.result!.map(product => {\n const cellData: JSX.Element | null = this._renderProductCell(product);\n if (!cellData) {\n return null;\n }\n return (\n \n \n
{cellData}
\n \n
\n );\n });\n\n if (this.props.context.request.app?.config?.OmniChannelMedia && this.props.data.additionalMediaLocations.result?.length) {\n drawers.push(this._createAdditionalMediaDrawer());\n }\n\n return drawers;\n }\n private _createAdditionalMediaDrawer(): JSX.Element {\n const accordionItemContainer: IModuleProps = {\n moduleProps: this.props,\n className: 'ms-product-specification-title'\n };\n\n return (\n \n {\n this.setState(prevState => ({\n ...prevState,\n isAdditionalMediaDrawerOpen: !prevState.isAdditionalMediaDrawerOpen\n }));\n }}\n >\n
\n \n
\n \n
\n );\n }\n\n private readonly _toggle = (drawerListId: number | undefined) => (): void => {\n if (this.state.drawerListId !== drawerListId) {\n this.setState({ drawerListId, isDrawerOpen: true });\n } else {\n this.setState({ drawerListId: undefined, isDrawerOpen: false });\n }\n };\n\n private _renderProductCell(product: AttributeValue): JSX.Element | null {\n switch (product.DataTypeValue) {\n case 0: // None\n // Return span here instead of null so the row still shows\n return ;\n case 1: // Currency\n return this._renderCurrencyCell(product);\n case 2: // DateTime\n return this._renderDateTimeCell(product);\n case 3: // Decimal\n return this._renderDecimalCell(product);\n case 4: // Integer\n return this._renderIntegerCell(product);\n case 5: // Text\n return this._renderTextCell(product);\n case 6: // TrueFalse\n return this._renderTrueFalseCell(product);\n case 40: // Video\n this.props.telemetry.warning('Got video specification type, not supported yet so skipping line');\n return null;\n case 41: // Image\n this.props.telemetry.warning('Got image specification type, not supported yet so skipping line');\n return null;\n default:\n this.props.telemetry.warning(`Got unknown specification type ${product.DataTypeValue} so skipping line`);\n return null;\n }\n }\n\n private _renderCurrencyCell(product: AttributeValue): JSX.Element | null {\n if (product.CurrencyValue !== null && product.CurrencyValue !== undefined) {\n return (\n \n {product.CurrencyCode}\n {product.CurrencyValue}\n \n );\n }\n\n return null;\n }\n\n private _renderDateTimeCell(product: AttributeValue): JSX.Element | null {\n if (product.DateTimeOffsetValue?.toUTCString) {\n return {product.DateTimeOffsetValue.toUTCString()};\n }\n\n return null;\n }\n\n private _renderIntegerCell(product: AttributeValue): JSX.Element | null {\n if (product.IntegerValue !== null && product.IntegerValue !== undefined) {\n return {product.IntegerValue};\n }\n\n return null;\n }\n\n private _renderDecimalCell(product: AttributeValue): JSX.Element | null {\n if (product.FloatValue !== null && product.FloatValue !== undefined) {\n return {product.FloatValue};\n }\n\n return null;\n }\n\n private _renderTextCell(product: AttributeValue): JSX.Element | null {\n if (product.TextValue !== null && product.TextValue !== undefined) {\n // eslint-disable-next-line react/no-danger\n return ;\n }\n\n return null;\n }\n\n private _renderTrueFalseCell(product: AttributeValue): JSX.Element | null {\n // TODO 20369885 setting to default value is needed to work around a platform bug where\n // config string value does not get its default value.\n if (product.BooleanValue) {\n return {this.props.resources.trueValueText ? this.props.resources.trueValueText : 'Yes'};\n }\n return {this.props.resources.falseValueText ? this.props.resources.falseValueText : 'No'};\n }\n}\n\nexport default ProductSpecification;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductSpecificationViewProps } from './product-specification';\n\nconst ProductSpecificationView: React.FC = props => {\n const { ProductSpecification, ProductSpecificationTableProps, ProductSpecificationTableBodyProps, productSpecificationResult } = props;\n const rowdata =\n productSpecificationResult &&\n ArrayExtensions.hasElements(productSpecificationResult) &&\n productSpecificationResult.filter(row => !ObjectExtensions.isNullOrUndefined(row));\n\n return rowdata && ArrayExtensions.hasElements(rowdata) ? (\n \n {props.title}\n \n {rowdata}\n \n \n ) : null;\n};\n\nexport default ProductSpecificationView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["iconSpecifications","descSpecifications","descSpecificationsWithLabel","props","_props$config","productSpecificationResultExt","data","attributesCustom","result","values","productSpecificationResult","productSpecificationData","iconSpecificationsData","filter","row","includes","KeyName","TextValue","descriptionDataExt","nutitionalValuesResult","getNutritionalTable","nutitionalValues","forEach","item","TableField","SpecificationValue","length","FriendlyName","Name","push","sort","a","b","SortNumber","nutritionAccordonState","setNutritionAccordonState","React","className","map","title","titleId","replace","toLowerCase","iconSpecificationUrl","context","request","apiSettings","baseImageUrl","encodeURIComponent","locale","key","src","alt","config","nutritionValuesLayout","onClick","heading","text","Text","tag","nutritionValuesHeading","index","tableFieldSlug","next","percentageField","nextIsPercentageField","Indentation","style","height","CharDimension","Bold","fontSize","fontStyle","Italics","productSpecificationsBottomInfo","RichTextComponent","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","_objectSpread","viewDictionary","cn","AttributesForSelectedVariantInput","constructor","productId","channelId","selectedProduct","catalogId","getCacheKey","getCacheObjectType","dataCacheType","this","createAttributesForSelectedVariantInput","inputData","getSelectedProductIdFromActionInput","getCatalogId","requestContext","undefined","async","getAttributesForSelectedVariantAction","input","Promise","resolve","then","activeProduct","selectedVariantInput","SelectedVariantInput","getSelectedVariant","productResult","ProductsDataActions","callerContext","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","RecordId","attributeValues","channelInventoryConfiguration","StoreOperationsDataActions","getAttributeValuesByConfiguration","catch","error","trace","message","createObservableDataAction","action","ProductSpecificationTableRow","_ref","productName","cellData","scope","dangerouslySetInnerHTML","getRichTextHtml","ProductSpecification","super","handleHeadingChange","event","target","value","_toggle","drawerListId","state","setState","isDrawerOpen","isAdditionalMediaDrawerOpen","telemetry","Msdyn365","validateCatalogId","reaction","product","actionInput","actionContext","getAttributesForSelectedVariant","debug","shouldComponentUpdate","nextProps","nextState","render","_heading$tag","isAccrodion","displayStyle","viewProps","handleText","moduleProps","classnames","ProductSpecificationTableProps","ProductSpecificationTableBodyProps","editProps","onEdit","_createDrawerBody","_createTableBody","renderView","content","_this$props$context$r","_this$props$data$addi","tableRows","_renderProductCell","app","OmniChannelMedia","additionalMediaLocations","_createAdditionalMediaDrawer","_this$props$context$r2","_this$props$data$addi2","accordionItemContainer","drawers","_product$Name","Module","Object","assign","Drawer","collapseProps","timeout","isOpen","openGlyph","closeGlyph","glyphPlacement","toggleButtonText","onToggle","resources","additionalDownloadsText","prevState","mediaLocation","Uri","href","download","AltText","DataTypeValue","_renderCurrencyCell","_renderDateTimeCell","_renderDecimalCell","_renderIntegerCell","_renderTextCell","_renderTrueFalseCell","warning","CurrencyValue","CurrencyCode","_product$DateTimeOffs","DateTimeOffsetValue","toUTCString","IntegerValue","FloatValue","BooleanValue","trueValueText","falseValueText","__decorate","observer","rowdata","ArrayExtensions","hasElements","ObjectExtensions","isNullOrUndefined","Node","module","exports","ReactDOM"],"sourceRoot":""}