{"version":3,"file":"static/js/9b8723ae186fc4852720.bundle.js","mappings":"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","sources":["webpack://@msdyn365-commerce-partners/fabrikam/./src/themes/britax-romers/actions/DataServiceEntities.g.ts?eb03","webpack://@msdyn365-commerce-partners/fabrikam/./src/themes/britax-romers/actions/get-reference-number.ts?ab16","webpack://@msdyn365-commerce-partners/fabrikam/./src/themes/britax-romers/views/cart-icon.view.tsx?e728","webpack://@msdyn365-commerce-partners/fabrikam/./lib/cart-icon/module-registration.js?4d28","webpack://@msdyn365-commerce-partners/fabrikam/./src/validate-cart.ts?cd50","webpack://@msdyn365-commerce-partners/fabrikam/./src/Common/get-product.ts?0a21","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/cart-icon/cart-icon.view.tsx?f9dd","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4","webpack://@msdyn365-commerce-partners/fabrikam/../../src/search-org-unit-locations.ts?d18d","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/adventureworks/views/cart-icon.view.tsx?7ec9","webpack://@msdyn365-commerce-partners/fabrikam/external var \"React\"?0d3b","webpack://@msdyn365-commerce-partners/fabrikam/external var \"ReactDOM\"?853b"],"sourcesContent":["// tslint:disable\r\nimport * as EntityClasses from \"@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g\";\r\n\r\n/**\r\n * ShipmentTrackingLines entity interface.\r\n */\r\nexport interface IShipmentTrackingLines {\r\n TrackingLine?: ITrackingLine[];\r\n}\r\n\r\n/**\r\n * ProductReferenceNumber entity interface.\r\n */\r\nexport interface IProductReferenceNumber {\r\n Id: number;\r\n ReferenceNumber?: string;\r\n}\r\n\r\n/**\r\n * InvoiceInquiryResult entity interface.\r\n */\r\nexport interface IInvoiceInquiryResult {\r\n EmailSent: boolean;\r\n Message?: string;\r\n}\r\n\r\n/**\r\n * TrackingLine entity interface.\r\n */\r\nexport interface ITrackingLine {\r\n LineNumber?: string;\r\n TrackingId?: string;\r\n TrackingUrl?: string;\r\n}\r\n\r\n/**\r\n * ShipmentTrackingLines entity class.\r\n */\r\nexport class ShipmentTrackingLinesExtensionClass\r\n implements IShipmentTrackingLines\r\n{\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public TrackingLine: ITrackingLine[];\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.TrackingLine = undefined;\r\n if (odataObject.TrackingLine) {\r\n this.TrackingLine = [];\r\n for (var i = 0; i < odataObject.TrackingLine.length; i++) {\r\n if (odataObject.TrackingLine[i]) {\r\n if (odataObject.TrackingLine[i][\"@odata.type\"]) {\r\n var className: string = odataObject.TrackingLine[i][\"@odata.type\"];\r\n className = className\r\n .substr(className.lastIndexOf(\".\") + 1)\r\n .concat(\"Class\");\r\n if (EntityClasses[className]) {\r\n this.TrackingLine[i] = new EntityClasses[className](\r\n odataObject.TrackingLine[i]\r\n );\r\n }\r\n } else {\r\n this.TrackingLine[i] = new TrackingLineExtensionClass(\r\n odataObject.TrackingLine[i]\r\n );\r\n }\r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.TrackingLine[i] = undefined;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * ProductReferenceNumber entity class.\r\n */\r\nexport class ProductReferenceNumberExtensionClass\r\n implements IProductReferenceNumber\r\n{\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Id: number;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ReferenceNumber: string;\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Id = odataObject.Id ? parseInt(odataObject.Id, 10) : 0;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ReferenceNumber = odataObject.ReferenceNumber;\r\n }\r\n}\r\n\r\n/**\r\n * InvoiceInquiryResult entity class.\r\n */\r\nexport class InvoiceInquiryResultExtensionClass\r\n implements IInvoiceInquiryResult\r\n{\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public EmailSent: boolean;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Message: string;\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.EmailSent = odataObject.EmailSent;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Message = odataObject.Message;\r\n }\r\n}\r\n\r\n/**\r\n * TrackingLine entity class.\r\n */\r\nexport class TrackingLineExtensionClass implements ITrackingLine {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public LineNumber: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public TrackingId: string;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public TrackingUrl: string;\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.LineNumber = odataObject.LineNumber;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.TrackingId = odataObject.TrackingId;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.TrackingUrl = odataObject.TrackingUrl;\r\n }\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n * THIS FILE IS AN AUTOGENERATED TYPESCRIPT PROXY EXTENSION.\r\n * TO USE THIS FILE, IT MUST BE ADDED TO A D365COMMERCE APPLICATION\r\n */\r\n// tslint:disable\r\nimport {\r\n AsyncResult,\r\n callActionOrExecute,\r\n DataServiceQuery,\r\n IContext,\r\n IDataServiceRequest,\r\n IQueryResultSettings,\r\n} from \"@msdyn365-commerce/retail-proxy\";\r\n// @ts-ignore\r\nimport * as EntityClasses from \"@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g\";\r\nimport * as DataServiceEntities from \"./DataServiceEntities.g\";\r\n\r\nfunction getShiptrackTrackingNumberQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n}\r\n\r\nexport function getShiptrackTrackingNumberInput(\r\n salesOrderNum: string\r\n): IDataServiceRequest {\r\n const query = getShiptrackTrackingNumberQuery();\r\n return query.createDataServiceRequestForOperation(\r\n \"GetShiptrackTrackingNumber\",\r\n true,\r\n DataServiceEntities.ShipmentTrackingLinesExtensionClass,\r\n \"false\",\r\n {\r\n bypassCache: \"get\",\r\n returnEntity: \"DataServiceEntities.IShipmentTrackingLines\",\r\n },\r\n {\r\n salesOrderNum: salesOrderNum,\r\n }\r\n );\r\n}\r\n\r\nexport function getShiptrackTrackingNumberAsync(\r\n context: IContext,\r\n salesOrderNum: string\r\n): AsyncResult {\r\n const request = getShiptrackTrackingNumberInput(salesOrderNum);\r\n return callActionOrExecute(\r\n request,\r\n context.callerContext\r\n );\r\n}\r\n\r\nfunction getProductsReferenceNumberQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n}\r\n\r\nexport function getProductsReferenceNumberInput(\r\n queryResultSettings: IQueryResultSettings,\r\n productIds: number[]\r\n): IDataServiceRequest {\r\n const query =\r\n getProductsReferenceNumberQuery().resultSettings(queryResultSettings);\r\n return query.createDataServiceRequestForOperation(\r\n \"GetProductsReferenceNumber\",\r\n true,\r\n DataServiceEntities.ProductReferenceNumberExtensionClass,\r\n \"true\",\r\n {\r\n bypassCache: \"get\",\r\n returnEntity: \"DataServiceEntities.IProductReferenceNumber\",\r\n },\r\n {\r\n productIds: productIds,\r\n }\r\n );\r\n}\r\n\r\nexport function getProductsReferenceNumberAsync(\r\n context: IContext,\r\n productIds: number[]\r\n): AsyncResult {\r\n const request = getProductsReferenceNumberInput(\r\n context.queryResultSettings || {},\r\n productIds\r\n );\r\n return callActionOrExecute(\r\n request,\r\n context.callerContext\r\n );\r\n}\r\n\r\nfunction customerInvoiceInquiryQuery(): DataServiceQuery {\r\n return new DataServiceQuery();\r\n}\r\n\r\nexport function customerInvoiceInquiryInput(\r\n invoiceId: string,\r\n customerId: string,\r\n reason: string,\r\n comment: string,\r\n emailAddress: string\r\n): IDataServiceRequest {\r\n const query = customerInvoiceInquiryQuery();\r\n return query.createDataServiceRequestForOperation(\r\n \"CustomerInvoiceInquiry\",\r\n true,\r\n DataServiceEntities.InvoiceInquiryResultExtensionClass,\r\n \"false\",\r\n {\r\n bypassCache: \"get\",\r\n returnEntity: \"DataServiceEntities.IInvoiceInquiryResult\",\r\n },\r\n {\r\n invoiceId: invoiceId,\r\n customerId: customerId,\r\n reason: reason,\r\n comment: comment,\r\n emailAddress: emailAddress,\r\n }\r\n );\r\n}\r\n\r\nexport function customerInvoiceInquiryAsync(\r\n context: IContext,\r\n invoiceId: string,\r\n customerId: string,\r\n reason: string,\r\n comment: string,\r\n emailAddress: string\r\n): AsyncResult {\r\n const request = customerInvoiceInquiryInput(\r\n invoiceId,\r\n customerId,\r\n reason,\r\n comment,\r\n emailAddress\r\n );\r\n return callActionOrExecute(\r\n request,\r\n context.callerContext\r\n );\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Node } from \"@msdyn365-commerce-modules/utilities\";\r\nimport * as React from \"react\";\r\nimport { ICartIconViewProps } from \"@msdyn365-commerce-modules/cart/src/modules/cart-icon/./cart-icon\";\r\n// import currencyFormatter from \"currency-formatter\";\r\nimport CartLine from \"../views/components/cartlineitem.component\";\r\nimport { useState, useEffect } from \"react\";\r\nimport { getProductsReferenceNumberAsync } from \"../actions/get-reference-number\";\r\n\r\nconst RenderCartlines = (props: any): any => {\r\n const { cartLines, prop } = props;\r\n\r\n //const [productTypes, setProductTypes] = useState([]);\r\n const [referenceNumber, setReferenceNumber] = useState([]);\r\n\r\n let pids: any = [];\r\n\r\n let recordIds: any = [];\r\n\r\n useEffect(() => {\r\n const items =\r\n cartLines &&\r\n cartLines.map((line: any) => {\r\n return line.data.cartline;\r\n });\r\n\r\n items?.map((data: any) =>\r\n pids.indexOf(data.ProductId) == -1 ? pids.push(data.ProductId) : \"\"\r\n );\r\n\r\n items?.map((data: any) => recordIds.push(data.ProductId));\r\n\r\n if (pids.length > 0 && referenceNumber.length == 0) {\r\n getProductsReferenceNumberAsync(\r\n { callerContext: prop.context.actionContext },\r\n pids\r\n ).then((res: any) => {\r\n var refArray: any[] = [];\r\n res?.map((d: any) => {\r\n refArray[d.Id] = d.ReferenceNumber;\r\n });\r\n setReferenceNumber(refArray);\r\n });\r\n }\r\n }, []);\r\n\r\n const currencyCode: any = prop.data.customerInformation?.result?.CurrencyCode;\r\n\r\n if (!cartLines) {\r\n prop.context.telemetry.error(\r\n \"Cartlines content is empty, module wont render\"\r\n );\r\n return null;\r\n }\r\n\r\n return cartLines.map((cartLine: any, index: any) => {\r\n return (\r\n \r\n \r\n
\r\n {prop.context.cultureFormatter.formatCurrency(\r\n Number(cartLine.data?.product?.Price)\r\n )}\r\n
\r\n \r\n {prop.resources.referenceNumber}:{\" \"}\r\n {referenceNumber[cartLine.data.product?.RecordId]\r\n ? referenceNumber[cartLine.data.product?.RecordId]\r\n : null}\r\n \r\n {cartLine.storeLocation}\r\n {cartLine.remove}\r\n
\r\n );\r\n });\r\n};\r\n\r\nconst CartIconView: React.FC = (props: any) => {\r\n let price = 0;\r\n props?.cartlines?.map((d: any) => (price += d.data.cartline.TotalAmount));\r\n var counter = 0;\r\n // let [counterDis, setCounterDis] = React.useState(0);\r\n props?.cartlines?.map((element: any, index: any) => {\r\n element.cartline.props.data.cartLine.DiscountLines.map((d: any) => {\r\n if (d.CustomerDiscountTypeValue == 3) {\r\n counter += d.EffectiveAmount;\r\n }\r\n });\r\n });\r\n return (\r\n \r\n {props.cartIcon}\r\n {props.FlyoutContainer ? (\r\n \r\n {props.flyoutTitle}\r\n \r\n \r\n \r\n\r\n
\r\n {counter != 0 ? (\r\n
\r\n {props.resources.cartDiscount}\r\n \r\n : -{props.context.cultureFormatter.formatCurrency(counter)}\r\n \r\n
\r\n ) : (\r\n <>\r\n )}\r\n {props.totalPrice.props.children.split(\":\")[0] ? (\r\n {props.totalPrice.props.children.split(\":\")[0]}: \r\n ) : (\r\n <>\r\n )}\r\n {props.totalPrice.props.children.split(\":\")[0]\r\n ? props.context.cultureFormatter.formatCurrency(price)\r\n : null}\r\n
\r\n {props.checkoutAsSignInUserButton}\r\n {props.goToCartButton}\r\n
\r\n ) : (\r\n false\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default CartIconView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['cart-icon'] = {\n c: () => require('@msdyn365-commerce-modules/cart/dist/lib/modules/cart-icon/cart-icon'),\n $type: 'containerModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action', runOn: 1},{name:'cartConfiguration', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-cart-configuration', runOn: 0},{name:'catalogs', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs', runOn: 0},{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'customerBalances', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'orgUnitLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'cart-icon',\n p: 'cart',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/cart/dist/lib/modules/cart-icon'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-cart-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-cart-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|britax-romers|views|cart-icon'] = {\n c: () => require('partner/themes/britax-romers/views/cart-icon.view.tsx'),\n cn: '__local__-__local__-cart-icon'\n };\nviewDictionary['@msdyn365-commerce-modules|cart|modules|cart-icon|cart-icon'] = {\n c: () => require('@msdyn365-commerce-modules/cart/dist/lib/modules/cart-icon/cart-icon.view.js'),\n cn: '@msdyn365-commerce-modules-cart-cart-icon'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|cart-icon'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/cart-icon.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-cart-icon'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\n\n return undefined;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ActiveCartProductsInput,\n getActiveCartProductsAction,\n getAvailabilitiesForCartLineItems,\n getDeliveryOptionsForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n ProductDeliveryOptionsForCartLineItems\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IMiniCartData entity interface.\n */\nexport interface IMiniCartData {\n products?: SimpleProduct[];\n productAvailabilites?: IProductInventoryInformation[];\n deliveryOptions?: ProductDeliveryOptions[];\n}\n\nexport const createInput = () => {\n return new ActiveCartProductsInput();\n};\n\n/**\n * Calls the Retail API and returns a mini cart data.\n * @param ctx\n * @param cartState\n */\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\n const miniCartData: IMiniCartData = {};\n\n const cart = cartState.cart;\n\n // If there are cart lines, make call to get products\n // If there are invocie linese, then there is no products, so don't make call to get products\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\n await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx)\n .then(products => {\n if (products) {\n miniCartData.products = products;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getAvailabilitiesForCartLineItems(new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(availableQuantity => {\n if (availableQuantity) {\n miniCartData.productAvailabilites = availableQuantity;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getDeliveryOptionsForCartLineItems(new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(deliveryOptions => {\n if (deliveryOptions) {\n miniCartData.deliveryOptions = deliveryOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n }\n\n return miniCartData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior, CartIconComponent } from '@msdyn365-commerce/components';\nimport { getUrlSync, IDictionary, IImageSettings, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n CartLineValidationResultsByLineId,\n OrgUnitLocation\n} from '@msdyn365-commerce/retail-proxy';\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { ArrayExtensions, validateCartLinesInventory } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n UncontrolledTooltip,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\n\nimport { ICartIconData } from './cart-icon.data';\nimport { cartLinesSortOrder, ICartIconProps } from './cart-icon.props.autogenerated';\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\n\nexport interface IMiniCartState {\n miniCartData: IMiniCartData;\n orgUnitLocations?: OrgUnitLocation[];\n isQuantityLimitsFeatureEnabled: boolean;\n isCartValid: boolean;\n}\n\nexport interface ICartIconViewProps extends ICartIconProps {\n className: string;\n cartIcon: React.ReactNode;\n FlyoutContainer?: INodeProps;\n CartlinesWrapper: INodeProps;\n miniCartWrapper: INodeProps;\n miniCartItemWrapper: INodeProps;\n cartlines?: IFlyoutCartLineItemViewProps[];\n flyoutTitle: React.ReactNode;\n totalPrice: React.ReactNode;\n checkoutAsGuestButton?: React.ReactNode;\n checkoutAsSignInUserButton?: React.ReactNode;\n goToCartButton?: React.ReactNode;\n waitingComponent?: React.ReactNode;\n isCartLoading: boolean;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\n/**\n *\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass CartIcon extends React.Component, IMiniCartState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly checkoutBySignInAttributes: IDictionary | undefined;\n\n private readonly checkoutByGuestAttributes: IDictionary | undefined;\n\n private readonly viewShoppingBagAttributes: IDictionary | undefined;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private lastValidatedCartVersion: number | undefined;\n\n constructor(props: ICartIconProps) {\n super(props);\n this.state = {\n miniCartData: {},\n isCartValid: true,\n isQuantityLimitsFeatureEnabled: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payload = getPayloadObject(TelemetryEvent.CheckOut, this.telemetryContent, TelemetryConstant.Checkout);\n this.checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\n this.checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.ViewShoppingBag;\n this.viewShoppingBagAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n }\n\n public async componentDidMount(): Promise {\n const context = this.props.context.actionContext;\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n this.setState({\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\n });\n }\n );\n await this._setQuantityLimitsFeatureFlag();\n\n this.setState({\n orgUnitLocations: this.props.data.orgUnitLocations?.result\n });\n\n this._validateCart();\n }\n\n public componentDidUpdate(prevProps: ICartIconProps): void {\n this._validateCart();\n }\n\n public shouldComponentUpdate(nextProps: ICartIconProps, nextState: IMiniCartState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n config: { enableHoverCart, isAnonymousCheckout },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n context,\n resources\n } = this.props;\n\n const cart = (this.props.data.cart && this.props.data.cart.result) || undefined;\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\n const checkoutURL = this._getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n const hasInvoiceLine = cart?.hasInvoiceLine;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const cartLines = this._getCartLines();\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.state.miniCartData.productAvailabilites ?? [],\n this.props.context.actionContext,\n this.state.miniCartData.products ?? [],\n emailDeliveryModeCode\n );\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const includeFlyout = this.props.data.cart && this.props.data.cart.status === 'SUCCESS' && enableHoverCart;\n const totalItemsInCart = cart?.totalItemsInCart ? cart.totalItemsInCart : 0;\n const goToCartButtonText = resources.goToCartButtonTitle.replace('{count}', totalItemsInCart.toString());\n const flyoutTitle = resources.flyoutTitle;\n const flyoutTooltip = {\n tag: UncontrolledTooltip,\n shouldShowMiniCart,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__flyout-container',\n trigger: 'hover',\n displayMode: 'FLYOUT',\n target: id,\n shouldShowCloseButton: true,\n cartPageUrl: cartUrl,\n hideAriaHidden: true\n };\n\n // If there are invoice lines, don't update mini cart price\n const price = (cart && !cart.hasInvoiceLine && cart.cart.TotalAmount) || undefined;\n const priceString = price\n ? resources.totalPriceFormatString.replace('{price}', context.cultureFormatter.formatCurrency(price))\n : '';\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n const viewProps = {\n ...this.props,\n cartIcon: (\n \n ),\n cartlines: cartLines,\n FlyoutContainer: includeFlyout ? flyoutTooltip : undefined,\n CartlinesWrapper: {\n className: 'ms-cart-icon__cart-lines'\n },\n miniCartWrapper: {\n className: classnames('ms-cart-icon'),\n id: this.props.id\n },\n miniCartItemWrapper: {\n className: classnames('msc-cart-lines-item')\n },\n\n // If there are invoice lines, don't update mini cart checkout button\n // Checkout button will display by default to maintain backward compatibility. When Anonymous user checkout is enabled &&\n // user is authenticated then we will show the checkout button otherwise we will show the guest checkout button.\n checkoutAsSignInUserButton:\n !isCartEmpty && !hasInvoiceLine && (!isAnonymousCheckout || isAuthenticated) ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n goToCartButton: (\n \n {goToCartButtonText}\n \n ),\n checkoutBlockedDueToUnavailableFunds: null,\n flyoutTitle: {flyoutTitle},\n totalPrice:
{priceString}
\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _validateCart(): void {\n const {\n data: { cart }\n } = this.props;\n const cartVersion = cart.result?.cart?.Version ?? undefined;\n if (this.lastValidatedCartVersion === cartVersion) {\n return;\n }\n\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\n\n if (this.state.isQuantityLimitsFeatureEnabled) {\n validateCartAsync(cart, this.props.telemetry, this.props.context)\n .then((result: CartLineValidationResultsByLineId | undefined) => {\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result?.ValidationResultsPairs) });\n })\n .catch(() => {\n this.setState({ isCartValid: false });\n });\n } else {\n this.setState({ isCartValid: true });\n }\n }\n\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Sort cartline items.\n * @param cartlines - Cartlines to be sorted.\n * @param sortOrder - Ascending or descending.\n * @returns - Sorted cartlines.\n */\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\n const lines: CartLine[] = [...cartlines];\n const zero: number = 0;\n\n if (sortOrder === cartLinesSortOrder.descending) {\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\n }\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\n };\n\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\n const {\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources\n } = this.props;\n\n const imageSettings = this._getImageSettings(config.imageSettings);\n const cart = this.props.data.cart && this.props.data.cart.result;\n\n // Cart-icon could be placed in each page\n // so we check cart content to reduce number of RS calls\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\n ? FlyoutCartLineItems({\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\n products: this.state.miniCartData.products,\n productAvailabilites: this.state.miniCartData.productAvailabilites,\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\n imageSettings,\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n quantityDisplayString: resources.quantityDisplayText,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n inputQuantityAriaLabel: '', // Not used\n discountStringText: '', // Not used\n originalPriceText: '',\n currentPriceText: '',\n shippingChargesText: '',\n shippingText: resources.shippingText\n },\n telemetry,\n removeButtonText: resources.removeCartButtonText,\n outOfStockText: '', // Not used\n outOfRangeOneText: '', // Not used\n outOfRangeFormatText: '', // Not used\n cartState: cart,\n orgUnitLocations: this.state.orgUnitLocations,\n removeItemClickHandler: this._removeItemFromCartHandler,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n telemetryContent: this.telemetryContent,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled,\n catalogs: this.props.data.catalogs?.result\n })\n : null;\n }\n\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result.removeCartLines(input).catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n private async _setQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n if (isChannelQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n return;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n } else {\n this.props.data.customerInformation\n .then(customerInfo => {\n const result =\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\n this.setState({ isQuantityLimitsFeatureEnabled: result });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n });\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n this.setState({ isQuantityLimitsFeatureEnabled: !(cartConfiguration?.IgnoreOrderSettings ?? false) });\n return;\n }\n }\n}\n\nexport default CartIcon;\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 { ICartIconViewProps } from './cart-icon';\nimport { IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\n\nconst _renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n return cartLines.map((cartLine, index) => {\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\nconst CartIconView: React.FC = (props: ICartIconViewProps) => (\n \n {props.cartIcon}\n {props.FlyoutContainer ? (\n \n {props.flyoutTitle}\n {props.checkoutBlockedDueToUnavailableFunds}\n {_renderCartlines(props.cartlines, props)}\n {props.totalPrice}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.goToCartButton}\n \n ) : (\n false\n )}\n \n);\n\nexport default CartIconView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n OrgUnitLocation,\n ProductAvailableQuantity,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\n\nexport interface IFlyoutCartLineItemsProps {\n cartlines: CartLine[];\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n\n /**\n * GridSettings for the product image in cartline\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartline\n */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n removeButtonText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n maxCartlineQuantity: number;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isQuantityLimitsFeatureEnabled: boolean;\n\n outOfStockThreshold: number;\n isStockCheckEnabled: boolean;\n telemetryContent?: ITelemetryContent;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\nexport interface IFlyoutCartLineItemViewProps {\n cartline: React.ReactNode;\n remove: React.ReactNode;\n storeLocation: React.ReactNode;\n hasError: boolean;\n\n data: {\n product: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n outOfStockThreshold: number,\n productAvailability?: ProductAvailableQuantity\n): number => {\n if (isStockCheckEnabled) {\n if (\n !productAvailability ||\n !productAvailability.AvailableQuantity ||\n productAvailability.AvailableQuantity <= 0 ||\n productAvailability.AvailableQuantity <= outOfStockThreshold\n ) {\n return 0;\n }\n return productAvailability.AvailableQuantity - outOfStockThreshold;\n }\n\n return 0;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there is no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct,\n props: IFlyoutCartLineItemsProps,\n index: number,\n foundProductAvailability?: ProductAvailableQuantity,\n foundProductDeliveryOptions?: ProductDeliveryOptions\n): IFlyoutCartLineItemViewProps => {\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText, removeItemClickHandler } = props;\n\n const availableQuantityInStock = _getCartItemAvailableQuantity(\n props.isStockCheckEnabled,\n props.outOfStockThreshold,\n foundProductAvailability\n );\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Check if the product is service or not by product type\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\n return {\n data: {\n product,\n cartline\n },\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\n cartline: (\n \n ),\n remove: (\n \n {removeButtonText}\n \n ),\n storeLocation: _renderStoreLocation(cartline, props)\n };\n};\n\nconst _renderDeliveryLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): string | undefined => {\n let deliverylocation;\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartLine.ProductId;\n });\n }\n const delivery = foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === cartLine.DeliveryMode);\n const location = delivery?.Description;\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n if (location) {\n deliverylocation = `${location}, ${orgUnitName}`;\n } else {\n deliverylocation = `${orgUnitName}`;\n }\n } else {\n deliverylocation = props.resources.shippingText;\n }\n return deliverylocation;\n};\n\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n if (orgUnitName) {\n return (\n
\n {orgUnitName}\n
\n );\n }\n }\n\n return null;\n};\n\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n};\n\nconst _assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: IFlyoutCartLineItemsProps\n): IFlyoutCartLineItemViewProps[] | null => {\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\n\n if (!products || products.length === 0) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n }\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n if (product) {\n reactNodes.push(\n _assembleNode(\n cartline,\n product,\n props,\n index,\n foundProductAvailability?.ProductAvailableQuantity,\n foundProductDeliveryOption\n )\n );\n }\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\n const { products, cartlines } = props;\n return _assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IAny,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { searchOrgUnitLocationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\n\n/**\n * Input for search-org-unit-locations data action.\n */\nexport class SearchOrgUnitLocationsInput implements IActionInput {\n public getCacheKey = () => 'SearchOrgUnitLocations';\n\n public getCacheObjectType = () => 'SearchOrgUnitLocations';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData -- Input data.\n * @returns -- IActionInput.\n */\nexport const createSearchOrgUnitLocationsInputFunc = (inputData: ICreateActionContext>): IActionInput => {\n return new SearchOrgUnitLocationsInput();\n};\n\n/**\n * Calls the Retail API and returns all the orgUnitLocations as array.\n * @param input - Input.\n * @param ctx - Context.\n * @returns - orgUnitLocations.\n */\nexport async function getSearchOrgUnitLocationsAction(\n input: SearchOrgUnitLocationsInput,\n context: IActionContext\n): Promise {\n const OrgUnitLocations = await searchOrgUnitLocationsAsync(\n {\n callerContext: context\n },\n {}\n );\n\n return OrgUnitLocations;\n}\n\nexport const retailActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/search-org-unit-locations',\n action: >getSearchOrgUnitLocationsAction,\n input: createSearchOrgUnitLocationsInputFunc\n});\n\nexport default retailActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior } from '@msdyn365-commerce/components';\nimport MsDyn365, { getUrlSync } from '@msdyn365-commerce/core';\nimport { ICartIconViewProps, ICartViewProps, IFlyoutCartLineItemViewProps } from '@msdyn365-commerce-modules/cart';\nimport { Button, getPayloadObject, INodeProps, KeyCodes, Modal, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { ICartIconProps as ICartIconExtensionProps } from '../definition-extensions/cart-icon.ext.props.autogenerated';\n\n/**\n * ICartIconViewState: Interface for Cart Icon View State.\n */\ninterface ICartIconViewState {\n isModalOpen: boolean;\n}\n\n/**\n * Render Cart lines.\n * @param cartLines - Flyout cart line view props.\n * @param props - Cart icon view props.-\n * @returns JSX Element.\n */\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n return cartLines.map((cartLine, index) => {\n const cartLineIndex = index;\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\n/**\n * Initiate total price.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const cart = props.data.cart.result ?? undefined;\n const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\n const totalPrice = price\n ? props.context.cultureFormatter.formatCurrency(price)\n : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\n return cart && !cart.hasInvoiceLine ? (\n
\n \n {props.resources.totalPriceFormatString}\n {totalPrice}\n \n
\n ) : (\n <>\n );\n};\n\n/**\n * Initiate subtotal message.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderSubtotalMessage = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const cart = props.data.cart.result ?? undefined;\n return cart && !cart.hasInvoiceLine ?

{props.resources.subTotalMessage}

: null;\n};\n\n/**\n *\n * CartIconView component.\n * @extends {React.PureComponent}\n */\nexport class CartIconView extends React.PureComponent<\n ICartViewProps & ICartIconViewProps & ICartIconExtensionProps<{}>,\n ICartIconViewState\n> {\n private isAutoDisplayTriggered: boolean;\n\n private readonly cartIconRef: React.RefObject = React.createRef();\n\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\n super(props);\n this.isAutoDisplayTriggered = false;\n this.state = {\n isModalOpen: false\n };\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n window.addEventListener('keydown', this._escFunction, false);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('keydown', this._escFunction, false);\n }\n }\n\n /**\n * Render Cart Item count.\n * @returns JSX Element.\n */\n public render(): JSX.Element | null {\n const cart = this.props.data.cart.result ?? undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n if (shouldShowMiniCart) {\n if (!this.isAutoDisplayTriggered) {\n // First time trigger auto mini cart.\n this.setState({ isModalOpen: true });\n this.isAutoDisplayTriggered = true;\n } else if (!this.state.isModalOpen) {\n // If modal is closed, reset the flag.\n this.isAutoDisplayTriggered = false;\n }\n }\n return (\n \n \n \n \n {this.props.flyoutTitle}\n {this._renderCartItemCount(this.props)}\n {this._renderCartCloseIcon()}\n \n \n {this.props.data.cart.result?.isEmpty ? this.props.slots.emptyCart : null}\n {this.props.checkoutBlockedDueToUnavailableFunds}\n {renderCartlines(this.props.cartlines, this.props)}\n \n \n {this.props.slots.promoContentItem}\n {renderTotalPrice(this.props)}\n {renderSubtotalMessage(this.props)}\n {this.props.checkoutAsSignInUserButton}\n {this.props.checkoutAsGuestButton}\n {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton}\n \n {this.props.data.cart.result?.isEmpty ? (\n \n {this.props.resources.continueShoppingButtonTitle}\n \n ) : null}\n \n \n \n \n );\n }\n\n /**\n * Initiate modal container.\n * @returns Inode props.\n */\n private readonly _modalContainer = (): INodeProps => {\n return {\n tag: Modal,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__minicartmodal-container',\n wrapClassName: 'ms-cart-icon__minicartmodal',\n isOpen: this.state.isModalOpen,\n toggle: this.closeModal\n };\n };\n\n /**\n * Initiate open modal.\n */\n private readonly _openModal = (): void => {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\n this.setState({\n isModalOpen: true\n });\n };\n\n /**\n * Initiate close modal.\n */\n private readonly closeModal = (): void => {\n this.cartIconRef.current?.focus();\n this.setState({\n isModalOpen: false\n });\n };\n\n /**\n * Initiate cart close Icon.\n * @returns JSX Element.\n */\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\n return