{"version":3,"file":"static/js/eb636ec4152d9b90c46c.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/eve-catalog-checker/eve-catalog-checker.tsx?bcc1","webpack://Msdyn365.Commerce.Online/./src/modules/eve-catalog-checker/eve-catalog-checker.view.tsx?8827","webpack://Msdyn365.Commerce.Online/./src/utilities/get-catalog-id-from-context.ts?89bf","webpack://Msdyn365.Commerce.Online/./lib/eve-catalog-checker/module-registration.js?e503","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nimport { IEveCatalogCheckerData } from './eve-catalog-checker.data';\r\nimport { IEveCatalogCheckerProps } from './eve-catalog-checker.props.autogenerated';\r\nimport { GetCatalogIdFromContext } from '../../utilities';\r\nimport { computed } from 'mobx';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport Msdyn365 from '@msdyn365-commerce/core';\r\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\n\r\nexport interface IEveCatalogCheckerViewProps extends IEveCatalogCheckerProps {\r\n modal: React.ReactNode;\r\n}\r\n\r\ninterface IEveCatalogCheckerState {\r\n displayModal: boolean;\r\n isInitialized: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * EveCatalogChecker component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass EveCatalogChecker extends React.PureComponent, IEveCatalogCheckerState> {\r\n private static readonly _catalogIdQueryParamKey: string = 'catalogid';\r\n constructor(props: IEveCatalogCheckerProps) {\r\n super(props);\r\n this.state = {\r\n displayModal: false,\r\n isInitialized: false\r\n };\r\n console.log('Init');\r\n }\r\n @computed private get catalogId() {\r\n return GetCatalogIdFromContext(this.props.context.actionContext);\r\n }\r\n\r\n @computed private get cartCatalogId(): number {\r\n const {\r\n data: {\r\n cart: { result: cart }\r\n }\r\n } = this.props;\r\n\r\n if (cart?.cart && ArrayExtensions.hasElements(cart.cart.CartLines)) {\r\n return cart.cart.CartLines[0].CatalogId || 0;\r\n }\r\n return 0;\r\n }\r\n\r\n public componentDidMount() {\r\n if (this.catalogId > 0 && this.cartCatalogId !== 0 && this.cartCatalogId !== this.catalogId) {\r\n // We have to prompt user to change catalogs\r\n this.setState({ displayModal: true });\r\n }\r\n }\r\n\r\n private _doesLinkHaveCatalogIdQueryParam(link: string): boolean {\r\n return link.toLowerCase().indexOf(EveCatalogChecker._catalogIdQueryParamKey) > -1;\r\n }\r\n\r\n private _rebuildLinkWithCatalogIdQueryParam(link: string): string {\r\n let concatSymbol: '&' | '?' = '?';\r\n\r\n if (link.indexOf(concatSymbol) > -1) {\r\n concatSymbol = '&';\r\n }\r\n\r\n return `${link}${concatSymbol}${EveCatalogChecker._catalogIdQueryParamKey}=${this.catalogId}`;\r\n }\r\n\r\n private _addAnchorToTagChildren(element: Element) {\r\n if (element.nextElementSibling) {\r\n this._addAnchorToTagChildren(element.nextElementSibling);\r\n }\r\n for (let i = 0; i < element.children.length; i++) {\r\n // eslint-disable-next-line security/detect-object-injection\r\n const tag = element.children[i];\r\n if (tag.children.length) {\r\n this._addAnchorToTagChildren(tag);\r\n }\r\n if (tag.tagName.toLowerCase() === 'a') {\r\n const anchorTag = tag as HTMLAnchorElement;\r\n if (!this._doesLinkHaveCatalogIdQueryParam(anchorTag.href)) {\r\n anchorTag.href = this._rebuildLinkWithCatalogIdQueryParam(anchorTag.href);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _isExternalUrl(url: any) {\r\n return new URL(url).origin !== location.origin;\r\n }\r\n\r\n private _initialize() {\r\n if (this.catalogId > 0) {\r\n // Add catalog ID to all links on the page\r\n const anchorTags = document.querySelectorAll('a');\r\n anchorTags.forEach(tag => {\r\n if (tag.href) {\r\n if (!this._isExternalUrl(tag) && !this._doesLinkHaveCatalogIdQueryParam(tag.href)) {\r\n tag.href = this._rebuildLinkWithCatalogIdQueryParam(tag.href);\r\n }\r\n }\r\n });\r\n\r\n // Add event listener to all buttons that render a dropdown menu on click\r\n const buttons = document.querySelectorAll('button[aria-expanded=\"false\"]');\r\n buttons.forEach(btn => {\r\n btn.addEventListener('click', () => {\r\n setTimeout(() => {\r\n this._addAnchorToTagChildren(btn.parentElement!);\r\n }, 50);\r\n });\r\n });\r\n }\r\n }\r\n\r\n private _renderCatalogPromptModal() {\r\n const {\r\n resources: { catalogPromptBodyText, catalogPromptHeading, changeCatalogButtonText }\r\n } = this.props;\r\n return (\r\n \r\n \r\n {catalogPromptHeading}\r\n \r\n {catalogPromptBodyText}\r\n \r\n \r\n\r\n {/*{this._renderSaveToOrderTemplateButton()}*/}\r\n \r\n \r\n );\r\n }\r\n\r\n // private _renderSaveToOrderTemplateButton() {\r\n // const { resources } = this.props;\r\n // return (\r\n // \r\n // );\r\n // }\r\n //\r\n // private _generateOrderTemplateNameDialogResources(resources: IEveCatalogCheckerResources): IOrderTemplateNameDialogResources {\r\n // return {\r\n // orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\r\n // orderTemplateTitleLabel: resources.orderTemplateTitle,\r\n // orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\r\n // orderTemplateDescription: resources.createOrderTemplateDescription,\r\n //\r\n // defaultOrderTemplateName: resources.defaultOrderTemplateName,\r\n //\r\n // orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\r\n // orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\r\n // };\r\n // }\r\n //\r\n // private _generateLinesAddedToOrderTemplateDialogResources(\r\n // resources: IEveCatalogCheckerResources\r\n // ): ILinesAddedToOrderTemplateDialogResources {\r\n // return {\r\n // viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\r\n // continueShoppingButtonText: resources.continueShoppingButtonText,\r\n // linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\r\n // linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\r\n // linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\r\n // linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\r\n // linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\r\n // linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\r\n // };\r\n // }\r\n //\r\n // private _generateAddToOrderTemplateDialogResources(resources: IEveCatalogCheckerResources): IAddToOrderTemplateDialogResources {\r\n // return {\r\n // addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\r\n //\r\n // noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\r\n // noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\r\n //\r\n // createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\r\n // createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\r\n // cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\r\n //\r\n // selectTemplatesText: resources.selectTemplatesText,\r\n // addToTemplateButtonText: resources.addToTemplateButtonText,\r\n // lineItemsText: resources.lineItemsText\r\n // };\r\n // }\r\n\r\n private _buildUrlToNewCatalog(): string {\r\n if (!Msdyn365.isBrowser) {\r\n return '';\r\n }\r\n const url = new URL(window.location.href);\r\n url.searchParams.set(EveCatalogChecker._catalogIdQueryParamKey, this.cartCatalogId.toString());\r\n return `${url.pathname}${url.search}`;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (!this.state.isInitialized && Msdyn365.isBrowser) {\r\n this.setState({ isInitialized: true });\r\n this._initialize();\r\n }\r\n return <>{this._renderCatalogPromptModal()};\r\n }\r\n}\r\n\r\nexport default EveCatalogChecker;\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 { IEveCatalogCheckerViewProps } from './eve-catalog-checker';\r\n\r\nexport default (props: IEveCatalogCheckerViewProps) => {\r\n return
;\r\n};\r\n","import { IActionContext } from '@msdyn365-commerce/core-internal';\r\n\r\n/**\r\n * Gets Catalog ID from the action context object\r\n * @param context\r\n * @constructor\r\n */\r\nexport const GetCatalogIdFromContext = (context: IActionContext): number => {\r\n if (!context.requestContext.user) {\r\n return 0;\r\n }\r\n let catalogId =\r\n (context.requestContext.query && context.requestContext.query['catalogid'] && +context.requestContext.query['catalogid']) || 0;\r\n if (catalogId === 0) {\r\n catalogId = (context.requestContext.user.catalogId && +context.requestContext.user.catalogId) || 0;\r\n }\r\n\r\n return catalogId;\r\n};\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['eve-catalog-checker'] = {\n c: () => require('partner/modules/eve-catalog-checker/eve-catalog-checker.tsx'),\n $type: 'contentModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'orderTemplates', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview', runOn: 1}],\n \n iNM: false,\n ns: '__local__',\n n: 'eve-catalog-checker',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/eve-catalog-checker'\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/order-templates/get-order-templates-preview';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/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__|modules|eve-catalog-checker|eve-catalog-checker'] = {\n c: () => require('partner/modules/eve-catalog-checker/eve-catalog-checker.view.tsx'),\n cn: '__local__-__local__-eve-catalog-checker'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["EveCatalogChecker","React","constructor","props","super","this","state","displayModal","isInitialized","console","log","GetCatalogIdFromContext","context","actionContext","data","cart","result","ArrayExtensions","hasElements","CartLines","CatalogId","componentDidMount","catalogId","cartCatalogId","setState","_doesLinkHaveCatalogIdQueryParam","link","toLowerCase","indexOf","_catalogIdQueryParamKey","_rebuildLinkWithCatalogIdQueryParam","concatSymbol","_addAnchorToTagChildren","element","nextElementSibling","i","children","length","tag","tagName","anchorTag","href","_isExternalUrl","url","URL","origin","location","_initialize","document","querySelectorAll","forEach","btn","addEventListener","setTimeout","parentElement","_renderCatalogPromptModal","resources","catalogPromptBodyText","catalogPromptHeading","changeCatalogButtonText","Modal","isOpen","ModalHeader","ModalBody","ModalFooter","Button","className","_buildUrlToNewCatalog","Msdyn365","isBrowser","window","searchParams","set","toString","pathname","search","render","__decorate","computed","requestContext","user","query","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","__bindings__","_objectSpread","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}