{"version":3,"file":"static/js/15.be0281fc8a3dd8e33ff9.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/ring-configurator/ring-configurator.tsx?9b4c","webpack://Msdyn365.Commerce.Online/./src/modules/ring-configurator/ring-configurator.view.tsx?cfdd","webpack://Msdyn365.Commerce.Online/./src/themes/pallionlivadi/views/cart.view.tsx?f84a","webpack://Msdyn365.Commerce.Online/./src/themes/pallionlivadi/views/write-review.view.tsx?8191","webpack://Msdyn365.Commerce.Online/./src/modules/account-customer-balance/account-customer-balance.view.tsx?70d2","webpack://Msdyn365.Commerce.Online/./src/modules/breadcrumb/components/link.tsx?d232","webpack://Msdyn365.Commerce.Online/./src/modules/breadcrumb/components/separator.tsx?92bb","webpack://Msdyn365.Commerce.Online/./src/modules/breadcrumb/breadcrumb.tsx?efcc","webpack://Msdyn365.Commerce.Online/./src/modules/breadcrumb/breadcrumb.view.tsx?4b3d","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/buybox.view.tsx?aec4","webpack://Msdyn365.Commerce.Online/./src/modules/footer-category/footer-category.tsx?e0bd","webpack://Msdyn365.Commerce.Online/./src/modules/footer-category/footer-category.view.tsx?fdce","webpack://Msdyn365.Commerce.Online/./src/modules/image-list/image-list.tsx?5602","webpack://Msdyn365.Commerce.Online/./src/modules/image-list/image-list.view.tsx?2bed","webpack://Msdyn365.Commerce.Online/./src/modules/interactive-feature-collection/interactive-feature-collection.tsx?96a6","webpack://Msdyn365.Commerce.Online/./src/modules/interactive-feature-collection/interactive-feature-collection.view.tsx?db52","webpack://Msdyn365.Commerce.Online/./src/modules/interactive-feature-item/components/links.tsx?7423","webpack://Msdyn365.Commerce.Online/./src/modules/interactive-feature-item/interactive-feature-item.tsx?792c","webpack://Msdyn365.Commerce.Online/./src/modules/interactive-feature-item/interactive-feature-item.view.tsx?bdcc","webpack://Msdyn365.Commerce.Online/./src/modules/map/map.tsx?6111","webpack://Msdyn365.Commerce.Online/./src/modules/map/map.view.tsx?5db9","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"],"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 * as React from 'react';\r\nimport { IRingConfiguratorData } from './ring-configurator.data';\r\nimport { IRingConfiguratorProps } from './ring-configurator.props.autogenerated';\r\nimport {\r\n addLinesAsync,\r\n createGetByCustomerInput,\r\n getByCustomerAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CommerceListsDataActions.g';\r\nimport axios from 'axios';\r\nimport { getByIdAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport {\r\n createB2CCartServiceAsync,\r\n createSavedDesignsAsync,\r\n getB2BCustomerIdAsync,\r\n getBMAStockistAsync,\r\n getRequestOrderAsync,\r\n getSavedDesignsAsync,\r\n updateCommerceListAsync\r\n} from '../../dataActions/DataActionExtension.g';\r\nimport { addCartLinesAsync, updateCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport { CommerceListLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { when } from 'mobx';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\n\r\nexport interface IRingConfiguratorViewProps extends IRingConfiguratorProps {\r\n _renderPopUp?: any;\r\n ringConfiguratorOfflinePopUp?: any;\r\n}\r\n\r\n/**\r\n *\r\n * RingConfigurator component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass RingConfigurator extends React.PureComponent, any> {\r\n private addEvent = new Event('addEvent', { bubbles: true, cancelable: true, composed: false });\r\n constructor(props: any) {\r\n super(props);\r\n this.state = {\r\n containerId: '',\r\n changesSaved: false,\r\n productId: Number(this.props.context.request.urlTokens.recordId),\r\n mode: '',\r\n isBMAProduct: false,\r\n snapShotId: '',\r\n recordId: '',\r\n requestOrderId: '',\r\n lineId: '',\r\n showPopUp: false,\r\n bmaConfigurationIsNotValid: false,\r\n bmaRetailStockistInfo: undefined,\r\n isBmaDown: false,\r\n isUpdateCart: false\r\n };\r\n }\r\n\r\n public componentDidMount() {\r\n const params = new URLSearchParams(this.props.context.request.url.requestUrl.search);\r\n if (params.has('bmaIsDown')) {\r\n this.setState({ isBMAProduct: false });\r\n } else if (params.has('recordId')) {\r\n // check url has recordId...\r\n const recordId = params.get('recordId');\r\n void this.loadSnapShotIdWithSavedDesignRecord(recordId);\r\n } else if (params.has('requestOrderId') && params.has('lineId')) {\r\n // check url has requestOrderId && line Id...\r\n const requestOrderId = params.get('requestOrderId');\r\n const lineId = params.get('lineId');\r\n void this.loadSnapShotIdWithRequestOrderRecord(requestOrderId, lineId);\r\n } else if (params.has('wishListItemSnapShotId') && params.has('lineId')) {\r\n // check url has wishListItemSnapShotId...\r\n const wishListItemSnapShotId = params.get('wishListItemSnapShotId');\r\n const lineId = params.get('lineId');\r\n void this.loadSnapShotIdWithwishListItem(wishListItemSnapShotId, lineId);\r\n } else if (params.has('cartLineItemSnapShotId') && params.has('lineId')) {\r\n // check url has wishListItemSnapShotId...\r\n const cartLineItemSnapShotId = params.get('cartLineItemSnapShotId');\r\n const lineId = params.get('lineId');\r\n when(\r\n () => {\r\n return !!(this.props.data.cart && this.props.data.cart.result);\r\n },\r\n () => {\r\n void this.loadSnapShotIdWithCartLineItem(cartLineItemSnapShotId, lineId);\r\n }\r\n );\r\n } else {\r\n // check and set snapShot id ...\r\n void this.loadSnapShotId();\r\n }\r\n console.log('componentDidMount ', new Date());\r\n }\r\n\r\n public componentDidUpdate(\r\n prevProps: Readonly>,\r\n prevState: Readonly,\r\n snapshot?: any\r\n ): void {\r\n if (prevState.snapShotId !== this.state.snapShotId) {\r\n // if (!window['beforeunload']) {\r\n // window.addEventListener('beforeunload', e => {\r\n // if (this.state.changesSaved) {\r\n // const confirmationMessage =\r\n // 'It looks like you have been editing something. ' + 'If you leave before saving, your changes will be lost.';\r\n // (e || window.event).returnValue = confirmationMessage;\r\n // return confirmationMessage;\r\n // }\r\n // return null;\r\n // });\r\n // }\r\n // if snapShotId exist we are applicable to Initialize RingConfigurator....\r\n void this.configuratorInitialized();\r\n console.log('componentDidUpdate', new Date());\r\n }\r\n }\r\n\r\n private readonly loadSnapShotIdFromProduct = async () => {\r\n const productInfo: any = await getByIdAsync(\r\n {\r\n callerContext: this.props.context.actionContext\r\n },\r\n this.state.productId,\r\n this.props.context.actionContext.requestContext.apiSettings.channelId\r\n );\r\n const currentSnapShotObj = productInfo.ExtensionProperties.find((e: any) => {\r\n return e.Key === 'AAA_BMASNAPSHOTID';\r\n });\r\n if (currentSnapShotObj && currentSnapShotObj.Value && currentSnapShotObj.Value.StringValue) {\r\n this.setState({\r\n snapShotId: currentSnapShotObj.Value.StringValue,\r\n isBMAProduct: true\r\n });\r\n }\r\n };\r\n\r\n private readonly loadSnapShotId = () => {\r\n // case if snapShotInfo is present in cookies for the loaded product...\r\n const cSnapShotInfo = this.props.context.request.cookies.get('snapShotInfo');\r\n console.log('snapShotInfo read form loadSnapShotId ', new Date());\r\n console.log('snapShotInfo name ', cSnapShotInfo.name);\r\n console.log('snapShotInfo status ', cSnapShotInfo.status);\r\n console.log('snapShotInfo value ', cSnapShotInfo.value);\r\n console.log(\r\n 'snapShotInfo condition ',\r\n cSnapShotInfo.name === 'snapShotInfo' && cSnapShotInfo.status === 'FOUND' && cSnapShotInfo.value\r\n );\r\n if (cSnapShotInfo.name === 'snapShotInfo' && cSnapShotInfo.status === 'FOUND' && cSnapShotInfo.value) {\r\n if (cSnapShotInfo.value.productId === this.state.productId) {\r\n this.setState({ snapShotId: cSnapShotInfo.value.snapShotId, isBMAProduct: true });\r\n console.log('snapShotInfo Clean form loadSnapShotId ', new Date());\r\n this.props.context.request.cookies.set('snapShotInfo', '');\r\n } else {\r\n // case snapShotInfo is present in cookies but not for the same product...\r\n // so that case get and set SnapShotId form product get ...\r\n console.log('load ori. when product mismatch form loadSnapShotId ', new Date());\r\n void this.loadSnapShotIdFromProduct();\r\n }\r\n } else {\r\n // case if snapShotInfo is not present in cookies for the loaded product...\r\n // so that case get and set SnapShotId form product get ...\r\n console.log('load ori. when product snapShotInfo N/A ', new Date());\r\n void this.loadSnapShotIdFromProduct();\r\n }\r\n };\r\n private readonly loadSnapShotIdWithSavedDesignRecord = async (recordId: any) => {\r\n const { context } = this.props;\r\n if (context.actionContext.requestContext.user.isAuthenticated) {\r\n //\r\n recordId = Number(recordId);\r\n // all saved Design records...\r\n const savedDesigns: any = await getSavedDesignsAsync({\r\n callerContext: this.props.context.actionContext,\r\n queryResultSettings: {}\r\n });\r\n // find matched save design...\r\n const matchedSavedDesign = savedDesigns.Result.find((s: any) => {\r\n return s.RecId === recordId && s.ProductID === this.state.productId;\r\n });\r\n if (matchedSavedDesign) {\r\n this.setState({ snapShotId: matchedSavedDesign.SnapShotID, isBMAProduct: true, recordId: recordId });\r\n } else {\r\n void this.loadSnapShotId();\r\n }\r\n } else {\r\n if (context.actionContext.requestContext.user.signInUrl) {\r\n window.location.href = context.actionContext.requestContext.user.signInUrl;\r\n }\r\n }\r\n };\r\n\r\n private readonly loadSnapShotIdWithRequestOrderRecord = async (requestOrderId: string | null, lineId: any) => {\r\n const { context } = this.props;\r\n if (context.actionContext.requestContext.user.isAuthenticated) {\r\n const customerInfo = this.props.data.customerInformation.result;\r\n if (customerInfo && customerInfo.IsB2b) {\r\n lineId = Number(lineId);\r\n // all request orders records...\r\n const response: any = await getRequestOrderAsync(\r\n {\r\n callerContext: this.props.context.actionContext,\r\n queryResultSettings: {}\r\n },\r\n ''\r\n );\r\n // find matched request order...\r\n const matchedRequestOrder = response.RequestOrder.find((r: any) => {\r\n return r.RequestOrderId === requestOrderId && r.LineNum === lineId;\r\n });\r\n if (matchedRequestOrder) {\r\n this.setState({\r\n snapShotId: matchedRequestOrder.Snapshotid,\r\n isBMAProduct: true,\r\n requestOrderId: matchedRequestOrder.RequestOrderId,\r\n lineId: matchedRequestOrder.LineNum\r\n });\r\n } else {\r\n void this.loadSnapShotId();\r\n }\r\n } else {\r\n if (context.actionContext.requestContext.user.signInUrl) {\r\n window.location.href = context.actionContext.requestContext.user.signInUrl;\r\n }\r\n }\r\n } else {\r\n if (context.actionContext.requestContext.user.signInUrl) {\r\n window.location.href = context.actionContext.requestContext.user.signInUrl;\r\n }\r\n }\r\n };\r\n private readonly loadSnapShotIdWithwishListItem = async (wishListItemSnapShotId: string | null, lineId: string | null) => {\r\n const { context } = this.props;\r\n if (context.actionContext.requestContext.user.isAuthenticated) {\r\n const wishlists = await getByCustomerAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }, null);\r\n if (wishlists && wishlists.length > 0) {\r\n const extensionPropertiesSnapShotId: any = [];\r\n wishlists.forEach(currWishlist => {\r\n if (currWishlist.CommerceListLines) {\r\n currWishlist.CommerceListLines.forEach((commerceListLine: CommerceListLine) => {\r\n if (commerceListLine.ExtensionProperties && commerceListLine.ExtensionProperties.length > 0) {\r\n const snapShotId = commerceListLine.ExtensionProperties.find(e => {\r\n return e.Key === 'AAA_SNAPSHOTID';\r\n });\r\n if (snapShotId && snapShotId.Value && snapShotId.Value.StringValue) {\r\n extensionPropertiesSnapShotId.push(snapShotId.Value.StringValue);\r\n }\r\n }\r\n });\r\n if (extensionPropertiesSnapShotId.length > 0) {\r\n const snapShotIdExists = extensionPropertiesSnapShotId.find((snapShotId: string) => {\r\n return snapShotId === wishListItemSnapShotId;\r\n });\r\n if (snapShotIdExists) {\r\n // init into product..\r\n this.setState({\r\n snapShotId: snapShotIdExists,\r\n lineId: Number(lineId),\r\n isBMAProduct: true\r\n });\r\n } else {\r\n //\r\n void this.loadSnapShotId();\r\n }\r\n } else {\r\n //\r\n void this.loadSnapShotId();\r\n }\r\n } else {\r\n //\r\n void this.loadSnapShotId();\r\n }\r\n });\r\n } else {\r\n //\r\n void this.loadSnapShotId();\r\n }\r\n } else {\r\n if (context.actionContext.requestContext.user.signInUrl) {\r\n window.location.href = context.actionContext.requestContext.user.signInUrl;\r\n }\r\n }\r\n };\r\n\r\n private readonly loadSnapShotIdWithCartLineItem = async (cartLineItemSnapShotId: string | null, lineId: string | null) => {\r\n const { context } = this.props;\r\n if (context.actionContext.requestContext.user.isAuthenticated) {\r\n const cart = this.props.data.cart.result;\r\n if (cart && cart.cart.CartLines && cart.cart.CartLines.length > 0) {\r\n const extensionPropertiesSnapShotId: any = [];\r\n cart.cart.CartLines.forEach(line => {\r\n if (line) {\r\n if (line.ExtensionProperties && line.ExtensionProperties.length > 0) {\r\n const snapShotId = line.ExtensionProperties.find(e => {\r\n return e.Key === 'AAA_SNAPSHOTID';\r\n });\r\n if (snapShotId && snapShotId.Value && snapShotId.Value.StringValue) {\r\n extensionPropertiesSnapShotId.push(snapShotId.Value.StringValue);\r\n }\r\n }\r\n if (extensionPropertiesSnapShotId.length > 0) {\r\n const snapShotIdExists = extensionPropertiesSnapShotId.find((snapShotId: string) => {\r\n return snapShotId === cartLineItemSnapShotId;\r\n });\r\n if (snapShotIdExists) {\r\n // init into product..\r\n this.setState({\r\n snapShotId: snapShotIdExists,\r\n lineId: Number(lineId),\r\n isBMAProduct: true,\r\n isUpdateCart: true\r\n });\r\n } else {\r\n //\r\n void this.loadSnapShotId();\r\n }\r\n } else {\r\n //\r\n void this.loadSnapShotId();\r\n }\r\n } else {\r\n //\r\n void this.loadSnapShotId();\r\n }\r\n });\r\n } else {\r\n //\r\n void this.loadSnapShotId();\r\n }\r\n } else {\r\n if (context.actionContext.requestContext.user.signInUrl) {\r\n window.location.href = context.actionContext.requestContext.user.signInUrl;\r\n }\r\n }\r\n };\r\n\r\n private readonly getContainerIdAndLoadConfigurator = (bridge: any, mode: any) => {\r\n axios\r\n .post(`${this.props.app.config.bmaBaseUrl}${this.props.app.config.bmaContainerEndPoint}`, {\r\n snapshotId: this.state.snapShotId\r\n })\r\n .then(containerResponse => {\r\n // in that case we are ready load Configurator with exist containerId...\r\n this.setState({ containerId: containerResponse.data.containerId });\r\n bridge.initContainer(mode, containerResponse.data.containerId);\r\n })\r\n .catch(error => {\r\n console.log(`Call Bma is down when proxy/containers api fail ${this.state.snapShotId}`);\r\n // in that case we are ready load Configurator with null...\r\n this.bmaIsDown();\r\n });\r\n };\r\n\r\n private readonly configuratorInitialized = async () => {\r\n const { context } = this.props;\r\n const customerInfo: any = this.props.context.actionContext.requestContext.user;\r\n // customerInfo.customerAccountNumber='MAP00045002';\r\n const bmaConfig: any = this.props.config.bmaConfiguration ? JSON.parse(this.props.config.bmaConfiguration) : '';\r\n if (!bmaConfig) {\r\n console.log('bmaConfig', this.props.config);\r\n this.setState({ bmaConfigurationIsNotValid: true });\r\n return;\r\n }\r\n document.addEventListener('metrix:configuratorInitialized', (ev: any) => {\r\n this.bmaIsUp();\r\n const bridge = ev.detail.bridge;\r\n bridge.addLanguages(['de', 'en']);\r\n bridge.currentLanguage = 'en';\r\n if (bmaConfig.context) {\r\n bridge.setContextValue('cartMode', bmaConfig.context.cartMode);\r\n }\r\n const mode = bridge.integration.mode('configurator');\r\n void this.getContainerIdAndLoadConfigurator(bridge, mode);\r\n bridge.listen('containerChanged', (ev: any) => {\r\n const detail = ev.detail;\r\n console.log(`container changed: ${detail.containerId}`);\r\n this.setState({ mode: 'init' });\r\n // ---\r\n // here you can save the new ID to Session, Cookie, Memory, ...\r\n // ---\r\n });\r\n bridge.listen('containerUpdated', (ev: any) => {\r\n var detail = ev.detail;\r\n console.log(`container updated: ${detail.containerId}`);\r\n if (this.state.mode === 'init') {\r\n this.setState({ mode: 'update', containerId: detail.containerId });\r\n } else if (this.state.mode === 'update') {\r\n this.setState({ changesSaved: true, containerId: detail.containerId });\r\n }\r\n });\r\n bridge.listen('buttonClicked', (ev: any) => {\r\n console.log(`Button clicked:${ev.detail.button}`);\r\n if (context.actionContext.requestContext.user.isAuthenticated) {\r\n if (ev.detail.button === bmaConfig.action.order) {\r\n if (customerInfo.isB2b) {\r\n if (this.state.isUpdateCart) {\r\n void this.updateCart();\r\n } else {\r\n void this.addToCart();\r\n }\r\n } else if (!customerInfo.isB2b) {\r\n void this.addToB2CCart();\r\n }\r\n } else if (!customerInfo.isB2b && ev.detail.button === bmaConfig.action.saveDesign) {\r\n // void this.addToSaveDesignList();\r\n void this.addToOrderRequestList();\r\n } else if (customerInfo.isB2b && ev.detail.button === bmaConfig.action.saveDesign) {\r\n void this.addToSaveDesignList();\r\n }\r\n } else {\r\n void this.setCookieAndRedirectToSignIn();\r\n }\r\n });\r\n bridge.listen('stepChanged', function(ev: any) {\r\n // here you can see what is the active step in the UI, maybe important if the info video should be different for each step\r\n console.log(ev.detail);\r\n });\r\n });\r\n let stockistId: any;\r\n console.log('customer Info', customerInfo);\r\n if (customerInfo && customerInfo.customerAccountNumber) {\r\n if (customerInfo.isB2b) {\r\n //\r\n const data = await getBMAStockistAsync({ callerContext: this.props.context.actionContext });\r\n this.setState({ bmaRetailStockistInfo: data });\r\n stockistId = data.BMARetailStockist;\r\n console.log('stockistIdForB2B', stockistId);\r\n } else {\r\n const data = await getB2BCustomerIdAsync(\r\n { callerContext: this.props.context.actionContext },\r\n customerInfo.customerAccountNumber\r\n );\r\n this.setState({ bmaRetailStockistInfo: data });\r\n stockistId = data.BMARetailStockist;\r\n console.log('stockistIdForB2c', stockistId);\r\n }\r\n } else {\r\n //script.src = this.props.config.bmaScript ? `${this.props.config.bmaScript}?jewelerId=` : '';\r\n stockistId = '';\r\n }\r\n if (window['bootstrapMetrixModule']) {\r\n console.log('stockistId', stockistId);\r\n window['bootstrapMetrixModule']({\r\n jewelerId: stockistId\r\n });\r\n } else {\r\n setTimeout(() => {\r\n console.log('Call form set time for bootstrapMetrixModule existence');\r\n if (window['bootstrapMetrixModule']) {\r\n window['bootstrapMetrixModule']({\r\n jewelerId: stockistId\r\n });\r\n } else {\r\n console.log('Call bma is down when bootstrapMetrixModule is not present in window');\r\n this.bmaIsDown();\r\n }\r\n }, this.props.config.ringConfiguratorOfflineTimeout);\r\n }\r\n window.addEventListener('signInEvent', event => {\r\n console.log('signInEventListner');\r\n void this.setCookieAndRedirectToSignIn();\r\n });\r\n };\r\n\r\n private readonly addToOrderRequestList = async () => {\r\n const { context } = this.props;\r\n const customerInfo: any = this.props.data.customerInformation.result;\r\n const customerId = customerInfo.AccountNumber;\r\n const snapShot = await axios.post(`${this.props.app.config.bmaBaseUrl}${this.props.app.config.bmaSnapshotEndPoint}`, {\r\n containerId: this.state.containerId\r\n });\r\n if (snapShot.data.snapshotId) {\r\n let bmaPriceEndPoint = this.props.app.config.bmaPriceEndPoint.replace('#snapshotId', snapShot.data.snapshotId);\r\n bmaPriceEndPoint = bmaPriceEndPoint.replace('#jewellerId', this.state.bmaRetailStockistInfo.BMARetailStockist);\r\n const price = await axios.get(`${this.props.app.config.bmaBaseUrl}${bmaPriceEndPoint}`);\r\n const addLinesData = {\r\n CommerceListId: 1234567,\r\n ProductId: this.state.productId,\r\n CustomerId: customerId,\r\n ExtensionProperties: [\r\n {\r\n Key: 'AAA_SNAPSHOTID',\r\n Value: {\r\n StringValue: snapShot.data.snapshotId\r\n }\r\n },\r\n {\r\n Key: 'AAA_B2CPRICE',\r\n Value: {\r\n DecimalValue: customerInfo.IsB2b ? 0 : price.data.sum.vk\r\n }\r\n },\r\n {\r\n Key: 'AAA_B2BPRICE',\r\n Value: {\r\n DecimalValue: customerInfo.IsB2b ? price.data.sum.vk : 0\r\n }\r\n }\r\n ]\r\n };\r\n let createdCommerceList: any;\r\n if (this.state.lineId) {\r\n createdCommerceList = await updateCommerceListAsync(\r\n { callerContext: context.actionContext },\r\n this.state.lineId,\r\n snapShot.data.snapshotId\r\n );\r\n } else {\r\n createdCommerceList = await addLinesAsync({ callerContext: context.actionContext }, 1234567, [addLinesData]);\r\n }\r\n this.setState({ changesSaved: false, containerId: '', mode: '', isBMAProduct: false });\r\n this.props.context.request.cookies.set('snapShotInfo', '');\r\n context.actionContext.update(createGetByCustomerInput({}, null), [createdCommerceList]);\r\n if (this.props.config.redirectOrderRequestUrl) {\r\n const request = this.props.context.request;\r\n let orderRequestUrl = request.url.requestUrl.origin;\r\n if (request.sitePath) {\r\n orderRequestUrl = orderRequestUrl + request.sitePath;\r\n }\r\n window.location.href = `${orderRequestUrl}${this.props.config.redirectOrderRequestUrl}`;\r\n }\r\n }\r\n };\r\n private readonly addToSaveDesignList = async () => {\r\n const { context } = this.props;\r\n const customerInfo: any = this.props.data.customerInformation.result;\r\n const productInfo: any = await getByIdAsync(\r\n {\r\n callerContext: this.props.context.actionContext\r\n },\r\n this.state.productId,\r\n this.props.context.actionContext.requestContext.apiSettings.channelId\r\n );\r\n const customerId = customerInfo.AccountNumber;\r\n const snapShot = await axios.post(`${this.props.app.config.bmaBaseUrl}${this.props.app.config.bmaSnapshotEndPoint}`, {\r\n containerId: this.state.containerId\r\n });\r\n if (snapShot.data.snapshotId) {\r\n let bmaPriceEndPoint = this.props.app.config.bmaPriceEndPoint.replace('#snapshotId', snapShot.data.snapshotId);\r\n bmaPriceEndPoint = bmaPriceEndPoint.replace('#jewellerId', this.state.bmaRetailStockistInfo.BMARetailStockist);\r\n const price = await axios.get(`${this.props.app.config.bmaBaseUrl}${bmaPriceEndPoint}`);\r\n const addLinesData = {\r\n CustomerID: customerId,\r\n Name: customerInfo.Name,\r\n Quantity: 1,\r\n ProductID: this.state.productId,\r\n UnitOfMeasure: productInfo.DefaultUnitOfMeasure,\r\n SnapShotID: snapShot.data.snapshotId,\r\n B2CPrice: customerInfo.IsB2b ? 0 : price.data.sum.vk,\r\n B2BPrice: customerInfo.IsB2b ? price.data.sum.vk : 0\r\n };\r\n this.setState({ changesSaved: false });\r\n await createSavedDesignsAsync({ callerContext: context.actionContext }, [addLinesData]);\r\n this.togglePopUp();\r\n }\r\n };\r\n private readonly addToCart = async () => {\r\n const { context, data } = this.props;\r\n let cart: Readonly = {};\r\n if (data && data.cart && data.cart.result) {\r\n console.log('cart', data.cart.result.cart);\r\n cart = data.cart.result.cart;\r\n }\r\n\r\n const product: any = await getByIdAsync(\r\n {\r\n callerContext: context.actionContext\r\n },\r\n this.state.productId,\r\n context.actionContext.requestContext.apiSettings.channelId\r\n );\r\n if (cart.Id) {\r\n const snapShot = await axios.post(`${this.props.app.config.bmaBaseUrl}${this.props.app.config.bmaSnapshotEndPoint}`, {\r\n containerId: this.state.containerId\r\n });\r\n if (snapShot.data.snapshotId) {\r\n let bmaPriceEndPoint = this.props.app.config.bmaPriceEndPoint.replace('#snapshotId', snapShot.data.snapshotId);\r\n bmaPriceEndPoint = bmaPriceEndPoint.replace('#jewellerId', this.state.bmaRetailStockistInfo.BMARetailStockist);\r\n const price = await axios.get(`${this.props.app.config.bmaBaseUrl}${bmaPriceEndPoint}`);\r\n // generate order reference...\r\n const weekday = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\r\n\r\n const d = new Date();\r\n const day = weekday[d.getDay()];\r\n const year = new Date()\r\n .getFullYear()\r\n .toString()\r\n .substr(-2);\r\n const oneDigitRandomNumber = Math.floor(1 + Math.random() * 9);\r\n const fourDigitRandomNumber = Math.floor(1000 + Math.random() * 9000);\r\n // eslint-disable-next-line radix\r\n let priceInFloat = parseInt(price.data.sum.vk).toString();\r\n priceInFloat = priceInFloat.padStart(4, '0');\r\n const referenceNumber = `${day}${year}-${oneDigitRandomNumber}${priceInFloat}-${fourDigitRandomNumber}`;\r\n const addCartLines = {\r\n CatalogId: context.request.apiSettings.catalogId,\r\n Description: product.Description,\r\n EntryMethodTypeValue: 3,\r\n ItemId: product.ItemId,\r\n ProductId: product.RecordId,\r\n IsPriceKeyedIn: true,\r\n Quantity: 1,\r\n TrackingId: '',\r\n UnitOfMeasureSymbol: product.DefaultUnitOfMeasure,\r\n IsGiftCardLine: false,\r\n Price: price.data.sum.vk,\r\n ExtensionProperties: [\r\n {\r\n Key: 'AAA_SNAPSHOTID',\r\n Value: {\r\n StringValue: snapShot.data.snapshotId\r\n }\r\n },\r\n {\r\n Key: 'AAA_REFERENCENUMBER',\r\n Value: {\r\n StringValue: referenceNumber\r\n }\r\n }\r\n ]\r\n };\r\n if (this.state.requestOrderId) {\r\n const requestOrderId: any = {\r\n Key: 'AAA_REQUESTORDERID',\r\n Value: {\r\n StringValue: this.state.requestOrderId\r\n }\r\n };\r\n const lineId: any = {\r\n Key: 'AAA_REQUESTORDERLINENUM',\r\n Value: {\r\n DecimalValue: this.state.lineId\r\n }\r\n };\r\n addCartLines.ExtensionProperties.push(requestOrderId);\r\n addCartLines.ExtensionProperties.push(lineId);\r\n }\r\n await addCartLinesAsync(\r\n { callerContext: this.props.context.actionContext, queryResultSettings: {} },\r\n cart.Id,\r\n [addCartLines],\r\n cart.Version\r\n );\r\n this.setState({\r\n changesSaved: false,\r\n containerId: '',\r\n mode: '',\r\n isBMAProduct: false,\r\n requestOrderId: '',\r\n lineId: ''\r\n });\r\n this.props.context.request.cookies.set('snapShotInfo', '');\r\n if (this.props.config.redirectRequestOrderActionUrl) {\r\n const request = this.props.context.request;\r\n let requestOrderActionUrl = request.url.requestUrl.origin;\r\n if (request.sitePath) {\r\n requestOrderActionUrl = requestOrderActionUrl + request.sitePath;\r\n }\r\n window.location.href = `${requestOrderActionUrl}${this.props.config.redirectRequestOrderActionUrl}`;\r\n }\r\n }\r\n }\r\n };\r\n\r\n private readonly updateCart = async () => {\r\n const { data } = this.props;\r\n let cart: Readonly = {};\r\n if (data && data.cart && data.cart.result) {\r\n console.log('cart', data.cart.result.cart);\r\n cart = data.cart.result.cart;\r\n }\r\n\r\n // const product: any = await getByIdAsync(\r\n // {\r\n // callerContext: context.actionContext\r\n // },\r\n // this.state.productId,\r\n // context.actionContext.requestContext.apiSettings.channelId\r\n // );\r\n if (cart.Id) {\r\n const snapShot = await axios.post(`${this.props.app.config.bmaBaseUrl}${this.props.app.config.bmaSnapshotEndPoint}`, {\r\n containerId: this.state.containerId\r\n });\r\n if (snapShot.data.snapshotId) {\r\n let bmaPriceEndPoint = this.props.app.config.bmaPriceEndPoint.replace('#snapshotId', snapShot.data.snapshotId);\r\n bmaPriceEndPoint = bmaPriceEndPoint.replace('#jewellerId', this.state.bmaRetailStockistInfo.BMARetailStockist);\r\n const price = await axios.get(`${this.props.app.config.bmaBaseUrl}${bmaPriceEndPoint}`);\r\n // generate order reference...\r\n const weekday = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\r\n\r\n const d = new Date();\r\n const day = weekday[d.getDay()];\r\n const year = new Date()\r\n .getFullYear()\r\n .toString()\r\n .substr(-2);\r\n const oneDigitRandomNumber = Math.floor(1 + Math.random() * 9);\r\n const fourDigitRandomNumber = Math.floor(1000 + Math.random() * 9000);\r\n // eslint-disable-next-line radix\r\n let priceInFloat = parseInt(price.data.sum.vk).toString();\r\n priceInFloat = priceInFloat.padStart(4, '0');\r\n const referenceNumber = `${day}${year}-${oneDigitRandomNumber}${priceInFloat}-${fourDigitRandomNumber}`;\r\n const cartState: any = await getCartState(this.props.context.actionContext);\r\n const updatedCartLines = cartState.cart.CartLines?.map((cartLineItem: any) => {\r\n if (this.state.lineId === cartLineItem.LineNumber) {\r\n cartLineItem.ExtensionProperties.map((cartEP: any) => {\r\n if (cartEP.Key === 'AAA_SNAPSHOTID') {\r\n cartEP.Value = {\r\n StringValue: snapShot.data.snapshotId\r\n };\r\n return cartEP;\r\n }\r\n if (cartEP.Key === 'AAA_REFERENCENUMBER') {\r\n cartEP.Value = {\r\n StringValue: referenceNumber\r\n };\r\n return cartEP;\r\n }\r\n return cartEP;\r\n });\r\n cartLineItem.Price = price.data.sum.vk;\r\n return cartLineItem;\r\n }\r\n return cartLineItem;\r\n });\r\n await updateCartLinesAsync(\r\n { callerContext: this.props.context.actionContext, queryResultSettings: {} },\r\n cart.Id,\r\n updatedCartLines\r\n );\r\n this.setState({\r\n changesSaved: false,\r\n containerId: '',\r\n mode: '',\r\n isBMAProduct: false,\r\n requestOrderId: '',\r\n lineId: ''\r\n });\r\n this.props.context.request.cookies.set('snapShotInfo', '');\r\n if (this.props.config.redirectRequestOrderActionUrl) {\r\n const request = this.props.context.request;\r\n let requestOrderActionUrl = request.url.requestUrl.origin;\r\n if (request.sitePath) {\r\n requestOrderActionUrl = requestOrderActionUrl + request.sitePath;\r\n }\r\n window.location.href = `${requestOrderActionUrl}${this.props.config.redirectRequestOrderActionUrl}`;\r\n }\r\n }\r\n }\r\n };\r\n\r\n private readonly addToB2CCart = async () => {\r\n const { context } = this.props;\r\n\r\n const product: any = await getByIdAsync(\r\n {\r\n callerContext: context.actionContext\r\n },\r\n this.state.productId,\r\n context.actionContext.requestContext.apiSettings.channelId\r\n );\r\n if (product) {\r\n const snapShot = await axios.post(`${this.props.app.config.bmaBaseUrl}${this.props.app.config.bmaSnapshotEndPoint}`, {\r\n containerId: this.state.containerId\r\n });\r\n if (snapShot.data.snapshotId) {\r\n const addCartLines = {\r\n BMASnapshotId: snapShot.data.snapshotId,\r\n ItemId: product.ItemId,\r\n ProductId: product.RecordId\r\n };\r\n await createB2CCartServiceAsync({ callerContext: this.props.context.actionContext }, [addCartLines]);\r\n window.dispatchEvent(this.addEvent);\r\n this.setState({\r\n changesSaved: false,\r\n containerId: '',\r\n mode: '',\r\n isBMAProduct: false,\r\n requestOrderId: '',\r\n lineId: ''\r\n });\r\n this.props.context.request.cookies.set('snapShotInfo', '');\r\n const request = this.props.context.request;\r\n let cartUrl = request.url.requestUrl.origin;\r\n if (request.sitePath) {\r\n cartUrl = cartUrl + request.sitePath;\r\n }\r\n window.location.href = `${cartUrl}/cart`;\r\n }\r\n }\r\n };\r\n\r\n private _renderPopUp = () => {\r\n if (this.state.showPopUp) {\r\n this.setState({ changeSaved: false });\r\n }\r\n return this.state.showPopUp ? (\r\n \r\n \r\n \r\n {this.props.config.savedDesignPopUpContent}\r\n \r\n
\r\n \r\n {\r\n this.togglePopUp();\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
\r\n \r\n \r\n ) : null;\r\n };\r\n private togglePopUp = () => {\r\n this.setState({ showPopUp: !this.state.showPopUp });\r\n this.props.context.request.cookies.set('snapShotInfo', '');\r\n };\r\n\r\n private redirectToSavedDesign = () => {\r\n this.setState({ changesSaved: false, containerId: '', mode: '', isBMAProduct: false, showPopup: false });\r\n this.props.context.request.cookies.set('snapShotInfo', '');\r\n if (this.props.config.redirectSavedDesignUrl) {\r\n const request = this.props.context.request;\r\n let savedDesignUrl = request.url.requestUrl.origin;\r\n if (request.sitePath) {\r\n savedDesignUrl = savedDesignUrl + request.sitePath;\r\n }\r\n window.location.href = `${savedDesignUrl}${this.props.config.redirectSavedDesignUrl}`;\r\n }\r\n };\r\n private setCookieAndRedirectToSignIn = async () => {\r\n const snapShot = await axios.post(`${this.props.app.config.bmaBaseUrl}${this.props.app.config.bmaSnapshotEndPoint}`, {\r\n containerId: this.state.containerId\r\n });\r\n console.log('SnapShotId ', snapShot);\r\n if (snapShot.data.snapshotId) {\r\n this.props.context.request.cookies.set('snapShotInfo', {\r\n snapShotId: snapShot.data.snapshotId,\r\n productId: this.state.productId\r\n });\r\n const cSnapShotInfo = this.props.context.request.cookies.get('snapShotInfo');\r\n console.log('snapShotInfo name ', cSnapShotInfo.name);\r\n console.log('snapShotInfo status ', cSnapShotInfo.status);\r\n console.log('snapShotInfo value ', cSnapShotInfo.value);\r\n console.log('set snapShotId before isConsentGiven in cookie ', new Date());\r\n if (!this.props.context.request.cookies.isConsentGiven()) {\r\n this.props.context.request.cookies.setConsentCookie();\r\n }\r\n console.log('set snapShotId after isConsentGive in cookie ', new Date());\r\n const cSnapShotInfo2 = this.props.context.request.cookies.get('snapShotInfo');\r\n console.log('after isConsentGiven snapShotInfo name ', cSnapShotInfo2.name);\r\n console.log('after isConsentGiven snapShotInfo status ', cSnapShotInfo2.status);\r\n console.log('after isConsentGiven snapShotInfo value ', cSnapShotInfo2.value);\r\n this.setState({ changesSaved: false, containerId: '', mode: '' });\r\n if (this.props.context.actionContext.requestContext.user.signInUrl) {\r\n window.location.href = this.props.context.actionContext.requestContext.user.signInUrl;\r\n }\r\n } else {\r\n if (this.props.context.actionContext.requestContext.user.signInUrl) {\r\n window.location.href = this.props.context.actionContext.requestContext.user.signInUrl;\r\n }\r\n }\r\n };\r\n\r\n private bmaIsDown = () => {\r\n this.setState({ isBmaDown: true });\r\n };\r\n private bmaIsUp = () => {\r\n this.setState({ isBmaDown: false });\r\n };\r\n private ringConfiguratorOfflinePopUp = () => {\r\n const request = this.props.context.request;\r\n let categoryPageUrl = request.url.requestUrl.origin;\r\n if (request.sitePath) {\r\n categoryPageUrl = categoryPageUrl + request.sitePath;\r\n }\r\n const categoryPageActionUrl = `${categoryPageUrl}${\r\n this.props.config.redirectCategoryPageUrl ? this.props.config.redirectCategoryPageUrl : ''\r\n }`;\r\n return this.state.isBmaDown ? (\r\n
\r\n
\r\n {\r\n window.location.href = categoryPageActionUrl;\r\n }}\r\n >\r\n X\r\n \r\n

{this.props.config.ringConfiguratorOfflineHeading ? this.props.config.ringConfiguratorOfflineHeading : ''}

\r\n
\r\n {this.props.config.ringConfiguratorOfflineContent ? this.props.config.ringConfiguratorOfflineContent : ''}\r\n
\r\n
\r\n
\r\n ) : null;\r\n };\r\n public render(): JSX.Element | null {\r\n const viewProps: IRingConfiguratorViewProps = {\r\n ...(this.props as IRingConfiguratorProps),\r\n _renderPopUp: this._renderPopUp(),\r\n ringConfiguratorOfflinePopUp: this.ringConfiguratorOfflinePopUp()\r\n };\r\n if (this.state.bmaConfigurationIsNotValid) {\r\n return <>Missing Configuration;\r\n } else {\r\n return this.state.isBMAProduct ? (this.props.renderView(viewProps) as React.ReactElement) : null;\r\n }\r\n }\r\n}\r\n\r\nexport default RingConfigurator;\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 * as React from 'react';\r\nimport { IRingConfiguratorViewProps } from './ring-configurator';\r\nexport default (props: IRingConfiguratorViewProps) => {\r\n return (\r\n <>\r\n {props._renderPopUp}\r\n {props.ringConfiguratorOfflinePopUp}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n","/*--------------------------------------------------------------\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 { ICartLineItemViewProps, ICartlinesViewProps, ICartResources, ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart';\r\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, getPayloadObject, getTelemetryAttributes, INodeProps, ITelemetryContent, Node, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICartProps as ICartExtensionProps } from '../definition-extensions/cart.ext.props.autogenerated';\r\n\r\n/**\r\n * Toggle Bopis Function.\r\n * @param cartLine -CartLine.\r\n * @param isBopisSelected -Boolean.\r\n * @returns Toggle Bopis.\r\n */\r\nconst toggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\r\n cartLine.pickUpInStore?.callbacks.toggleBopis(!isBopisSelected);\r\n};\r\n\r\n/**\r\n * Change Store Function.\r\n * @param cartLine -CartLine.\r\n * @returns Toggle Bopis.\r\n */\r\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\r\n cartLine.pickUpInStore?.callbacks.toggleBopis(true);\r\n};\r\n\r\n/**\r\n * Render Bopis block.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderBopisBlock = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent, emailDeliveryModeCode?: string): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for BOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const { shipInsteadDisplayText, shipToAddressDisplayText, pickItUpDisplayText, pickUpAtStoreWithLocationText, changeStoreDisplayText } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n \r\n
\r\n {isBopisSelected ? \r\n {pickUpAtStoreWithLocationText}\r\n : \r\n {shipToAddressDisplayText}\r\n }\r\n
\r\n {\r\n isBopisSelected &&\r\n
\r\n \r\n {cartLine.pickUpInStore.orgUnitName}\r\n \r\n \r\n {changeStoreDisplayText}\r\n \r\n
\r\n }\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Render Bopis block.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderGroupBopisBlock = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent, emailDeliveryModeCode?: string): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n <>\r\n {isBopisSelected ? : null}\r\n \r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - FLag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLine = (cartLine: ICartlinesViewProps, resources: ICartResources, storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent, isMultiplePickUp?: boolean, emailDeliveryModeCode?: string): JSX.Element => {\r\n\r\n if (cartLine.error === resources.outOfStockErrorMessage) {\r\n return (\r\n \r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n }\r\n\r\n if (isMultiplePickUp) {\r\n return (\r\n \r\n {renderGroupBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n }\r\n\r\n if (cartLine.addToOrderTemplate) {\r\n return (\r\n \r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param cartLines - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlinesInternal = (cartLines: ICartlinesViewProps[], resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined, telemetryContent?: ITelemetryContent, isMultiplePickUp?: boolean,\r\n emailDeliveryModeCode?: string): JSX.Element[] | JSX.Element => {\r\n return (\r\n cartLines.map((cartLine, index) => {\r\n const itemIndex = index;\r\n return (\r\n
\r\n {cartLine.cartline}\r\n \r\n {isMultiplePickUp ? null : renderBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {\r\n renderCartLine(cartLine, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\r\n }\r\n \r\n
\r\n );\r\n }));\r\n};\r\n\r\n/**\r\n * Render Cart Lines.\r\n * @param props - The cart line props.\r\n * @param cartLines - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param storeSelector - Store selector element.\r\n * @param waitingComponent - Waiting component element.\r\n * @param cartLoadingStatus - Cart loading status string.\r\n * @param isCartDataResult - Flag to check if there is cart data.\r\n * @param telemetryContent - The telemetry object.\r\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (props: ICartViewProps & ICartExtensionProps<{}>, cartLines: ICartlinesViewProps[] | undefined, resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined, waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string, isCartDataResult: boolean, telemetryContent?: ITelemetryContent, isMultiplePickUp?: boolean,\r\n emailDeliveryModeCode?: string): JSX.Element[] | JSX.Element => {\r\n\r\n if (cartLoadingStatus) {\r\n return (<>\r\n {cartLoadingStatus}\r\n );\r\n }\r\n\r\n // Props.CartlinesWrapper is only required on cart lines and when multiple pickup mode is disabled. This is also required to handle the empty cart styling.\r\n // Else, empty cart multiple pickup mode is disabled falls under the other cart line wrapper which is creating issue with Empty cart scenario.\r\n if (cartLines) {\r\n return props.multiplePickUpEnabled ? (\r\n renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\r\n ) : (\r\n \r\n {renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\r\n \r\n );\r\n }\r\n\r\n return (isCartDataResult ? (\r\n
\r\n
\r\n { props.slots.emptyCart }\r\n
\r\n
\r\n ) : <>\r\n {waitingComponent}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines group title.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param count - Count of products.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { itemLabel, itemsLabel } = resources;\r\n const itemCountOne: number = 1;\r\n const suffix = count > itemCountOne ? itemsLabel : itemLabel;\r\n const countTitle = `(${count} ${suffix})`;\r\n return (\r\n <>\r\n \r\n {isBopisSelected ?

\r\n {cartLine.pickUpInStore?.deliveryOption}\r\n {', '}\r\n {cartLine.pickUpInStore?.orgUnitName}\r\n

: null}\r\n

\r\n {countTitle}\r\n

\r\n
\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Cart Lines group title.\r\n * @param cartLine - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @param count - Count of products.\r\n * @param emailDeliveryModeCode - The email delivery mode code.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroupHeader = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number, emailDeliveryModeCode?: string) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { pickUpText, shippingText, emailshippingText } = resources;\r\n let groupTitle: string;\r\n\r\n groupTitle = isBopisSelected ? pickUpText : shippingText;\r\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\r\n\r\n return (\r\n <>\r\n
\r\n

\r\n

\r\n {groupTitle}\r\n

\r\n {renderCartLinesGroupTitle(cartLine, resources, count)}\r\n
\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Returns count of products.\r\n * @param cartLine - The cart line view props.\r\n * @returns Number of products.\r\n */\r\nconst countItems = (cartLine: ICartlinesViewProps[]): number => {\r\n let countItem = 0;\r\n const defaultItemCount = 0;\r\n countItem = cartLine.reduce((count, item) => {\r\n return count + (item.data?.cartline.Quantity ?? defaultItemCount);\r\n\r\n }, defaultItemCount);\r\n return countItem;\r\n};\r\n\r\n/**\r\n * Render Cart Lines group.\r\n * @param props - The cart line view props.\r\n * @param resources - Module resource strings.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartLinesGroup = (props: ICartViewProps & ICartExtensionProps<{}>, resources: ICartResources): JSX.Element | undefined => {\r\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\r\n return (\r\n
\r\n { props.cartLinesGroup.map(cartlines => {\r\n return (
\r\n {renderCartLinesGroupHeader(cartlines[0], resources, countItems(cartlines),\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\r\n {renderCartlines(props, cartlines, props.resources, props.storeSelector,\r\n props.waitingComponent, props.cartLoadingStatus, props.cartDataResult,\r\n props.telemetryContent, props.multiplePickUpEnabled, props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode)}\r\n
);\r\n })}\r\n
\r\n );\r\n }\r\n return (props.cartDataResult ? (\r\n
\r\n
\r\n {props.slots.emptyCart}\r\n
\r\n
\r\n ) : <>\r\n {props.waitingComponent}\r\n \r\n );\r\n\r\n};\r\n\r\n/**\r\n * Render error block.\r\n * @param errorData - Error component.\r\n * @returns JSX Element.\r\n */\r\nconst renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\r\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\r\n return null;\r\n }\r\n return (\r\n \r\n {errorData.header}\r\n {errorData.errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render invoice summary.\r\n * @param invoiceSummaryLines - Invoice summary component.\r\n * @param orderSummaryItems - Order summary component.\r\n * @param props - The module props.\r\n * @returns JSX Element.\r\n */\r\nconst renderInvoiceSummarylines = (invoiceSummaryLines: IInvoiceSummaryLines | undefined, orderSummaryItems: INodeProps,\r\n props: ICartViewProps): JSX.Element | null => {\r\n if (!invoiceSummaryLines) {\r\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\r\n return null;\r\n }\r\n return (\r\n \r\n {invoiceSummaryLines.invoices}\r\n {invoiceSummaryLines.giftCard}\r\n {invoiceSummaryLines.loyalty}\r\n {invoiceSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render order summary.\r\n * @param orderSummaryLines - Order summary component.\r\n * @param orderSummaryItems - Order summary items component.\r\n * @param props - The module props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummarylines = (orderSummaryLines: IOrderSummaryLines | undefined, orderSummaryItems: INodeProps,\r\n props: ICartViewProps): JSX.Element | null => {\r\n if (!orderSummaryLines) {\r\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\r\n return null;\r\n }\r\n return (\r\n \r\n {orderSummaryLines.subtotal}\r\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\r\n {orderSummaryLines.shipping}\r\n {orderSummaryLines.otherCharge}\r\n {orderSummaryLines.tax}\r\n {orderSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render error block.\r\n * @param promotions - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\r\n return (\r\n <>\r\n \r\n {promotions.promotionMessage}\r\n \r\n {promotions.promotionSeeAllLink}\r\n \r\n {promotions.promotionDialog}\r\n \r\n\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render order summary checkout.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummaryCheckout = (props: ICartViewProps): JSX.Element | undefined => {\r\n return (\r\n \r\n {props.cart?.hasInvoiceLine ? null : props.promoCode}\r\n \r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n \r\n {props.createTemplateFromCartButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render order summary checkout button.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderOrderSummaryCheckoutButton = (props: ICartViewProps): JSX.Element | undefined => {\r\n return (\r\n \r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render cart view.\r\n * @param props - The module view props.\r\n * @returns JSX Element.\r\n */\r\nconst CartView: React.FC> = (props: ICartViewProps & ICartExtensionProps<{}>) => {\r\n const totalItemCountOne: number = 1;\r\n const updatedTitle = (\r\n

\r\n {props.resources.cartTitle}\r\n \r\n {` (${Number(props.cart?.totalItemsInCart)} ${props.cart?.totalItemsInCart !== totalItemCountOne ? 'items' : 'item'})`}\r\n \r\n

\r\n );\r\n return (\r\n
\r\n {updatedTitle}\r\n
\r\n {props.orderSummaryLineitems?.orderTotal}\r\n
\r\n {renderOrderSummaryCheckoutButton(props)}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? renderCartLinesGroup(props, props.resources) : renderCartlines(props, props.cartlines,\r\n props.resources, props.storeSelector, props.waitingComponent, props.cartLoadingStatus, props.cartDataResult)}\r\n {props.orderSummaryHeading &&\r\n \r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine ? renderInvoiceSummarylines(\r\n props.invoiceSummaryLineitems, props.OrderSummaryItems, props) : renderOrderSummarylines(\r\n props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {renderErrorBlock(props.OrderSummaryErrors)}\r\n \r\n {renderOrderSummaryCheckout(props)}\r\n }\r\n {props.storeSelector}\r\n
\r\n );\r\n};\r\n\r\nexport default CartView;\r\n","/*--------------------------------------------------------------\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 { IImageSettings, Image, RichTextComponent } from '@msdyn365-commerce/core';\r\nimport { IWriteReviewData, IWriteReviewViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\r\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IWriteReviewProps } from '../definition-extensions/write-review.ext.props.autogenerated';\r\n\r\n/**\r\n * Render Product Image.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductImage = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\r\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\r\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\r\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\r\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render Product Description.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst renderProductDescription = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\r\n const product = props.data.product.result;\r\n return (\r\n \r\n
\r\n {renderProductImage(props)}\r\n
\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.Name}\r\n
\r\n
\r\n {product?.ItemId}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\n/**\r\n * Create Write Review Modal.\r\n * @param props - WriteReview ViewProps.\r\n * @returns JSX Element.\r\n */\r\nconst createReviewModal = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\r\n const { resources, moduleProps, reviewModal } = props;\r\n\r\n return (\r\n \r\n {reviewModal.modalHeader}\r\n \r\n \r\n \r\n {renderProductDescription(props)}\r\n \r\n
\r\n {resources.selectRatingLabel}\r\n
\r\n {reviewModal.rating}\r\n
\r\n
\r\n \r\n {resources.reviewTitleLabel}\r\n {reviewModal.titleInput}\r\n \r\n \r\n {resources.reviewTextLabel}\r\n {reviewModal.textInput}\r\n \r\n {reviewModal.privacyPolicyUrl}\r\n {reviewModal.error}\r\n
\r\n
\r\n \r\n {reviewModal.submitButton}\r\n {reviewModal.cancelButton}\r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n * WriteReview view.\r\n * @param props - WriteReview ViewProps.\r\n * @returns WriteReview view module.\r\n */\r\nconst WriteReviewView: React.FC> = props => {\r\n const { config, heading, signInMessage, signInButton, modalToggle, moduleProps } = props;\r\n const { paragraph } = config;\r\n const isAuthenticated = props.context.request.user.isAuthenticated;\r\n const text = paragraph && ();\r\n\r\n return (\r\n \r\n {heading}\r\n {!isAuthenticated ? <>\r\n {signInMessage}\r\n {signInButton}\r\n : <>\r\n {text}\r\n {modalToggle}\r\n {createReviewModal(props)}\r\n }\r\n \r\n );\r\n};\r\n\r\nexport default WriteReviewView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAccountCustomerBalanceViewProps } from './account-customer-balance';\n\nexport default (props: IAccountCustomerBalanceViewProps) => {\n const {\n heading,\n accountSectionHeading,\n creditSummarySectionHeading,\n accountLabels,\n accountValues,\n creditSummaryLabels,\n creditSummaryValues,\n homeButton,\n actions,\n requestStatementModal,\n availableCredit,\n balanceOwed,\n creditExcess\n } = props;\n\n return (\n \n {heading}\n {requestStatementModal}\n {actions}\n {accountSectionHeading}\n
\n {accountLabels}\n {accountValues}\n
\n {creditSummarySectionHeading}\n
\n {creditSummaryLabels}\n {creditSummaryValues}\n {availableCredit}\n {balanceOwed}\n {creditExcess}\n
\n {homeButton}\n
\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\ninterface ILink {\n className?: string;\n text?: string;\n href?: string;\n ariaLabel?: string;\n index: string;\n noclick?: boolean;\n telemetryContent: ITelemetryContent;\n}\n\nexport const Link: React.FC = ({ text, className, href, ariaLabel, index, noclick, telemetryContent }) => {\n const payLoad = getPayloadObject('click', telemetryContent, '', '');\n\n const linkText = text !== undefined ? text : '';\n payLoad.contentAction.etext = linkText;\n\n // Construct telemetry attribute to render\n const attribute = getTelemetryAttributes(telemetryContent, payLoad);\n\n return (\n \n {linkText}\n \n \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 React from 'react';\n\ninterface ISeparator {\n separator: string;\n}\n\nexport const Separator: React.FC = ({ separator }) => (\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { ICategoryUrl } from '@msdyn365-commerce/core-internal/dist/types/interfaces/ICategoryPathInterfaces';\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IBreadcrumbData } from './breadcrumb.data';\nimport { IBreadcrumbProps, ILinksData } from './breadcrumb.props.autogenerated';\nimport { Link } from './components/link';\nimport { Separator } from './components/separator';\n\nexport interface IBreadcrumbViewProps extends IBreadcrumbProps {\n root?: React.ReactNode;\n links?: React.ReactNode[];\n backButton?: React.ReactNode;\n separator?: React.ReactNode;\n BreadcrumbContainer: IModuleProps;\n BreadcrumbList: INodeProps;\n BreadcrumbListItem: INodeProps;\n}\n\n/**\n *\n * Breadcrumb component.\n * @extends {React.PureComponent>}\n */\nclass Breadcrumb extends React.PureComponent> {\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public render(): JSX.Element | null {\n const { className } = this.props.config;\n let rootLink = null;\n let breadcrumbLinks = null;\n let backButtonComponent = null;\n rootLink = this._getRootLink();\n const itemPosition = rootLink ? 1 : 0;\n if (this._pageType === 'Category') {\n breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\n if (!breadcrumbLinks) {\n breadcrumbLinks = this._getCategoryHierarchy(itemPosition);\n }\n } else if (this._pageType === 'Product') {\n breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\n if (!breadcrumbLinks) {\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\n if (breaCrumbType === 'category') {\n breadcrumbLinks = this._getPDPLinks(itemPosition);\n }\n if (breaCrumbType === 'categoryAndBack') {\n backButtonComponent = this._getPDPBackButton();\n breadcrumbLinks = this._getPDPLinks(itemPosition);\n }\n if (breaCrumbType === 'back') {\n backButtonComponent = this._getPDPBackButton();\n if (backButtonComponent === null) {\n breadcrumbLinks = this._getPDPLinks(itemPosition);\n }\n }\n }\n } else {\n breadcrumbLinks = this._getCustomBreadcrumbLinks(itemPosition);\n }\n const linkSeparator = ;\n\n const breadcrumbViewProps = {\n ...this.props,\n BreadcrumbContainer: {\n moduleProps: this.props,\n className: classnames('ms-breadcrumb', className),\n tag: 'nav',\n role: 'navigation'\n },\n BreadcrumbList: {\n tag: 'ol' as NodeTag,\n className: 'ms-breadcrumb_list'\n },\n BreadcrumbListItem: {\n tag: 'li',\n className: 'ms-breadcrumb_item'\n },\n root: rootLink,\n links: breadcrumbLinks,\n backButton: backButtonComponent,\n separator: linkSeparator\n };\n return this.props.renderView(breadcrumbViewProps) as React.ReactElement;\n }\n\n private readonly _getRootLink = (): JSX.Element | null => {\n const { root } = this.props.config;\n if (!root || !root.linkUrl || !root.linkUrl.destinationUrl) {\n this.props.context.telemetry.error('BreadCrumb link url content is empty, link wont render');\n return null;\n }\n return (\n \n );\n };\n\n private readonly _getCustomBreadcrumbLinks = (itemPosition: number): JSX.Element[] | null => {\n const { links } = this.props.config;\n\n if (!links || links.length === 0) {\n this.props.context.telemetry.error('BreadCrumb links content is empty, links wont render');\n return null;\n }\n const defaultValueToSubtract = 1;\n return links.map((value: ILinksData, index: number) => {\n itemPosition++;\n const keyIndex = index;\n return index !== links.length - defaultValueToSubtract ? (\n \n ) : (\n
\n {value.linkText}\n
\n );\n });\n };\n\n private readonly _getCategoryHierarchy = (itemPosition: number): JSX.Element[] | null => {\n const { data } = this.props;\n const categoryHierarchy = data.categoryHierarchy.result;\n if (!categoryHierarchy) {\n this.props.context.telemetry.error('Category Hierarchy content is empty, module wont render');\n return null;\n }\n return categoryHierarchy.map((value: CategoryHierarchy, index: number) => {\n itemPosition++;\n\n const friendlyName = this._getFriendlyName(this.props.context.request.locale, value.NameTranslations);\n\n return (\n \n );\n });\n };\n\n /**\n * The function to get translation name for the locale.\n * @param locale - The locale information.\n * @param nameTranslations - The name translations names.\n * @returns - The translation name for the locale.\n */\n private readonly _getFriendlyName = (locale: string, nameTranslations?: TextValueTranslation[]): string | undefined => {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n // If friendly name for current locale is null, should use default locale.\n if (nameTranslation === undefined && ArrayExtensions.hasElements(nameTranslations)) {\n nameTranslation = nameTranslations[0];\n }\n\n return nameTranslation?.Text;\n };\n\n private readonly _getPDPLinks = (itemPosition: number): JSX.Element[] | null => {\n const { data, config } = this.props;\n const categoryHierarchy = data.categoryPaths.result;\n const product = data.product.result;\n const url = this.props.context.request.url.requestUrl.href;\n if (!categoryHierarchy) {\n this.props.context.telemetry.error('Category path content is empty for the product');\n return null;\n }\n const links: JSX.Element[] = [];\n\n categoryHierarchy.map((value: ICategoryUrl, index: number) => {\n itemPosition++;\n links.push(\n \n );\n });\n if (product && !config.hideProductName) {\n itemPosition++;\n links.push(\n \n );\n }\n return links;\n };\n\n private readonly _goBack = (): void => {\n window.history.back();\n };\n\n private readonly _getPDPBackButton = (): JSX.Element | null => {\n const isBackAllowed =\n this.props.context && this.props.context.request && this.props.context.request.query && this.props.context.request.query.back;\n if (!isBackAllowed) {\n return null;\n }\n if (MsDyn365.isBrowser && (document.referrer === '' || window.history.length < 2)) {\n return null;\n }\n return (\n \n {this.props.resources.backToResultsText}\n \n );\n };\n}\n\nexport default Breadcrumb;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IBreadcrumbViewProps } from './breadcrumb';\n\nconst BreadCrumbView: React.FC = props => {\n const { root, links, backButton, BreadcrumbContainer, BreadcrumbList, BreadcrumbListItem, separator } = props;\n if (!root && !links && !backButton) {\n props.context.telemetry.error('BreadCrumb content is empty, module wont render');\n return null;\n }\n return (\n \n \n {root && (\n \n {root}\n {links && separator}\n \n )}\n {backButton && {backButton}}\n {links &&\n links.map((link, index) => (\n \n \n {link}\n {links[index + 1] && separator}\n \n \n ))}\n \n \n );\n};\n\nexport default BreadCrumbView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IBuyboxAddToCartViewProps,\n IBuyboxAddToOrderTemplateViewProps,\n IBuyboxAddToWishlistViewProps,\n IBuyboxCallbacks,\n IBuyboxData,\n IBuyboxFindInStoreViewProps,\n IBuyboxKeyInPriceViewProps,\n IBuyboxProductConfigureDropdownViewProps,\n IBuyboxProductConfigureViewProps,\n IBuyboxProductQuantityViewProps,\n IBuyboxProps,\n IBuyboxShopSimilarLookViewProps,\n IBuyboxState,\n IBuyboxViewProps\n} from '@msdyn365-commerce-modules/buybox';\nimport { IncrementalQuantity, ITelemetryContent, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n IBuyboxProps as IBuyboxExtentionProps,\n IBuyboxResources as IBuyboxExtentionResources\n} from '../definition-extensions/buybox.ext.props.autogenerated';\n\nconst BuyboxView: React.FC> = props => {\n const {\n ModuleProps,\n MediaGalleryContainerProps,\n ProductInfoContainerProps,\n addToCart,\n addToOrderTemplate,\n addToWishlist,\n telemetryContent,\n configure,\n description,\n findInStore,\n quantity,\n price,\n title,\n rating,\n callbacks,\n state,\n resources,\n inventoryLabel,\n shopSimilarLook,\n keyInPrice,\n quantityLimitsMessages,\n max,\n shopSimilarDescription,\n unitOfMeasure\n } = props;\n\n return (\n \n {props.mediaGallery}\n \n {title}\n {price}\n {unitOfMeasure}\n {props.bulkPurchaseLink}\n {description}\n {_renderTextBlock(props.slots.textBlocks)}\n {rating}\n {configure && _renderConfigure(configure)}\n {keyInPrice && _renderKeyInPrice(keyInPrice)}\n {quantity && _renderQuantity(quantity, callbacks, props, state, resources, quantityLimitsMessages, max, telemetryContent)}\n {inventoryLabel}\n {_renderCartAndActions(addToCart, addToOrderTemplate, addToWishlist)}\n {findInStore && _renderFindInStore(findInStore)}\n {_renderSocialShare(props.slots && props.slots.socialShare)}\n {shopSimilarLook && _renderShopSimilarItem(shopSimilarLook)}\n {shopSimilarDescription && _renderShopSimilarItem(shopSimilarDescription)}\n \n \n );\n};\n\nconst _renderTextBlock = (textBlocks: React.ReactNode[]): JSX.Element | undefined => {\n if (!textBlocks || textBlocks.length === 0) {\n return undefined;\n }\n\n return <>{textBlocks[0]};\n};\n\nconst _renderSocialShare = (socialShare: React.ReactNode[]): JSX.Element | undefined => {\n if (!socialShare || socialShare.length === 0) {\n return undefined;\n }\n\n return <>{socialShare[0]};\n};\n\nconst _renderCartAndActions = (\n addToCart?: IBuyboxAddToCartViewProps,\n addToOrderTemplate?: IBuyboxAddToOrderTemplateViewProps,\n addToWishlist?: IBuyboxAddToWishlistViewProps\n): JSX.Element | undefined => {\n if (!addToCart && !addToWishlist) {\n return undefined;\n }\n\n return (\n
\n {addToCart && addToCart.errorBlock}\n {addToOrderTemplate && addToOrderTemplate.errorBlock}\n {addToWishlist && addToWishlist.errorBlock}\n
\n {addToCart && addToCart.button}\n {addToOrderTemplate && addToOrderTemplate.button}\n {addToWishlist && addToWishlist.button}\n
\n
\n );\n};\n\nconst _renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\n const { ContainerProps, dropdowns } = configure;\n\n return {dropdowns.map(_renderConfigureDropdown)};\n};\n\nconst _renderConfigureDropdown = (dropdown: IBuyboxProductConfigureDropdownViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, errors, select } = dropdown;\n\n return (\n \n \n {heading}\n {errors}\n \n {select}\n \n );\n};\n\nconst _renderFindInStore = (findInStore: IBuyboxFindInStoreViewProps): JSX.Element => {\n const { ContainerProps, storeSelector, heading, description, errors, button, modal, productPickupOptionList } = findInStore;\n\n return (\n \n {storeSelector}\n {heading}\n {productPickupOptionList}\n {description}\n {errors}\n {button}\n {modal}\n \n );\n};\n\n/**\n * On Change function.\n * @param callbacks -Callbacks.\n * @returns Update quantity.\n */\nconst onChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number): boolean => {\n if (callbacks.updateQuantity) {\n return callbacks.updateQuantity(newValue);\n }\n return true;\n};\n\nconst _renderQuantity = (\n quantityComponent: IBuyboxProductQuantityViewProps,\n callbacks: IBuyboxCallbacks,\n props: IBuyboxProps,\n state: IBuyboxState,\n extentionResources: IBuyboxExtentionResources,\n quantityLimitsMessages: React.ReactNode,\n max: number | undefined,\n telemetryContent?: ITelemetryContent\n): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, errors } = quantityComponent;\n\n const { resources } = props;\n\n const { quantity } = state;\n\n return (\n \n \n {heading}\n {errors}\n \n\n \n {quantityLimitsMessages}\n \n );\n};\n\nconst _renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\n\n return (\n \n {heading}\n {input}\n \n );\n};\n\nconst _renderShopSimilarItem = (shopSimilarItem: IBuyboxShopSimilarLookViewProps): JSX.Element => {\n const { ContainerProps, errors, input } = shopSimilarItem;\n\n return (\n \n {errors}\n {input}\n \n );\n};\n\nexport default BuyboxView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IFooterCategoryConfig, IFooterCategoryProps } from './footer-category.props.autogenerated';\n\nexport interface IFooterCategoryViewProps extends IFooterCategoryProps {\n categories: React.ReactNode[];\n FooterList: IModuleProps;\n FooterListItem: INodeProps;\n}\n\n/**\n *\n * FooterCategory component.\n * @extends {React.PureComponent>}\n */\nclass FooterCategory extends React.PureComponent> {\n public render(): JSX.Element | null {\n if (!this.props.slots || !this.props.slots.content || this.props.slots.content.length === 0) {\n this.props.context.telemetry.error('footer slots content is empty, module wont render');\n return null;\n }\n const viewprops = {\n ...this.props,\n categories: this.props.slots.content,\n FooterList: {\n moduleProps: this.props,\n className: classnames('ms-footer__list', this.props.config.className),\n tag: 'ul'\n },\n FooterListItem: {\n className: classnames('ms-footer__list-item', this.props.config.className),\n tag: 'li'\n }\n };\n\n return this.props.renderView(viewprops) as React.ReactElement;\n }\n}\n\nexport default FooterCategory;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport React, { ReactNode } from 'react';\n\nimport { IFooterCategoryViewProps } from './footer-category';\n\nexport const FooterCategoryView: React.FC = props => {\n const { categories, FooterList, FooterListItem } = props;\n if (!categories || categories.length === 0) {\n props.context.telemetry.error('Footer content is empty, module wont render');\n return null;\n }\n return (\n \n {categories.map((category: ReactNode, index: number) => {\n return (\n \n {category}\n \n );\n })}\n \n );\n};\n\nexport default FooterCategoryView;\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 { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IImageListConfig, IImageListProps, IImagesData } from './image-list.props.autogenerated';\n\n/**\n * The interface for IImageListViewProps.\n */\nexport interface IImageListViewProps extends IImageListProps {\n imageList: IModuleProps;\n imageListHeading?: React.ReactNode;\n imageListContainer: INodeProps;\n imageListItem: INodeProps;\n imageListItemAnchorTag: INodeProps;\n imageListItems: IImageListItem[] | undefined;\n}\n\n/**\n * The interface for IImageListItem.\n */\nexport interface IImageListItem {\n image: JSX.Element | undefined;\n text: JSX.Element | undefined;\n link: string | undefined;\n linkAltText: string | undefined;\n linkAriaLabel: string | undefined;\n}\n\n/**\n *\n * ImageList component.\n * @extends {React.PureComponent>}\n */\nclass ImageList extends React.PureComponent> {\n public render(): JSX.Element | null {\n const { heading } = this.props.config;\n const imageListTitle = heading && ;\n const viewProps: IImageListViewProps = {\n ...this.props,\n imageList: {\n moduleProps: this.props,\n className: classnames('ms-image-list', this.props.config.className),\n tag: 'div'\n },\n imageListHeading: imageListTitle,\n imageListContainer: {\n className: 'ms-image-list__list',\n role: 'list',\n tag: 'ul'\n },\n imageListItem: {\n className: 'ms-image-list__list-item',\n role: 'listitem',\n tag: 'li'\n },\n imageListItemAnchorTag: {\n tag: 'a',\n className: 'ms-image-list__link',\n role: 'link'\n },\n imageListItems: this._renderImageListItems()\n };\n return this.props.renderView(viewProps);\n }\n\n /**\n * Handle paragraph change.\n * @param index - Index of image item in array of image items.\n * @returns Void.\n */\n public handleParagraphChange = (index: number) => (event: Msdyn365.ContentEditableEvent): void => {\n if (this.props.config.images![index]) {\n this.props.config.images![index].paragraph = event.target.value;\n }\n };\n\n /**\n * Render list of images.\n * @returns List of images with text and redirection link.\n */\n private readonly _renderImageListItems = (): IImageListItem[] | undefined => {\n const imageList: IImagesData[] | undefined = this.props.config.images;\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=65&h=65&q=80&m=6', w: 65, h: 65 },\n lg: { q: 'w=65&h=65&q=80&m=6', w: 65, h: 65 },\n xl: { q: 'w=65&h=65&q=80&m=6', w: 65, h: 65 }\n },\n lazyload: false,\n disableLazyLoad: true\n };\n return imageList?.map((item, index) => {\n const { image, link, paragraph } = item;\n\n const imageProps = {\n gridSettings: this.props.context.request.gridSettings!,\n imageSettings: (image?.imageSettings ?? defaultImageSettings) as Msdyn365.IImageSettings | undefined\n };\n\n const imageLink: string | undefined = link?.linkUrl.destinationUrl;\n const imageLinkText: string | undefined = link?.linkText ?? link?.ariaLabel;\n const imageLinkAriaLabel: string | undefined = link?.ariaLabel;\n\n // If image is null, we want to render the placeholder SVG - by passing image data with empty src\n const imageImage = (\n \n );\n\n const imageText = paragraph && (\n \n );\n const imageListItem: IImageListItem = {\n image: imageImage,\n text: imageText,\n link: imageLink,\n linkAltText: imageLinkText,\n linkAriaLabel: imageLinkAriaLabel\n };\n return imageListItem;\n });\n };\n}\n\nexport default ImageList;\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IImageListViewProps } from './image-list';\n\n/**\n * Render the thumbnail item images.\n * @param props - The image list view props.\n * @returns Return HTML having IImageListViewProps props with image List.\n */\nexport const imageListView = (props: IImageListViewProps): JSX.Element => {\n const { imageList, imageListContainer, imageListHeading, imageListItem, imageListItems, imageListItemAnchorTag } = props;\n return (\n \n {imageListHeading}\n \n {imageListItems?.map(item => {\n let indexKey: string;\n\n if (item.image) {\n const image = (item.image as unknown) as Msdyn365.Image;\n indexKey = image.props.src as string;\n } else {\n const text = (item.text as unknown) as Msdyn365.RichTextComponent;\n indexKey = text.props.text as string;\n }\n return (\n \n {item.image && (\n \n {item.image}\n \n )}\n {item.text}\n \n );\n })}\n \n \n );\n};\n\nexport default imageListView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n Heading,\n IComponentNodeProps,\n IModuleProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IInteractiveFeatureCollectionProps, ITitleData } from './interactive-feature-collection.props.autogenerated';\n\n/**\n * Interactive Feature Collection view props.\n */\nexport interface IInteractiveFeatureCollectionViewProps extends IInteractiveFeatureCollectionProps<{}> {\n title: React.ReactNode;\n interactiveFeatureCollectionHeading: INodeProps;\n interactiveFeatureCollectionContainer: IModuleProps;\n interactiveFeatureCollectionDesktopContainer: INodeProps;\n interactiveFeatureCollectionDesktopItems: React.ReactNode[];\n interactiveFeatureCollectionMobileContainer: INodeProps;\n interactiveFeatureCollectionMobileItems: React.ReactNode[];\n singleSlideCarouselComponentProps: INodeProps;\n singleSlideCarouselItemContainer: INodeProps;\n}\n\n/**\n *\n * InteractiveFeatureCollection component.\n * @extends {React.PureComponent>}\n */\nexport class InteractiveFeatureCollection extends React.PureComponent> {\n private readonly _telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n private static _createHeading(heading?: ITitleData): React.ReactNode | null {\n if (!heading || !heading.text || StringExtensions.isNullOrWhitespace(heading.text)) {\n return null;\n }\n return ;\n }\n\n private static _getFeatureItem(item: React.ReactNode, index: number, itemsCounter: number): React.ReactNode {\n const keyIndex = `interactive-feature-mosaic-item__${index}`;\n return (\n \n {React.cloneElement(item as React.ReactElement, { indexItem: index, itemCounter: itemsCounter, isMosaic: true })}\n \n );\n }\n\n public constructor(props: IInteractiveFeatureCollectionProps) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { resources } = this.props;\n const { title, className } = this.props.config;\n const interactiveItems = this.props.slots.interactiveFeatureItems;\n const itemsFeatureCounter = interactiveItems.length;\n const singleSlideCarouselComponentProps: IComponentNodeProps = {\n tag: SingleSlideCarousel,\n className: this.props.config.className ?? '',\n flipperPrevLabel: resources.flipperPrevious,\n flipperNextLabel: resources.flipperNext,\n parentId: this.props.id,\n telemetryContent: this._telemetryContent,\n vertical: false\n };\n const initItemsFeatureCounter = 0;\n const viewProps = {\n ...this.props,\n title: InteractiveFeatureCollection._createHeading(title),\n interactiveFeatureCollectionHeading: {\n className: 'ms-interactive-feature-collection__heading'\n },\n interactiveFeatureCollectionContainer: {\n moduleProps: this.props,\n className: classnames('ms-interactive-feature-collection', className)\n },\n interactiveFeatureCollectionDesktopContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-interactive-feature-collection-desktop'\n },\n interactiveFeatureCollectionMobileContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-interactive-feature-collection-mobile'\n },\n singleSlideCarouselComponentProps,\n singleSlideCarouselItemContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-interactive-feature-collection-carousel',\n role: 'listitem'\n },\n interactiveFeatureCollectionMobileItems: this.props.slots.interactiveFeatureItems,\n interactiveFeatureCollectionDesktopItems:\n itemsFeatureCounter > initItemsFeatureCounter &&\n interactiveItems.map((item: React.ReactNode, index: number) =>\n InteractiveFeatureCollection._getFeatureItem(item, index, itemsFeatureCounter)\n )\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n}\n\nexport default InteractiveFeatureCollection;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport React, { ReactNode } from 'react';\n\nimport { IInteractiveFeatureCollectionViewProps } from './interactive-feature-collection';\n\n/**\n * Feature Collection View.\n * @param props - Feature Collection view props.\n * @returns Feature Collection View.\n */\nexport const interactiveFeatureCollectionView: React.FC = props => {\n const {\n title,\n interactiveFeatureCollectionHeading,\n interactiveFeatureCollectionContainer,\n interactiveFeatureCollectionDesktopContainer,\n interactiveFeatureCollectionDesktopItems,\n interactiveFeatureCollectionMobileItems,\n interactiveFeatureCollectionMobileContainer,\n singleSlideCarouselComponentProps,\n singleSlideCarouselItemContainer\n } = props;\n return (\n \n {title}\n {interactiveFeatureCollectionDesktopItems}\n \n \n {interactiveFeatureCollectionMobileItems.map((tileItem: ReactNode, index: number) => {\n const keyIndex = `interactive-feature-carousel-item__${index}`;\n return (\n \n {tileItem}\n \n );\n })}\n \n \n \n );\n};\n\nexport default interactiveFeatureCollectionView;\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 { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../interactive-feature-item.props.autogenerated';\n\n/**\n * Interactive Feature links.\n */\nexport interface IInteractiveFeatureLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\n/**\n *\n * IInteractiveFeatureLinks component.\n * @extends {React.PureComponent}\n */\nexport class InteractiveFeatureCollectionLinks extends React.PureComponent {\n public render(): JSX.Element {\n const editableLinks = this._mapEditableLinks(this.props.links);\n return (\n
\n {editableLinks && ArrayExtensions.hasElements(editableLinks) ? (\n \n ) : null}\n
\n );\n }\n\n /**\n * IInteractiveFeatureLinks component.\n * @param linkdata - Link data.\n * @returns Editable links.\n */\n private readonly _mapEditableLinks = (linkdata?: ILinksData[]): Msdyn365.ILinksData[] | null => {\n if (!linkdata || !ArrayExtensions.hasElements(linkdata)) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n for (const link of linkdata) {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-interactive-feature-collection__link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'button',\n additionalProperties: attributes,\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n }\n\n return editableLinks;\n };\n}\nexport default InteractiveFeatureCollectionLinks;\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 { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { InteractiveFeatureCollectionLinks } from './components';\nimport { IHeadingData, IInteractiveFeatureItemProps } from './interactive-feature-item.props.autogenerated';\n\n/**\n * Interactive Feature Item view props.\n */\nexport interface IInteractiveFeatureItemViewProps extends IInteractiveFeatureItemProps<{}> {\n title: React.ReactNode;\n paragraph: React.ReactNode;\n image: React.ReactNode;\n links: React.ReactNode;\n featureItem: IModuleProps;\n isMosaic: boolean;\n indexItem?: number;\n itemCounter?: number;\n\n interactiveFeatureCollectionCarouselContainer: INodeProps;\n interactiveFeatureCollectionCarouselImage: INodeProps;\n interactiveFeatureCollectionCarouselContent: INodeProps;\n\n interactiveFeatureCollectionMosaicContainer: INodeProps;\n interactiveFeatureCollectionMosaicImage: INodeProps;\n interactiveFeatureCollectionMosaicDetails: INodeProps;\n}\n\n/**\n * Interactive Feature Item Extented props.\n */\nexport interface IInteractiveFeatureItemExtentedProps extends IInteractiveFeatureItemProps<{}> {\n isMosaic?: boolean;\n indexItem?: number;\n itemCounter?: number;\n}\n\n/**\n *\n * InteractiveFeatureItem component.\n * @extends {React.PureComponent}\n */\nexport class InteractiveFeatureItem extends React.PureComponent {\n private readonly _telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public constructor(props: IInteractiveFeatureItemProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { indexItem, itemCounter, isMosaic } = this.props;\n const { heading, paragraph, image, links } = this.props.config;\n const featureItemLinks = links && ArrayExtensions.hasElements(links) && (\n \n );\n\n const viewProps = {\n ...this.props,\n indexItem,\n itemCounter,\n isMosaic: isMosaic ? isMosaic : false,\n title: this._createHeading(heading),\n paragraph: this._createParagraph(paragraph),\n image: this._renderImage(image),\n links: featureItemLinks,\n featureItem: {\n moduleProps: this.props,\n className: ''\n },\n interactiveFeatureCollectionCarouselContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-interactive-feature-collection-carousel__container'\n },\n interactiveFeatureCollectionCarouselImage: {\n tag: 'div' as NodeTag,\n className: 'ms-interactive-feature-collection-carousel__image'\n },\n interactiveFeatureCollectionCarouselContent: {\n tag: 'div' as NodeTag,\n className: 'ms-interactive-feature-collection-carousel__heading'\n },\n interactiveFeatureCollectionMosaicContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-interactive-feature-collection-mosaic',\n 'aria-label': heading?.text,\n tabindex: '0',\n role: 'group'\n },\n interactiveFeatureCollectionMosaicImage: {\n className: 'ms-interactive-feature-collection-mosaic__image'\n },\n interactiveFeatureCollectionMosaicDetails: {\n className: 'ms-interactive-feature-collection-mosaic__details'\n }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handles heading content change event.\n * @param event - Content editable event.\n */\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n /**\n * Handles paragraph content change event.\n * @param event - Content editable event.\n */\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.paragraph = event.target.value;\n };\n\n /**\n * Handles paragraph content change event.\n * @param linkIndex - Index of link in linkarray.\n * @returns Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent): void => {\n if (this.props.config.links?.[Number(linkIndex)]) {\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\n }\n };\n\n private _createParagraph(text?: Msdyn365.RichText): React.ReactNode | null {\n if (!text) {\n return null;\n }\n return (\n \n );\n }\n\n private _createHeading(heading?: IHeadingData): React.ReactNode | null {\n if (!heading) {\n return null;\n }\n if (StringExtensions.isNullOrWhitespace(heading.text)) {\n return null;\n }\n\n return (\n \n );\n }\n\n private _renderImage(item?: Msdyn365.IImageData, isAriaHiddenAttribute?: boolean): React.ReactNode | null {\n // Even if image.src is null, we render the Image component to render the fallback SVG\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=328&h=459&m=6', w: 328, h: 459 },\n sm: { q: 'w=348&h=487&m=6', w: 348, h: 487 },\n md: { q: 'w=650&h=366&m=6', w: 650, h: 366 },\n lg: { q: 'w=650&h=366&m=6', w: 650, h: 366 },\n xl: { q: 'w=650&h=366&m=6', w: 650, h: 366 }\n },\n lazyload: true\n };\n const verifiedImageSettings = item?.imageSettings?.viewports ? item.imageSettings : defaultImageSettings;\n return (\n \n );\n }\n}\n\nexport default InteractiveFeatureItem;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IInteractiveFeatureItemViewProps } from './interactive-feature-item';\n\n/**\n * Enumerator used to make some calculations to set the proper classnames\n * using modular calculations to see if they are in a right or left column or on first or last row.\n */\nenum MagicNumber {\n modularDivisor = 4,\n caseNumberZero = 0,\n caseNumberOne = 1,\n caseNumberTwo = 2\n}\n\n/**\n * Feature Item View.\n * @param thisProps - Feature Item view props.\n * @param indexItem - Feature Item view props.\n * @param itemCounter - Feature Item view props.\n * @returns Feature item View.\n * @extends {} InteractiveFeatureItem\n */\nconst renderMosaic = (thisProps: IInteractiveFeatureItemViewProps, indexItem?: number, itemCounter?: number): JSX.Element | null => {\n const {\n title,\n paragraph,\n image,\n links,\n interactiveFeatureCollectionMosaicContainer,\n interactiveFeatureCollectionMosaicImage,\n interactiveFeatureCollectionMosaicDetails\n } = thisProps;\n const indexAux = indexItem ? indexItem + MagicNumber.caseNumberOne : MagicNumber.caseNumberOne;\n const itemCounterAux = itemCounter ? itemCounter : MagicNumber.caseNumberZero;\n const modularAux = indexAux % MagicNumber.modularDivisor;\n const firstRow = indexAux <= MagicNumber.caseNumberTwo ? 'firstRow' : '';\n const lastRow =\n itemCounterAux && (indexAux === itemCounterAux || indexAux === itemCounterAux - MagicNumber.caseNumberOne) ? 'lastRow' : '';\n const onCornerRight = modularAux === MagicNumber.caseNumberZero ? 'item-corner-right' : '';\n const onCornerLeft = modularAux === MagicNumber.caseNumberOne ? 'item-corner-left' : '';\n const containerClasses = classnames('ms-interactive-feature-collection-mosaic', onCornerLeft, onCornerRight, firstRow, lastRow);\n\n return (\n \n {image}\n \n {title}\n {paragraph}\n {links}\n \n \n );\n};\n\n/**\n * Feature Item View.\n * @param thisProps - Feature Item view props.\n * @returns Feature item View.\n * @extends {} InteractiveFeatureItem\n */ const renderCarousel = (thisProps: IInteractiveFeatureItemViewProps): JSX.Element | null => {\n const {\n title,\n paragraph,\n image,\n links,\n interactiveFeatureCollectionCarouselContainer,\n interactiveFeatureCollectionCarouselImage,\n interactiveFeatureCollectionCarouselContent\n } = thisProps;\n return (\n \n {image}\n \n {title}\n {paragraph}\n {links}\n \n \n );\n};\n\n/**\n * Feature Item View.\n * @param props - Feature Item view props.\n * @returns Feature item View.\n * @extends {} InteractiveFeatureItem\n */\nexport const FeatureItemViewComponent: React.FC = props => {\n const { isMosaic, featureItem, indexItem, itemCounter } = props;\n if (isMosaic) {\n return <>{renderMosaic(props, indexItem, itemCounter)};\n }\n return {renderCarousel(props)};\n};\n\nexport default FeatureItemViewComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/// \n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { observable, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IMapData } from './map.data';\nimport { IMapProps, IPushpinOptionsData } from './map.props.autogenerated';\n\n/**\n * Header Interface.\n */\nexport interface IHeader {\n headerProps: INodeProps;\n heading: React.ReactNode;\n}\n\n/**\n * MapViewProps Interface.\n */\nexport interface IMapViewProps extends IMapProps {\n ModuleProps: IModuleProps;\n Header: IHeader;\n MapProps: INodeProps;\n Map: Microsoft.Maps.Map | undefined;\n}\n\n/**\n *\n * Map component.\n * @extends {React.Component>}\n */\n@observer\nclass Map extends React.PureComponent> {\n @observable public map: Microsoft.Maps.Map | undefined;\n\n private readonly mapRef: React.RefObject = React.createRef();\n\n public constructor(props: IMapProps) {\n super(props);\n }\n\n public componentDidMount(): void {\n const {\n context: {\n telemetry,\n actionContext: {\n requestContext: { channel }\n }\n }\n } = this.props;\n\n if (channel && !channel.BingMapsApiKey) {\n telemetry.error('BingMapsApiKey is missing.');\n return;\n }\n\n if (channel && !channel.BingMapsEnabled) {\n telemetry.error('Map is disabled from HQ.');\n return;\n }\n\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\n this._initMap();\n this._updateMap();\n }\n\n when(\n () => !!this.props.data.storeSelectorStateManager.result?.setMapModuleLoaded,\n () => {\n this.props.data.storeSelectorStateManager.result?.setMapModuleLoaded(true);\n }\n );\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi,\n () => {\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\n key: channel?.BingMapsApiKey,\n lang: this.props.context.actionContext.requestContext.locale,\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\n });\n }\n );\n\n reaction(\n () => this.props.data.storeSelectorStateManager.result?.isMapApiLoaded,\n () => {\n this._initMap();\n }\n );\n\n reaction(\n () => {\n return [\n this.props.data.storeSelectorStateManager.result?.context?.orgUnitStoreInformation,\n this.props.data.storeSelectorStateManager.result?.selectedStoreLocationId,\n this.map\n ];\n },\n () => {\n this._updateMap();\n }\n );\n }\n\n public render(): JSX.Element | null {\n const {\n config: { heading, className },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n\n const shouldDisplayMap = storeSelectorStateManager?.listMapViewState.displayMap;\n\n const viewProps: IMapViewProps = {\n ...this.props,\n ModuleProps: {\n tag: 'div',\n moduleProps: this.props,\n className: classname('ms-map', { show: shouldDisplayMap }, className)\n },\n Header: {\n headerProps: { className: 'ms-map__header' },\n heading: heading?.text && (\n \n )\n },\n MapProps: {\n tag: 'div',\n className: 'ms-map__body',\n ref: this.mapRef\n },\n Map: this.map\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Method to be called on heading change.\n * @param event -Content Edit Event.\n */\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n /**\n * Initialize the map.\n */\n private readonly _initMap = () => {\n const {\n context: {\n actionContext: {\n requestContext: { channel }\n }\n },\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n }\n } = this.props;\n if (storeSelectorStateManager?.isMapApiLoaded) {\n this.map = new Microsoft.Maps.Map(this.mapRef.current as HTMLElement, {\n credentials: channel?.BingMapsApiKey,\n pushpinAccessible: true\n });\n Microsoft.Maps.Events.addHandler(this.map, 'click', async () => {\n await storeSelectorStateManager.setSelectedStoreLocationId(undefined);\n });\n }\n };\n\n /**\n * Update the map.\n */\n private readonly _updateMap = () => {\n const pushpinOptions = this.props.config.pushpinOptions;\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager?.result;\n const orgUnitStoreInformation = storeSelectorStateManager?.context?.orgUnitStoreInformation;\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\n\n if (this.map && orgUnitStoreInformation) {\n let mapLocation: OrgUnitLocation | undefined;\n this.map.entities.clear();\n const pushpins: Microsoft.Maps.IPrimitive[] = [];\n\n const storeLocationList = orgUnitStoreInformation.filter(store => store.OrgUnitAvailability !== undefined);\n\n for (const [index, unitStoreInfo] of storeLocationList.entries()) {\n const storeLocation = unitStoreInfo.OrgUnitAvailability?.OrgUnitLocation;\n\n if (storeLocation?.Latitude && storeLocation.Longitude) {\n const isSelectedLocation = selectedStoreLocationId === storeLocation.OrgUnitNumber;\n const options = this._getPushpinOptions(isSelectedLocation, index, pushpinOptions);\n const pushpin = new Microsoft.Maps.Pushpin(\n new Microsoft.Maps.Location(storeLocation.Latitude, storeLocation.Longitude),\n options\n );\n\n Microsoft.Maps.Events.addHandler(pushpin, 'click', () => {\n this.handleClickEvent(storeLocation.OrgUnitNumber);\n });\n isSelectedLocation ? pushpins.unshift(pushpin) : pushpins.push(pushpin);\n\n if (isSelectedLocation) {\n mapLocation = storeLocation;\n }\n }\n }\n\n if (mapLocation) {\n const currentLocation = new Microsoft.Maps.Location(mapLocation.Latitude, mapLocation.Longitude);\n this.map.setView({ center: currentLocation });\n } else {\n // Create a LocationRect from array of pushpins and set the map view.\n this.map.setView({\n bounds: Microsoft.Maps.LocationRect.fromShapes(pushpins)\n });\n }\n\n this.map.setOptions({ pushpinAccessible: true });\n this.map.entities.push(pushpins);\n }\n };\n\n /**\n * Handle click event.\n * @param orgUnitNumber - Organization unit number.\n */\n private readonly handleClickEvent = (orgUnitNumber: string | undefined): void => {\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager.result;\n storeSelectorStateManager?.setSelectedStoreLocationId(undefined);\n if (orgUnitNumber) {\n setTimeout(() => {\n storeSelectorStateManager?.setSelectedStoreLocationId(orgUnitNumber);\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers -- Time out.\n }, 500);\n }\n };\n\n /**\n * Get the pushpin option.\n * @param isSelectedLocation - Is selected location.\n * @param index - Index.\n * @param pushpinOptions - PushpinOptions.\n * @returns - The pushpin options.\n */\n private readonly _getPushpinOptions = (isSelectedLocation: boolean, index: number, pushpinOptions?: IPushpinOptionsData) => {\n const text = pushpinOptions?.showIndex ? (index + 1).toString() : undefined;\n\n const size = pushpinOptions?.size || 1;\n const color = isSelectedLocation ? pushpinOptions?.selectionColor || pushpinOptions?.color : pushpinOptions?.color;\n const icon = this._getSvgIcon(size, color, text);\n\n return {\n // Fallback if icon doesn't render properly\n color: isSelectedLocation ? pushpinOptions?.selectionColor : pushpinOptions?.color,\n icon\n };\n };\n\n private readonly _getSvgIcon = (size: number, color?: string, text?: string) => {\n const baseValue: number = 32;\n return `\n \n ${text ? `${text}` : ''}\n `;\n };\n}\n\nexport default Map;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IHeader, IMapViewProps } from './map';\n\n/**\n * Render the heading.\n * @param param0 -- Heading props.\n * @param param0.headerProps -- Heading Props.\n * @param param0.heading -- Heading Node.\n * @returns -- Returns the node.\n */\nconst MapHeader: React.FC = ({ headerProps, heading }) => {heading};\n\n/**\n * Renders the map view props.\n * @param param0 -- Map view props.\n * @param param0.ModuleProps -- Module props.\n * @param param0.Header -- Header props.\n * @param param0.MapProps -- Map props.\n * @returns -- Returns the map module.\n */\nconst MapView: React.FC = ({ ModuleProps, Header, MapProps }) => (\n \n {Header && }\n \n \n);\n\nexport default MapView;\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 { 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 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 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 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 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\n productSpecificationResult: isAccrodion\n ? productSpecificationData && this._createDrawerBody(data)\n : productSpecificationData && 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 return 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 private _createDrawerBody(content: IProductSpecificationData): (JSX.Element | null)[] {\n const accordionItemContainer: IModuleProps = {\n moduleProps: this.props,\n className: 'ms-product-specification-title'\n };\n return 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\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"],"names":["RingConfigurator","React","constructor","props","super","addEvent","Event","bubbles","cancelable","composed","loadSnapShotIdFromProduct","async","currentSnapShotObj","getByIdAsync","callerContext","this","context","actionContext","state","productId","requestContext","apiSettings","channelId","ExtensionProperties","find","e","Key","Value","StringValue","setState","snapShotId","isBMAProduct","loadSnapShotId","cSnapShotInfo","request","cookies","get","console","log","Date","name","status","value","set","loadSnapShotIdWithSavedDesignRecord","user","isAuthenticated","recordId","Number","matchedSavedDesign","getSavedDesignsAsync","queryResultSettings","Result","s","RecId","ProductID","SnapShotID","signInUrl","window","location","href","loadSnapShotIdWithRequestOrderRecord","requestOrderId","lineId","customerInfo","data","customerInformation","result","IsB2b","matchedRequestOrder","getRequestOrderAsync","RequestOrder","r","RequestOrderId","LineNum","Snapshotid","loadSnapShotIdWithwishListItem","wishListItemSnapShotId","wishlists","getByCustomerAsync","length","extensionPropertiesSnapShotId","forEach","currWishlist","CommerceListLines","commerceListLine","push","snapShotIdExists","loadSnapShotIdWithCartLineItem","cartLineItemSnapShotId","cart","CartLines","line","isUpdateCart","getContainerIdAndLoadConfigurator","bridge","mode","axios","app","config","bmaBaseUrl","bmaContainerEndPoint","snapshotId","then","containerResponse","containerId","initContainer","catch","error","bmaIsDown","configuratorInitialized","bmaConfig","bmaConfiguration","JSON","parse","bmaConfigurationIsNotValid","stockistId","document","addEventListener","ev","bmaIsUp","detail","addLanguages","currentLanguage","setContextValue","cartMode","integration","listen","changesSaved","button","action","order","isB2b","updateCart","addToCart","addToB2CCart","saveDesign","addToSaveDesignList","addToOrderRequestList","setCookieAndRedirectToSignIn","customerAccountNumber","getBMAStockistAsync","bmaRetailStockistInfo","BMARetailStockist","getB2BCustomerIdAsync","jewelerId","setTimeout","ringConfiguratorOfflineTimeout","event","customerId","AccountNumber","snapShot","bmaSnapshotEndPoint","bmaPriceEndPoint","replace","price","addLinesData","CommerceListId","ProductId","CustomerId","DecimalValue","sum","vk","createdCommerceList","updateCommerceListAsync","addLinesAsync","update","createGetByCustomerInput","redirectOrderRequestUrl","orderRequestUrl","url","requestUrl","origin","sitePath","productInfo","CustomerID","Name","Quantity","UnitOfMeasure","DefaultUnitOfMeasure","B2CPrice","B2BPrice","createSavedDesignsAsync","togglePopUp","product","Id","day","getDay","year","getFullYear","toString","substr","oneDigitRandomNumber","Math","floor","random","fourDigitRandomNumber","priceInFloat","parseInt","padStart","referenceNumber","addCartLines","CatalogId","catalogId","Description","EntryMethodTypeValue","ItemId","RecordId","IsPriceKeyedIn","TrackingId","UnitOfMeasureSymbol","IsGiftCardLine","Price","addCartLinesAsync","Version","redirectRequestOrderActionUrl","requestOrderActionUrl","_cartState$cart$CartL","updatedCartLines","getCartState","map","cartLineItem","LineNumber","cartEP","updateCartLinesAsync","BMASnapshotId","createB2CCartServiceAsync","dispatchEvent","cartUrl","_renderPopUp","showPopUp","changeSaved","id","style","position","top","bottom","left","right","visibility","opacity","zIndex","margin","background","borderRadius","width","transition","padding","boxShadow","textAlign","savedDesignPopUpContent","onClick","Button","className","title","continueCustomisingButtonText","redirectToSavedDesign","goToSavedDesignButtonText","showPopup","redirectSavedDesignUrl","savedDesignUrl","isConsentGiven","setConsentCookie","cSnapShotInfo2","isBmaDown","ringConfiguratorOfflinePopUp","categoryPageUrl","categoryPageActionUrl","redirectCategoryPageUrl","ringConfiguratorOfflineHeading","ringConfiguratorOfflineContent","urlTokens","undefined","componentDidMount","params","URLSearchParams","search","has","when","componentDidUpdate","prevProps","prevState","snapshot","render","viewProps","_objectSpread","renderView","configuratorDivId","toggleBopisHandler","cartLine","isBopisSelected","_cartLine$pickUpInSto","pickUpInStore","callbacks","toggleBopis","onChangeStoreHandler","_cartLine$pickUpInSto2","renderCartLine","resources","storeSelector","telemetryContent","isMultiplePickUp","emailDeliveryModeCode","outOfStockErrorMessage","Node","addToWishlist","remove","renderGroupBopisBlock","_cartLine$data2","cartline","DeliveryMode","changeStoreDisplayText","shipInsteadDisplayText","pickItUpDisplayText","payLoad","getPayloadObject","TelemetryConstant","PickupInStore","puckUpinStoreAttribute","getTelemetryAttributes","role","Object","assign","addToOrderTemplate","renderCartlinesInternal","cartLines","index","itemIndex","key","renderBopisBlock","_cartLine$data","shipToAddressDisplayText","pickUpAtStoreWithLocationText","ContainerProps","orgUnitName","renderCartlines","waitingComponent","cartLoadingStatus","isCartDataResult","multiplePickUpEnabled","CartlinesWrapper","slots","emptyCart","renderCartLinesGroupHeader","count","_cartLine$pickUpInSto6","pickUpText","shippingText","emailshippingText","groupTitle","toLowerCase","renderCartLinesGroupTitle","_cartLine$pickUpInSto3","_cartLine$pickUpInSto4","_cartLine$pickUpInSto5","itemLabel","itemsLabel","countTitle","deliveryOption","_props$cart2","_props$cart3","_props$orderSummaryLi","_props$cart4","_props$cart5","updatedTitle","cartTitle","totalItemsInCart","renderModuleAttributes","orderSummaryLineitems","orderTotal","checkoutAsSignInUserButton","checkoutAsGuestButton","renderOrderSummaryCheckoutButton","hasInvoiceLine","promotionOptions","promotions","promotionMessageWrapper","promotionMessage","promotionSeeAllLink","promotionDialog","renderCartLinesGroup","cartLinesGroup","ArrayExtensions","hasElements","cartlines","_props$context$action","_props$context$action2","cartlineId","countItem","reduce","item","_item$data$cartline$Q","_item$data","countItems","channel","EmailDeliveryModeCode","cartDataResult","orderSummaryHeading","OrderSummaryWrapper","renderInvoiceSummarylines","invoiceSummaryLines","orderSummaryItems","invoices","giftCard","loyalty","telemetry","invoiceSummaryLineitems","OrderSummaryItems","renderOrderSummarylines","orderSummaryLines","subtotal","totalDiscounts","shipping","otherCharge","tax","errorData","OrderSummaryErrors","errors","Wrapper","header","_props$cart","promoCode","createTemplateFromCartButton","renderOrderSummaryCheckout","renderProductDescription","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","generateImageUrl","Image","src","fallBackSrc","loadFailureBehavior","gridSettings","imageSettings","viewports","xs","q","w","h","sm","md","lg","xl","lazyload","cropFocalRegion","renderProductImage","heading","signInMessage","signInButton","modalToggle","moduleProps","paragraph","text","RichTextComponent","Module","reviewModal","modal","modalHeader","modalBody","form","inputRow","selectRatingLabel","rating","reviewTitleLabel","titleInput","reviewTextLabel","textInput","privacyPolicyUrl","modalFooter","submitButton","cancelButton","createReviewModal","accountSectionHeading","creditSummarySectionHeading","accountLabels","accountValues","creditSummaryLabels","creditSummaryValues","homeButton","actions","requestStatementModal","availableCredit","balanceOwed","creditExcess","Link","_ref","ariaLabel","noclick","linkText","contentAction","etext","attribute","onTelemetryClick","itemProp","content","Separator","separator","Breadcrumb","_pageType","pageType","getTelemetryObject","telemetryPageName","friendlyName","_getRootLink","root","linkUrl","destinationUrl","_getCustomBreadcrumbLinks","itemPosition","links","keyIndex","_getCategoryHierarchy","categoryHierarchy","_getFriendlyName","locale","NameTranslations","Url","nameTranslations","_nameTranslation","nameTranslation","Language","Text","_getPDPLinks","categoryPaths","hideProductName","_goBack","history","back","_getPDPBackButton","query","MsDyn365","isBrowser","referrer","backToResultsText","rootLink","breadcrumbLinks","backButtonComponent","breaCrumbType","breadcrumbType","linkSeparator","breadcrumbViewProps","BreadcrumbContainer","classnames","tag","BreadcrumbList","BreadcrumbListItem","backButton","link","_renderTextBlock","textBlocks","_renderSocialShare","socialShare","_renderCartAndActions","errorBlock","_renderConfigure","configure","dropdowns","_renderConfigureDropdown","dropdown","LabelContainerProps","select","_renderFindInStore","findInStore","description","productPickupOptionList","onChangeHandler","newValue","updateQuantity","_renderQuantity","quantityComponent","extentionResources","quantityLimitsMessages","max","quantity","IncrementalQuantity","currentCount","onChange","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","minQuantityText","maxQuantityText","_renderKeyInPrice","keyInPrice","input","_renderShopSimilarItem","shopSimilarItem","ModuleProps","MediaGalleryContainerProps","ProductInfoContainerProps","inventoryLabel","shopSimilarLook","shopSimilarDescription","unitOfMeasure","mediaGallery","bulkPurchaseLink","FooterCategory","viewprops","categories","FooterList","FooterListItem","FooterCategoryView","category","ImageList","handleParagraphChange","images","target","_renderImageListItems","imageList","defaultImageSettings","disableLazyLoad","_image$imageSettings","_link$linkText","image","imageProps","imageLink","imageLinkText","imageLinkAriaLabel","Msdyn365","editProps","onEdit","linkAltText","linkAriaLabel","_heading$tag","imageListTitle","imageListHeading","imageListContainer","imageListItem","imageListItemAnchorTag","imageListItems","imageListView","indexKey","altText","InteractiveFeatureCollection","_telemetryContent","StringExtensions","isNullOrWhitespace","Heading","headingTag","itemsCounter","indexItem","itemCounter","isMosaic","_this$props$config$cl","interactiveItems","interactiveFeatureItems","itemsFeatureCounter","singleSlideCarouselComponentProps","SingleSlideCarousel","flipperPrevLabel","flipperPrevious","flipperNextLabel","flipperNext","parentId","vertical","_createHeading","interactiveFeatureCollectionHeading","interactiveFeatureCollectionContainer","interactiveFeatureCollectionDesktopContainer","interactiveFeatureCollectionMobileContainer","singleSlideCarouselItemContainer","interactiveFeatureCollectionMobileItems","interactiveFeatureCollectionDesktopItems","_getFeatureItem","interactiveFeatureCollectionView","tileItem","InteractiveFeatureCollectionLinks","_mapEditableLinks","linkdata","editableLinks","attributes","editableLink","openInNewTab","additionalProperties","onTextChange","InteractiveFeatureItem","handleHeadingChange","handleLinkTextChange","linkIndex","_this$props$config$li","featureItemLinks","_createParagraph","_renderImage","featureItem","interactiveFeatureCollectionCarouselContainer","interactiveFeatureCollectionCarouselImage","interactiveFeatureCollectionCarouselContent","interactiveFeatureCollectionMosaicContainer","tabindex","interactiveFeatureCollectionMosaicImage","interactiveFeatureCollectionMosaicDetails","isAriaHiddenAttribute","_item$imageSettings","_this$props$config$im","verifiedImageSettings","moduleType","typeName","imagePropertyName","MagicNumber","FeatureItemViewComponent","renderMosaic","thisProps","indexAux","caseNumberOne","itemCounterAux","caseNumberZero","modularAux","modularDivisor","firstRow","caseNumberTwo","lastRow","onCornerRight","onCornerLeft","containerClasses","renderCarousel","Map","mapRef","_initMap","storeSelectorStateManager","isMapApiLoaded","Microsoft","Maps","current","credentials","BingMapsApiKey","pushpinAccessible","Events","addHandler","setSelectedStoreLocationId","_updateMap","_this$props$data$stor","_storeSelectorStateMa","pushpinOptions","orgUnitStoreInformation","selectedStoreLocationId","mapLocation","entities","clear","pushpins","storeLocationList","filter","store","OrgUnitAvailability","unitStoreInfo","entries","_unitStoreInfo$OrgUni","storeLocation","OrgUnitLocation","Latitude","Longitude","isSelectedLocation","OrgUnitNumber","options","_getPushpinOptions","pushpin","Pushpin","Location","handleClickEvent","unshift","currentLocation","setView","center","bounds","LocationRect","fromShapes","setOptions","orgUnitNumber","showIndex","size","color","selectionColor","icon","_getSvgIcon","_this$props$data$stor2","BingMapsEnabled","_this$props$data$stor3","setMapModuleLoaded","_this$props$data$stor4","reaction","_this$props$data$stor5","loadMapApi","_this$props$data$stor6","_this$props$context","_this$props$context$a","_this$props$context$a2","_this$props$context$a3","lang","market","ChannelCountryRegionISOCode","_this$props$data$stor7","_this$props$data$stor8","_this$props$data$stor9","_this$props$data$stor10","shouldDisplayMap","listMapViewState","displayMap","classname","show","Header","headerProps","MapProps","ref","__decorate","observable","observer","MapHeader","_ref2","ProductSpecificationTableRow","productName","cellData","scope","dangerouslySetInnerHTML","getRichTextHtml","ProductSpecification","_toggle","drawerListId","isDrawerOpen","actionInput","AttributesForSelectedVariantInput","getAttributesForSelectedVariant","message","debug","shouldComponentUpdate","nextProps","nextState","productSpecificationData","isAccrodion","displayStyle","handleText","ProductSpecificationTableProps","ProductSpecificationTableBodyProps","productSpecificationResult","_createDrawerBody","_createTableBody","_renderProductCell","accordionItemContainer","_product$Name","Drawer","collapseProps","timeout","isOpen","openGlyph","closeGlyph","glyphPlacement","toggleButtonText","onToggle","DataTypeValue","_renderCurrencyCell","_renderDateTimeCell","_renderDecimalCell","_renderIntegerCell","_renderTextCell","_renderTrueFalseCell","warning","CurrencyValue","CurrencyCode","_product$DateTimeOffs","DateTimeOffsetValue","toUTCString","IntegerValue","FloatValue","TextValue","BooleanValue","trueValueText","falseValueText","rowdata","row","ObjectExtensions","isNullOrUndefined"],"sourceRoot":""}