{"version":3,"file":"static/js/0c0abc4ca3449b849f9a.bundle.js","mappings":"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","sources":["webpack://bju-press/./src/modules/modal-container/modal-container.tsx?a65e","webpack://bju-press/./src/utilities/class-name-helper.ts?dd10","webpack://bju-press/./lib/modal-container/module-registration.js?6c39","webpack://bju-press/external var \"React\"?0d3b","webpack://bju-press/external var \"ReactDOM\"?853b"],"sourcesContent":["//==============================================================================\r\n// A generic container that allows arbitrary content to be added to the header\r\n// and body of a modal.\r\n//\r\n// The modal watches for clicks and can be triggered in two fashions:\r\n// 1) An tag with a class that exactly matches the configured trigger\r\n// 2) An tag with an href that matches # + the configured trigger\r\n//\r\n// The first one is the preferred method, but links generated by modules usually\r\n// can't be assigned specific classes in Site Builder.\r\n//==============================================================================\r\nimport * as React from 'react';\r\nimport classnames from 'classnames';\r\nimport { observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\n\r\nimport { Heading, Modal, ModalBody, ModalHeader, ModalFooter, Button } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport { clsHelper } from '../../utilities/class-name-helper';\r\n\r\nimport { IModalContainerData } from './modal-container.data';\r\nimport { IModalContainerProps } from './modal-container.props.autogenerated';\r\n\r\n//==============================================================================\r\n//==============================================================================\r\nconst BASE_CLASS = 'modal';\r\nconst cls = (fragment?: string) => clsHelper(BASE_CLASS, fragment);\r\n\r\n//==============================================================================\r\n//==============================================================================\r\n@observer\r\nclass ModalContainer extends React.Component> {\r\n\r\n @observable private isModalOpen: boolean = false;\r\n\r\n //----------------------------------------------------------\r\n //----------------------------------------------------------\r\n constructor(props: IModalContainerProps) {\r\n super(props);\r\n\r\n this.toggleModal = this.toggleModal.bind(this);\r\n this.clickHandler = this.clickHandler.bind(this);\r\n }\r\n\r\n //----------------------------------------------------------\r\n //----------------------------------------------------------\r\n public clickHandler(event: MouseEvent) {\r\n\r\n // Check to see if an tag was clicked (directly, or a descendant)\r\n const target = this.findLink(event.target as HTMLElement);\r\n\r\n if (target) {\r\n\r\n // Is the trigger in the class name of the clicked element?\r\n const isClassMatch = target.classList.contains(this.props.config.trigger!);\r\n\r\n // Is the clicked element a link with the href set to #trigger?\r\n const isLinkMatch = (target.nodeName === 'A') && (target.getAttribute('href') === `#${this.props.config.trigger}`);\r\n\r\n // If either is true, open the modal\r\n if (isClassMatch || isLinkMatch) {\r\n this.openModal();\r\n }\r\n }\r\n }\r\n\r\n //----------------------------------------------------------\r\n // Find the nearest ancestor\r\n //----------------------------------------------------------\r\n private findLink(node: HTMLElement) {\r\n\r\n // Walk up the tree until a link is found (success), we find a (crime scene), or we run out of parents (orphanage)\r\n while (node && node.nodeName !== 'A') {\r\n\r\n // If we find a body, we're out of here -- technically not needed since we're likely to run out of parents in 3 more steps\r\n if (node.nodeName === 'BODY') {\r\n return null;\r\n }\r\n\r\n // Try again with the parent\r\n node = node.parentNode as HTMLElement;\r\n }\r\n\r\n return node;\r\n }\r\n\r\n //----------------------------------------------------------\r\n //----------------------------------------------------------\r\n public componentDidMount(): void {\r\n if (this.props.config.trigger) {\r\n document.addEventListener('click', this.clickHandler);\r\n }\r\n }\r\n\r\n //----------------------------------------------------------\r\n //----------------------------------------------------------\r\n public componentWillUnmount(): void {\r\n if (this.props.config.trigger) {\r\n document.removeEventListener('click', this.clickHandler);\r\n }\r\n }\r\n\r\n //----------------------------------------------------------\r\n //----------------------------------------------------------\r\n public render(): JSX.Element | null {\r\n const { config, slots } = this.props;\r\n\r\n return (\r\n \r\n \r\n {config.heading && }\r\n \r\n\r\n \r\n {slots.bodyContent}\r\n \r\n\r\n {config.showFooter && (\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n //----------------------------------------------------------\r\n //----------------------------------------------------------\r\n private openModal() {\r\n this.isModalOpen = true;\r\n }\r\n\r\n //----------------------------------------------------------\r\n //----------------------------------------------------------\r\n private toggleModal() {\r\n const elements = document.getElementsByClassName('ms-iframe__content');\r\n for (let i = 0; i < elements.length; i++) {\r\n const iframe = elements[i] as HTMLIFrameElement;\r\n if (iframe instanceof HTMLIFrameElement) {\r\n iframe.src = iframe.src; // When opening the modal, set the src back to its original value for each iframe\r\n }\r\n }\r\n // Toggle the modal open state\r\n this.isModalOpen = !this.isModalOpen;\r\n }\r\n}\r\nexport default ModalContainer;\r\n","//==============================================================================\r\n// Class Name Helper\r\n//\r\n// Tool to standardize CSS class naming in module components and elements\r\n//==============================================================================\r\n\r\nexport function clsHelper(baseClass: string, fragment?: string, separator: string = '__'): string | undefined {\r\n return fragment ? `${baseClass}${separator}${fragment}` : undefined;\r\n}\r\n","const binding = { modules: {}, dataActions: {} };\n\n (binding.modules['modal-container'] = {\n c: () => require('partner/modules/modal-container/modal-container.tsx'),\n $type: 'containerModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'modal-container',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/modal-container'\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 };","module.exports = React;","module.exports = ReactDOM;"],"names":["cls","fragment","clsHelper","ModalContainer","React","constructor","props","super","isModalOpen","this","toggleModal","bind","clickHandler","event","target","findLink","isClassMatch","classList","contains","config","trigger","isLinkMatch","nodeName","getAttribute","openModal","node","parentNode","componentDidMount","document","addEventListener","componentWillUnmount","removeEventListener","render","slots","Modal","className","isOpen","toggle","ModalHeader","heading","Heading","headingTag","tag","text","ModalBody","bodyContent","showFooter","ModalFooter","Button","classnames","onClick","resources","modalContainer_closeButton","elements","getElementsByClassName","i","length","iframe","HTMLIFrameElement","src","__decorate","observable","observer","baseClass","separator","arguments","undefined","binding","modules","dataActions","c","require","$type","da","iNM","ns","n","p","pdp","md","window","__bindings__","_objectSpread","module","exports","ReactDOM"],"sourceRoot":""}