{"version":3,"file":"static/js/14.76eb4ad1df2ef9da514f.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/generic-popup/generic-popup.tsx?12c8","webpack://Msdyn365.Commerce.Online/./src/modules/generic-popup/generic-popup.view.tsx?638f","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/pva-chat-connector.tsx?def7","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/proactive/triggers/proactive-chat-trigger.ts?734c","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/proactive/triggers/cart-amount-trigger.ts?742f","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/proactive/triggers/cart-number-of-items-trigger.ts?d5f8","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/proactive/triggers/cart-specific-product-trigger.ts?2cd6","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/helpers/consts.ts?02a5","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/proactive/triggers/date-range-trigger.ts?8bfc","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/proactive/triggers/from-specific-page-trigger.ts?fd6f","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/proactive/triggers/page-visits-trigger.ts?cce7","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/proactive/triggers/specific-CountryRegion-trigger.ts?e87a","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/proactive/triggers/specific-page-trigger.ts?6e03","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/proactive/triggers/wait-on-time-trigger.ts?d898","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/proactive/index.ts?36a2","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/helpers/ContextProvider.ts?4518","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/helpers/StyleComposers.ts?0192","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/helpers/CommerceChatStore.ts?5b45","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/components/ChatCore.tsx?a412","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/components/Chat.tsx?1581","webpack://Msdyn365.Commerce.Online/./src/modules/pva-chat-connector/pva-chat-connector.view.tsx?3d5c","webpack://Msdyn365.Commerce.Online/./src/themes/venchi/views/sign-up.view.tsx?e5d6","webpack://Msdyn365.Commerce.Online/./src/modules/account-generic-tile/account-generic-tile.tsx?4353","webpack://Msdyn365.Commerce.Online/./src/modules/account-generic-tile/account-generic-tile.view.tsx?4b58","webpack://Msdyn365.Commerce.Online/./src/modules/account-generic-tile/components/account-generic-tile-links.tsx?2bc7","webpack://Msdyn365.Commerce.Online/./src/modules/sign-in/components/sign-in-button.tsx?8d59","webpack://Msdyn365.Commerce.Online/./src/modules/sign-in/components/sign-in-description.tsx?54a5","webpack://Msdyn365.Commerce.Online/./src/modules/sign-in/components/sign-in-error.tsx?a75a","webpack://Msdyn365.Commerce.Online/./src/modules/sign-in/components/sign-in-input.tsx?d840","webpack://Msdyn365.Commerce.Online/./src/modules/sign-in/components/sign-in-label.tsx?4560","webpack://Msdyn365.Commerce.Online/./src/modules/sign-in/components/sign-in-link.tsx?2078","webpack://Msdyn365.Commerce.Online/./src/modules/sign-in/components/sign-in-loading-icon.tsx?1d7f","webpack://Msdyn365.Commerce.Online/./src/modules/sign-in/components/sign-in-loading-message.tsx?84ee","webpack://Msdyn365.Commerce.Online/./src/modules/sign-in/components/sign-in-text.tsx?76b9","webpack://Msdyn365.Commerce.Online/./src/modules/sign-in/sign-in.tsx?259c","webpack://Msdyn365.Commerce.Online/./src/modules/sign-in/sign-in.view.tsx?2b3e","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/search-result-container.view.tsx?89df","webpack://Msdyn365.Commerce.Online/./src/modules/invoice-details/components/invoice-details-header.tsx?a6c6","webpack://Msdyn365.Commerce.Online/./src/modules/invoice-details/components/invoice-details-payment-summary.tsx?3434","webpack://Msdyn365.Commerce.Online/./src/modules/invoice-details/components/invoice-details-products.tsx?8f29","webpack://Msdyn365.Commerce.Online/./src/modules/invoice-details/helpers/invoice-data.ts?608f","webpack://Msdyn365.Commerce.Online/./src/modules/invoice-details/invoice-details.tsx?b51a","webpack://Msdyn365.Commerce.Online/./src/modules/invoice-details/invoice-details.view.tsx?3784","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/components/invoice-error-component.tsx?2ff9","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/components/invoices-filter-component.tsx?5fd4","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/components/invoices-table/components/invoices-table-header-component.tsx?f5e1","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/components/invoices-table/components/invoices-table-row-component.tsx?48db","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/components/invoices-table/invoices-table-component.tsx?9790","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/components/make-payment-component.tsx?1427","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/components/pay-invoice-component.tsx?6f61","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/components/request-invoice-button.tsx?9eb0","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/helpers/invoice-data.ts?00b1","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/helpers/invoice-status.ts?5841","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/helpers/pay-invoices.ts?30c0","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/components/request-invoice-modal.tsx?f9b5","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/invoices-list.tsx?2d55","webpack://Msdyn365.Commerce.Online/./src/modules/invoices-list/invoices-list.view.tsx?8b51","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://Msdyn365.Commerce.Online/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://Msdyn365.Commerce.Online/./src/modules/tab-item/tab-item.tsx?b1b8","webpack://Msdyn365.Commerce.Online/./src/modules/tab-item/tab-item.view.tsx?ee3b","webpack://Msdyn365.Commerce.Online/./src/modules/tab/tab.tsx?9ac6","webpack://Msdyn365.Commerce.Online/./src/modules/tab/tab.view.tsx?a99d","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/write-review.view.tsx?c67c"],"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 { IGenericPopupProps } from './generic-popup.props.autogenerated';\r\n\r\nimport classnames from 'classnames';\r\nimport Cookies from 'universal-cookie';\r\n\r\nexport interface IGenericPopupState {\r\n popupVisible: boolean;\r\n recallVisible: boolean;\r\n}\r\n\r\nexport interface IGenericPopupViewProps extends IGenericPopupProps<{}>, IGenericPopupState {\r\n onDismissRecall(): void;\r\n onDismissPopup(): void;\r\n handleTextRecall(): void;\r\n classNamePopup: string;\r\n classNameRecall: string;\r\n}\r\n\r\n/**\r\n *\r\n * GenericPopup component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass GenericPopup extends React.PureComponent, IGenericPopupState> {\r\n public state: IGenericPopupState = {\r\n popupVisible: false,\r\n recallVisible: false\r\n };\r\n\r\n public render(): JSX.Element | null {\r\n // const { closeButtonAriaLabel, closeButtonLabel } = this.props.resources;\r\n const { className } = this.props.config;\r\n const { popupVisible, recallVisible } = this.state;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n classNamePopup: classnames('venchi_popup'),\r\n classNameRecall: classnames('venchi-recall', 'slide-in', className),\r\n popupVisible, // State data\r\n recallVisible, // State data\r\n onDismissRecall: this._onDismissRecall, // Methods\r\n onDismissPopup: this._onDismissPopup, // Methods\r\n handleTextRecall: this._displayPopupNow\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private readonly _onDismissRecall = (): void => {\r\n this.createCookieRecall();\r\n this.setState({ recallVisible: false });\r\n };\r\n\r\n private readonly _onDismissPopup = (): void => {\r\n if (this.props.config.recallEnabled || false) {\r\n switch (this.props.config.recallShowAfterPopup) {\r\n case 'afterPopup':\r\n setTimeout(this._displayRecallNow, 3000);\r\n break;\r\n case 'afterPageReload':\r\n default:\r\n break;\r\n }\r\n }\r\n this.setState({\r\n popupVisible: false\r\n });\r\n };\r\n\r\n private readonly _displayRecallNow = (): void => {\r\n this.setState({\r\n popupVisible: false,\r\n recallVisible: true\r\n });\r\n };\r\n\r\n private readonly _displayPopupNow = (): void => {\r\n if (this.props.config.cookieCheckbox) {\r\n this.createCookie();\r\n }\r\n this.setState({\r\n popupVisible: true,\r\n recallVisible: false\r\n });\r\n };\r\n\r\n public async componentDidMount() {\r\n const cookie = new Cookies();\r\n if (this.props.config.hidePopupIfCookieIsSet) {\r\n if (!cookie.get(`${this.props.config.modalId}-shown`)) {\r\n setTimeout(this._displayPopupNow, 1000 * (this.props.config.delayPopup || 0));\r\n } else {\r\n if (this.props.config.recallEnabled && !cookie.get(`${this.props.config.modalId}-recall-hidden`)) {\r\n setTimeout(this._displayRecallNow, 1000 * (this.props.config.delayRecall || 0));\r\n }\r\n }\r\n } else {\r\n setTimeout(this._displayPopupNow, 1000 * (this.props.config.delayPopup || 0));\r\n }\r\n }\r\n\r\n private createCookie() {\r\n const cookie = new Cookies();\r\n // @ts-ignore\r\n if (this.props.config.expireDays >= 1) {\r\n var date = new Date();\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\r\n // @ts-ignore\r\n date.setDate(date.getDate() + (this.props.config.expireDays || 0));\r\n const options = { expires: date };\r\n cookie.set(`${this.props.config.modalId}-shown`, true, options);\r\n } else {\r\n cookie.set(`${this.props.config.modalId}-shown`, true);\r\n }\r\n }\r\n\r\n private createCookieRecall() {\r\n const cookie = new Cookies();\r\n // @ts-ignore\r\n if (this.props.config.recallDismissableForDays >= 1) {\r\n var date = new Date();\r\n // @ts-ignore\r\n date.setDate(\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\r\n date.getDate() + (this.props.config.recallDismissableForDays || 0)\r\n );\r\n const options = { expires: date };\r\n cookie.set(`${this.props.config.modalId}-recall-hidden`, true, options);\r\n } else {\r\n cookie.set(`${this.props.config.modalId}-recall-hidden`, true);\r\n }\r\n }\r\n}\r\n\r\nexport default GenericPopup;\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 { IGenericPopupViewProps } from './generic-popup';\r\nimport { Modal, ModalBody, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\n\r\nconst GenericPopupView: React.FC = props => {\r\n const {\r\n slots,\r\n popupVisible,\r\n recallVisible,\r\n classNamePopup,\r\n classNameRecall,\r\n onDismissRecall,\r\n onDismissPopup,\r\n handleTextRecall\r\n } = props;\r\n const { modalId, recallDismissable, modalHeader, recallText } = props.config;\r\n const { closeButtonAriaLabel, closeButtonLabel } = props.resources;\r\n\r\n React.useEffect(() => {\r\n if (popupVisible) {\r\n //@ts-ignore\r\n const label = props.config.modalName || 'Generic';\r\n window.dataLayer?.push?.({\r\n event: 'gaEvent',\r\n eventCategory: 'popup',\r\n eventAction: 'displayed',\r\n eventLabel: label\r\n });\r\n }\r\n }, [popupVisible]);\r\n\r\n const handleClose = React.useCallback(() => {\r\n const popupElement = document.querySelector('.venchi_popup');\r\n const form = popupElement?.getElementsByTagName('form');\r\n\r\n if (form?.length && popupVisible) {\r\n const label = props.config.modalName;\r\n window.dataLayer?.push?.({\r\n event: 'gaEvent',\r\n eventCategory: 'popup',\r\n eventAction: 'click_close',\r\n eventLabel: label\r\n });\r\n }\r\n onDismissPopup();\r\n }, [onDismissPopup, popupVisible, props]);\r\n\r\n return (\r\n <>\r\n \r\n {modalHeader}\r\n
\r\n \r\n
\r\n
{slots.content}
\r\n
\r\n
\r\n
\r\n
\r\n {recallVisible ? (\r\n
\r\n \r\n {recallDismissable ? (\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\nexport default GenericPopupView;\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\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\nimport { isOboRequest } from '@msdyn365-commerce/core-internal';\r\nimport { IPvaChatConnectorData } from './pva-chat-connector.data';\r\nimport { IPvaChatConnectorConfig, IPvaChatConnectorProps } from './pva-chat-connector.props.autogenerated';\r\n\r\nexport interface IPvaChatConnectorViewProps extends IPvaChatConnectorProps {\r\n config: IPvaChatConnectorConfig;\r\n}\r\n\r\n/**\r\n * PvaChatConnector component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass PvaChatConnector extends React.PureComponent> {\r\n // Loads CDN version of Botframework-Webchat library\r\n public componentDidMount(): void {\r\n if (isOboRequest(this.props.context.request)) {\r\n return;\r\n }\r\n\r\n const url = this.props.config.botFrameworkCDNURL || this.props.context.app.config.pvaChatConnectorBotFrameworkCDNURL;\r\n const script = document.createElement('script');\r\n script.src = url;\r\n script.async = true;\r\n script.crossOrigin = 'anonymous';\r\n document.body.appendChild(script);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n if (isOboRequest(this.props.context.request)) {\r\n return null;\r\n }\r\n\r\n return this.props.renderView(this.props);\r\n }\r\n}\r\n\r\nexport default PvaChatConnector;\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\n/* eslint-disable no-duplicate-imports */\r\nimport { IProactiveChatTrigger } from '../../interfaces';\r\nimport { IChatContext, TContextProvider } from '@msdyn365-commerce-modules/chat';\r\nimport { IPvaChatConnectorViewProps } from '../../pva-chat-connector';\r\n\r\n/**\r\n * ProactiveChatTrigger class - checks if Proactive Chat should be triggered, starts the chat and sets context\r\n */\r\nabstract class ProactiveChatTrigger implements IProactiveChatTrigger {\r\n public props: IPvaChatConnectorViewProps;\r\n public context: IChatContext;\r\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\r\n this.props = props;\r\n this.context = context;\r\n }\r\n\r\n /**\r\n * Generates Chat Context with included properties related to Proactive Chat\r\n * @returns TContextProvider - Chat Context\r\n */\r\n public abstract getContextProvider(): TContextProvider;\r\n\r\n /**\r\n * Generates chat welcome message to be used if Proactive Chat is triggered\r\n * @returns string - chat welcome message\r\n */\r\n public abstract getMessage(): string;\r\n\r\n /**\r\n * Validate specific trigger conditions if Proactive Chat should be initiated\r\n * @returns boolean (TRUE if Proactive Chat should be triggered)\r\n */\r\n public abstract validate(): Promise;\r\n}\r\n\r\nexport default ProactiveChatTrigger;\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\n// @ts-ignore\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\r\nimport { IChatContext, TContextProvider } from '@msdyn365-commerce-modules/chat';\r\nimport { IPvaChatConnectorViewProps } from '../../pva-chat-connector';\r\nimport ProactiveChatTrigger from './proactive-chat-trigger';\r\n\r\n/**\r\n * CartAmountTrigger class - proactive chat is triggered if cArt amount is in preset boundaries (config.proactiveOnCartAmountMin, config.proactiveOnCartAmountMax)\r\n */\r\nclass CartAmountTrigger extends ProactiveChatTrigger {\r\n private min?: number;\r\n private max?: number;\r\n private totalInCart: number = 0;\r\n\r\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\r\n super(props, context);\r\n this.min = this.props.config.proactiveOnCartAmountMin;\r\n this.max = this.props.config.proactiveOnCartAmountMax;\r\n this.props.context.telemetry.debug(\r\n `[Chat][${CartAmountTrigger.name}] Cart amount proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\r\n );\r\n }\r\n\r\n public async validate(): Promise {\r\n const cart = await this._getCart();\r\n if (cart.isEmpty) {\r\n this.props.context.telemetry.debug(`[Chat][${CartAmountTrigger.name}] Cart was empty. Validation returning 'false'.`);\r\n return false;\r\n }\r\n\r\n this.totalInCart = cart.cart.TotalAmount || 0;\r\n let retVal = false;\r\n if (this.min) {\r\n if (this.max) {\r\n retVal = this.min <= this.totalInCart && this.totalInCart <= this.max;\r\n } else {\r\n retVal = this.min <= this.totalInCart;\r\n }\r\n } else {\r\n if (this.max) {\r\n retVal = this.totalInCart <= this.max;\r\n } else {\r\n retVal = false;\r\n }\r\n }\r\n this.props.context.telemetry.debug(\r\n `[Chat][${CartAmountTrigger.name}] Validation result: '${retVal}'; Cart total: '${this.totalInCart}'.`\r\n );\r\n return retVal;\r\n }\r\n\r\n public getContextProvider(): TContextProvider {\r\n return () => {\r\n return {\r\n ...this.context,\r\n eCommerceCustIsProactiveChat: 'True',\r\n eCommerceCustProactiveType: 'Cart Amount',\r\n eCommerceCustProactiveShoppingCartAmount: `${this.totalInCart}`\r\n };\r\n };\r\n }\r\n\r\n public getMessage(): string {\r\n // @TODO: Add message processing if needed\r\n return this.props.config.proactiveOnCartAmountMessage || this.props.config.proactiveDefaultMessage;\r\n }\r\n\r\n private async _getCart(): Promise {\r\n return getCartState(this.props.context.actionContext);\r\n }\r\n}\r\n\r\nexport default CartAmountTrigger;\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\n// @ts-ignore\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\r\nimport { IChatContext, TContextProvider } from '@msdyn365-commerce-modules/chat';\r\nimport { IPvaChatConnectorViewProps } from '../../pva-chat-connector';\r\nimport ProactiveChatTrigger from './proactive-chat-trigger';\r\n\r\n/**\r\n * CartNumberOfItemsTrigger class - proactive chat is triggered if Cart Number of Items is in preset boundaries (config.proactiveOnCartNoOfItemsMin, config.proactiveOnCartNoOfItemsMax)\r\n */\r\nclass CartNumberOfItemsTrigger extends ProactiveChatTrigger {\r\n private min?: number;\r\n private max?: number;\r\n private numberOfItems: number = 0;\r\n\r\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\r\n super(props, context);\r\n this.min = this.props.config.proactiveOnCartNoOfItemsMin;\r\n this.max = this.props.config.proactiveOnCartNoOfItemsMax;\r\n\r\n this.props.context.telemetry.debug(\r\n `[${CartNumberOfItemsTrigger.name}] Cart number of items proactive chat initialized with min: '${this.min}'; max: '${this.max}'.`\r\n );\r\n }\r\n\r\n public async validate(): Promise {\r\n const cart = await this._getCart();\r\n if (cart.isEmpty) {\r\n this.props.context.telemetry.debug(`[Chat][${CartNumberOfItemsTrigger.name}] Cart was empty. Validation returning 'false'.`);\r\n return false;\r\n }\r\n\r\n this.numberOfItems = cart.cart.TotalItems || 0;\r\n\r\n let retVal = false;\r\n if (this.min) {\r\n if (this.max) {\r\n retVal = this.min <= this.numberOfItems && this.numberOfItems <= this.max;\r\n } else {\r\n retVal = this.min <= this.numberOfItems;\r\n }\r\n } else {\r\n if (this.max) {\r\n retVal = this.numberOfItems <= this.max;\r\n } else {\r\n retVal = false;\r\n }\r\n }\r\n this.props.context.telemetry.debug(\r\n `[${CartNumberOfItemsTrigger.name}] Validation result: '${retVal}'; Number of items in cart: '${this.numberOfItems}'.`\r\n );\r\n return retVal;\r\n }\r\n\r\n public getContextProvider(): TContextProvider {\r\n return () => {\r\n return {\r\n ...this.context,\r\n eCommerceCustIsProactiveChat: 'True',\r\n eCommerceCustProactiveType: 'Cart Number of Items',\r\n eCommerceCustProactiveShoppingCartNumberOfItems: `${this.numberOfItems}`\r\n };\r\n };\r\n }\r\n\r\n public getMessage(): string {\r\n // @TODO: Add message processing if needed\r\n return this.props.config.proactiveOnCartNoOfItemsMessage || this.props.config.proactiveDefaultMessage;\r\n }\r\n\r\n private async _getCart(): Promise {\r\n return getCartState(this.props.context.actionContext);\r\n }\r\n}\r\n\r\nexport default CartNumberOfItemsTrigger;\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\n// @ts-ignore\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getCartState, ICartState } from '@msdyn365-commerce/global-state';\r\nimport { TContextProvider } from '@msdyn365-commerce-modules/chat';\r\nimport ProactiveChatTrigger from './proactive-chat-trigger';\r\n\r\n/**\r\n * CartSpecificProductTrigger class - proactive chat is triggered if a Product in the Cart is in preset list of products (config.proactiveOnCartSpecificProductList)\r\n */\r\nclass CartSpecificProductTrigger extends ProactiveChatTrigger {\r\n private product: string = '';\r\n\r\n public async validate(): Promise {\r\n let isValid = false;\r\n const cart = await this._getCart();\r\n if (!cart.isEmpty) {\r\n if (cart.cart.CartLines) {\r\n this.props.context.telemetry.debug(\r\n `[${CartSpecificProductTrigger.name}] Number of cart line items was '${cart.cart.CartLines?.length}'`\r\n );\r\n for (let i = 0; i < cart.cart.CartLines?.length; i++) {\r\n if (cart.cart.CartLines[i]) {\r\n if (this.props.config.proactiveOnCartSpecificProductList) {\r\n this.props.context.telemetry.debug(\r\n `[${CartSpecificProductTrigger.name}] Number of cart specific products was configured for proactive chat was '${this.props.config.proactiveOnCartSpecificProductList?.length}'`\r\n );\r\n // Find first item, from user-defined list of products, that matches the cart lines' itemId in the cart.\r\n for (let j = 0; j < (this.props.config.proactiveOnCartSpecificProductList?.length || 0); j++) {\r\n if (\r\n this.props.config.proactiveOnCartSpecificProductList &&\r\n cart.cart.CartLines[i].ItemId &&\r\n this.props.config.proactiveOnCartSpecificProductList[j] === cart.cart.CartLines[i].ItemId\r\n ) {\r\n this.props.context.telemetry.debug(\r\n `[${CartSpecificProductTrigger.name}] Matched cart line item ID '${cart.cart.CartLines[i].ItemId}' against user-defined list of specific products for proactive chat.`\r\n );\r\n isValid = true;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n // Rest of the CartLines are undefined\r\n break;\r\n }\r\n }\r\n } else {\r\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart did not contain any cart lines.`);\r\n }\r\n } else {\r\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Cart was empty.`);\r\n }\r\n this.props.context.telemetry.debug(`[Chat][${CartSpecificProductTrigger.name}] Validation returning '${isValid}'.`);\r\n return isValid;\r\n }\r\n\r\n public getContextProvider(): TContextProvider {\r\n return () => {\r\n return {\r\n ...this.context,\r\n eCommerceCustIsProactiveChat: 'True',\r\n eCommerceCustProactiveType: 'Cart Specific Product',\r\n eCommerceCustProactiveShoppingCartSpecificProduct: `${this.product}`\r\n };\r\n };\r\n }\r\n\r\n public getMessage(): string {\r\n // @TODO: Add message processing if needed\r\n return this.props.config.proactiveOnCartSpecificProductMessage || this.props.config.proactiveDefaultMessage;\r\n }\r\n\r\n private async _getCart(): Promise {\r\n return getCartState(this.props.context.actionContext);\r\n }\r\n}\r\n\r\nexport default CartSpecificProductTrigger;\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\nexport enum ProactiveChatNames {\r\n DateRange = 'Date Range',\r\n FromSpecificPage = 'From Specific Page',\r\n PageVisits = 'Page Visits',\r\n SpecificLocation = 'Specific Location',\r\n SpecificPage = 'Specific Page',\r\n WaitOnTime = 'Wait On Time'\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 */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ProactiveChatNames } from '../../helpers/consts';\r\nimport { IChatContext, TContextProvider } from '@msdyn365-commerce-modules/chat';\r\nimport { IPvaChatConnectorViewProps } from '../../pva-chat-connector';\r\nimport ProactiveChatTrigger from './proactive-chat-trigger';\r\n\r\n/**\r\n * DateRangeTrigger class - proactive chat is triggered if current date is in preset date boundaries (config.proactiveOnDateRangeStart, config.proactiveOnDateRangeEnd)\r\n */\r\nclass DateRangeTrigger extends ProactiveChatTrigger {\r\n private start?: Date;\r\n private end?: Date;\r\n\r\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\r\n super(props, context);\r\n this.start = this._toDate(this.props.config.proactiveOnDateRangeStart);\r\n this.end = this._toDate(this.props.config.proactiveOnDateRangeEnd);\r\n\r\n this.props.context.telemetry.debug(\r\n `[${DateRangeTrigger.name}] Proactive chat initialized with startDate: '${this.start}'; max: '${this.end}'.`\r\n );\r\n }\r\n\r\n public async validate(): Promise {\r\n const now = new Date();\r\n now.setHours(0, 0, 0, 0);\r\n\r\n let retVal = false;\r\n if (this.start) {\r\n if (this.end) {\r\n retVal = this.start.getTime() <= now.getTime() && now.getTime() <= this.end.getTime();\r\n } else {\r\n retVal = this.start.getTime() <= now.getTime();\r\n }\r\n } else if (this.end) {\r\n retVal = now.getTime() <= this.end.getTime();\r\n }\r\n\r\n this.props.context.telemetry.debug(\r\n `[${DateRangeTrigger.name}] Validation result: '${retVal}'; Current date used to compare: '${now}'.`\r\n );\r\n return retVal;\r\n }\r\n\r\n public getContextProvider(): TContextProvider {\r\n return () => {\r\n return {\r\n ...this.context,\r\n eCommerceCustIsProactiveChat: 'True',\r\n eCommerceCustProactiveType: ProactiveChatNames.DateRange,\r\n eCommerceCustProactiveFromDate: this.start ? this.start.toUTCString() : '',\r\n eCommerceCustProactiveToDate: this.end ? this.end.toUTCString() : ''\r\n };\r\n };\r\n }\r\n\r\n public getMessage(): string {\r\n // @TODO: Add message processing if needed\r\n return this.props.config.proactiveOnDateRangeMessage || this.props.config.proactiveDefaultMessage;\r\n }\r\n\r\n /**\r\n * Converts string(us-en) to date\r\n * @param date string (mm/dd/yyyy)\r\n * @returns Date or undefined\r\n */\r\n private _toDate(date?: string): Date | undefined {\r\n if (date) {\r\n const dateParts = date.split('/');\r\n return new Date(+dateParts[2], +dateParts[1] - 1, +dateParts[0]);\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\nexport default DateRangeTrigger;\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\n/* eslint-disable no-duplicate-imports */\r\nimport { ProactiveChatNames } from '../../helpers/consts';\r\nimport { TContextProvider } from '@msdyn365-commerce-modules/chat';\r\nimport ProactiveChatTrigger from './proactive-chat-trigger';\r\n\r\n/**\r\n * FromSpecificPageTrigger class - proactive chat is triggered if user has come from specific page (the one listed in config.proactiveOnFromSpecificPageList)\r\n */\r\nclass FromSpecificPageTrigger extends ProactiveChatTrigger {\r\n public async validate(): Promise {\r\n let isValid = false;\r\n if (this.props.config.proactiveOnFromSpecificPageList) {\r\n this.props.context.telemetry.debug(\r\n `[${FromSpecificPageTrigger.name}] Number of items in user-defined list of 'From Specific Page' was '${this.props.config.proactiveOnFromSpecificPageList?.length}'.`\r\n );\r\n for (let i = 0; i < (this.props.config.proactiveOnFromSpecificPageList?.length || 0); i++) {\r\n const fromSpecificPageTrimmed: string = this.props.config.proactiveOnFromSpecificPageList[i].trim();\r\n this.props.context.telemetry.debug(\r\n `[Chat][${FromSpecificPageTrigger.name}] Current page URL: '${window.document.referrer}'.`\r\n );\r\n this.props.context.telemetry.debug(\r\n `[${FromSpecificPageTrigger.name}] Current item from user-defined list of 'From Specific Page': '${fromSpecificPageTrimmed}'.`\r\n );\r\n\r\n if (window.document.referrer.indexOf(fromSpecificPageTrimmed) > -1) {\r\n isValid = true;\r\n break;\r\n }\r\n }\r\n } else {\r\n this.props.context.telemetry.debug(\r\n `[Chat][${FromSpecificPageTrigger.name}] User-defined 'From Specific Page' list was undefined.`\r\n );\r\n }\r\n this.props.context.telemetry.debug(`[Chat][${FromSpecificPageTrigger.name}] Validation returning '${isValid}'.`);\r\n return isValid;\r\n }\r\n public getContextProvider(): TContextProvider {\r\n return () => {\r\n return {\r\n ...this.context,\r\n eCommerceCustIsProactiveChat: 'True',\r\n eCommerceCustProactiveType: ProactiveChatNames.FromSpecificPage,\r\n eCommerceCustProactiveCameFromPage: window.document.referrer\r\n };\r\n };\r\n }\r\n public getMessage(): string {\r\n // @TODO: Add message processing if needed\r\n return this.props.config.proactiveOnFromSpecificPageMessage || this.props.config.proactiveDefaultMessage;\r\n }\r\n}\r\n\r\nexport default FromSpecificPageTrigger;\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\n/* eslint-disable no-duplicate-imports */\r\nimport { ICookieContext } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/ICookieContext';\r\nimport { ProactiveChatNames } from '../../helpers/consts';\r\nimport { IChatContext, TContextProvider } from '@msdyn365-commerce-modules/chat';\r\nimport { IPvaChatConnectorViewProps } from '../../pva-chat-connector';\r\nimport ProactiveChatTrigger from './proactive-chat-trigger';\r\n\r\n/**\r\n * PageVisitTrigger class - proactive chat is triggered if user has visited current page for (config.proactiveOnPageVisitNumber) or more times\r\n */\r\nclass PageVisitTrigger extends ProactiveChatTrigger {\r\n public visits: number = 0;\r\n private cookieName: string = 'TimesPageVisited';\r\n private expdate: Date;\r\n private cookies: ICookieContext;\r\n\r\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\r\n super(props, context);\r\n this.cookies = this.props.context.request.cookies;\r\n this.expdate = new Date();\r\n // Set expiry date to 365 days.\r\n this.expdate.setTime(this.expdate.getTime() + 24 * 60 * 60 * 1000 * 365);\r\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie expiry date set to: '${this.expdate}'.`);\r\n\r\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Cookie context is given: '${this.cookies.isConsentGiven()}'.`);\r\n if (this.cookies.isConsentGiven()) {\r\n this.cookies.setConsentCookie();\r\n }\r\n\r\n this._updateVisitCounter();\r\n }\r\n\r\n public async validate(): Promise {\r\n let retVal: boolean = false;\r\n\r\n if (this.props.config.proactiveOnPageVisitNumber) {\r\n retVal = this.visits >= this.props.config.proactiveOnPageVisitNumber;\r\n }\r\n\r\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Validation result: '${retVal}'.`);\r\n return retVal;\r\n }\r\n\r\n public clear(): void {\r\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Clearing cookie for page visit counter.`);\r\n this.cookies.set(this.cookieName, 0, {\r\n domain: window.location.hostname,\r\n path: window.location.pathname,\r\n expires: this.expdate\r\n });\r\n }\r\n\r\n public getContextProvider(): TContextProvider {\r\n return () => {\r\n return {\r\n ...this.context,\r\n eCommerceCustIsProactiveChat: 'True',\r\n eCommerceCustProactiveType: ProactiveChatNames.PageVisits,\r\n eCommerceCustProactiveNumberOfVisits: `${this.visits}`\r\n };\r\n };\r\n }\r\n\r\n public getMessage(): string {\r\n // @TODO: Add message processing if needed\r\n return this.props.config.proactiveOnPageVisitMessage || this.props.config.proactiveDefaultMessage;\r\n }\r\n\r\n private _updateVisitCounter(): void {\r\n this.visits = this.cookies.get(this.cookieName).value || 0;\r\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter BEFORE update: '${this.visits}.`);\r\n ++this.visits;\r\n this.props.context.telemetry.debug(`[Chat][${PageVisitTrigger.name}] Page visit counter AFTER update: '${this.visits}.`);\r\n\r\n this.cookies.set(this.cookieName, this.visits, {\r\n domain: window.location.hostname,\r\n path: window.location.pathname,\r\n expires: this.expdate\r\n });\r\n }\r\n}\r\n\r\nexport default PageVisitTrigger;\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\n/* eslint-disable no-duplicate-imports */\r\nimport { ProactiveChatNames } from '../../helpers/consts';\r\nimport { IExtendedRequest } from '../../interfaces';\r\nimport { IChatContext, TContextProvider } from '@msdyn365-commerce-modules/chat';\r\nimport { IPvaChatConnectorViewProps } from '../../pva-chat-connector';\r\nimport ProactiveChatTrigger from './proactive-chat-trigger';\r\n\r\n/**\r\n * SpecificPageTrigger class - proactive chat is triggered if user geographically uses the website from specific country/regions(config.proactiveOnSpecificCountryRegionCountry)\r\n */\r\nclass SpecificCountryRegionTrigger extends ProactiveChatTrigger {\r\n private customerCountryCode: string;\r\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\r\n super(props, context);\r\n this.customerCountryCode = (this.props.context.request).suggestedMarket || 'n/a';\r\n this.props.context.telemetry.debug(\r\n `[${SpecificCountryRegionTrigger.name}] Customer country code set to: '${this.customerCountryCode}.'`\r\n );\r\n }\r\n\r\n public async validate(): Promise {\r\n const retVal: boolean = this.props.config.proactiveOnSpecificLocation\r\n ? this.props.config.proactiveOnSpecificLocation.toLowerCase().indexOf(this.customerCountryCode.toLowerCase()) > -1\r\n : false;\r\n this.props.context.telemetry.debug(`[Chat][${SpecificCountryRegionTrigger.name}] Validation returning '${retVal}'.`);\r\n return retVal;\r\n }\r\n public getContextProvider(): TContextProvider {\r\n return () => {\r\n return {\r\n ...this.context,\r\n eCommerceCustIsProactiveChat: 'True',\r\n eCommerceCustProactiveCountryCode: this.props.config.proactiveOnSpecificLocation || '',\r\n eCommerceCustProactiveType: ProactiveChatNames.SpecificLocation\r\n };\r\n };\r\n }\r\n public getMessage(): string {\r\n // @TODO: Add message processing if needed\r\n return this.props.config.proactiveOnSpecificCountryRegionMessage || this.props.config.proactiveDefaultMessage;\r\n }\r\n}\r\n\r\nexport default SpecificCountryRegionTrigger;\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\n/* eslint-disable no-duplicate-imports */\r\nimport { ProactiveChatNames } from '../../helpers/consts';\r\nimport { TContextProvider } from '@msdyn365-commerce-modules/chat';\r\nimport ProactiveChatTrigger from './proactive-chat-trigger';\r\n\r\n/**\r\n * SpecificPageTrigger class - proactive chat is triggered if current page is listed in config.proactiveOnSpecificPageList\r\n */\r\nclass SpecificPageTrigger extends ProactiveChatTrigger {\r\n public async validate(): Promise {\r\n let isValid = false;\r\n if (this.props.config.proactiveOnSpecificPageList) {\r\n this.props.context.telemetry.debug(\r\n `[${SpecificPageTrigger.name}] Number of items in user-defined list of 'Specific Pages' was '${this.props.config.proactiveOnSpecificPageList?.length}'.`\r\n );\r\n for (let i = 0; i < (this.props.config.proactiveOnSpecificPageList?.length || 0); i++) {\r\n const specificPageTrimmed: string = this.props.config.proactiveOnSpecificPageList[i].trim();\r\n this.props.context.telemetry.debug(`[] Current location URL: ${window.location.href}.`);\r\n this.props.context.telemetry.debug(`[] Current item from user-defined list of 'Specific Page': ${specificPageTrimmed}.`);\r\n if (window.location.href.indexOf(specificPageTrimmed) > -1) {\r\n isValid = true;\r\n break;\r\n }\r\n }\r\n } else {\r\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] User-defined 'Specific Page' list was undefined.`);\r\n }\r\n this.props.context.telemetry.debug(`[Chat][${SpecificPageTrigger.name}] Validation returning '${isValid}'.`);\r\n return isValid;\r\n }\r\n\r\n public getContextProvider(): TContextProvider {\r\n return () => {\r\n return {\r\n ...this.context,\r\n eCommerceCustIsProactiveChat: 'True',\r\n eCommerceCustProactiveType: ProactiveChatNames.SpecificPage\r\n };\r\n };\r\n }\r\n\r\n public getMessage(): string {\r\n // @TODO: Add message processing if needed\r\n return this.props.config.proactiveOnSpecificPageMessage || this.props.config.proactiveDefaultMessage;\r\n }\r\n}\r\n\r\nexport default SpecificPageTrigger;\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\n/* eslint-disable no-duplicate-imports */\r\nimport { ProactiveChatNames } from '../../helpers/consts';\r\nimport { IChatContext, TContextProvider } from '@msdyn365-commerce-modules/chat';\r\nimport { IPvaChatConnectorViewProps } from '../../pva-chat-connector';\r\nimport ProactiveChatTrigger from './proactive-chat-trigger';\r\n\r\n/**\r\n * WaitOnTimeTrigger - proactive chat is triggered if user stays on current page for more than (config.proactiveOnWaitTimeSeconds) seconds\r\n */\r\nclass WaitOnTimeTrigger extends ProactiveChatTrigger {\r\n private waitTimeInMilliseconds: number | undefined;\r\n\r\n constructor(props: IPvaChatConnectorViewProps, context: IChatContext) {\r\n super(props, context);\r\n if (this.props.config.proactiveOnWaitTimeSeconds && !isNaN(this.props.config.proactiveOnWaitTimeSeconds)) {\r\n this.waitTimeInMilliseconds = Number(this.props.config.proactiveOnWaitTimeSeconds) * 1000;\r\n this.props.context.telemetry.debug(\r\n `[Chat][${WaitOnTimeTrigger.name}] Wait time (ms) set to: '${this.waitTimeInMilliseconds}'.`\r\n );\r\n }\r\n }\r\n\r\n public async validate(): Promise {\r\n const retVal: boolean = this.waitTimeInMilliseconds !== undefined;\r\n this.props.context.telemetry.debug(`[Chat][${WaitOnTimeTrigger.name}] Validation returning '${retVal}'.`);\r\n return retVal;\r\n }\r\n\r\n public getContextProvider(): TContextProvider {\r\n const triggerTime = Date.now() + (this.waitTimeInMilliseconds || 0);\r\n return () => {\r\n return triggerTime > Date.now()\r\n ? this.context\r\n : {\r\n ...this.context,\r\n eCommerceCustIsProactiveChat: 'True',\r\n eCommerceCustProactiveType: ProactiveChatNames.WaitOnTime,\r\n eCommerceCustProactiveTimeOnPage: `${this.waitTimeInMilliseconds ? this.waitTimeInMilliseconds : 0}`\r\n };\r\n };\r\n }\r\n\r\n public getMessage(): string {\r\n // @TODO: Add message processing if needed\r\n return this.props.config.proactiveOnWaitTimeMessage || this.props.config.proactiveDefaultMessage;\r\n }\r\n}\r\n\r\nexport default WaitOnTimeTrigger;\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\n/* eslint-disable no-duplicate-imports */\r\nimport CartAmountTrigger from './triggers/cart-amount-trigger';\r\nimport CartNumberOfItemsTrigger from './triggers/cart-number-of-items-trigger';\r\nimport CartSpecificProductTrigger from './triggers/cart-specific-product-trigger';\r\nimport DateRangeTrigger from './triggers/date-range-trigger';\r\nimport FromSpecificPageTrigger from './triggers/from-specific-page-trigger';\r\nimport PageVisitTrigger from './triggers/page-visits-trigger';\r\nimport SpecificCountryRegionTrigger from './triggers/specific-CountryRegion-trigger';\r\nimport SpecificPageTrigger from './triggers/specific-page-trigger';\r\nimport WaitOnTimeTrigger from './triggers/wait-on-time-trigger';\r\n\r\ntype ProactiveChat =\r\n | typeof DateRangeTrigger\r\n | typeof SpecificPageTrigger\r\n | typeof FromSpecificPageTrigger\r\n | typeof PageVisitTrigger\r\n | typeof SpecificCountryRegionTrigger\r\n | typeof CartAmountTrigger\r\n | typeof CartNumberOfItemsTrigger\r\n | typeof CartSpecificProductTrigger\r\n | typeof WaitOnTimeTrigger;\r\n\r\n/**\r\n * List of Proactive Chat Validators in order of validation (first proactive chat that pass validation is triggered, the rest are ommited)\r\n */\r\nexport const ProactiveTriggers: ProactiveChat[] = [\r\n DateRangeTrigger,\r\n SpecificPageTrigger,\r\n FromSpecificPageTrigger,\r\n PageVisitTrigger,\r\n SpecificCountryRegionTrigger,\r\n CartAmountTrigger,\r\n CartNumberOfItemsTrigger,\r\n CartSpecificProductTrigger,\r\n WaitOnTimeTrigger\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 */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IRequestContextUser } from '@msdyn365-commerce/core-internal/dist/types/interfaces/context/IRequestContext';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { ProactiveTriggers } from '../proactive';\r\nimport ProactiveChatTrigger from '../proactive/triggers/proactive-chat-trigger';\r\nimport { IPvaChatConnectorViewProps } from '../pva-chat-connector';\r\nimport { IProactiveData } from './../interfaces';\r\nimport { IChatContext, TContextProvider } from '@msdyn365-commerce-modules/chat';\r\n\r\n/**\r\n *\r\n * ContextProvider class - generates chat context, and checks for proactive triggers\r\n */\r\nclass ContextProvider {\r\n public data: IProactiveData;\r\n public props: IPvaChatConnectorViewProps;\r\n private user: IRequestContextUser;\r\n private userId: string;\r\n private context: IChatContext;\r\n private provider: TContextProvider | undefined;\r\n\r\n constructor(props: IPvaChatConnectorViewProps) {\r\n this.props = props;\r\n this.user = this.props.context.request.user;\r\n this.userId = `dl_${uuidv4()}`;\r\n this.context = this._getContext();\r\n // Proactive Chat related data\r\n this.data = {\r\n enabled: false,\r\n timeout: this.props.config.proactiveOnWaitTimeSeconds || 0,\r\n message: this.props.config.proactiveDefaultMessage\r\n };\r\n }\r\n\r\n /**\r\n * Executes Proactive Chat validation\r\n * @returns TContextProvider - a function returning IChatContext object\r\n */\r\n public async init(): Promise {\r\n try {\r\n await this._proactiveCheck();\r\n } catch (e) {\r\n // Use ?debug=true to see telemetry\r\n // If previous block fails, chat will still be available (no need to display any errors to user)\r\n this.props.telemetry.exception(e);\r\n }\r\n return this.provider || this._getProvider();\r\n }\r\n\r\n /**\r\n * Returns TContextProvider - a function returning IChatContext object\r\n */\r\n private _getProvider(): TContextProvider {\r\n return () => {\r\n return {\r\n eCommerceOperatingUnitNumber: this.props.context.request.apiSettings.oun,\r\n eCommerceBaseUrl: this.props.context.request.apiSettings.baseUrl,\r\n eCommerceDataAreaId: this.props.context.request.channel?.InventLocationDataAreaId,\r\n UserId: this.userId,\r\n // eCommerceCust...\r\n AccountNumber: this.user.customerAccountNumber ? this.user.customerAccountNumber : 'N/A',\r\n Email: this.user.emailAddress ? this.user.emailAddress : 'N/A',\r\n FirstName: this.user.firstName ? this.user.firstName : this.props.config.anonymousUserName,\r\n LastName: this.user.lastName ? this.user.lastName : 'N/A',\r\n Name: this.user.name ? this.user.name : this.props.config.anonymousUserName,\r\n eCommerceCustPageURL: window.location.href,\r\n eCommerceCustChatType: 'pva',\r\n // Proactive chat\r\n eCommerceCustIsProactiveChat: 'False',\r\n eCommerceCustProactiveType: 'N/A',\r\n // Date Range\r\n eCommerceCustProactiveFromDate: 'N/A',\r\n eCommerceCustProactiveToDate: 'N/A',\r\n // From Specific Page\r\n eCommerceCustProactiveCameFromPage: 'N/A',\r\n // No. Page Visits\r\n eCommerceCustProactiveNumberOfVisits: 'N/A',\r\n // Specific CountryRegion\r\n eCommerceCustProactiveCountryCode: 'N/A',\r\n // Specific Page => eCommerceCustPageURL\r\n // eCommerceCustProactiveSpecificPage: 'N/A',\r\n // Wait On Time\r\n eCommerceCustProactiveTimeOnPage: 'N/A',\r\n // Shopping cart amount\r\n eCommerceCustProactiveShoppingCartAmount: 'N/A',\r\n // Shopping cart number of items\r\n eCommerceCustProactiveShoppingCartNumberOfItems: 'N/A',\r\n // Shopping cart specific product\r\n eCommerceCustProactiveShoppingCartSpecificProduct: 'N/A'\r\n };\r\n };\r\n }\r\n\r\n /**\r\n * Returns default IChatContext object\r\n */\r\n private _getContext(): IChatContext {\r\n return this._getProvider()();\r\n }\r\n\r\n /**\r\n * Validates proactive triggers to check if proactive chat should be initialized\r\n */\r\n private async _proactiveCheck(): Promise {\r\n if (this.props.config.proactiveChatEnabled) {\r\n for (let i = 0; i < ProactiveTriggers.length; i++) {\r\n const proactive = new ProactiveTriggers[i](this.props, this.context);\r\n // Only first detected proactive trigger gets executed\r\n if (await this._isProactive(proactive)) {\r\n this.props.context.telemetry.debug(`First detected proactive trigger to be executed: ${proactive}`);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Validates if proactive chat should be triggered for given ProactiveTrigger\r\n * @param proactive ProactiveChatTrigger\r\n * @returns boolean\r\n */\r\n private async _isProactive(proactive: ProactiveChatTrigger): Promise {\r\n this.data.enabled = await proactive.validate();\r\n if (this.data.enabled) {\r\n this.provider = proactive.getContextProvider();\r\n this.data.message = proactive.getMessage();\r\n }\r\n return this.data.enabled;\r\n }\r\n}\r\n\r\nexport default ContextProvider;\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\n/**\r\n * Style generating functions\r\n */\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IAvatarStyling, IBubbleStyling, IChatCustomStyle, IChatStyling, IOtherStyling, ISuggestedActionStyling } from '../interfaces';\r\nimport { IPvaChatConnectorConfig } from '../pva-chat-connector.props.autogenerated';\r\n\r\nconst getChatWrapperStyle = (config: IPvaChatConnectorConfig): React.CSSProperties => {\r\n return {\r\n position: config.position || 'inherit',\r\n top: config.top ? config.top : 'inherit',\r\n right: config.right ? config.right : 'inherit',\r\n bottom: config.bottom ? config.bottom : 'inherit',\r\n left: config.left ? config.left : 'inherit',\r\n zIndex: 1000,\r\n display: 'flex',\r\n justifyContent: 'flex-end'\r\n };\r\n};\r\n\r\nconst getMaximizedChatWrapperStyle = (config: IPvaChatConnectorConfig, isMobileDevice: boolean): React.CSSProperties => {\r\n if (isMobileDevice) {\r\n return {\r\n height: '90%',\r\n width: '100%',\r\n bottom: '0.5em',\r\n right: '0',\r\n padding: '5px'\r\n };\r\n }\r\n return {\r\n height: config.chatHeight ? config.chatHeight : '80%',\r\n width: config.chatWidth ? config.chatWidth : 'inherit'\r\n };\r\n};\r\n\r\nconst getChatButtonStyle = (config: IPvaChatConnectorConfig): React.CSSProperties => {\r\n return {\r\n display: 'flex',\r\n alignItems: 'center',\r\n backgroundColor: config.startChatButtonBackgroundColor || 'white',\r\n color: config.startChatButtonTextColor || 'inherit',\r\n borderColor: config.startChatButtonBorderColor || 'inherit',\r\n borderRadius: config.startChatButtonBorderRadius || '0px',\r\n borderStyle: config.startChatButtonBorderStyle || 'solid',\r\n borderWidth: config.startChatButtonBorderWidth ? config.startChatButtonBorderWidth : '0px',\r\n padding: config.storeLogoURL ? '2px 20px 2px 2px' : '10px 20px 10px 20px',\r\n cursor: 'pointer',\r\n outlineStyle: 'none',\r\n alignSelf: 'flex-end',\r\n boxShadow: '0 0 4px rgba(102,102,102,.5)',\r\n WebkitBoxShadow: '0 0 4px rgba(102,102,102,.5)',\r\n MozBoxShadow: '0 0 4px rgba(102,102,102,.5)'\r\n };\r\n};\r\n\r\nconst getButtonStoreLogoStyle = (config: IPvaChatConnectorConfig): React.CSSProperties => {\r\n return {\r\n backgroundColor: config.headerBackgroundColor || 'inherit',\r\n color: config.headerTextColor || 'inherit',\r\n borderRadius: '50%',\r\n padding: '11px',\r\n width: '30px',\r\n height: '30px',\r\n marginRight: '12px',\r\n borderStyle: 'solid',\r\n borderWidth: '1px',\r\n boxSizing: 'content-box'\r\n };\r\n};\r\n\r\nconst getChatStoreLogoStyle = (config: IPvaChatConnectorConfig): React.CSSProperties => {\r\n return {\r\n backgroundColor: config.headerBackgroundColor || 'inherit',\r\n color: config.headerTextColor || 'inherit',\r\n borderRadius: '50%',\r\n padding: '11px',\r\n width: '30px',\r\n height: '30px',\r\n margin: '5px 12px 5px 5px',\r\n alignSelf: 'center',\r\n borderStyle: 'solid',\r\n borderWidth: '1px',\r\n boxSizing: 'content-box'\r\n };\r\n};\r\n\r\nconst getChatMessagesStyle = (config: IPvaChatConnectorConfig, minimized: boolean): React.CSSProperties => {\r\n return {\r\n display: minimized ? 'none' : 'block',\r\n backgroundColor: config.backgroundColor || 'White',\r\n height: '100%',\r\n width: '100%',\r\n boxSizing: 'border-box',\r\n position: 'relative'\r\n };\r\n};\r\n\r\nconst getChatMessageHeader = (config: IPvaChatConnectorConfig): React.CSSProperties => {\r\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\r\n return {\r\n backgroundColor: config.headerBackgroundColor || 'inherit',\r\n backgroundImage: `url(\"${config.headerBackgroundImageURL}\")` || 'none',\r\n color: config.headerTextColor || 'inherit',\r\n backgroundRepeat: 'no-repeat',\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n flexDirection: 'row',\r\n width: '100%',\r\n position: 'absolute',\r\n top: config.chatHeaderHeight ? `-${config.chatHeaderHeight}` : '',\r\n height: config.chatHeaderHeight,\r\n borderColor: config.headerBackgroundColor ? config.headerBackgroundColor : 'inherit',\r\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\r\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\r\n };\r\n};\r\n\r\nconst getMinimizeButtonStyle = (config: IPvaChatConnectorConfig): React.CSSProperties => {\r\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\r\n return {\r\n borderTop: 'none',\r\n borderLeft: 'none',\r\n borderRight: 'none',\r\n borderBottom: `solid 2px ${config.headerTextColor || 'White'}`,\r\n backgroundColor: 'transparent',\r\n padding: '5px 10px 3px 10px',\r\n cursor: 'pointer',\r\n outlineStyle: 'none',\r\n marginTop: '7px',\r\n marginRight: '7px'\r\n };\r\n};\r\n\r\nconst getCloseButtonStyle = (config: IPvaChatConnectorConfig): React.CSSProperties => {\r\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\r\n return {\r\n border: 'none',\r\n color: config.headerTextColor || 'White',\r\n backgroundColor: 'transparent',\r\n padding: '0px 0px 0px 7px',\r\n cursor: 'pointer',\r\n outlineStyle: 'none',\r\n marginTop: '7px',\r\n marginRight: '7px'\r\n };\r\n};\r\n\r\nconst getChatMessageContent = (config: IPvaChatConnectorConfig): React.CSSProperties => {\r\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\r\n return {\r\n height: '100%',\r\n width: '100%',\r\n borderColor: config.chatBorderColor ? config.chatBorderColor : 'inherit',\r\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\r\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\r\n };\r\n};\r\n\r\nconst getProactiveWrapperStyle = (config: IPvaChatConnectorConfig): React.CSSProperties => {\r\n return {\r\n flexDirection: 'column',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n backgroundColor: config.backgroundColor || 'White'\r\n };\r\n};\r\n\r\nconst getProactiveMessageHeader = (config: IPvaChatConnectorConfig): React.CSSProperties => {\r\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\r\n return {\r\n backgroundColor: config.headerBackgroundColor || 'inherit',\r\n backgroundImage: `url(\"${config.headerBackgroundImageURL}\")` || 'none',\r\n color: config.headerTextColor || 'inherit',\r\n backgroundRepeat: 'no-repeat',\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n flexDirection: 'row',\r\n boxSizing: 'border-box',\r\n width: '100%',\r\n height: config.chatHeaderHeight,\r\n borderColor: config.headerBackgroundColor ? config.headerBackgroundColor : 'inherit',\r\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\r\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\r\n };\r\n};\r\n\r\nconst getProactiveMessageContent = (config: IPvaChatConnectorConfig): React.CSSProperties => {\r\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\r\n return {\r\n width: '100%',\r\n padding: '10px 20px',\r\n boxSizing: 'border-box',\r\n borderColor: config.chatBorderColor ? config.chatBorderColor : 'inherit',\r\n borderStyle: config.chatBorderStyle ? config.chatBorderStyle : 'none',\r\n borderWidth: config.chatBorderWidth ? config.chatBorderWidth : '0px'\r\n };\r\n};\r\n\r\nconst getProactiveButtonStyle = (config: IPvaChatConnectorConfig): React.CSSProperties => {\r\n config.chatHeaderHeight = config.chatHeaderHeight || '70px';\r\n return {\r\n color: config.headerTextColor || 'inherit',\r\n cursor: 'pointer',\r\n padding: '5px 10px',\r\n outline: 'none',\r\n border: 'none',\r\n backgroundColor: config.headerBackgroundColor || 'inherit',\r\n borderRadius: '25px'\r\n };\r\n};\r\n\r\nconst getRedDotStyle = (config: IPvaChatConnectorConfig): React.CSSProperties => {\r\n return {\r\n background: 'Red',\r\n borderRadius: '50%',\r\n height: '5px',\r\n width: '5px',\r\n position: 'absolute',\r\n right: '10px',\r\n bottom: '33px'\r\n };\r\n};\r\n\r\n/**\r\n * Generates styles for the chat wrapper, and proactive chat parts\r\n * @param config IPvaChatConnectorConfig\r\n * @param minimized boolean\r\n * @returns IChatCustomStyle\r\n */\r\nexport const getChatStyling = (config: IPvaChatConnectorConfig, minimized: boolean, isMobileDevice: boolean): IChatCustomStyle => {\r\n return {\r\n ChatWrapperStyle: getChatWrapperStyle(config),\r\n MaximizedChatWrapperStyle: getMaximizedChatWrapperStyle(config, isMobileDevice),\r\n ChatButtonStyle: getChatButtonStyle(config),\r\n ButtonStoreLogoStyle: getButtonStoreLogoStyle(config),\r\n ChatStoreLogoStyle: getChatStoreLogoStyle(config),\r\n ChatMessagesStyle: getChatMessagesStyle(config, minimized),\r\n ChatMessageHeader: getChatMessageHeader(config),\r\n MinimizeButtonStyle: getMinimizeButtonStyle(config),\r\n CloseButtonStyle: getCloseButtonStyle(config),\r\n ChatMessageContent: getChatMessageContent(config),\r\n ProactiveWrapperStyle: getProactiveWrapperStyle(config),\r\n ProactiveMessageHeader: getProactiveMessageHeader(config),\r\n ProactiveMessageContent: getProactiveMessageContent(config),\r\n ProactiveButtonStyle: getProactiveButtonStyle(config),\r\n RedDotStyle: getRedDotStyle(config)\r\n };\r\n};\r\n\r\nconst fontFormat = (font?: string): string | undefined => {\r\n if (font && font.length > 0) {\r\n const arr = font.split(',');\r\n for (let i = 0; i < arr.length; i++) {\r\n arr[i] = `'${arr[i].trim()}'`;\r\n }\r\n font = arr.join(', ');\r\n } else {\r\n font = \"'Calibri', 'Helvetica Neue', 'Arial', 'sans-serif'\";\r\n }\r\n\r\n return font;\r\n};\r\n\r\nconst getBubbleStyling = (config: IPvaChatConnectorConfig): IBubbleStyling => {\r\n return {\r\n bubbleBackground: config.bubbleBackground || 'White',\r\n bubbleTextColor: config.bubbleTextColor || 'Black',\r\n bubbleBorderColor: config.bubbleBorderColor || '#e6e6e6',\r\n bubbleBorderRadius: config.bubbleBorderRadius || '2',\r\n bubbleBorderStyle: config.bubbleBorderStyle || 'solid',\r\n bubbleBorderWidth: config.bubbleBorderWidth || '1',\r\n bubbleFromUserBackground: config.bubbleFromUserBackground || 'White',\r\n bubbleFromUserTextColor: config.bubbleFromUserTextColor || 'Black',\r\n bubbleFromUserBorderColor: config.bubbleFromUserBorderColor || '#e6e6e6',\r\n bubbleFromUserBorderRadius: config.bubbleFromUserBorderRadius || '2',\r\n bubbleFromUserBorderStyle: config.bubbleFromUserBorderStyle || 'solid',\r\n bubbleFromUserBorderWidth: config.bubbleFromUserBorderWidth || '1'\r\n };\r\n};\r\n\r\n// eslint-disable-next-line complexity\r\nconst getOtherStyling = (config: IPvaChatConnectorConfig): IOtherStyling => {\r\n return {\r\n groupTimestamp: config.groupTimestamp || true,\r\n sendTimeout: config.sendTimeout || '20000',\r\n sendTimeoutForAttachments: config.sendTimeoutForAttachments || '120000',\r\n timestampColor: config.timestampColor || 'undefined',\r\n timestampFormat: config.timestampFormat || 'undefined',\r\n notificationDebounceTimeout: config.notificationDebounceTimeout || '400',\r\n hideToaster: config.hideToaster || true,\r\n toasterHeight: config.toasterHeight || '32',\r\n toasterMaxHeight: config.toasterMaxHeight || '32 * 5',\r\n toasterSingularMaxHeight: config.toasterSingularMaxHeight || '50',\r\n toastFontSize: config.toastFontSize || '87.5%',\r\n toastIconWidth: config.toastIconWidth || '36',\r\n toastSeparatorColor: config.toastSeparatorColor || '#E8EAEC',\r\n toastTextPadding: config.toastTextPadding || '6',\r\n toastErrorBackgroundColor: config.toastErrorBackgroundColor || '#FDE7E9',\r\n toastErrorColor: config.toastErrorColor || '#A80000',\r\n toastInfoBackgroundColor: config.toastInfoBackgroundColor || '#CEF1FF',\r\n toastInfoColor: config.toastInfoColor || '#105E7D',\r\n toastSuccessBackgroundColor: config.toastSuccessBackgroundColor || '#DFF6DD',\r\n toastSuccessColor: config.toastSuccessColor || '#107C10',\r\n toastWarnBackgroundColor: config.toastWarnBackgroundColor || '#FFF4CE',\r\n toastWarnColor: config.toastWarnColor || '#3B3A39',\r\n typingAnimationBackgroundImage: config.typingAnimationBackgroundImage || 'undefined',\r\n typingAnimationDuration: config.typingAnimationDuration || '5000',\r\n typingAnimationHeight: config.typingAnimationHeight || '20',\r\n typingAnimationWidth: config.typingAnimationWidth || '64',\r\n videoHeight: config.videoHeight || '270',\r\n markdownExternalLinkIconImage:\r\n config.markdownExternalLinkIconImage ||\r\n 'url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIzIDMgMTggMTgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcuMjUwMSA0LjUwMDE3SDEwLjc0OTVDMTEuMTYzNyA0LjUwMDE3IDExLjQ5OTUgNC44MzU5NiAxMS40OTk1IDUuMjUwMTdDMTEuNDk5NSA1LjYyOTg2IDExLjIxNzMgNS45NDM2NiAxMC44NTEzIDUuOTkzMzJMMTAuNzQ5NSA2LjAwMDE3SDcuMjQ5NzRDNi4wNzA3OSA1Ljk5OTYxIDUuMTAzNDkgNi45MDY1NiA1LjAwNzg2IDguMDYxMTJMNS4wMDAyOCA4LjIyMDAzTDUuMDAzMTIgMTYuNzUwN0M1LjAwMzQzIDE3Ljk0MTUgNS45Mjg4NSAxOC45MTYxIDcuMDk5NjYgMTguOTk0OUw3LjI1MzcxIDE5LjAwMDFMMTUuNzUxOCAxOC45ODg0QzE2Ljk0MTUgMTguOTg2OCAxNy45MTQ1IDE4LjA2MiAxNy45OTM1IDE2Ljg5MjNMMTcuOTk4NyAxNi43Mzg0VjEzLjIzMjFDMTcuOTk4NyAxMi44MTc5IDE4LjMzNDUgMTIuNDgyMSAxOC43NDg3IDEyLjQ4MjFDMTkuMTI4NCAxMi40ODIxIDE5LjQ0MjIgMTIuNzY0MyAxOS40OTE4IDEzLjEzMDNMMTkuNDk4NyAxMy4yMzIxVjE2LjczODRDMTkuNDk4NyAxOC43NDA3IDE3LjkyOTMgMjAuMzc2OSAxNS45NTI4IDIwLjQ4MjlMMTUuNzUzOCAyMC40ODg0TDcuMjU4MjcgMjAuNTAwMUw3LjA1NDk1IDIwLjQ5NDlDNS4xNDIzOSAyMC4zOTU0IDMuNjA4OTUgMTguODYyNyAzLjUwODM3IDE2Ljk1MDJMMy41MDMxMiAxNi43NTExTDMuNTAwODkgOC4yNTI3TDMuNTA1MjkgOC4wNTAyQzMuNjA1MzkgNi4xMzc0OSA1LjEzODY3IDQuNjA0NDkgNy4wNTA5NiA0LjUwNTI3TDcuMjUwMSA0LjUwMDE3SDEwLjc0OTVINy4yNTAxWk0xMy43NDgxIDMuMDAxNDZMMjAuMzAxOCAzLjAwMTk3TDIwLjQwMTQgMy4wMTU3NUwyMC41MDIyIDMuMDQzOTNMMjAuNTU5IDMuMDY4MDNDMjAuNjEyMiAzLjA5MTIyIDIwLjY2MzQgMy4xMjE2MyAyMC43MTExIDMuMTU4ODVMMjAuNzgwNCAzLjIyMTU2TDIwLjg2NDEgMy4zMjAxNEwyMC45MTgzIDMuNDEwMjVMMjAuOTU3IDMuNTAwNTdMMjAuOTc2MiAzLjU2NDc2TDIwLjk4OTggMy42Mjg2MkwyMC45OTkyIDMuNzIyODJMMjAuOTk5NyAxMC4yNTU0QzIwLjk5OTcgMTAuNjY5NiAyMC42NjM5IDExLjAwNTQgMjAuMjQ5NyAxMS4wMDU0QzE5Ljg3IDExLjAwNTQgMTkuNTU2MiAxMC43MjMyIDE5LjUwNjUgMTAuMzU3MUwxOS40OTk3IDEwLjI1NTRMMTkuNDk4OSA1LjU2MTQ3TDEyLjI3OTcgMTIuNzg0N0MxMi4wMTM0IDEzLjA1MSAxMS41OTY4IDEzLjA3NTMgMTEuMzAzMSAxMi44NTc1TDExLjIxOSAxMi43ODQ5QzEwLjk1MjcgMTIuNTE4NyAxMC45Mjg0IDEyLjEwMjEgMTEuMTQ2MiAxMS44MDg0TDExLjIxODggMTEuNzI0M0wxOC40MzY5IDQuNTAxNDZIMTMuNzQ4MUMxMy4zNjg0IDQuNTAxNDYgMTMuMDU0NiA0LjIxOTMxIDEzLjAwNSAzLjg1MzI0TDEyLjk5ODEgMy43NTE0NkMxMi45OTgxIDMuMzcxNzcgMTMuMjgwMyAzLjA1Nzk3IDEzLjY0NjQgMy4wMDgzMUwxMy43NDgxIDMuMDAxNDZaIiBmaWxsPSIjMjEyMTIxIiAvPjwvc3ZnPg==)',\r\n markdownRespectCRLF: config.markdownRespectCRLF || 'true',\r\n internalLiveRegionFadeAfter: config.internalLiveRegionFadeAfter || '1000',\r\n accent: config.accent || '#0063B1',\r\n subtle: config.subtle || '#767676'\r\n };\r\n};\r\n\r\nconst getAvatarStyling = (config: IPvaChatConnectorConfig): IAvatarStyling => {\r\n return {\r\n avatarBorderRadius: config.avatarBorderRadius || '50%',\r\n avatarSize: config.avatarSize || '40',\r\n botAvatarBackgroundColor: config.botAvatarBackgroundColor || 'undefined',\r\n botAvatarImage: config.botAvatarImage || '',\r\n botAvatarInitials: config.botAvatarInitials || '',\r\n userAvatarBackgroundColor: config.userAvatarBackgroundColor || 'undefined',\r\n userAvatarImage: config.userAvatarImage || '',\r\n userAvatarInitials: config.userAvatarInitials || '',\r\n showAvatarInGroup: config.showAvatarInGroup || 'status'\r\n };\r\n};\r\n\r\nconst getSuggestedActionStyling = (config: IPvaChatConnectorConfig): ISuggestedActionStyling => {\r\n return {\r\n suggestedActionLayout: config.suggestedActionLayout || 'carousel',\r\n suggestedActionBackground: config.suggestedActionBackground || 'White',\r\n suggestedActionTextColor: config.suggestedActionTextColor || '',\r\n suggestedActionBorderColor: config.suggestedActionBorderColor || '',\r\n suggestedActionBorderRadius: config.suggestedActionBorderRadius || '0',\r\n suggestedActionBorderStyle: config.suggestedActionBorderStyle || 'solid',\r\n suggestedActionBorderWidth: config.suggestedActionBorderWidth || '2',\r\n suggestedActionDisabledBorderStyle: config.suggestedActionDisabledBorderStyle || 'solid',\r\n suggestedActionDisabledBorderWidth: config.suggestedActionDisabledBorderWidth || '2',\r\n suggestedActionDisabledTextColor: config.suggestedActionDisabledTextColor || '',\r\n suggestedActionHeight: config.suggestedActionHeight || '40',\r\n suggestedActionImageHeight: config.suggestedActionImageHeight || '20',\r\n suggestedActionsCarouselFlipperCursor: config.suggestedActionsCarouselFlipperCursor || '',\r\n suggestedActionsCarouselFlipperBoxWidth: config.suggestedActionsCarouselFlipperBoxWidth || '40',\r\n suggestedActionsCarouselFlipperSize: config.suggestedActionsCarouselFlipperSize || '20',\r\n suggestedActionsFlowMaxHeight: config.suggestedActionsFlowMaxHeight || '',\r\n suggestedActionsStackedHeight: config.suggestedActionsStackedHeight || '',\r\n suggestedActionsStackedOverflow: config.suggestedActionsStackedOverflow || '2',\r\n suggestedActionsStackedLayoutButtonMaxHeight: config.suggestedActionsStackedLayoutButtonMaxHeight || '',\r\n suggestedActionsStackedLayoutButtonTextWrap: config.suggestedActionsStackedLayoutButtonTextWrap || false\r\n };\r\n};\r\n\r\n/**\r\n * Generates style options for the Botframework-WebChat widget\r\n * @param config IPvaChatConnectorConfig\r\n * @returns IChatStyling\r\n */\r\nexport const getChatStyleOptions = (config: IPvaChatConnectorConfig): IChatStyling => {\r\n const bubbleStyling = getBubbleStyling(config);\r\n const avatarStyling = getAvatarStyling(config);\r\n const suggestedActionStyling = getSuggestedActionStyling(config);\r\n const otherStyling = getOtherStyling(config);\r\n return {\r\n hideUploadButton: true,\r\n primaryFont: fontFormat(config.primaryFont),\r\n backgroundColor: config.backgroundColor || 'White',\r\n ...bubbleStyling,\r\n ...avatarStyling,\r\n ...suggestedActionStyling,\r\n ...otherStyling\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 */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport React from 'react';\r\nimport { IAction, IDispatch, INext } from '../interfaces';\r\nimport { TContextProvider } from '@msdyn365-commerce-modules/chat';\r\nimport { IPvaChatConnectorViewProps } from '../pva-chat-connector';\r\n\r\nexport class CommerceChatStore {\r\n private props: IPvaChatConnectorViewProps;\r\n private setNewMessageAction: React.Dispatch>;\r\n private provider?: TContextProvider;\r\n\r\n /**\r\n * Gets conversation token\r\n * @param props IPvaChatConnectorViewProps\r\n */\r\n public static async getDirectLineToken(props: IPvaChatConnectorViewProps): Promise {\r\n if (props.config.powervaDirectlineTokenURL && props.config.botID && props.config.tenantID) {\r\n // use direct line token url, bot id and tenant id from module config to get conversation token\r\n const url = `${props.config.powervaDirectlineTokenURL}?botId=${props.config.botID}&tenantId=${props.config.tenantID}`;\r\n const options = { method: 'GET' };\r\n return fetch(url, options)\r\n .then(r => r.json())\r\n .then(r => {\r\n if (r.token) {\r\n return r.token;\r\n } else {\r\n throw r;\r\n }\r\n });\r\n }\r\n\r\n // use direct line token url, bot id and tenant id from app config to get conversation token\r\n const url = `${props.context.app.config.pvaChatConnectorPowervaDirectlineTokenURL}?botId=${props.context.app.config.pvaChatConnectorBotID}&tenantId=${props.context.app.config.pvaChatConnectorTenantID}`;\r\n const options = {\r\n method: 'GET'\r\n };\r\n return fetch(url, options)\r\n .then(r => r.json())\r\n .then(r => {\r\n if (r.token) {\r\n return r.token;\r\n } else {\r\n throw r;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates a new instance of commerce store for WebChat\r\n * @param props IPvaChatConnectorViewProps\r\n * @param provider TContextProvider\r\n * @param setNewMessage React.Dispatch>\r\n */\r\n constructor(\r\n props: IPvaChatConnectorViewProps,\r\n provider: TContextProvider | undefined,\r\n setNewMessage: React.Dispatch>\r\n ) {\r\n this.props = props;\r\n this.provider = provider;\r\n this.setNewMessageAction = setNewMessage;\r\n }\r\n\r\n /**\r\n * Handles custom chat actions\r\n * @param param0 {\r\n * dispatch: IDispatch;\r\n * next: INext;\r\n * action: IAction;\r\n * }\r\n */\r\n public async actionHandler({ dispatch, next, action }: { dispatch: IDispatch; next: INext; action: IAction }): Promise {\r\n const atype = action.type;\r\n\r\n switch (atype) {\r\n case 'DIRECT_LINE/CONNECT_FULFILLED': {\r\n // sets language\r\n dispatch({\r\n type: 'WEB_CHAT/SEND_EVENT',\r\n payload: {\r\n name: 'webchat/join',\r\n value: { language: window.navigator.language }\r\n }\r\n });\r\n break;\r\n }\r\n case 'DIRECT_LINE/INCOMING_ACTIVITY': {\r\n const activity = action.payload.activity;\r\n if (activity?.from?.role === 'bot') {\r\n // Sets flag for new message (will be use to indicate new messages from bot when chat is minimized)\r\n this.setNewMessageAction(true);\r\n }\r\n break;\r\n }\r\n case 'DIRECT_LINE/POST_ACTIVITY_FULFILLED': {\r\n switch (action.payload.activity.name) {\r\n case 'webchat/join':\r\n {\r\n if (this.provider !== undefined) {\r\n // Sets Chat Context\r\n dispatch({\r\n type: 'WEB_CHAT/SEND_EVENT',\r\n payload: {\r\n name: 'pvaSetContext',\r\n value: this.provider()\r\n }\r\n });\r\n }\r\n }\r\n break;\r\n case 'pvaSetContext':\r\n {\r\n if (this.props.config.triggerQuery) {\r\n // Initialize chat after Chat Context is set\r\n dispatch({\r\n type: 'WEB_CHAT/SEND_MESSAGE_BACK',\r\n payload: {\r\n text: this.props.config.triggerQuery\r\n }\r\n });\r\n }\r\n }\r\n break;\r\n default: {\r\n // default nothing\r\n }\r\n }\r\n break;\r\n }\r\n default: {\r\n // default nothing\r\n }\r\n }\r\n\r\n return next(action);\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 */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport React, { FunctionComponent, useMemo, useState } from 'react';\r\nimport { getChatStyleOptions } from '../helpers/StyleComposers';\r\nimport { IChatCoreProps, IAction, IDispatch } from '../interfaces';\r\nimport { CommerceChatStore } from '../helpers/CommerceChatStore';\r\nimport { IPvaChatConnectorConfig } from '../pva-chat-connector.props.autogenerated';\r\n\r\n/**\r\n * Just a core Chat component\r\n * @param props\r\n */\r\n\r\nconst TermsAndConditionsLink = ({ href }: { href?: string }) => {\r\n return (\r\n

\r\n By using this bot, you agree to these \r\n \r\n terms and conditions\r\n \r\n

\r\n );\r\n};\r\n\r\nconst CustomWebChat = ({ config }: { config: IPvaChatConnectorConfig }) => {\r\n const { Components } = window.WebChat;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst ChatCore: FunctionComponent = (props: IChatCoreProps) => {\r\n const { Components } = window.WebChat;\r\n\r\n const [userId, setUserId] = useState('');\r\n useMemo(() => {\r\n if (props.provider) {\r\n const ctx = props.provider();\r\n if (ctx.UserId) {\r\n setUserId(typeof ctx.UserId === 'string' ? ctx.UserId : ctx.UserId.value.toString());\r\n }\r\n }\r\n }, [props.provider]);\r\n\r\n const directLine = useMemo(() => {\r\n return window.WebChat.createDirectLine({ token: props.directLineToken });\r\n }, [props.directLineToken]);\r\n\r\n const commerceChatStore = useMemo(() => {\r\n if (directLine && props.provider) {\r\n return new CommerceChatStore(props.config, props.provider, props.setNewMessage);\r\n }\r\n return undefined;\r\n }, [props.provider, directLine]);\r\n\r\n const store = useMemo(() => {\r\n return window.WebChat.createStore(\r\n {},\r\n ({ dispatch }: { dispatch: IDispatch }) => (next: (action: IAction) => IDispatch) => (action: IAction) => {\r\n commerceChatStore?.actionHandler({ dispatch, next, action });\r\n }\r\n );\r\n }, [commerceChatStore]);\r\n const styleOptions = getChatStyleOptions(props.config.config);\r\n\r\n return props.directLineToken !== '' ? (\r\n \r\n \r\n \r\n ) : (\r\n

Please wait while we are connecting.

\r\n );\r\n};\r\n\r\nexport default ChatCore;\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\n/* eslint-disable no-duplicate-imports */\r\nimport React, { FunctionComponent, useEffect, useState } from 'react';\r\nimport { isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\r\nimport ContextProvider from '../helpers/ContextProvider';\r\nimport { getChatStyling } from '../helpers/StyleComposers';\r\nimport { TContextProvider } from '@msdyn365-commerce-modules/chat';\r\nimport { IPvaChatConnectorViewProps } from '../pva-chat-connector';\r\nimport { CommerceChatStore } from '../helpers';\r\nimport ChatCore from './ChatCore';\r\n\r\nconst INVALID_TOKEN = 'INVALID_TOKEN';\r\nconst CLOSE_IMG_DATA =\r\n 'M443.6,387.1L312.4,255.4l131.5-130c5.4-5.4,5.4-14.2,0-19.6l-37.4-37.6c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4 L256,197.8L124.9,68.3c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4L68,105.9c-5.4,5.4-5.4,14.2,0,19.6l131.5,130L68.4,387.1 c-2.6,2.6-4.1,6.1-4.1,9.8c0,3.7,1.4,7.2,4.1,9.8l37.4,37.6c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1L256,313.1l130.7,131.1 c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1l37.4-37.6c2.6-2.6,4.1-6.1,4.1-9.8C447.7,393.2,446.2,389.7,443.6,387.1z';\r\n\r\n/**\r\n * Outer chat component, displays chat button, and proactive chat, and handles custom actions\r\n * @param props IPvaChatConnectorViewProps\r\n */\r\nconst Chat: FunctionComponent = (props: IPvaChatConnectorViewProps) => {\r\n const [loaded, setLoaded] = useState(false); // loaded & minimized are needed as ChatWidget should not be removed from DOM (it resets chat)\r\n const [minimized, setMinimized] = useState(true);\r\n const [newMessage, setNewMessage] = useState(false); // TODO: use this to indicate new message in minimized chat\r\n const [token, setToken] = useState(''); // holds conversation token for WebChat\r\n const [isProactive, setIsProactive] = useState(false); // if proactive chat is triggered\r\n const [proactiveMessage, setProactiveMessage] = useState(props.config.proactiveDefaultMessage);\r\n const [closed, setClosed] = useState(false);\r\n const [provider, setProvider] = useState();\r\n const isMobileDevice =\r\n isMobile({ variant: VariantType.Browser, context: props.context.request }) === 'xs' ||\r\n isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\r\n const chatStyle = getChatStyling(props.config, minimized, isMobileDevice); // generates chat style objects based on configuration\r\n const handleMaximizeButtonClick = () => {\r\n setLoaded(true);\r\n setMinimized(false);\r\n setNewMessage(false);\r\n };\r\n const handleMinimizeButtonClick = () => {\r\n setMinimized(true);\r\n setNewMessage(false);\r\n };\r\n const handleCloseButtonClick = () => {\r\n setClosed(true);\r\n setLoaded(false);\r\n setMinimized(true);\r\n setNewMessage(false);\r\n setIsProactive(false);\r\n };\r\n useEffect(() => {\r\n if (loaded) {\r\n CommerceChatStore.getDirectLineToken(props)\r\n .then(directLineToken => {\r\n setToken(directLineToken);\r\n })\r\n .catch(e => {\r\n setToken(INVALID_TOKEN);\r\n props.telemetry.exception(e);\r\n });\r\n }\r\n }, [loaded]);\r\n useEffect(() => {\r\n (async () => {\r\n const contextProvider = new ContextProvider(props); // Generates context (provider) and checks for proactive chat triggers\r\n const prov = await contextProvider.init();\r\n if (contextProvider.data.enabled) {\r\n props.context.telemetry.debug(`[Chat] Proactive chat was enabled: '${contextProvider.data.enabled}'.`);\r\n // if proactive chat is triggered\r\n const timeout = contextProvider.data.timeout * 1000; // timeout is there only for WaitOnTime trigger\r\n setTimeout(() => {\r\n if (!loaded) {\r\n props.context.telemetry.debug(`[Chat] Proactive chat was loaded: ${loaded}.`);\r\n setProactiveMessage(contextProvider.data.message);\r\n setIsProactive(true);\r\n }\r\n }, timeout);\r\n }\r\n setProvider(() => prov);\r\n })().catch(e => props.telemetry.exception(e));\r\n }, []);\r\n useEffect(() => {\r\n if (closed) {\r\n setClosed(false);\r\n }\r\n }, [token, provider]);\r\n const isValidToken = (): boolean => {\r\n return `${token}` !== INVALID_TOKEN;\r\n };\r\n return (\r\n \r\n {minimized && (!isProactive || (isProactive && loaded)) && (\r\n \r\n )}\r\n {minimized && isProactive && !loaded && (\r\n
\r\n
\r\n {props.config.storeLogoURL && (\r\n logo\r\n )}\r\n
\r\n
\r\n
\r\n

{proactiveMessage}

\r\n \r\n
\r\n
\r\n )}\r\n {loaded && isValidToken() && (\r\n
\r\n
\r\n {props.config.storeLogoURL && (\r\n logo\r\n )}\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )}\r\n {!isValidToken() &&
{props.config.unableToLoadChatMessage}
}\r\n
\r\n );\r\n};\r\n\r\nexport default Chat;\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\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\nimport Chat from './components/Chat';\r\nimport { IPvaChatConnectorViewProps } from './pva-chat-connector';\r\n\r\nexport default (props: IPvaChatConnectorViewProps) => {\r\n // Only for CDN loading check, won't be needed with npm package of Botframework-WebChat\r\n const [loaded, setLoaded] = React.useState(false);\r\n\r\n // Just to verify that CDN Chat Widget js lib is loaded\r\n // Remove this block if moving to npm package of Botframework-WebChat\r\n const interval = setInterval(() => {\r\n const t = typeof window;\r\n if (t !== 'undefined' && window.WebChat) {\r\n setLoaded(true);\r\n clearInterval(interval);\r\n }\r\n }, 100);\r\n\r\n return
{loaded && }
;\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 {\r\n ISignUpEmailVerification,\r\n ISignUpItem,\r\n ISignUpLoading,\r\n ISignUpLocalAccount,\r\n ISignUpViewProps\r\n} from '@msdyn365-commerce-modules/account-management/src/modules/sign-up/sign-up';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nconst SignUpItem: React.FC = ({ wrapper, label, errorMessage, input }) => {\r\n return (\r\n \r\n {label}\r\n {errorMessage}\r\n {input}\r\n \r\n );\r\n};\r\n\r\nconst SignUpEmailVerification: React.FC = ({ email, buttonWrapper, buttons, successMessage, errorMessage }) => {\r\n return (\r\n <>\r\n \r\n {successMessage &&\r\n successMessage.map((message: React.ReactNode) => {\r\n return <>{message};\r\n })}\r\n {errorMessage &&\r\n errorMessage.map((message: React.ReactNode) => {\r\n return <>{message};\r\n })}\r\n \r\n {buttons &&\r\n buttons.map((button: React.ReactNode) => {\r\n return <>{button};\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nconst LocalAccount: React.FC = (\r\n { localAccount, items, emailVerification, buttons, errorMessage, disclaimer },\r\n props\r\n) => {\r\n const europe = ['/fr', '/de'];\r\n const locale = props?.context?.request?.locale;\r\n const uiLocales = props?.context?.request?.query.ui_locales;\r\n const regionCRM = europe.includes(uiLocales) ? uiLocales : props.config.RegionCRM;\r\n\r\n const [birthDate, setBirthDate] = React.useState('');\r\n const [formatDateState, setFormatDateState] = React.useState(true);\r\n const pattern = /^((1[6789]|[2-9][0-9])[0-9]{2}\\/(0[13578]|1[02])\\/(0[1-9]|[12][0-9]|3[01]))$|^((1[6789]|[2-9][0-9])[0-9]{2}\\/(0[469]|11)\\/(0[1-9]|[12][0-9]|30))$|^((16|[248][048]|[3579][26])00)|(1[6789]|[2-9][0-9])(0[48]|[13579][26]|[2468][048])\\/02\\/(0[1-9]|1[0-9]|2[0-9])$|^(1[6789]|[2-9][0-9])[0-9]{2}\\/02\\/(0[1-9]|1[0-9]|2[0-8])$/gm;\r\n const patternUS = /^((0[13578]|1[02])\\/(0[1-9]|[12][0-9]|3[01]))$|^((0[469]|11)\\/(0[1-9]|[12][0-9]|30))$|^02\\/(0[1-9]|1[0-9]|2[0-9])$/gm;\r\n\r\n const checkDate = (event: React.KeyboardEvent) => {\r\n const value = event.currentTarget.value;\r\n const today = new Date();\r\n if (value !== '' && (!value.match(locale !== 'en-US' ? pattern : patternUS) || today < new Date(value))) {\r\n setFormatDateState(false);\r\n } else {\r\n setFormatDateState(true);\r\n }\r\n if (locale === 'en-US') {\r\n setBirthDate(`1900/${value}`);\r\n }\r\n };\r\n if (typeof window !== 'undefined') {\r\n const signUpButton: HTMLElement = document.getElementById('continue') as HTMLElement;\r\n console.log(document.getElementById('continue'));\r\n if (signUpButton !== undefined) {\r\n signUpButton.onclick = e => {\r\n if (!formatDateState) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n };\r\n }\r\n }\r\n\r\n return (\r\n \r\n {items &&\r\n items.map((item: ISignUpItem) => {\r\n if (item.key === 'email' && emailVerification.isRequired) {\r\n return (\r\n \r\n \r\n
\r\n \r\n {formatDateState === false ? (\r\n

{props.resources.birthdayErrorText}

\r\n ) : (\r\n ''\r\n )}\r\n {locale !== 'en-US' ? (\r\n checkDate(e)}\r\n onPaste={e => e.preventDefault()}\r\n />\r\n ) : (\r\n <>\r\n checkDate(e)}\r\n onPaste={e => e.preventDefault()}\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 {props.config.renderThirdPartyPrivacy && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n
\r\n );\r\n }\r\n return ;\r\n })}\r\n {errorMessage &&\r\n errorMessage.map((error: React.ReactNode, index: number) => {\r\n return {error};\r\n })}\r\n {buttons &&\r\n buttons.map((button: React.ReactNode, index: number) => {\r\n return {button};\r\n })}\r\n {disclaimer}\r\n
\r\n );\r\n};\r\n\r\nconst SignUpLoading: React.FC = ({ modal, modalBody, icon, message }) => {\r\n return (\r\n \r\n \r\n {icon}\r\n {message}\r\n \r\n \r\n );\r\n};\r\n\r\nconst SignUpView: React.FC = props => {\r\n const { signUp, viewState, loading, defaultAADConainer, aadConainer, heading, signUpLocalAccount } = props;\r\n\r\n return (\r\n \r\n {viewState.isShowLoading && }\r\n {viewState.isShowLoading && }\r\n \r\n {heading}\r\n {LocalAccount(signUpLocalAccount, props)}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default SignUpView;\r\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 { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IAccountGenericTileConfig, IAccountGenericTileProps } from './account-generic-tile.props.autogenerated';\nimport LinksComponent from './components/account-generic-tile-links';\n\nexport interface IAccountGenericTileViewProps extends IAccountGenericTileProps {\n AccountGenericTile: IModuleProps;\n className: string;\n heading?: React.ReactNode;\n links?: React.ReactNode;\n}\n\n/**\n *\n * AccountGeneric component.\n * @extends {React.PureComponent>}\n */\nclass AccountGenericTile extends React.PureComponent> {\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: IAccountGenericTileProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public render(): JSX.Element {\n const { config } = this.props;\n const { className, heading, links } = config;\n\n const viewProps = {\n ...this.props,\n className,\n AccountGenericTile: {\n moduleProps: this.props,\n className: classnames('ms-account-generic-tile', config.className)\n },\n heading: heading && heading.text && (\n \n ),\n links: links && links.length > 0 && (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.links && this.props.config.links[linkIndex]) {\n this.props.config.links[linkIndex].linkText = event.target.value;\n }\n };\n}\n\nexport default AccountGenericTile;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAccountGenericTileViewProps } from './account-generic-tile';\n\nconst AccountGenericTileView: React.FC = props => {\n const { AccountGenericTile, heading, links } = props;\n\n return (\n \n {heading}\n {links}\n \n );\n};\n\nexport default AccountGenericTileView;\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 { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../account-generic-tile.props.autogenerated';\n\nexport interface IAccountGenericTileLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\nconst AccountGenericTileLinks: React.FC = ({ links, telemetryContent, requestContext, onTextChange }) => {\n if (links.length === 0) {\n return null;\n }\n const editableLinks = _mapEditableLinks(links, telemetryContent);\n return (\n
\n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n
\n );\n};\n\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent?: ITelemetryContent): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n const payLoad = getPayloadObject('click', telemetryContent!, '');\n linkdata.forEach((link, index) => {\n payLoad.contentAction.etext = link.linkText;\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-account-generic-tile__link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n};\n\nexport default AccountGenericTileLinks;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISignInButton {\n id?: string;\n className: string;\n text: string;\n ariaLabel: string;\n disabled?: boolean;\n telemetryContent?: ITelemetryContent;\n onClick?(event: React.MouseEvent): void;\n}\n\nconst SignInButton: React.FC = ({ id, className, text, ariaLabel, telemetryContent, disabled, onClick }) => {\n const payLoad = getPayloadObject('click', telemetryContent!, text);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n );\n};\n\nexport default SignInButton;\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\nexport interface ISignInDescription {\n className: string;\n description: string;\n}\n\nconst SignInDescription: React.FC = ({ className, description }) =>

{description}

;\n\nexport default SignInDescription;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nexport interface ISignInErrorProps {\n id?: string;\n className: string;\n type?: string;\n message?: string;\n}\n\nconst SignInError: React.FC = ({ id, className, type = 'page', message }) => {\n const errorClassName = `${className}__${type}-error`;\n\n return (\n \n );\n};\n\nexport default SignInError;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISignInInputProps {\n id?: string;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n type: any;\n value?: string;\n pattern?: string;\n className: string;\n maxLength?: string;\n ariaLabel?: string;\n onChange?(event: React.ChangeEvent): void;\n}\n\nexport interface ISignInInput {\n key: string;\n AddressItem: INodeProps;\n label: React.ReactNode;\n alert: React.ReactNode;\n input: React.ReactNode;\n}\n\nconst GetMaxLength = (maxLength?: string): number | undefined => {\n if (maxLength) {\n const parsedMaxLength = Number.parseInt(maxLength, 10);\n if (!isNaN(parsedMaxLength)) {\n return parsedMaxLength;\n }\n }\n\n return undefined;\n};\n\nconst SignInInput: React.FC = ({ id, type, value, pattern, className, maxLength, ariaLabel, onChange }) => (\n \n);\n\nexport default SignInInput;\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\nexport interface ISignInLabel {\n id: string;\n forId: string;\n className: string;\n text: string;\n}\n\nconst SignInLabel: React.FC = ({ id, forId, className, text }) => (\n \n);\n\nexport default SignInLabel;\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 } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISignInLink {\n id?: string;\n className: string;\n href: string;\n ariaLabel: string;\n text: string;\n telemetryContent?: ITelemetryContent;\n}\n\nconst SignInLink: React.FC = ({ id, className, href, telemetryContent, ariaLabel, text }) => {\n const payLoad = getPayloadObject('click', telemetryContent!, text);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n {text}\n \n );\n};\n\nexport default SignInLink;\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\nexport interface ISignInLoadingIcon {\n className: string;\n}\n\nconst SignInLoadingIcon: React.FC = ({ className }) =>
;\n\nexport default SignInLoadingIcon;\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\nexport interface ISignInLoadingMessage {\n className: string;\n message: string;\n}\n\nconst SignInLoadingMessage: React.FC = ({ className, message }) => (\n
{message}
\n);\n\nexport default SignInLoadingMessage;\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\nexport interface ISignInText {\n className: string;\n text: string;\n}\n\nconst SignInText: React.FC = ({ className, text }) => {text};\n\nexport default SignInText;\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 { EmailRegex } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Modal, ModalBody } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport SignInButtonComponent from './components/sign-in-button';\nimport SignInDescriptionComponent from './components/sign-in-description';\nimport SignInErrorComponent from './components/sign-in-error';\nimport SignInInputComponent from './components/sign-in-input';\nimport SignInLabelComponent from './components/sign-in-label';\nimport SignInLinkComponent from './components/sign-in-link';\nimport SignInLoadingIconComponent from './components/sign-in-loading-icon';\nimport SignInLoadingMessageComponent from './components/sign-in-loading-message';\nimport SignInTextComponent from './components/sign-in-text';\nimport { ISignInConfig, ISignInProps, ISignInResources } from './sign-in.props.autogenerated';\n\nexport interface ISignInViewState {\n isShowLoading: boolean;\n}\n\nexport interface ISignInItem {\n wrapper: INodeProps;\n key: string;\n label: React.ReactNode;\n error: React.ReactNode;\n input: React.ReactNode;\n}\n\nexport interface ISignInSocialItem {\n key: string;\n button: INodeProps;\n image: React.ReactNode;\n text: React.ReactNode;\n}\n\nexport interface ISignInB2BItem {\n key: string;\n button: INodeProps;\n text: React.ReactNode;\n}\n\nexport interface ISignInSocialAccount {\n socialAccounts: INodeProps;\n items: ISignInSocialItem[];\n}\n\nexport interface ISignInB2BAccount {\n socialAccounts: INodeProps;\n items: ISignInB2BItem[];\n}\nexport interface ISignInLocalAccount {\n localAccount: INodeProps;\n items: ISignInItem[];\n forgetPassword: React.ReactNode;\n disclaimer: React.ReactNode;\n error: React.ReactNode;\n signInButton: React.ReactNode;\n}\n\nexport interface ISignInLoading {\n modal: INodeProps;\n modalBody: INodeProps;\n icon: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface ISignInViewProps {\n className: string;\n viewState: ISignInViewState;\n signIn: IModuleProps;\n loading: ISignInLoading;\n defaultAADConainer: INodeProps;\n aadConainer: INodeProps;\n signInSection: INodeProps;\n signInSectionHeading: React.ReactNode;\n signInLocalAccount: ISignInLocalAccount;\n signInSocialAccount: ISignInSocialAccount;\n signInB2BAccount: ISignInB2BAccount;\n signUpSection: INodeProps;\n signUpSectionHeading: React.ReactNode;\n signUpDescription: React.ReactNode;\n signUpLink: React.ReactNode;\n}\n\n/**\n * SignIn component\n * All AAD related module is rendered on AAD page and we need to respect HTML contract provide by AAD.\n * Please ensure any change in module don't break contract with AAD.\n * @extends {React.Component>}\n */\n@observer\nclass SignIn extends React.Component> {\n private readonly moduleClassName: string = 'ms-sign-in';\n\n private readonly telemetryContent?: ITelemetryContent;\n\n @observable private emailId: string;\n\n @observable private emailRegex: string;\n\n @observable private isInitialized: boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private initializationTimer: any;\n\n constructor(props: ISignInProps) {\n super(props);\n this.emailRegex = EmailRegex.defaultRegex.source;\n this.isInitialized = false;\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.emailId = 'logonIdentifier';\n }\n\n public componentDidMount(): void {\n this._prePopulateData();\n this._onInit();\n }\n\n // After successful AAD initialization, call initialize method provided by AAD to attach events.\n public componentDidUpdate(): void {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (this.isInitialized && window && window['$element'] && window['$element']['initialize']) {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n window['$element']['initialize']();\n }\n }\n\n public shouldComponentUpdate(nextProps: ISignInProps, nextState: ISignInViewState): 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 {\n const config: ISignInConfig = this.props.config || {};\n const resources: ISignInResources = this.props.resources || {};\n\n const viewProps = {\n ...this.props,\n viewState: {\n isShowLoading: !this.isInitialized\n },\n signIn: {\n moduleProps: this.props,\n className: classnames(this.moduleClassName, config.className)\n },\n loading: {\n modal: {\n tag: Modal,\n isOpen: true\n },\n modalBody: {\n tag: ModalBody\n },\n icon: ,\n message: \n },\n defaultAADConainer: {\n id: 'api',\n style: { display: 'none' }\n },\n aadConainer: {\n id: this.isInitialized ? 'api' : null,\n className: `${this.moduleClassName}__container`\n },\n signInSection: {\n className: `${this.moduleClassName}__sign-in-section`\n },\n signInSectionHeading: (\n \n ),\n signInLocalAccount: {\n localAccount: {\n className: `${this.moduleClassName}__account-items localAccount`\n },\n items: [\n this._renderInput(\n this.emailId,\n 'email',\n resources.emailAddressLabelText,\n resources.emailAddressAriaLabel,\n this.emailRegex\n ),\n this._renderInput('password', 'password', resources.passwordLabelText)\n ],\n forgetPassword: (\n \n ),\n disclaimer: config.signInDisclaimer && (\n \n ),\n error: ,\n signInButton: (\n \n )\n },\n signInSocialAccount: {\n socialAccounts: {\n className: `${this.moduleClassName}__social-accounts`\n },\n items: [\n this._renderSocialAccount(\n 'FacebookExchange',\n resources.facebookButtonText,\n resources.facebookButtonAriaLabel,\n config.facebookIcon\n ),\n this._renderSocialAccount(\n 'MicrosoftAccountExchange',\n resources.microsoftButtonText,\n resources.microsoftButtonAriaLabel,\n config.microsoftIcon\n )\n ]\n },\n signInB2BAccount: {\n socialAccounts: {\n className: `${this.moduleClassName}__b2b-social-accounts`\n },\n items: [\n this._renderB2BSocialAccount(\n 'StoreManagerB2BSignin',\n resources.b2bButtonText,\n resources.b2bButtonAriaLabel,\n config.displayB2bAccountManagerSignin\n )\n ]\n },\n signUpSection: {\n className: `${this.moduleClassName}__sign-up-section`\n },\n signUpSectionHeading: (\n \n ),\n signUpDescription: (\n \n ),\n signUpLink: (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.signInDisclaimer = event.target.value);\n\n public handleSignInHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.signInHeading.text = event.target.value);\n\n public handleSignUpHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.signUpHeading.text = event.target.value);\n\n private readonly _onInit = () => {\n this._prePopulateData();\n this._updateErrorMessage();\n\n // Check if AAD initialization is complete. AAD do not provide any event to subscribe so we need to check variable set by AAD to check initialization status.\n this.initializationTimer = setInterval(() => {\n this._isInitializationSuccessful();\n }, 100);\n setTimeout(() => {\n clearInterval(this.initializationTimer);\n }, 10_000);\n };\n\n // After successful AAD initialization, remove waiting and preload any data, if needed.\n private readonly _isInitializationSuccessful = () => {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (window && window['$diags'] && window['$diags']['initializationSuccessful']) {\n clearInterval(this.initializationTimer);\n this.isInitialized = true;\n }\n };\n\n private readonly _prePopulateData = () => {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (window && window['CONTENT'] && window['CONTENT']['email_pattern']) {\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n this.emailRegex = window['CONTENT']['email_pattern'];\n }\n\n // eslint-disable-next-line @typescript-eslint/dot-notation, @typescript-eslint/no-unsafe-member-access -- Auto-suppressed.\n if (window['SA_FIELDS'] && window['SA_FIELDS']['AttributeFields']) {\n // @ts-expect-error\n this.emailId = (window.SA_FIELDS.AttributeFields || [])[0].ID || this.emailId;\n }\n };\n\n private readonly _updateErrorMessage = () => {\n const resources: ISignInResources = this.props.resources || {};\n\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\n if (window && window['CONTENT']) {\n const errorMessages = {\n requiredField_email: resources.requriedEmailError,\n requiredField_password: resources.requriedPasswordError,\n invalid_email: resources.invalidEmailError,\n invalid_password: resources.invalidPasswordError,\n unknown_error: resources.unknownError\n };\n\n // eslint-disable-next-line @typescript-eslint/dot-notation -- Auto-suppressed.\n Object.assign(window['CONTENT'], errorMessages);\n }\n };\n\n private _renderInput(id: string, type: string, labelText: string, ariaLabel?: string, pattern?: string): ISignInItem {\n const className = `${this.moduleClassName}__account-item`;\n return {\n wrapper: {\n className: classnames(className, `${className}-${id}`, 'entry-item', 'attrEntry')\n },\n key: id,\n label: (\n \n ),\n error: (\n \n ),\n input: (\n \n )\n };\n }\n\n private _renderSocialAccount(id: string, text: string, ariaLabel: string, iconImage?: Msdyn365.IImageData): ISignInSocialItem {\n return {\n key: id,\n button: {\n id,\n tag: 'button',\n className: classnames(\n `${this.moduleClassName}__social-account`,\n `${this.moduleClassName}__social-account-${id}`,\n 'accountButton',\n 'msc-btn'\n ),\n 'aria-label': ariaLabel\n },\n image: this._createImageMarkup(iconImage),\n text: \n };\n }\n\n private _renderB2BSocialAccount(\n id: string,\n text: string,\n ariaLabel: string,\n _displayB2bAccountManagerSignin: boolean | undefined\n ): ISignInB2BItem | null {\n if (_displayB2bAccountManagerSignin) {\n return {\n key: id,\n button: {\n id,\n tag: 'button',\n className: classnames(\n `${this.moduleClassName}__social-account`,\n `${this.moduleClassName}__social-account-${id}`,\n 'accountButton',\n 'msc-btn'\n ),\n 'aria-label': ariaLabel\n },\n text: \n };\n }\n return null;\n }\n\n private _createImageMarkup(iconImage?: Msdyn365.IImageData): React.ReactNode | null {\n if (iconImage) {\n const imageProps = {\n gridSettings: this.props.context.request.gridSettings || {},\n imageSettings: iconImage && iconImage.imageSettings\n };\n const pictureClassName = `${this.moduleClassName}__social-account-picture`;\n return (\n
\n \n
\n );\n }\n return null;\n }\n}\n\nexport default SignIn;\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 {\n ISignInItem,\n ISignInLoading,\n ISignInLocalAccount,\n ISignInSocialAccount,\n ISignInSocialItem,\n ISignInB2BAccount,\n ISignInB2BItem,\n ISignInViewProps\n} from './sign-in';\n\nconst LocalAccount: React.FC = ({ localAccount, items, forgetPassword, disclaimer, error, signInButton }) => {\n return (\n \n {items &&\n items.map((item: ISignInItem) => {\n return (\n \n {item.label}\n {item.error}\n {item.input}\n \n );\n })}\n {forgetPassword}\n {disclaimer}\n {error}\n {signInButton}\n \n );\n};\n\nconst SocialAccount: React.FC = ({ socialAccounts, items }) => {\n return (\n \n {items &&\n items.map((item: ISignInSocialItem) => {\n return (\n \n {item.image}\n {item.text}\n \n );\n })}\n \n );\n};\n\nconst B2BAccount: React.FC = ({ socialAccounts, items }) => {\n return (\n \n {items &&\n items.map((item: ISignInB2BItem) => {\n return (\n item && (\n \n {item.text}\n \n )\n );\n })}\n \n );\n};\n\nconst SignInLoading: React.FC = ({ modal, modalBody, icon, message }) => {\n return (\n \n \n {icon}\n {message}\n \n \n );\n};\n\nconst SignInView: React.FC = props => {\n const {\n signIn,\n viewState,\n loading,\n defaultAADConainer,\n aadConainer,\n signInSection,\n signUpSection,\n signInSectionHeading,\n signInLocalAccount,\n signInSocialAccount,\n signUpSectionHeading,\n signInB2BAccount,\n signUpDescription,\n signUpLink\n } = props;\n\n return (\n \n {viewState.isShowLoading && }\n {viewState.isShowLoading && }\n \n \n {signInSectionHeading}\n {LocalAccount(signInLocalAccount)}\n {SocialAccount(signInSocialAccount)}\n {B2BAccount(signInB2BAccount)}\n \n \n {signUpSectionHeading}\n {signUpDescription}\n {signUpLink}\n \n \n \n );\n};\n\nexport default SignInView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISearchResultModalViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from '@msdyn365-commerce-modules/search-result-container';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst SearchResultContainerView: React.FC = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n \n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n {similarLookProduct}\n \n {errorMessage}\n {products}\n \n {pagination}\n \n );\n }\n return (\n \n {categoryHierarchy && {renderCategoryHierarchy(categoryHierarchy)}}\n \n {refineMenu && renderRefiner(refineMenu)}\n \n {similarLookProduct}\n
\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n
\n
\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n
\n \n {errorMessage}\n {products}\n \n {pagination}\n
\n
\n
\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n \n \n {refiners.map((submenu, index) => (\n {submenu}\n ))}\n \n \n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return {sortByDropDown};\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n \n {categoryHierarchyList.map((category, index) => (\n \n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n \n ))}\n \n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n \n

\n {title.titlePrefix}\n {title.titleText}({title.titleCount})\n

\n
\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext, IDateFormatOptions, isOboRequest, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { IInvoiceErrorState, IPayInvoiceResources, PayInvoiceComponent } from '@msdyn365-commerce-modules/invoice';\nimport React from 'react';\n\nimport { InvoiceDetailsModel } from '../helpers/invoice-data';\n\nexport interface IInvoiceDetailsHeaderData {\n invoiceDetails: InvoiceDetailsModel;\n}\n\nexport interface IInvoiceDetailsHeaderResources extends IPayInvoiceResources {\n invoiceOrderItem: string;\n invoiceOrderItems: string;\n invoiceIdLabel: string;\n invoicePlacedByLabel: string;\n invoiceAmountDueText: string;\n invoicePaymentDueDateText: string;\n}\n\nexport interface IInvoiceDetailsHeaderProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n resources: IInvoiceDetailsHeaderResources;\n onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\n}\n\nexport interface IInvoiceDetailsHeaderComponent extends IComponent {}\n\nconst formatShortDate = (context: ICoreContext, date: Date | undefined) => {\n if (date === undefined) {\n return '';\n }\n const dateOptions: IDateFormatOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\n return context.cultureFormatter.formatDate(date, dateOptions);\n};\n\nconst formatLongDate = (context: ICoreContext, date: Date | undefined) => {\n if (date === undefined) {\n return '';\n }\n const dateOptions: IDateFormatOptions = { year: 'numeric', month: 'long', day: 'numeric' };\n return context.cultureFormatter.formatDate(date, dateOptions);\n};\n\nconst formatAmount = (context: ICoreContext, amount: number | undefined, currencyCode: string | undefined) => {\n if (amount === undefined) {\n return '';\n }\n return context.cultureFormatter.formatCurrency(amount, currencyCode);\n};\n\nconst InvoiceDetailsHeader: React.FC = (props: IInvoiceDetailsHeaderProps): JSX.Element => {\n const {\n className,\n data: { invoiceDetails },\n resources,\n onError\n } = props;\n\n const invoiceNumberText = resources.invoiceIdLabel.replace('{0}', invoiceDetails.id);\n\n const invoiceOrderItemsText =\n invoiceDetails.lines.length === 1\n ? resources.invoiceOrderItem\n : resources.invoiceOrderItems.replace('{0}', invoiceDetails.lines.length.toString());\n\n const invoiceInfoContainerClassName = `${className}__invoice-info-container`;\n const orderInfoContainerClassName = `${invoiceInfoContainerClassName}__order-info-container`;\n const orderInfoClassName = `${orderInfoContainerClassName}__order-info`;\n const orderMainInfoClassName = `${orderInfoClassName}__main-info`;\n const orderDetailsClassName = `${orderInfoClassName}__details`;\n `${className}__actions`;\n const actionsClassName = `${className}__actions`;\n const amountSummaryClassName = `${invoiceInfoContainerClassName}__amount-summary`;\n const orderDate = formatShortDate(props.context, invoiceDetails.invoiceDate);\n\n const dueDate = formatLongDate(props.context, invoiceDetails.dueDate);\n const dueDateText = resources.invoicePaymentDueDateText.replace('{0}', dueDate);\n const isOnBehalfOfRequest = isOboRequest(props.context.request);\n\n return (\n
\n
{invoiceNumberText}
\n
\n
\n
\n
\n
\n {resources.invoicePlacedByLabel}\n {invoiceDetails.customerName}\n
\n
\n
\n
{orderDate}
\n
{invoiceOrderItemsText}
\n
\n
\n
\n
\n
{resources.invoiceAmountDueText}
\n
\n {formatAmount(props.context, invoiceDetails.amountDue, invoiceDetails.currencyCode)}\n
\n
{dueDateText}
\n
\n
\n
\n \n
\n
\n );\n};\n\nexport const InvoiceDetailsHeaderComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\n // @ts-expect-error\n IInvoiceDetailsHeaderComponent\n>('InvoiceDetailsHeaderComponent', { component: InvoiceDetailsHeader });\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { IInvoicePaymentDetails } from '../helpers/invoice-data';\n\nexport interface IInvoiceDetailsPaymentDetailsData {\n invoicePaymentDetails: IInvoicePaymentDetails;\n}\n\nexport interface IInvoiceDetailsPaymentDetailsResources {\n invoicePaymentDiscounts: string;\n invoicePaymentSubtotal: string;\n invoicePaymentCharges: string;\n invoicePaymentTax: string;\n invoicePaymentInvoiceTotal: string;\n}\n\nexport interface IInvoiceDetailsPaymentDetailsProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n resources: IInvoiceDetailsPaymentDetailsResources;\n}\n\nexport interface IInvoiceDetailsPaymentDetailsComponent extends IComponent {}\n\ninterface IInvoicePaymentLineProps {\n label: string;\n value: number;\n className: string;\n}\n\nconst InvoiceDetailsPaymentDetails: React.FC = (\n props: IInvoiceDetailsPaymentDetailsProps\n): JSX.Element | null => {\n const {\n className,\n data: { invoicePaymentDetails },\n resources\n } = props;\n\n const lineClassName = `${className}__line`;\n\n const lines: IInvoicePaymentLineProps[] = [];\n if (!ObjectExtensions.isNullOrUndefined(invoicePaymentDetails.totalDiscount)) {\n lines.push({\n label: resources.invoicePaymentDiscounts,\n value: invoicePaymentDetails.totalDiscount,\n className: `${lineClassName}-total-discount`\n });\n }\n if (!ObjectExtensions.isNullOrUndefined(invoicePaymentDetails.subtotal)) {\n lines.push({\n label: resources.invoicePaymentSubtotal,\n value: invoicePaymentDetails.subtotal,\n className: `${lineClassName}-subtotal`\n });\n }\n if (!ObjectExtensions.isNullOrUndefined(invoicePaymentDetails.totalCharges)) {\n lines.push({\n label: resources.invoicePaymentCharges,\n value: invoicePaymentDetails.totalCharges,\n className: `${lineClassName}-total-charges`\n });\n }\n if (!ObjectExtensions.isNullOrUndefined(invoicePaymentDetails.totalTax)) {\n lines.push({\n label: resources.invoicePaymentTax,\n value: invoicePaymentDetails.totalTax,\n className: `${lineClassName}-total-tax`\n });\n }\n if (!ObjectExtensions.isNullOrUndefined(invoicePaymentDetails.totalAmount)) {\n lines.push({\n label: resources.invoicePaymentInvoiceTotal,\n value: invoicePaymentDetails.totalAmount,\n className: `${lineClassName}-total-amount`\n });\n }\n\n if (!ArrayExtensions.hasElements(lines)) {\n return null;\n }\n\n return (\n
\n {lines.map(line => {\n return (\n
\n
{line.label}
\n
\n {props.context.cultureFormatter.formatCurrency(line.value, invoicePaymentDetails.currencyCode)}\n
\n
\n );\n })}\n
\n );\n};\n\nexport const InvoiceDetailsPaymentDetailsComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\n // @ts-expect-error\n IInvoiceDetailsPaymentDetailsComponent\n>('InvoiceDetailsPaymentDetailsComponent', { component: InvoiceDetailsPaymentDetails });\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { SalesInvoiceLine } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync, ObjectExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport React from 'react';\n\nimport { IInvoiceProductLine, InvoiceDetailsModel } from '../helpers/invoice-data';\n\nexport interface IInvoiceDetailsProductsData {\n invoiceDetails: InvoiceDetailsModel;\n}\n\nexport interface IInvoiceDetailsProductsResources {\n invoiceProductColor: string;\n invoiceProductSize: string;\n invoiceProductStyle: string;\n invoiceQuantity: string;\n}\n\nexport interface IInvoiceDetailsProductsProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n imageSettings?: IImageSettings;\n resources: IInvoiceDetailsProductsResources;\n}\n\nexport interface IInvoiceDetailsProductsComponent extends IComponent {}\n\nconst _renderProductDimensions = (\n className: string,\n resources: IInvoiceDetailsProductsResources,\n product: SalesInvoiceLine\n): JSX.Element => {\n return (\n
\n {StringExtensions.isNullOrWhitespace(product.ColorName) ? null : (\n
{resources.invoiceProductColor.replace('{0}', product.ColorName!)}
\n )}\n {StringExtensions.isNullOrWhitespace(product.SizeName) ? null : (\n
{resources.invoiceProductSize.replace('{0}', product.SizeName!)}
\n )}\n {StringExtensions.isNullOrWhitespace(product.StyleName) ? null : (\n
{resources.invoiceProductStyle.replace('{0}', product.StyleName!)}
\n )}\n
\n );\n};\n\nconst _renderProductImage = (\n className: string,\n context: ICoreContext,\n product: IInvoiceProductLine,\n imageSettings?: IImageSettings\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=315&h=315&m=6', w: 0, h: 0 },\n lg: { q: 'w=315&h=315&m=6', w: 0, h: 0 },\n xl: { q: 'w=315&h=315&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n\n const fallbackImage = getFallbackImageUrl(product.ItemId, context.actionContext.requestContext.apiSettings);\n return (\n \n );\n};\n\nconst formatAmount = (context: ICoreContext, amount: number | undefined, currencyCode: string | undefined) => {\n if (amount === undefined) {\n return '';\n }\n return context.cultureFormatter.formatCurrency(amount, currencyCode);\n};\n\nconst InvoiceDetailsProducts: React.FC = (props: IInvoiceDetailsProductsProps): JSX.Element => {\n const {\n className,\n data: { invoiceDetails },\n resources\n } = props;\n\n const productLineClass = `${className}__product-line`;\n const productLineInfoContainerClass = `${productLineClass}__product-info-container`;\n const productLineDetailsClass = `${productLineInfoContainerClass}__product-details`;\n const productLineSmallDetailsClass = `${productLineDetailsClass}__small-details`;\n\n return (\n
\n {invoiceDetails.lines.map(product => {\n const quantity = product.Quantity || 1;\n\n let productUrl = '';\n if (!ObjectExtensions.isNullOrUndefined(product.ProductName) && !ObjectExtensions.isNullOrUndefined(product.ProductId)) {\n productUrl = getProductPageUrlSync(product.ProductName, product.ProductId, props.context.actionContext);\n }\n\n return (\n
\n
\n {_renderProductImage(`${productLineInfoContainerClass}__product-image`, props.context, product)}\n
\n \n {product.ProductName}\n \n
\n {_renderProductDimensions(`${productLineSmallDetailsClass}__dimensions`, resources, product)}\n
\n {formatAmount(props.context, product.Price, invoiceDetails.currencyCode)}\n
\n
\n {resources.invoiceQuantity.replace('{0}', quantity.toString())}\n
\n
\n
\n
\n
\n {formatAmount(props.context, product.NetAmount, invoiceDetails.currencyCode)}\n
\n
\n );\n })}\n
\n );\n};\n\nexport const InvoiceDetailsProductsComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\n // @ts-expect-error\n IInvoiceDetailsProductsComponent\n>('InvoiceDetailsProductsComponent', { component: InvoiceDetailsProducts });\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { InvoicePaidStatus, OrderInvoice, SalesInvoice, SalesInvoiceLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { IPayableInvoice } from '@msdyn365-commerce-modules/invoice';\n\nexport interface IInvoicePaymentDetails {\n totalDiscount?: number;\n subtotal?: number;\n totalCharges?: number;\n totalTax?: number;\n totalAmount?: number;\n currencyCode?: string;\n}\n\nexport interface IInvoiceProductLine extends SalesInvoiceLine {\n primaryImageUrl?: string;\n}\n\n/**\n * Represents invoice details data model.\n */\nexport class InvoiceDetailsModel implements IPayableInvoice, IInvoicePaymentDetails {\n public id: string;\n\n public invoiceDate?: Date;\n\n public customerAccountNumber?: string;\n\n public customerName?: string;\n\n public dueDate?: Date;\n\n public amountDue?: number;\n\n public status?: InvoicePaidStatus;\n\n public lines: IInvoiceProductLine[];\n\n public totalDiscount?: number;\n\n public subtotal?: number;\n\n public totalCharges?: number;\n\n public totalTax?: number;\n\n public totalAmount?: number;\n\n public currencyCode?: string;\n\n public constructor(invoice: OrderInvoice, invoiceDetails: SalesInvoice, products: SimpleProduct[]) {\n this.id = invoice.Id || '';\n this.invoiceDate = invoice.InvoiceDate ? new Date(invoice.InvoiceDate) : undefined;\n this.customerName = invoice.CustomerName;\n this.dueDate = invoice.InvoiceDueDate ? new Date(invoice.InvoiceDueDate) : undefined;\n this.amountDue = invoice.AmountBalance;\n this.status = invoice.InvoicePaidStatusValue;\n this.lines = (invoiceDetails.SalesInvoiceLine || []).map(line => {\n const productLine: IInvoiceProductLine = {\n ...line,\n primaryImageUrl: products.find(product => product.RecordId === line.RecordId)?.PrimaryImageUrl\n };\n return productLine;\n });\n\n this.totalDiscount = invoiceDetails.TotalDiscount;\n this.subtotal = invoiceDetails.InvoiceSubtotal;\n this.totalCharges = invoiceDetails.TotalCharges;\n this.totalTax = invoiceDetails.TotalTaxAmount;\n this.totalAmount = invoice.TotalAmount;\n this.currencyCode = invoice.CurrencyCode;\n }\n\n public get canBePaid(): boolean {\n return this.status !== InvoicePaidStatus.Paid;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getUrlSync } from '@msdyn365-commerce/core';\nimport { SalesInvoiceLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { IInvoiceErrorState, InvoiceErrorComponent } from '@msdyn365-commerce-modules/invoice';\nimport { getSimpleProductsAction, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { InvoiceDetailsHeaderComponent } from './components/invoice-details-header';\nimport { InvoiceDetailsPaymentDetailsComponent } from './components/invoice-details-payment-summary';\nimport { InvoiceDetailsProductsComponent } from './components/invoice-details-products';\nimport { InvoiceDetailsModel } from './helpers/invoice-data';\nimport { IInvoiceDetailsData } from './invoice-details.data';\nimport { IInvoiceDetailsProps } from './invoice-details.props.autogenerated';\n\nexport interface IInvoiceDetailsViewState {\n invoiceDetails?: InvoiceDetailsModel;\n payInvoiceErrorModalOpen?: boolean;\n errorState?: IInvoiceErrorState;\n}\n\nexport interface IInvoiceDetailsViewProps extends IInvoiceDetailsProps {\n moduleProps: IModuleProps;\n header: JSX.Element;\n products: JSX.Element;\n paymentDetails: JSX.Element;\n payInvoiceError?: JSX.Element;\n}\n\n/**\n * InvoiceDetails component.\n * @extends {React.PureComponent>}\n */\nclass InvoiceDetails extends React.PureComponent, IInvoiceDetailsViewState> {\n private static readonly _className: string = 'msc-invoice-details';\n\n public constructor(props: IInvoiceDetailsProps) {\n super(props);\n\n this.state = { errorState: { errorMessage: '', otherError: '' } };\n this._onAddToCartFailed = this._onAddToCartFailed.bind(this);\n this._setPayInvoiceErrorModalClose = this._setPayInvoiceErrorModalClose.bind(this);\n }\n\n public async componentDidMount(): Promise {\n const invoice = await this.props.data.invoice;\n const invoiceDetails = await this.props.data.invoiceDetails;\n\n const products = await this._getProducts(invoiceDetails.SalesInvoiceLine, invoiceDetails.ChannelId);\n\n const invoiceDetailsModel = new InvoiceDetailsModel(invoice, invoiceDetails, products);\n\n this.setState({\n invoiceDetails: invoiceDetailsModel,\n payInvoiceErrorModalOpen: false,\n errorState: { errorMessage: '', otherError: '' }\n });\n }\n\n public render(): JSX.Element | null {\n if (!this.state.invoiceDetails) {\n return null;\n }\n\n const header = this._renderHeader();\n const products = this._renderProducts();\n const paymentDetails = this._renderPaymentDetails();\n const payInvoiceError = this._renderInvoiceErrors();\n\n const props: IInvoiceDetailsViewProps = {\n ...(this.props as IInvoiceDetailsProps),\n moduleProps: {\n moduleProps: this.props,\n className: InvoiceDetails._className\n },\n header,\n products,\n paymentDetails,\n payInvoiceError\n };\n\n return this.props.renderView(props);\n }\n\n private async _getProducts(invoiceLines: SalesInvoiceLine[] = [], channelId?: number): Promise {\n const productInputs = invoiceLines\n .filter(product => product.RecordId)\n .map(\n product =>\n new ProductInput(\n product.RecordId!,\n this.props.context.request.apiSettings,\n channelId,\n undefined,\n this.props.context.actionContext.requestContext\n )\n );\n return getSimpleProductsAction(productInputs, this.props.context.actionContext);\n }\n\n private _renderHeader(): JSX.Element {\n const invoiceDetails = this.state.invoiceDetails!;\n return (\n \n );\n }\n\n private _renderProducts(): JSX.Element {\n const invoiceDetails = this.state.invoiceDetails!;\n const { imageSettings } = this.props.config;\n return (\n \n );\n }\n\n private _renderPaymentDetails(): JSX.Element {\n const invoiceDetails = this.state.invoiceDetails!;\n return (\n \n );\n }\n\n private _onAddToCartFailed(newErrorState: IInvoiceErrorState): void {\n const errorState = { ...newErrorState };\n errorState.errorHost = 'ADDINVOICETOCART';\n\n // check for errorcode and otherError which contains the LocalizedMessage from API\n if (\n errorState &&\n errorState.errorCode === 'Microsoft_Dynamics_Commerce_Runtime_InvoiceLineAlreadyExistsInCart' &&\n errorState.otherError\n ) {\n this.setState({ errorState: errorState });\n }\n\n this.setState({ payInvoiceErrorModalOpen: true });\n }\n\n private _setPayInvoiceErrorModalClose(): void {\n this.setState({ payInvoiceErrorModalOpen: false });\n }\n\n private _renderInvoiceErrors(): JSX.Element {\n const {\n resources: {\n payInvoiceErrorDialogHeader,\n payInvoiceErrorDialogBodyErrorTitle,\n payInvoiceErrorDialogBodyErrorDescription,\n payInvoiceErrorDialogFooterGoToCartButtonText,\n payInvoiceErrorDialogFooterCancelButtonText\n }\n } = this.props;\n\n const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\n\n const errorClassName = `${InvoiceDetails._className}__errors`;\n\n return (\n \n );\n }\n}\n\nexport default InvoiceDetails;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IInvoiceDetailsViewProps } from './invoice-details';\n\nexport const InvoiceDetailsView: React.FC = props => {\n const { header, products, paymentDetails, payInvoiceError } = props;\n\n return (\n \n {header}\n {products}\n {paymentDetails}\n {payInvoiceError}\n \n );\n};\n\nexport default InvoiceDetailsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { Alert, Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface IInvoiceErrorProps extends IComponentProps {\n messageHeader?: string;\n errorMessage?: string;\n otherError?: string;\n showError: boolean;\n payInvoiceErrorModalOpen: boolean;\n\n errorDialogHeader: string;\n errorDialogBodyErrorTitle: string;\n errorDialogBodyErrorDescription: string;\n errorDialogFooterGoToCartButtonText: string;\n errorDialogFooterCancelButtonText: string;\n cartUrl: string;\n\n setPayInvoiceErrorModalClose(): void;\n}\n\nexport interface IInvoiceErrorComponent extends IComponent {}\n\nexport const InvoiceError: React.FC = ({\n messageHeader,\n errorMessage,\n otherError,\n showError,\n payInvoiceErrorModalOpen,\n errorDialogHeader,\n errorDialogBodyErrorTitle,\n errorDialogBodyErrorDescription,\n errorDialogFooterGoToCartButtonText,\n errorDialogFooterCancelButtonText,\n cartUrl,\n setPayInvoiceErrorModalClose\n}) => {\n const errorMessages: (string | undefined)[] = [];\n\n if (otherError) {\n errorMessages.push(otherError);\n } else {\n errorMessages.push(errorMessage);\n }\n\n const className = 'msc-pay-invoice-error-dialog';\n\n return (\n <>\n 0} color='danger' assertive aria-label={messageHeader}>\n \n {errorMessages.map((message, index) => {\n return (\n
\n {message}\n
\n );\n })}\n
\n \n \n {errorDialogHeader}\n \n \n
\n
{errorDialogBodyErrorTitle}
\n
{errorDialogBodyErrorDescription}
\n
\n
\n \n \n {errorDialogFooterGoToCartButtonText}\n \n \n {errorDialogFooterCancelButtonText}\n \n \n
\n \n );\n};\n\n// @ts-expect-error\nexport const InvoiceErrorComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\n 'InvoiceError',\n { component: InvoiceError }\n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { EnumExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Popover } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { IInvoiceStatusResources } from '../helpers/invoice-status';\n\nexport interface IInvoicesFilterResources extends IInvoiceStatusResources {\n invoicesFilterShowAll: string;\n}\n\nexport interface IInvoicesFilterProps extends IComponentProps {\n className: string;\n disabled: boolean;\n\n resources: IInvoicesFilterResources;\n\n currentState: InvoicesFilterState;\n onFilterStateChanged(state: InvoicesFilterState): void;\n}\n\nexport enum InvoicesFilterState {\n ShowAll,\n Paid,\n PartiallyPaid,\n Unpaid\n}\n\nconst getInvoicesFilterStateResources = (filterState: InvoicesFilterState, resources: IInvoicesFilterResources): string => {\n switch (filterState) {\n case InvoicesFilterState.ShowAll:\n return resources.invoicesFilterShowAll;\n case InvoicesFilterState.Paid:\n return resources.invoiceStatusPaid;\n case InvoicesFilterState.PartiallyPaid:\n return resources.invoiceStatusPartiallyPaid;\n case InvoicesFilterState.Unpaid:\n return resources.invoiceStatusUnpaid;\n default:\n throw new Error('Failed to retrieve resource description for unknown invoices filter state.');\n }\n};\n\n/**\n * On Click function.\n * @param onStateClick -Invoice filter state function.\n * @param filterState -Invoice filter state.\n * @returns Set Invoice filter state.\n */\nconst onClickHandler = (onStateClick: (filterState: InvoicesFilterState) => void, filterState: InvoicesFilterState) => () => {\n onStateClick(filterState);\n};\n\nconst renderFilterStateItem = (\n filterState: InvoicesFilterState,\n resources: IInvoicesFilterResources,\n className: string,\n onStateClick: (filterState: InvoicesFilterState) => void\n): React.ReactNode => {\n const stateStringRepresentation = InvoicesFilterState[filterState];\n\n return (\n \n );\n};\n\nconst InvoicesFilter: React.FC = (props: IInvoicesFilterProps) => {\n const popoverRef = React.createRef();\n const [popoverState, setPopoverState] = React.useState(false);\n const togglePopover = React.useCallback(() => {\n setPopoverState(!popoverState);\n }, [popoverState]);\n\n const [filterState, setFilterState] = React.useState(props.currentState);\n\n const onFilterStateClick = (clickedState: InvoicesFilterState) => {\n setFilterState(clickedState);\n setPopoverState(false);\n props.onFilterStateChanged(clickedState);\n };\n\n return (\n
\n \n {getInvoicesFilterStateResources(filterState, props.resources)}\n \n \n {EnumExtensions.getEnumValues(InvoicesFilterState).map(state => {\n return renderFilterStateItem(state, props.resources, props.className, onFilterStateClick);\n })}\n \n
\n );\n};\n\nexport const InvoicesFilterComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\n // @ts-expect-error\n IInvoicesFilterProps\n>('InvoicesFilterComponent', { component: InvoicesFilter });\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport React from 'react';\n\nexport interface IInvoicesTableHeaderResources {\n invoicesText: string;\n invoiceNumberText: string;\n invoiceDateMobileText: string;\n invoiceDateText: string;\n invoiceUsersText: string;\n invoiceAmountText: string;\n invoiceDueDateText: string;\n invoiceAmountDueText: string;\n invoiceStatusText: string;\n invoiceActionsText: string;\n invoiceListSelectAllRadioAriaLabelText: string;\n}\n\nexport interface IInvoicesTableHeaderProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n isSelectedAll: boolean;\n isMobile: boolean;\n isAdmin: boolean;\n\n resources: IInvoicesTableHeaderResources;\n\n onSelectAll(isSelected: boolean): void;\n}\n\nexport interface IInvoicesTableHeaderComponent extends IComponent {}\n\nconst getDesktopHeaderCells = (props: IInvoicesTableHeaderProps, rowClassName: string, switchCheckedState: () => void) => {\n const { resources } = props;\n return (\n <>\n \n \n \n {resources.invoiceNumberText}\n {resources.invoiceDateText}\n {resources.invoiceUsersText}\n {resources.invoiceAmountText}\n {resources.invoiceDueDateText}\n {resources.invoiceAmountDueText}\n {resources.invoiceStatusText}\n {resources.invoiceActionsText}\n \n );\n};\n\nconst getMobileHeaderCells = (props: IInvoicesTableHeaderProps, rowClassName: string, switchCheckedState: () => void) => {\n const { resources } = props;\n return (\n <>\n \n \n \n {resources.invoicesText}\n {resources.invoiceDateMobileText}\n \n {` `}\n {/* Actions */}\n \n );\n};\n\nconst InvoicesTableHeader: React.FC = (props: IInvoicesTableHeaderProps): JSX.Element => {\n const rowClassName = `${props.className}__row`;\n\n const switchCheckedState = () => {\n props.onSelectAll(!props.isSelectedAll);\n };\n\n let headerCells: JSX.Element;\n if (props.isMobile) {\n headerCells = getMobileHeaderCells(props, rowClassName, switchCheckedState);\n } else {\n headerCells = getDesktopHeaderCells(props, rowClassName, switchCheckedState);\n }\n\n return (\n \n {headerCells}\n \n );\n};\n\nexport const InvoicesTableHeaderComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\n // @ts-expect-error\n IInvoicesTableHeaderComponent\n>('InvoicesTableHeaderComponent', { component: InvoicesTableHeader });\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, {\n IComponent,\n IComponentProps,\n ICoreContext,\n IDateFormatOptions,\n isOboRequest,\n msdyn365Commerce\n} from '@msdyn365-commerce/core';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { getInvoiceDetailsPageUrlSync, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, format } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\nimport { InvoiceModel } from '../../../helpers/invoice-data';\nimport { getInvoiceStatusText, IInvoiceStatusResources } from '../../../helpers/invoice-status';\nimport { IInvoiceErrorState } from '../../../invoices-list';\nimport { IPayInvoiceResources, PayInvoiceComponent } from '../../pay-invoice-component';\nimport { RequestInvoiceButton } from '../../request-invoice-button';\n\ninterface IInvoicesTableRowData {\n invoice: InvoiceModel;\n index: number;\n customer: Customer;\n}\n\nexport interface IInvoicesTableRowResources extends IInvoiceStatusResources, IPayInvoiceResources {\n invoiceCurrentUser: string;\n invoiceViewDetailsButtonText: string;\n invoiceViewDetailsButtonAriaLabel: string;\n invoiceActionsButtonTextAriaLabel?: string;\n invoiceActionsButtonIsOnBehalfOfTextAriaLabel?: string;\n invoiceRequestButtonLabel: string;\n invoiceListSelectRadioAriaLabelText: string;\n}\n\nexport interface IInvoicesTableRowProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n isMobile: boolean;\n invoiceReferences?: React.RefObject;\n payInvoiceReferences?: React.RefObject;\n resources: IInvoicesTableRowResources;\n\n onChange(): void;\n onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\n onRequestInvoice?(invoice: InvoiceModel, requestInvoiceButtonReference: React.RefObject): void;\n}\n\nexport interface IInvoicesTableRowComponent extends IComponent {}\n\nconst formatAmount = (context: ICoreContext, amount: number | undefined, currencyCode: string | undefined) => {\n if (amount === undefined) {\n return '';\n }\n return context.cultureFormatter.formatCurrency(amount, currencyCode);\n};\n\nconst formatDate = (context: ICoreContext, date: Date | undefined) => {\n if (date === undefined) {\n return '';\n }\n\n const dateOptions: IDateFormatOptions = { year: 'numeric', month: 'long', day: 'numeric' };\n return context.cultureFormatter.formatDate(date, dateOptions);\n};\n\n/**\n * Request specific invoice function.\n * @param props -Invoice table row props.\n * @param requestInvoiceButtonReference -Reference button.\n * @returns Call Request Invoice.\n */\nconst onRequestSpecificInvoice = (\n props: IInvoicesTableRowProps,\n requestInvoiceButtonReference: React.RefObject\n) => () => {\n props.onRequestInvoice!(props.data.invoice, requestInvoiceButtonReference);\n};\n\nconst getDesktopRowCells = (props: IInvoicesTableRowProps, onSelectLine: () => void) => {\n const {\n data: { invoice, customer }\n } = props;\n\n const isCurrentUser =\n !StringExtensions.isNullOrWhitespace(customer.AccountNumber) && customer.AccountNumber === invoice.customerAccountNumber;\n\n const linkToInvoiceDetails = getInvoiceDetailsPageUrlSync(props.data.invoice.id, props.context.actionContext);\n const invoiceRowArialabel = format(props.resources.invoiceListSelectRadioAriaLabelText, invoice.id);\n return (\n <>\n \n \n \n \n \n {invoice.id}\n \n \n \n {formatDate(props.context, invoice.invoiceDate)}\n \n \n {invoice.customerName}\n {isCurrentUser ? {props.resources.invoiceCurrentUser} : null}\n \n {formatAmount(props.context, invoice.amount, invoice.currencyCode)}\n \n {formatDate(props.context, invoice.dueDate)}\n \n {formatAmount(props.context, invoice.amountDue, invoice.currencyCode)}\n \n {getInvoiceStatusText(props.resources, invoice.status)}\n \n {extraActionsPopup(props)}\n \n );\n};\n\nlet setShowPreviousActions: React.Dispatch> | undefined;\n\n/**\n * On Click view details function.\n * @param linkToInvoiceDetails -Link to invoice details.\n * @returns Go to invoice details.\n */\nconst onClickViewDetails = (linkToInvoiceDetails: string) => () => {\n if (MsDyn365.isBrowser) {\n window.location.href = linkToInvoiceDetails;\n }\n return;\n};\n\n/**\n * Toggle function.\n * @param isShowActions -Link to invoice details.\n * @param setShowActions -Link to invoice details.\n * @returns Go to invoice details.\n */\nconst toggle = (isShowActions: boolean, setShowActions: React.Dispatch>) => () => {\n const shouldShowActions = !isShowActions;\n if (shouldShowActions) {\n if (setShowPreviousActions) {\n setShowPreviousActions(false);\n }\n setShowActions(shouldShowActions);\n setShowPreviousActions = setShowActions;\n } else {\n setShowPreviousActions = undefined;\n setShowActions(shouldShowActions);\n }\n};\n\nconst extraActionsPopup = (props: IInvoicesTableRowProps): JSX.Element | null => {\n const {\n resources: {\n invoiceViewDetailsButtonAriaLabel,\n invoiceViewDetailsButtonText,\n invoiceActionsButtonTextAriaLabel,\n invoiceActionsButtonIsOnBehalfOfTextAriaLabel\n },\n data: { index }\n } = props;\n\n const [showActions, setShowActions] = useState(false);\n const isOnBehalfOfRequest = isOboRequest(props.context.request);\n\n const linkToInvoiceDetails = getInvoiceDetailsPageUrlSync(props.data.invoice.id, props.context.actionContext);\n\n const className = `${props.className}__extra-actions-cell`;\n const actionsContainerClassName = `${className}__actions-container`;\n const payInvoiceClassName = `${actionsContainerClassName}__pay-invoice`;\n return (\n
\n \n {showActions && !isOnBehalfOfRequest && (\n
\n \n {invoiceViewDetailsButtonText}\n \n \n \n
\n )}\n
\n );\n};\n\nconst getMobileRowCells = (props: IInvoicesTableRowProps, onSelectLine: () => void) => {\n const {\n data: { invoice }\n } = props;\n\n const linkToInvoiceDetails = getInvoiceDetailsPageUrlSync(props.data.invoice.id, props.context.actionContext);\n const invoiceRowArialabel = format(props.resources.invoiceListSelectRadioAriaLabelText, invoice.id);\n\n return (\n <>\n \n \n \n \n \n {invoice.id}\n \n
\n {invoice.customerName}\n \n \n {formatDate(props.context, invoice.dueDate)}\n
\n {getInvoiceStatusText(props.resources, invoice.status)}\n \n {extraActionsPopup(props)}\n \n );\n};\n\nconst InvoicesTableRow: React.FC = (props: IInvoicesTableRowProps): JSX.Element => {\n const {\n data: { invoice }\n } = props;\n\n const onSelectLine = () => {\n invoice.isSelected = !invoice.isSelected;\n props.onChange();\n };\n\n let rowCells: JSX.Element;\n if (props.isMobile) {\n rowCells = getMobileRowCells(props, onSelectLine);\n } else {\n rowCells = getDesktopRowCells(props, onSelectLine);\n }\n\n return {rowCells};\n};\n\nexport const InvoicesTableRowComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\n // @ts-expect-error\n IInvoicesTableRowComponent\n>('InvoicesTableRowComponent', { component: InvoicesTableRow });\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport React, { useState } from 'react';\n\nimport { InvoiceModel } from '../../helpers/invoice-data';\nimport { IInvoiceErrorState } from '../../invoices-list';\nimport { IInvoicesTableHeaderResources, InvoicesTableHeaderComponent } from './components/invoices-table-header-component';\nimport { IInvoicesTableRowResources, InvoicesTableRowComponent } from './components/invoices-table-row-component';\n\ninterface IInvoicesTableData {\n invoices: InvoiceModel[];\n customer: Customer;\n}\n\nexport interface IInvoicesTableResources extends IInvoicesTableHeaderResources, IInvoicesTableRowResources {}\n\nexport interface IInvoicesTableProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n invoiceButtonReferences?: React.RefObject[];\n payInvoiceButtonReferences?: React.RefObject[];\n resources: IInvoicesTableResources;\n\n onChange(): void;\n onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\n onRequestInvoice(invoice: InvoiceModel, requestInvoiceButtonReference: React.RefObject): void;\n}\n\nexport interface IInvoicesTableComponent extends IComponent {}\n\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nconst getViewport = (context: ICoreContext): GridSize => {\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (window?.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n};\n\nconst isMobileView = (context: ICoreContext) => {\n const viewport = getViewport(context);\n return viewport === 'xs' || viewport === 'sm';\n};\n\n/**\n * On select all function.\n * @param props -Invoice table props.\n * @returns On change.\n */\nconst onSelectAllHandler = (props: IInvoicesTableProps) => (isSelected: boolean) => {\n props.data.invoices.forEach(invoice => {\n invoice.isSelected = isSelected;\n });\n props.onChange();\n};\n\nconst InvoicesTable: React.FC = (props: IInvoicesTableProps): JSX.Element => {\n const [isMobile, setIsMobile] = useState(isMobileView(props.context));\n\n const updateViewport = () => {\n setIsMobile(isMobileView(props.context));\n };\n\n if (typeof window !== undefined && window.addEventListener) {\n window.addEventListener('resize', updateViewport);\n }\n const rowClassName = `${props.className}__row`;\n const headerClassName = `${props.className}__header`;\n\n return (\n \n invoice.isSelected)}\n isMobile={isMobile}\n isAdmin={props.data.customer.IsB2bAdmin || false}\n onSelectAll={onSelectAllHandler(props)}\n resources={props.resources}\n data={{}}\n />\n {props.data.invoices.map((invoice, index: number) => {\n return (\n \n );\n })}\n
\n );\n};\n\nexport const InvoicesTableComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\n // @ts-expect-error\n IInvoicesTableComponent\n>('InvoicesTableComponent', { component: InvoicesTable });\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext, ITelemetry, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { InvoiceModel } from '../helpers/invoice-data';\nimport { payInvoices } from '../helpers/pay-invoices';\nimport { IInvoiceErrorState } from '../invoices-list';\n\ninterface IMakePaymentData {\n invoices: InvoiceModel[];\n}\n\nexport interface IMakePaymentResources {\n makePaymentButtonText: string;\n makePaymentButtonAriaLabel: string;\n}\n\nexport interface IMakePaymentProps extends IComponentProps {\n context: ICoreContext;\n itemKey?: string;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n telemetryContent?: ITelemetryContent;\n navigationUrl?: string;\n buttonReferences?: React.RefObject;\n resources: IMakePaymentResources;\n disabled?: boolean;\n\n onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\n}\n\nexport interface IMakePaymentComponent extends IComponent {}\n\nconst onClick = async (\n _event: React.MouseEvent,\n props: IMakePaymentProps,\n setDisabled: (disabled: boolean) => void\n): Promise => {\n setDisabled(true);\n\n const propagateError = (errorState: IInvoiceErrorState): void => {\n if (props.onError) {\n props.onError(errorState, props.buttonReferences);\n }\n setDisabled(false);\n };\n\n await payInvoices(props.data.invoices, props.context.actionContext, propagateError);\n};\n\nconst MakePaymentComponentActions = {\n onClick\n};\n\n/**\n * On Click function.\n * @param input -Make payment props.\n * @param setDisabled -Set Disabled.\n * @returns Make payment component on click.\n */\nconst onClickHandler = (input: IMakePaymentProps, setDisabled: React.Dispatch>) => async (\n event: React.MouseEvent\n) => {\n await MakePaymentComponentActions.onClick(event, input, setDisabled);\n};\n\nconst MakePayment: React.FC = (input: IMakePaymentProps): JSX.Element => {\n const {\n data: { invoices }\n } = input;\n const hasInvoices = ArrayExtensions.hasElements(invoices.filter(invoice => invoice.canBePaid));\n const [disabled, setDisabled] = useState(false);\n\n return (\n \n {input.resources.makePaymentButtonText}\n \n );\n};\n\n// @ts-expect-error\nexport const MakePaymentComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\n 'MakePayment',\n { component: MakePayment }\n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { IPayableInvoice } from '../helpers/invoice-data';\nimport { payInvoices } from '../helpers/pay-invoices';\nimport { IInvoiceErrorState } from '../invoices-list';\n\nexport interface IPayInvoiceData {\n invoice: IPayableInvoice;\n}\n\nexport interface IPayInvoiceResources {\n payInvoiceButtonText: string;\n payInvoiceButtonAriaLabel: string;\n}\n\nexport interface IPayInvoiceProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n reference?: React.RefObject;\n resources: IPayInvoiceResources;\n disabled?: boolean;\n\n onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\n}\n\ninterface IPayInvoiceComponent extends IComponent {}\n\nconst onClick = async (\n _event: React.MouseEvent,\n props: IPayInvoiceProps,\n setDisabled: (disabled: boolean) => void\n): Promise => {\n setDisabled(true);\n\n const propagateError = (errorState: IInvoiceErrorState): void => {\n if (props.onError) {\n props.onError(errorState, props.reference);\n }\n setDisabled(false);\n };\n\n await payInvoices([props.data.invoice], props.context.actionContext, propagateError);\n};\n\nconst PayInvoiceComponentActions = {\n onClick\n};\n\n/**\n * On click handler function.\n * @param props -Invoice props.\n * @param setDisabled -Set disabled.\n * @returns Pay invoice component action.\n */\nconst onClickHandler = (props: IPayInvoiceProps, setDisabled: React.Dispatch>) => async (\n event: React.MouseEvent\n) => {\n await PayInvoiceComponentActions.onClick(event, props, setDisabled);\n};\n\nconst PayInvoice: React.FC = (props: IPayInvoiceProps): JSX.Element => {\n const [disabled, setDisabled] = useState(false);\n\n return (\n \n {props.resources.payInvoiceButtonText}\n \n );\n};\n\n// @ts-expect-error\nexport const PayInvoiceComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\n 'PayInvoiceComponent',\n { component: PayInvoice, ...PayInvoiceComponentActions }\n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\ninterface IRequestInvoiceButtonProps {\n innerReference?: React.RefObject;\n className: string;\n requestInvoiceButtonLabel: string;\n onClicked(): void;\n}\n\nexport const RequestInvoiceButton: React.FC = ({\n className,\n onClicked,\n requestInvoiceButtonLabel,\n innerReference\n}) => {\n return (\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 { InvoicePaidStatus, OrderInvoice } from '@msdyn365-commerce/retail-proxy';\n\nexport interface IPayableInvoice {\n readonly id: string;\n readonly canBePaid: boolean;\n}\n\n/**\n * Represents invoice data model.\n */\nexport class InvoiceModel implements IPayableInvoice {\n public id: string;\n\n public invoiceDate?: Date;\n\n public customerAccountNumber?: string;\n\n public customerName?: string;\n\n public amount?: number;\n\n public dueDate?: Date;\n\n public amountDue?: number;\n\n public status?: InvoicePaidStatus;\n\n public currencyCode?: string;\n\n public isSelected: boolean;\n\n public constructor(invoice: OrderInvoice) {\n this.id = invoice.Id || '';\n this.invoiceDate = invoice.InvoiceDate ? new Date(invoice.InvoiceDate) : undefined;\n this.customerAccountNumber = invoice.CustomerAccountNumber;\n this.customerName = invoice.CustomerName;\n this.amount = invoice.TotalAmount;\n this.dueDate = invoice.InvoiceDueDate ? new Date(invoice.InvoiceDueDate) : undefined;\n this.amountDue = invoice.AmountBalance;\n this.status = invoice.InvoicePaidStatusValue;\n this.currencyCode = invoice.CurrencyCode;\n\n this.isSelected = false;\n }\n\n public get canBePaid(): boolean {\n return this.status !== InvoicePaidStatus.Paid;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { InvoicePaidStatus } from '@msdyn365-commerce/retail-proxy';\n\nexport interface IInvoiceStatusResources {\n invoiceStatusNone: string;\n invoiceStatusUnpaid: string;\n invoiceStatusPartiallyPaid: string;\n invoiceStatusPaid: string;\n}\n\nexport const getInvoiceStatusText = (resources: IInvoiceStatusResources, invoiceStatus: InvoicePaidStatus | undefined) => {\n switch (invoiceStatus) {\n case InvoicePaidStatus.None:\n return resources.invoiceStatusNone;\n\n case InvoicePaidStatus.Unpaid:\n return resources.invoiceStatusUnpaid;\n\n case InvoicePaidStatus.PartiallyPaid:\n return resources.invoiceStatusPartiallyPaid;\n\n case InvoicePaidStatus.Paid:\n return resources.invoiceStatusPaid;\n default:\n return '';\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getUrlSync, IActionContext } from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IInvoiceErrorState } from '../invoices-list';\nimport { IPayableInvoice } from './invoice-data';\n\nexport type ICartActionFailureReason = 'EMPTYINPUT' | 'CARTACTIONFAILED';\nexport interface IAddInvoicesToCartFailureResult {\n failureReason: ICartActionFailureReason;\n}\n\nexport const payInvoices = async (\n invoices: IPayableInvoice[],\n actionContext: IActionContext,\n onError: (errorState: IInvoiceErrorState) => void\n) => {\n const invoicesToAdd: string[] = invoices.filter(invoice => invoice.canBePaid).map(invoice => invoice.id);\n\n if (!ArrayExtensions.hasElements(invoicesToAdd)) {\n onError({ errorMessage: '', errorReason: { failureReason: 'EMPTYINPUT' } });\n return;\n }\n\n const cartState = await getCartState(actionContext);\n const result = await cartState.addInvoicesToCart({ invoiceIds: invoicesToAdd });\n\n if (result.status !== 'SUCCESS') {\n onError({\n errorMessage: '',\n errorReason: { failureReason: 'CARTACTIONFAILED' },\n otherError: result.errorDetails?.LocalizedMessage,\n errorCode: result.errorDetails?.ErrorResourceId\n });\n return;\n }\n\n const cartUrl = getUrlSync('cart', actionContext);\n if (cartUrl) {\n window?.location.assign(cartUrl);\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\n\n/* ---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { InvoiceModel } from '../helpers/invoice-data';\nimport { IInvoicesListResources } from '../invoices-list.props.autogenerated';\n\ninterface IRequestInvoiceModalProps {\n className: string;\n email: string;\n isModalOpen: boolean;\n submitRequestLabel: string;\n modalHeaderLabel: string;\n sendToEmailLabel: string;\n cancelLabel: string;\n searchPlaceholderLabel: string;\n invoices: InvoiceModel[];\n invoicesFoundString: string;\n singleInvoiceFoundString: string;\n searchButtonAltText: string;\n resources: IInvoicesListResources;\n toggle(): void;\n onSubmitRequest(invoiceId: string): void;\n}\n\n/**\n * On submit request click function.\n * @param selectedInvoiceIndex -Check is busy.\n * @param onClosing -On closing function.\n * @param filteredInvoices -Invoice modal.\n * @param onSubmitRequest -On submit request function.\n * @returns Call on submit request.\n */\nconst onSubmitRequestClick = (\n onClosing: () => void,\n filteredInvoices: InvoiceModel[],\n onSubmitRequest: (invoiceId: string) => void,\n checkboxRef: React.MutableRefObject\n) => () => {\n const defaultIndex = 0;\n let closingFlag: number = 0;\n\n filteredInvoices.map((invoice, index) => {\n const inputInvoice = checkboxRef.current[Number(index)] as React.RefObject;\n if (inputInvoice.current?.checked === true && index >= defaultIndex) {\n onSubmitRequest(invoice.id);\n closingFlag = closingFlag + 1;\n }\n });\n if (closingFlag <= filteredInvoices.length) {\n onClosing();\n }\n};\n\n/**\n * On search input change function.\n * @param setSearchInput -Set search input.\n * @returns Set search input function.\n */\nconst searchInputChangedHandler = (setSearchInput: React.Dispatch>) => (\n event: React.ChangeEvent\n) => {\n setSearchInput(event.target.value);\n};\n\n/**\n * Search entered handler.\n * @param invoices -InvoiceModel.\n * @param searchInput -String.\n * @param setFilteredInvoices -InvoiceModel action.\n * @param filteredInvoices -Filtered Invoices.\n * @param setSelectedInvoiceIndex -Selected Invoice Index.\n * @param setShouldShowSearchResults -Show search result action.\n * @param setInvoiceOptions -Invoice options action.\n * @param selectedInvoiceIndex -Selected invoice index.\n * @param className -String.\n * @returns Set invoice options.\n */\nconst searchEnteredHandler = (\n invoices: InvoiceModel[],\n searchInput: string,\n setFilteredInvoices: React.Dispatch>,\n filteredInvoices: InvoiceModel[],\n setSelectedInvoiceIndex: React.Dispatch>,\n setShouldShowSearchResults: React.Dispatch>,\n setInvoiceOptions: React.Dispatch>,\n selectedInvoiceIndex: number,\n className: string,\n checkboxRef: React.MutableRefObject\n) => () => {\n let updatedInvoices = filteredInvoices;\n if (!StringExtensions.isNullOrEmpty(searchInput)) {\n updatedInvoices = invoices.filter(invoice => invoice.id.toLocaleUpperCase().includes(searchInput.toLocaleUpperCase()));\n } else {\n updatedInvoices = invoices;\n }\n\n if (ArrayExtensions.hasElements(updatedInvoices)) {\n setFilteredInvoices(updatedInvoices);\n setSelectedInvoiceIndex(0);\n } else {\n setFilteredInvoices(updatedInvoices);\n setSelectedInvoiceIndex(-1);\n }\n setShouldShowSearchResults(true);\n\n setInvoiceOptions(\n renderInvoiceOptions(\n StringExtensions.isNullOrEmpty(searchInput) ? invoices : updatedInvoices,\n setSelectedInvoiceIndex,\n className,\n checkboxRef\n )\n );\n};\n\n/**\n * On cancel function.\n * @param onClosing -Closing function.\n * @param toggle -Toggle Function.\n * @returns Toggle function.\n */\nconst onCancelHandler = (onClosing: () => void, toggle: () => void) => () => {\n onClosing();\n toggle();\n};\n\n/**\n * On invoice select.\n * @param setSelectedInvoiceIndex -Set Selected Invoice Index.\n * @param index -Number.\n * @returns Set Selected Invoice Index.\n */\nconst onInvoiceSelectHandler = (setSelectedInvoiceIndex: (newIndex: number) => void, index: number) => () => {\n setSelectedInvoiceIndex(index);\n};\n\nconst renderInvoiceOptions = (\n filteredInvoices: InvoiceModel[],\n setSelectedInvoiceIndex: (newIndex: number) => void,\n className: string,\n checkboxRef: React.MutableRefObject\n) => {\n checkboxRef.current = filteredInvoices.map((_invoice, i) => checkboxRef.current[Number(i)] ?? React.createRef());\n return (\n
\n {filteredInvoices.map((invoice, index) => {\n const onInvoiceSelect = onInvoiceSelectHandler(setSelectedInvoiceIndex, index);\n\n const checkboxId = `invoice__${invoice.id}`;\n const checkboxName = `invoiceSelect__${invoice.id}`;\n\n return (\n
\n \n \n
\n );\n })}\n
\n );\n};\n\nexport const RequestInvoiceModal: React.FC = ({\n className,\n email,\n isModalOpen,\n toggle,\n modalHeaderLabel,\n sendToEmailLabel,\n submitRequestLabel,\n cancelLabel,\n onSubmitRequest,\n invoices,\n searchPlaceholderLabel,\n invoicesFoundString,\n singleInvoiceFoundString,\n searchButtonAltText,\n resources\n}) => {\n const [selectedInvoiceIndex, setSelectedInvoiceIndex] = React.useState(-1);\n const [filteredInvoices, setFilteredInvoices] = React.useState(invoices);\n const [searchInput, setSearchInput] = React.useState('');\n const [shouldShowSearchResults, setShouldShowSearchResults] = React.useState(false);\n const focusDelay = 110;\n const checkboxRef = React.useRef([]);\n const invoiceOptionsData = renderInvoiceOptions(filteredInvoices, setSelectedInvoiceIndex, className, checkboxRef);\n const [invoiceOptions, setInvoiceOptions] = React.useState(invoiceOptionsData);\n const focusElement = React.useRef(null);\n React.useEffect(() => {\n if (isModalOpen && focusElement.current) {\n setTimeout(() => {\n focusElement.current?.focus();\n }, focusDelay);\n }\n }, [isModalOpen]);\n\n /**\n * Sets the filtered invoices to the ones that were selected on the main screen.\n */\n const setFilteredInvoicesToSelectedInvoices = () => {\n setSelectedInvoiceIndex(-1);\n const selectedInvoices = invoices.filter(invoice => invoice.isSelected);\n if (ArrayExtensions.hasElements(selectedInvoices)) {\n setFilteredInvoices(selectedInvoices);\n\n // If only one invoice selected, auto select it\n if (selectedInvoices.length === 1) {\n setSelectedInvoiceIndex(0);\n }\n\n setInvoiceOptions(renderInvoiceOptions(selectedInvoices, setSelectedInvoiceIndex, className, checkboxRef));\n } else {\n setFilteredInvoices(invoices);\n setInvoiceOptions(renderInvoiceOptions(invoices, setSelectedInvoiceIndex, className, checkboxRef));\n }\n };\n\n const searchEntered = searchEnteredHandler(\n invoices,\n searchInput,\n setFilteredInvoices,\n filteredInvoices,\n setSelectedInvoiceIndex,\n setShouldShowSearchResults,\n setInvoiceOptions,\n selectedInvoiceIndex,\n className,\n checkboxRef\n );\n\n const onClosing = () => {\n setSelectedInvoiceIndex(-1);\n setFilteredInvoices(invoices);\n setSearchInput('');\n setShouldShowSearchResults(false);\n };\n\n /**\n * Sets the invoices that are possible to select when the dialog is opened.\n */\n const onOpened = () => {\n setSearchInput('');\n setFilteredInvoicesToSelectedInvoices();\n };\n\n const searchResultString = filteredInvoices.length === 1 ? singleInvoiceFoundString : invoicesFoundString;\n const invoicesFoundReplaceIndex = searchResultString.indexOf('{0}');\n\n return (\n \n \n {modalHeaderLabel}\n \n \n
\n \n
\n {email}\n
\n
\n {shouldShowSearchResults && (\n
\n {searchResultString.substring(0, invoicesFoundReplaceIndex)}\n {filteredInvoices.length}\n {searchResultString.substring(invoicesFoundReplaceIndex + 3)}\n
\n )}\n
\n \n \n
\n {invoiceOptions}\n
\n
\n
\n \n \n {submitRequestLabel}\n \n \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 { getUrlSync, isOboRequest } from '@msdyn365-commerce/core';\nimport {\n BusinessPartnerOperationDeliveryType,\n BusinessPartnerUsersDataActions,\n InvoicePaidStatus,\n InvoiceSearchCriteria,\n IQueryResultSettings,\n OrderInvoice\n} from '@msdyn365-commerce/retail-proxy';\nimport { getCurrentAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnersDataActions.g';\nimport {\n ArrayExtensions,\n getCustomer,\n GetCustomerInput,\n getInvoices,\n GetInvoicesInput,\n IQueryResultSettingsModuleConfig,\n QueryResultSettingsProxy,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Heading, IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\n\nimport { InvoiceErrorComponent } from './components/invoice-error-component';\nimport { InvoicesFilterComponent, InvoicesFilterState } from './components/invoices-filter-component';\nimport { InvoicesTableComponent } from './components/invoices-table/invoices-table-component';\nimport { IMakePaymentResources, MakePaymentComponent } from './components/make-payment-component';\nimport { RequestInvoiceButton } from './components/request-invoice-button';\nimport { RequestInvoiceModal } from './components/request-invoice-modal';\nimport { InvoiceModel } from './helpers/invoice-data';\nimport { IAddInvoicesToCartFailureResult } from './helpers/pay-invoices';\nimport { IInvoicesListData } from './invoices-list.data';\nimport { IInvoicesListProps } from './invoices-list.props.autogenerated';\n\nexport type InvoicesListStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\nexport type InvoiceErrorHost = 'ADDINVOICETOCART';\n\nexport interface IInvoicesListViewProps extends IInvoicesListProps {\n moduleProps: IModuleProps;\n\n header: JSX.Element;\n filter: JSX.Element;\n content?: JSX.Element;\n invoiceRequestModal?: JSX.Element;\n pagination?: JSX.Element;\n}\n\nexport interface IInvoiceErrorState {\n errorHost?: InvoiceErrorHost;\n errorReason?: IAddInvoicesToCartFailureResult;\n errorMessage: string;\n otherError?: string;\n errorCode?: string;\n}\n\nexport interface IInvoicesListState {\n invoices: InvoiceModel[];\n invoicesFilterState: InvoicesFilterState;\n errorState: IInvoiceErrorState;\n isInvoiceRequestModalOpen: boolean;\n isLoading: boolean;\n isPageLoaded: boolean;\n payInvoiceErrorModalOpen: boolean;\n selectedButtonElement?: HTMLButtonElement | null;\n}\n\n/**\n * InvoicesList component.\n * @extends {React.Component, IInvoicesListState>}\n */\n@observer\nclass InvoicesList extends React.Component, IInvoicesListState> {\n private readonly _className: string = 'msc-invoices-list';\n\n private readonly payInvoiceRequestReference: React.RefObject;\n\n private readonly makePaymentReference: React.RefObject;\n\n private buttonChildReference: React.RefObject[] = [];\n\n private buttonChildPayButtonReference: React.RefObject[] = [];\n\n private readonly _queryResultSettings: IQueryResultSettings;\n\n private invoiceIds: string[] = [];\n\n constructor(props: IInvoicesListProps) {\n super(props);\n\n this._queryResultSettings = QueryResultSettingsProxy.fromModuleData(\n this.props.context.request,\n this.props.config as IQueryResultSettingsModuleConfig\n ).QueryResultSettings;\n this.payInvoiceRequestReference = React.createRef();\n this.makePaymentReference = React.createRef();\n this._updateInvoicesState = this._updateInvoicesState.bind(this);\n this._onAddToCartFailed = this._onAddToCartFailed.bind(this);\n this._onToggleInvoiceRequestModal = this._onToggleInvoiceRequestModal.bind(this);\n this._handleFilterStateChange = this._handleFilterStateChange.bind(this);\n this._loadMoreInvoices = this._loadMoreInvoices.bind(this);\n this._requestInvoice = this._requestInvoice.bind(this);\n this._requestSpecificInvoice = this._requestSpecificInvoice.bind(this);\n this._setPayInvoiceErrorModalClose = this._setPayInvoiceErrorModalClose.bind(this);\n this.state = {\n invoices: [],\n invoicesFilterState: InvoicesFilterState.ShowAll,\n isLoading: true,\n isPageLoaded: false,\n errorState: { errorMessage: '' },\n isInvoiceRequestModalOpen: false,\n payInvoiceErrorModalOpen: false,\n selectedButtonElement: null\n };\n }\n\n public shouldComponentUpdate(nextProps: IInvoicesListProps, nextState: IInvoicesListState): 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 const {\n config: { className = '', heading },\n context: {\n request: { channel },\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n },\n data: { customerBalance },\n resources: { invoicesListTitle, invoicesListDescTitle, invoicesListDescCount }\n } = this.props;\n\n const totalAmount = customerBalance.result?.OpenInvoiceBalance || 0;\n const amountText = `${formatCurrency(totalAmount.toFixed(2), currencyCode)} ${channel?.Currency || 'USD'}`;\n\n const totalCount = customerBalance.result?.OpenInvoiceCount || 0;\n const countText = invoicesListDescCount.replace('{0}', totalCount.toString());\n const invoicesListTitleHeading = heading?.text ?? invoicesListTitle;\n\n const headerClassName = `${this._className}__header`;\n\n const header = (\n
\n \n
\n
{invoicesListDescTitle}
\n
{amountText}
\n
{countText}
\n
\n
\n );\n\n const viewProps: IInvoicesListViewProps = {\n ...(this.props as IInvoicesListProps),\n moduleProps: {\n moduleProps: this.props,\n className: classnames(this._className, className)\n },\n header,\n invoiceRequestModal: this._renderInvoiceRequestModal(),\n filter: this._renderInvoicesFilter(this._className),\n pagination: this._renderPagination()\n };\n\n if (!this.state.isPageLoaded) {\n return this.props.renderView(viewProps);\n }\n\n if (ArrayExtensions.hasElements(this.state.invoices)) {\n viewProps.content = this._renderListContainer();\n } else {\n viewProps.content = this._renderEmptyInvoiceLinesPageContent();\n }\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public async componentDidMount(): Promise {\n await this.props.data.customer;\n const invoicesData = await this.props.data.invoices;\n this._initializeWithInvoices(invoicesData);\n\n reaction(\n () => this.state.isInvoiceRequestModalOpen,\n async () => {\n if (this.invoiceIds && !this.state.isInvoiceRequestModalOpen) {\n const context = { callerContext: this.props.context.actionContext };\n const b2bUserId: string = this.props.data.b2bUserInformation?.result?.B2BUserId || '';\n for (const invoiceId of this.invoiceIds) {\n await BusinessPartnerUsersDataActions.requestInvoiceCopyAsync(\n context,\n b2bUserId,\n invoiceId,\n BusinessPartnerOperationDeliveryType.Email\n );\n }\n this.invoiceIds = [];\n }\n }\n );\n }\n\n private _initializeWithInvoices(invoicesData: OrderInvoice[]): void {\n const invoices = invoicesData.map((invoice, index) => {\n this.buttonChildReference[Number(index)] = React.createRef();\n this.buttonChildPayButtonReference[Number(index)] = React.createRef();\n return new InvoiceModel(invoice);\n });\n this.setState({\n invoices,\n isLoading: false,\n isPageLoaded: true\n });\n }\n\n private _addInvoices(invoicesData: OrderInvoice[]): void {\n const newInvoices = invoicesData.map(invoice => new InvoiceModel(invoice));\n const invoices = this.state.invoices.concat(newInvoices);\n this.setState({\n invoices,\n isLoading: false\n });\n }\n\n private _renderEmptyInvoiceLinesPageContent(): JSX.Element {\n const containerClass = `${this._className}__empty-lines__container`;\n const actionsContainerClass = `${containerClass}__actions`;\n return (\n
\n
{this.props.resources.invoiceEmptyInvoiceLinesTitle}
\n
{this.props.resources.invoiceEmptyInvoiceLinesDescription}
\n
\n \n {this.props.resources.invoiceEmptyInvoiceLinesContinueShoppingButtonText}\n \n
\n
\n );\n }\n\n private _renderListContainer(): JSX.Element {\n const containerClass = `${this._className}__container`;\n const containerHeaderClass = `${containerClass}__header`;\n const containerContentClass = `${containerClass}__content`;\n const isOnBehalfOfRequest = isOboRequest(this.props.context.request);\n\n return (\n
\n
\n {this._renderMakePayment(containerHeaderClass, isOnBehalfOfRequest)}\n {this._renderInvoiceRequestButton()}\n
\n
{this._renderInvoiceErrors()}
\n
{this._renderInvoicesList(containerContentClass)}
\n
\n );\n }\n\n private _updateInvoicesState(): void {\n this.setState({\n invoices: this.state.invoices\n });\n }\n\n private async _getInvoicesSearchCriteria(state: InvoicesFilterState): Promise {\n const searchCriteria: InvoiceSearchCriteria = {};\n\n const context = this.props.context.actionContext;\n\n const businessPartner = await getCurrentAsync({ callerContext: context });\n searchCriteria.BusinessPartnerId = businessPartner.BusinessPartnerId;\n\n const customer = await getCustomer(new GetCustomerInput(context.requestContext.apiSettings), context);\n searchCriteria.CustomerId = customer.AccountNumber;\n\n switch (state) {\n case InvoicesFilterState.ShowAll:\n searchCriteria.InvoicePaidStatusValues = [InvoicePaidStatus.None];\n break;\n case InvoicesFilterState.Paid:\n searchCriteria.InvoicePaidStatusValues = [InvoicePaidStatus.Paid];\n break;\n case InvoicesFilterState.PartiallyPaid:\n searchCriteria.InvoicePaidStatusValues = [InvoicePaidStatus.PartiallyPaid];\n break;\n case InvoicesFilterState.Unpaid:\n searchCriteria.InvoicePaidStatusValues = [InvoicePaidStatus.Unpaid];\n break;\n default:\n throw new Error('Failed to process unknown invoices filter state.');\n }\n\n return searchCriteria;\n }\n\n private async _handleFilterStateChange(state: InvoicesFilterState): Promise {\n this.setState({\n invoicesFilterState: state,\n isLoading: true\n });\n\n const searchCriteria = await this._getInvoicesSearchCriteria(state);\n\n if (this._queryResultSettings.Paging) {\n this._queryResultSettings.Paging.Skip = 0;\n }\n\n const invoices = await getInvoices(\n new GetInvoicesInput(searchCriteria, this._queryResultSettings),\n this.props.context.actionContext\n );\n this._initializeWithInvoices(invoices);\n }\n\n private _renderInvoicesFilter(className: string): JSX.Element {\n const filterClassName = `${className}__filter`;\n return (\n \n );\n }\n\n private _renderInvoicesList(className: string): JSX.Element {\n const tableClassName = `${className}__table`;\n return (\n \n );\n }\n\n private _onAddToCartFailed(newErrorState: IInvoiceErrorState, reference?: React.RefObject): void {\n const errorState = { ...newErrorState };\n errorState.errorHost = 'ADDINVOICETOCART';\n errorState.errorMessage =\n newErrorState.errorReason?.failureReason === 'EMPTYINPUT'\n ? this.props.resources.invoiceErrorInvoiceIdNotExist\n : this.props.resources.invoiceErrorFailedAddInvoiceToCart;\n\n const shouldShowAdditionalInfoInPopup =\n errorState.errorCode === 'Microsoft_Dynamics_Commerce_Runtime_InvoiceLineNotAllowedWithItemLines';\n this.setState({ errorState, payInvoiceErrorModalOpen: shouldShowAdditionalInfoInPopup, selectedButtonElement: reference?.current });\n }\n\n private _renderMakePayment(className: string, disabled: boolean): JSX.Element {\n const id = `${className}__make-payment`;\n const makePaymentResources: IMakePaymentResources = {\n makePaymentButtonText: this.props.resources.makePaymentButtonText,\n makePaymentButtonAriaLabel: this.props.resources.makePaymentButtonAriaLabel\n };\n\n const selectedInvoices = this._getSelectedInvoices();\n\n return (\n \n );\n }\n\n private _setPayInvoiceErrorModalClose(): void {\n this.setState({\n payInvoiceErrorModalOpen: false\n });\n this.state.selectedButtonElement?.focus();\n }\n\n private _renderInvoiceErrors(): JSX.Element {\n const {\n resources: {\n payInvoiceErrorDialogHeader,\n payInvoiceErrorDialogBodyErrorTitle,\n payInvoiceErrorDialogBodyErrorDescription,\n payInvoiceErrorDialogFooterGoToCartButtonText,\n payInvoiceErrorDialogFooterCancelButtonText\n }\n } = this.props;\n\n const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\n\n const errorClassName = `${this._className}__errors`;\n\n return (\n \n );\n }\n\n private _renderPagination(): JSX.Element | undefined {\n const { data, resources } = this.props;\n const invoices = data?.invoices?.result;\n if (!invoices || invoices.length < this._queryResultSettings.Paging!.Top!) {\n return undefined;\n }\n\n return (\n \n {resources.invoicesLoadMore}\n \n );\n }\n\n private async _loadMoreInvoices(): Promise {\n this.setState({ isLoading: true });\n const searchCriteria = await this._getInvoicesSearchCriteria(this.state.invoicesFilterState);\n if (this._queryResultSettings.Paging) {\n this._queryResultSettings.Paging.Skip! += this._queryResultSettings.Paging.Top!;\n }\n const newInvoices = await getInvoices(\n new GetInvoicesInput(searchCriteria, this._queryResultSettings),\n this.props.context.actionContext\n );\n this._addInvoices(newInvoices);\n }\n\n private _renderInvoiceRequestModal(): JSX.Element {\n const customer = this.props.data.customer.result;\n const {\n invoiceRequestModalCancelLabel,\n invoiceRequestModalSubmitLabel,\n invoiceRequestModalHeaderLabel,\n invoiceRequestModalSendToEmailLabel,\n invoiceRequestModalSearch,\n invoiceRequestModalInvoiceSearchDisplay,\n invoiceRequestModalSingleInvoiceSearchDisplay,\n invoiceRequestModalSearchButton\n } = this.props.resources;\n\n return (\n \n );\n }\n\n private _onToggleInvoiceRequestModal(): void {\n this.setState({\n isInvoiceRequestModalOpen: !this.state.isInvoiceRequestModalOpen\n });\n if (this.state.isInvoiceRequestModalOpen) {\n this.state.selectedButtonElement?.focus();\n }\n }\n\n /**\n * Request specific invoice function.\n */\n private readonly _onToggleInvoiceRequestParentModal = () => {\n this.setState(\n {\n selectedButtonElement: this.payInvoiceRequestReference.current\n },\n () => {\n this._onToggleInvoiceRequestModal();\n }\n );\n };\n\n private _renderInvoiceRequestButton(): JSX.Element | null {\n const { invoiceRequestButtonLabel } = this.props.resources;\n const customer = this.props.data.customer.result;\n\n if (StringExtensions.isNullOrWhitespace(customer?.Email)) {\n return null;\n }\n\n return (\n \n );\n }\n\n private _requestInvoice(invoiceId: string): void {\n this.invoiceIds.push(invoiceId);\n this._onToggleInvoiceRequestModal();\n }\n\n private _getSelectedInvoices(): InvoiceModel[] {\n let selectedInvoices = this.state.invoices.filter(invoice => invoice.isSelected);\n if (!ArrayExtensions.hasElements(selectedInvoices)) {\n selectedInvoices = this.state.invoices;\n }\n\n return selectedInvoices;\n }\n\n private _requestSpecificInvoice(\n specificInvoice: InvoiceModel,\n requestInvoiceButtonReference: React.RefObject\n ): void {\n this.state.invoices.forEach((invoice: InvoiceModel) => {\n if (invoice === specificInvoice) {\n invoice.isSelected = true;\n } else {\n invoice.isSelected = false;\n }\n });\n this.setState({\n selectedButtonElement: requestInvoiceButtonReference.current\n });\n this._onToggleInvoiceRequestModal();\n }\n}\n\nexport default InvoicesList;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IInvoicesListViewProps } from './invoices-list';\n\nexport const InvoiceListView: React.FC = props => {\n const { header, filter, content, invoiceRequestModal, pagination } = props;\n\n return (\n \n {header}\n {invoiceRequestModal}\n {filter}\n {content}\n {pagination}\n \n );\n};\n\nexport default InvoiceListView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICategoryPromotionalContentData } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuData {\n categories: AsyncResult;\n}\n\nexport interface IMenuItemData {\n id?: number;\n linkText?: string;\n linkURL?: string;\n imageSource?: string;\n imageDestinationURL?: string;\n subMenu?: IMenuItemData[];\n promotionalContent?: ICategoryPromotionalContentData[];\n menuSource?: string;\n shouldOpenNewTab?: boolean;\n ariaLabel?: string;\n}\n\n/**\n *\n * Menu type index id.\n */\nexport enum MenuTypeIndexId {\n Cms = 1000,\n Retail = 5000\n}\n\n/**\n *\n * Menu type source.\n */\nexport enum MenuSource {\n Cms = 'Cms',\n Retail = 'Retail'\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, { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject } from '@msdyn365-commerce/core';\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport * as React from 'react';\n\nimport { IMenuItemData, INavigationMenuData, MenuSource, MenuTypeIndexId } from './navigation-menu.data';\nimport { ICmsNavItemsData, INavigationMenuProps, ISubMenusData, navigationMenuSource } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuViewProps extends INavigationMenuProps {\n className: string;\n menuItemData: IMenuItemData[];\n Navigation: IModuleProps;\n MenuList: INodeProps;\n ListItem: INodeProps;\n Link: INodeProps;\n Button: INodeProps;\n Span: INodeProps;\n ImageContainer: INodeProps;\n MobileDescriptionContainer: INodeProps;\n MobileBackButton: INodeProps;\n MobileDescriptionLabel: INodeProps;\n imageSettings: IImageSettings;\n gridSettings: IGridSettings;\n isMobileView: boolean;\n DivContainer?: INodeProps;\n ImageDivContainer?: INodeProps;\n showCategoryImage?: boolean;\n showPromotionalContent?: boolean;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface INavigationMenuState {\n isMobile: boolean;\n}\n\n/**\n *\n * NavigationMenu component.\n * @extends {React.PureComponent>}\n */\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\n private static CMSItemIdInit: number = MenuTypeIndexId.Cms;\n\n private static RSItemIdInit: number = MenuTypeIndexId.Retail;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n private menuItemList: IMenuItemData[];\n\n private isRetail: boolean = true;\n\n private isCMS: boolean = true;\n\n @observable\n private viewport: GridSize;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && nameTranslations.length > 0) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation && nameTranslation.Text;\n }\n\n constructor(props: INavigationMenuProps) {\n super(props);\n this._updateViewport = this._updateViewport.bind(this);\n this.viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\n this.state = { isMobile: this.isMobile };\n this.menuItemList = [];\n }\n\n @computed get isMobile(): boolean {\n return this.viewport === 'xs' || this.viewport === 'sm';\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n this.resizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\n }\n this._updateViewport();\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n }\n\n public render(): JSX.Element | null {\n this.menuItemList = this._mapData();\n if (isEmptyOrNullObject(this.props.data)) {\n this.props.telemetry.error('Navigatiomenu returned null');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=224&h=300&m=6', w: 0, h: 0 },\n xl: { q: 'w=224&h=300&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n const viewProps = {\n ...this.props,\n ...this.state,\n imageSettings: defaultImageSettings,\n gridSettings: this.props.context.request.gridSettings,\n Navigation: {\n moduleProps: this.props,\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\n tag: 'nav',\n role: this.isMobile ? 'listbox' : 'navigation'\n },\n MenuList: {\n className: 'ms-nav__list',\n tag: 'ul',\n role: this.isMobile ? 'listbox' : 'menu'\n },\n ListItem: {\n className: 'ms-nav__list__item',\n role: 'presentation',\n tag: 'li'\n },\n showCategoryImage: this.props.config.displayCategoryImage ?? false,\n showPromotionalContent: this.props.config.displayPromotionalImage ?? false,\n Link: {\n tag: 'a',\n className: 'ms-nav__list__item__link',\n role: this.isMobile ? 'option' : 'menuitem'\n },\n DivContainer: {\n tag: 'div',\n className: 'ms-nav__feature'\n },\n ImageDivContainer: {\n tag: 'div',\n className: 'category-image',\n role: 'tabpanel'\n },\n Button: {\n className: 'ms-nav__list__item__button',\n tag: 'button',\n role: this.isMobile ? 'option' : 'menuitem',\n onClick: this.props\n },\n ImageContainer: {\n className: 'ms-nav__list__item__image'\n },\n Span: {\n className: 'ms-nav__list__item__span',\n tag: 'span'\n },\n MobileDescriptionContainer: {\n className: 'ms-nav__list__mobile__container'\n },\n MobileBackButton: {\n className: 'ms-nav__list__mobile__container__button',\n tag: 'button',\n 'aria-label': this.props.resources.backButtonAriaLabel,\n onClick: this.props\n },\n MobileDescriptionLabel: {\n className: 'ms-nav__list__mobile__container__span',\n tag: 'span'\n },\n isMobileView: this.state.isMobile,\n menuItemData: this.menuItemList,\n className: classnames('ms-nav', this.props.config.className)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _mapData(): IMenuItemData[] {\n const { data, config } = this.props;\n const mergedData: IMenuItemData[] = [];\n if (this.isRetail && data && data.categories && data.categories.result && data.categories.result.length > 0) {\n data.categories.result.map((item: CategoryHierarchy, index) =>\n mergedData.push(this._constructMenuItemData(item, undefined, true, index, true))\n );\n }\n\n if (this.isCMS && config.cmsNavItems && config.cmsNavItems.length > 0) {\n config.cmsNavItems.map((item: ICmsNavItemsData, idx: number) =>\n mergedData.push(this._constructMenuItemData(undefined, item, false, idx + 1))\n );\n }\n return this._constructTopMenuItemData(mergedData);\n }\n\n private _constructTopMenuItemData(mergedData: IMenuItemData[]): IMenuItemData[] {\n const enableTopLevelMenu = this.props.config.enabletopMenu ?? false;\n if (!enableTopLevelMenu) {\n return mergedData;\n }\n const mergedRootMenuData: IMenuItemData[] = [];\n const topMenu = {\n id: 1,\n linkText: this.props.config.rootMenuNavigation ?? '...',\n linkURL: '#',\n imageSource: undefined,\n subMenu: mergedData\n } as IMenuItemData;\n mergedRootMenuData.push(topMenu);\n\n return mergedRootMenuData;\n }\n\n private _constructMenuItemData(\n retailItem?: CategoryHierarchy,\n cmsItem?: ICmsNavItemsData,\n isRetail?: boolean,\n idx?: number,\n addedAllMenu?: boolean\n ): IMenuItemData {\n const locale =\n this.props.context && this.props.context.request && this.props.context.request.locale\n ? this.props.context.request.locale\n : 'en-us';\n const { categoryPromotionalContent } = this.props.config;\n const cmsItemText = (cmsItem && cmsItem.linkText) || '';\n const { menuAriaLabel } = this.props.resources;\n\n // Filter category promotional data based on category name\n const promotionalData =\n retailItem &&\n categoryPromotionalContent?.filter(promoItem => promoItem.categoryName?.toLowerCase() === retailItem?.Name?.toLowerCase());\n\n // First check if image is available from promotional data else read from retail server\n let imageSource: string = 'empty';\n if (ArrayExtensions.hasElements(retailItem?.Images) && retailItem!.Images[0].Uri) {\n imageSource = retailItem!.Images[0].Uri;\n }\n if (isRetail) {\n return {\n id: NavigationMenu.RSItemIdInit++,\n linkText: NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? '',\n linkURL: retailItem?.Url,\n imageSource,\n subMenu: this._getNestedChildren(retailItem, imageSource, addedAllMenu),\n promotionalContent: this.props.config.displayPromotionalImage && promotionalData,\n menuSource: MenuSource.Retail,\n ariaLabel: `${NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? ''} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n return {\n id: NavigationMenu.CMSItemIdInit++,\n linkText: cmsItemText,\n linkURL: (cmsItem && cmsItem.linkUrl && cmsItem.linkUrl.destinationUrl) || '',\n imageDestinationURL: (cmsItem && cmsItem.imageLink && cmsItem.imageLink.destinationUrl) || '',\n imageSource: (cmsItem && cmsItem.image && cmsItem.image.src) || '',\n subMenu: this._getCMSNestedChildren(cmsItem),\n menuSource: MenuSource.Cms,\n shouldOpenNewTab: cmsItem?.openInNewTab,\n ariaLabel: `${cmsItemText} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n\n private _getNestedChildren(category?: CategoryHierarchy, imageSourceUrl?: string, addedAllMenu: boolean = false): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n if (!category || !category.Children || category.Children.length === 0) {\n return [];\n }\n if (!this.props.config.enabletopMenu && addedAllMenu) {\n nestedChildren.push({\n linkText: this.props.resources.allCategoryMenuText,\n imageSource: imageSourceUrl,\n linkURL: getCategoryUrl(category, (this.props.context as unknown) as IActionContext, {})\n });\n }\n category.Children.map((item: CategoryHierarchy, index) => {\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, false));\n });\n return nestedChildren;\n }\n\n private _getCMSNestedChildren(category?: ICmsNavItemsData): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n\n if (!category || !category.subMenus || category.subMenus.length === 0) {\n return [];\n }\n\n category.subMenus.map((item: ISubMenusData, idx: number) => {\n nestedChildren.push(this._constructMenuItemData(undefined, item, false, idx));\n });\n return nestedChildren;\n }\n\n private readonly _setNavigationSource = (sourceType?: navigationMenuSource): void => {\n switch (sourceType) {\n case navigationMenuSource.retailServerOnly:\n this.isRetail = true;\n this.isCMS = false;\n break;\n case navigationMenuSource.cmsOnly:\n this.isRetail = false;\n this.isCMS = true;\n break;\n case navigationMenuSource.all:\n this.isRetail = true;\n this.isCMS = true;\n break;\n default:\n }\n };\n\n private _updateViewport(): void {\n this.viewport = this._getViewport();\n this.setState({ isMobile: this.isMobile });\n }\n\n private _getViewport(): GridSize {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n }\n}\n\nexport default NavigationMenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { INavigationMenuViewProps } from './navigation-menu';\nimport { IMenuItemData } from './navigation-menu.data';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n mobileViewLabelText?: string;\n categoryImageAltText: string;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private currentLevel: number = 0;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\n\n this.currentLevel = 1;\n return (\n \n \n {isMobileView && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: undefined })\n : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem &&\n menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}{' '}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n !NavigationMenuView.isBackTrack\n ? this.setState({ parentMenu: item?.id })\n : this.setState({ parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false)}\n \n );\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true);\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData, menuItemData.id, true);\n }\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions =\n subMenus &&\n subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = option.subMenu && option.subMenu.length > 0;\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1;\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu);\n }\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false\n ): JSX.Element | null {\n const { Link } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\n const categoryImageDisplay =\n !isMobileView &&\n (showCategoryImage || showPromotionalContent) &&\n !ArrayExtensions.hasElements(this.state.categoryImage) &&\n !submenu;\n const promotionalContentDisplay =\n !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 &&\n 'navmenu-multi-level'\n )}\n >\n {menuOptions}\n \n {categoryImageDisplay &&\n this.state.categoryImage &&\n this.state.categoryImage.map(item => (\n \n {this.state.categoryImage && this._getCategoryImage(item)}\n {promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({\n src: imageSrc,\n altText: item.text,\n imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: this.state.activeMenu && this.state.activeMenu === data.id! ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuView.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n private readonly _handleGoBack = () => () => {\n NavigationMenuView.isBackTrack = true;\n this.setState({ activeMenu: this.state.parentMenu });\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState({\n activeMenu: undefined,\n mobileViewLabelText: '',\n categoryImage: null\n });\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Parent user clicked Sub menu list.\n * @param optionLinkText -Sub menu list.\n * @returns Ref.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n if (!NavigationMenuView.isBackTrack && index === 0) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '' });\n }\n }\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n return (\n \n );\n }\n return null;\n };\n}\n\nexport default NavigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleProps, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ITabItemData } from './tab-item.data';\nimport { ITabItemProps } from './tab-item.props.autogenerated';\n\nexport interface ITabItemViewProps {\n TabContentContainer: IModuleProps;\n TabHeaderContainer: IModuleProps;\n tabSlots: INodeProps;\n TabItemContent: INodeProps;\n tabItemType?: TabItemType;\n tabHeader: React.ReactNode;\n}\n\nexport interface ITabItemExtentedProps extends ITabItemProps {\n tabItemType?: TabItemType;\n isSelected?: boolean;\n itemIndex?: number;\n tabId?: string;\n}\n\nexport enum TabItemType {\n TabHeader,\n TabContent\n}\n\n/**\n *\n * TabItem component.\n * @extends {React.Component}\n */\n@observer\nclass TabItem extends React.PureComponent {\n private readonly moduleContentClassName: string = 'ms-tab-item-content';\n\n private readonly moduleHeaderClassName: string = 'ms-tab-item-header';\n\n constructor(props: ITabItemProps) {\n super(props);\n this._renderTabHeader = this._renderTabHeader.bind(this);\n }\n\n public render(): JSX.Element {\n const { slots, renderView, config, data, isSelected, itemIndex } = this.props;\n const index = itemIndex || 0;\n const contentID = getContentID(index, this.props.tabId || '');\n const activeContentIDResult = data && data.activeTabState && data.activeTabState.result;\n const shown =\n activeContentIDResult &&\n activeContentIDResult.tabId === this.props.tabId &&\n activeContentIDResult.activeContentIndex !== undefined\n ? activeContentIDResult.activeContentIndex === index\n : isSelected || false;\n const viewProps = {\n ...this.props,\n TabContentContainer: {\n moduleProps: this.props,\n className: classnames(this.moduleContentClassName, config.className)\n },\n TabHeaderContainer: {\n moduleProps: this.props,\n className: classnames(this.moduleHeaderClassName, config.className)\n },\n TabItemContent: {\n className: 'ms-tab-item-content__content',\n tag: 'section' as NodeTag,\n 'aria-hidden': !shown,\n role: 'tabpanel',\n tabIndex: shown ? 0 : -1,\n id: contentID\n },\n tabHeader: this._renderTabHeader(),\n tabSlots: slots\n };\n return renderView(viewProps) as React.ReactElement;\n }\n\n private _renderTabHeader(): React.ReactNode {\n return <>{this.props.config.tabItemTitle};\n }\n}\n\nexport const getContentID = (index: number, id: string) => {\n return `tab-item-content-${id}-${index}`;\n};\n\nexport default TabItem;\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 { ITabItemViewProps, TabItemType } from './tab-item';\n\nconst TabItemView: React.FC = props => {\n const { tabItemType, tabSlots, TabContentContainer, TabHeaderContainer, TabItemContent, tabHeader } = props;\n\n switch (tabItemType) {\n case TabItemType.TabContent:\n return (\n \n \n {tabSlots &&\n tabSlots.tabItemContent &&\n tabSlots.tabItemContent.length &&\n _renderTabItemContent(tabSlots.tabItemContent)}\n \n \n );\n case TabItemType.TabHeader:\n return {tabHeader};\n default:\n return null;\n }\n};\n\nconst _renderTabItemContent = (items: React.ReactNode[]): JSX.Element | null => {\n return (\n <>\n {items && items.length > 0\n ? items.map((item: React.ReactNode, index: number) => {\n return {item};\n })\n : null}\n \n );\n};\nexport default TabItemView;\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, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { createTabStateInput, getContentID, TabItemType } from '../..';\nimport { ITabData } from './tab.data';\nimport { ITabProps } from './tab.props.autogenerated';\n\n/**\n *\n * Tab component.\n * @extends {React.PureComponent>}\n */\n\nexport interface ICallToActionProps {\n link: INodeProps[];\n}\n\nexport interface ITabViewProps extends ITabProps<{}> {\n heading?: React.ReactNode;\n TabContainer: IModuleProps;\n headerSection: INodeProps;\n tabHeaderSection: INodeProps;\n tabsSection: INodeProps;\n tabItemContainer: INodeProps;\n tabHeaders: React.ReactNode;\n tabContents: React.ReactNode;\n}\n\nexport interface ITabViewStates {\n currentTabIndex: number;\n}\n\n/**\n *\n * Tab component.\n * @extends {React.Component>}\n */\n@observer\nclass Tab extends React.Component, ITabViewStates> {\n public readonly tabIndexQuery: string = 'activeTab';\n\n private activeLink: HTMLLIElement | null;\n\n constructor(props: ITabProps) {\n super(props);\n const { defaultTabIndex } = this.props.config;\n const { slots } = this.props;\n const slotLength = (slots && slots.tabItems && slots.tabItems.length) || 0;\n let initialIndex = defaultTabIndex && defaultTabIndex <= slotLength && defaultTabIndex > 0 ? defaultTabIndex - 1 : 0;\n const queryString: string =\n (this.props.context &&\n this.props.context.request &&\n this.props.context.request.query &&\n this.props.context.request.query.activeTab) ||\n '';\n let queryTabIndex: number = 0;\n if (queryString.indexOf(':') > 0) {\n const arr = queryString.split(':');\n const moduleId = arr[0];\n if (moduleId === this.props.id) {\n queryTabIndex = Number.parseInt(arr[1], 10);\n }\n }\n initialIndex = queryTabIndex > 0 && queryTabIndex <= slotLength ? queryTabIndex - 1 : initialIndex;\n this.state = { currentTabIndex: initialIndex };\n\n this._getTabHeader = this._getTabHeader.bind(this);\n this._getTabContent = this._getTabContent.bind(this);\n this._onClick = this._onClick.bind(this);\n this._onKeyDown = this._onKeyDown.bind(this);\n this._setGetParameter = this._setGetParameter.bind(this);\n this.activeLink = null;\n }\n\n public shouldComponentUpdate(nextProps: ITabProps, nextState: ITabViewStates): 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 {\n const { slots } = this.props;\n const { heading, className } = this.props.config;\n\n const headingComponent = heading && (\n \n );\n const slotLength = (slots && slots.tabItems && slots.tabItems.length) || 0;\n\n // Const queryTabIndex = this.props.context && this.props.context.request && this.props.context.request.query && +this.props.context.request.query.activeTabIndex || 0;\n // let activeIndex = defaultTabIndex && defaultTabIndex <= slotLength && defaultTabIndex > 0 ? defaultTabIndex - 1 : 0;\n // activeIndex = queryTabIndex > 0 && queryTabIndex <= slotLength ? queryTabIndex - 1 : activeIndex;\n\n const tabViewProps = {\n ...this.props,\n TabContainer: {\n moduleProps: this.props,\n className: classnames('ms-tab', className)\n },\n headerSection: { className: 'ms-tab-header-section' },\n tabsSection: { className: 'ms-tab-tabs-section', tag: 'ul' as NodeTag, role: 'tablist' },\n heading: headingComponent,\n config: this.props && this.props.config,\n tabItemContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-tab-content-section'\n },\n tabContents: slotLength > 0 && slots.tabItems.map((item: React.ReactNode, index: number) => this._getTabContent(item, index)),\n tabHeaders: slotLength > 0 && slots.tabItems.map((item: React.ReactNode, index: number) => this._getTabHeader(item, index))\n };\n return this.props.renderView(tabViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: MsDyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public componentDidUpdate(): void {\n const { data } = this.props;\n if (!this.props.context.request.params.isEditor) {\n const dataActionTabId = data && data.activeTabState && data.activeTabState.result && data.activeTabState.result.tabId;\n if (dataActionTabId) {\n if (this.props.id === dataActionTabId) {\n this.activeLink && this.activeLink.focus();\n }\n } else {\n const queryString: string =\n (this.props.context &&\n this.props.context.request &&\n this.props.context.request.query &&\n this.props.context.request.query.activeTab) ||\n '';\n if (queryString.indexOf(':') > 0) {\n const arr = queryString.split(':');\n const moduleId = arr[0];\n if (moduleId === this.props.id) {\n this.activeLink && this.activeLink.focus();\n }\n }\n }\n }\n }\n\n /**\n *Set the activate link value on tab click.\n * @param link -Ref link value.\n */\n private readonly _refHandler = (link: HTMLLIElement | null) => {\n this.activeLink = link;\n };\n\n private _getTabHeader(item: React.ReactNode, index: number): React.ReactNode {\n const { data } = this.props;\n const activeContentIndex =\n data && data.activeTabState && data.activeTabState.result && data.activeTabState.result.activeContentIndex;\n const dataActionTabId = data && data.activeTabState && data.activeTabState.result && data.activeTabState.result.tabId;\n const selected =\n activeContentIndex !== undefined && dataActionTabId === this.props.id\n ? activeContentIndex === index\n : this.state.currentTabIndex === index;\n const contentID = getContentID(index, this.props.id);\n\n return (\n \n \n {React.cloneElement(item as React.ReactElement, {\n tabItemType: TabItemType.TabHeader,\n isSelected: index === this.state.currentTabIndex,\n itemIndex: index,\n tabId: this.props.id\n })}\n \n \n );\n }\n\n private readonly _onClick = (index: number, id: string) => (e: React.MouseEvent) => {\n const activeTabState = { activeContentIndex: index, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index + 1)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n };\n\n private readonly _onKeyDown = (index: number, id: string) => (e: React.KeyboardEvent) => {\n if (e.keyCode === 13) {\n const activeTabState = { activeContentIndex: index, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index + 1)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n }\n\n if (e.keyCode === 39 || e.keyCode === 37) {\n const { slots } = this.props;\n const slotLength = (slots && slots.tabItems && slots.tabItems.length) || 0;\n\n if (e.keyCode === 39) {\n // If we're at the end, go to the start\n if (index + 1 === slotLength) {\n index = -1;\n }\n const activeTabState = { activeContentIndex: index + 1, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index + 1 });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index + 2)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n\n // Move left\n } else if (e.keyCode === 37) {\n // If we're at the start, move to the end\n if (index === 0) {\n index = slotLength;\n }\n const activeTabState = { activeContentIndex: index - 1, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index - 1 });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n }\n }\n };\n\n private _getTabContent(item: React.ReactNode, index: number): React.ReactNode {\n return (\n \n {React.cloneElement(item as React.ReactElement, {\n tabItemType: TabItemType.TabContent,\n isSelected: index === this.state.currentTabIndex,\n itemIndex: index,\n tabId: this.props.id\n })}\n \n );\n }\n\n private _setGetParameter(requestContext: MsDyn365.IRequestContext, paramName: string, paramValue: string): string {\n let url;\n\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n url = new URL(window.location.href);\n } else {\n url = new URL(requestContext.url.requestUrl.href);\n }\n\n const params = new window.URLSearchParams(url.search);\n params.set(paramName, paramValue);\n url.search = decodeURIComponent(params.toString());\n return url.toString();\n }\n}\n\nexport default Tab;\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 { ITabViewProps } from './tab';\n\nconst tabView: React.FC = props => {\n const { heading, TabContainer, tabHeaders, tabContents } = props;\n if (!props.heading && !props.tabHeaders && !props.tabContents) {\n props.context.telemetry.error('Tab content is empty, module wont render');\n return null;\n }\n return (\n \n {heading}\n {tabHeaders}\n {tabContents}\n \n );\n};\n\nexport default tabView;\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 { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\n\n/**\n * INavigationMenuViewRootProps.\n */\nexport interface INavigationMenuViewRootProps {\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\n}\n\n/**\n * Represent navigation menu state interface.\n */\nexport interface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: Msdyn365.IImageData[] | null;\n mobileViewLabelText?: string;\n drawerKeyValue: Msdyn365.IDictionary;\n isOnlyMobile: boolean;\n isNavOpen: boolean;\n}\n\n/**\n * NavMenuConstants enum.\n */\nexport enum NavMenuConstants {\n zero = 0,\n one = 1,\n two = 2,\n three = 3,\n four = 4,\n escapeKey = 27,\n rootMenu = 1\n}\n\n/**\n * GridSizes.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Get category image.\n * @param props - Navigation menu props.\n * @param categoryImage - Category Image.\n * @param alttext - AltText String.\n * @returns Returns Node.\n */\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\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 { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootDisabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootDisabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n\n this.state = {\n activeMenu: 1,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = 1;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: 1,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = 1;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props.navProps;\n\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (ArrayExtensions.hasElements(menuItemData)) {\n menuItemData[0].id = 1;\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of menuItemData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\n if (!menu) {\n return null;\n }\n\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\n const item: IMenuItemData = menu[Number(index)];\n\n if (item.id === this.state.activeMenu) {\n if (!NavigationMenuRootDisabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\n }\n return item;\n }\n const found = this._getFromSubMenu(item.id, item.subMenu);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootDisabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootDisabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootDisabled;\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 { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootEnabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootEnabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private menuItemData: IMenuItemData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n this.state = {\n activeMenu: NavMenuConstants.rootMenu,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n this._addShopAllLink();\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = NavMenuConstants.one;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: NavMenuConstants.rootMenu,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = NavMenuConstants.one;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { Navigation } = this.props.navProps;\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n let menuItemData: IMenuItemData[] = [];\n if (this.state.isOnlyMobile) {\n menuItemData = this.menuItemData;\n } else {\n menuItemData = this.props.navProps.menuItemData;\n }\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n let cmsMenuData: IMenuItemData[] | undefined = [];\n let retailMenuItemData: IMenuItemData[] | undefined = [];\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\n\n for (const item of retailMenuData) {\n retailMenuItemData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n item.subMenu = retailMenuItemData;\n }\n\n for (const item of menuItemData) {\n cmsMenuData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail);\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n let menuItem: IMenuItemData | null = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({\n parentMenu: undefined\n });\n } else {\n this.setState({\n parentMenu: undefined,\n mobileViewLabelText: menuItemDatum.linkText\n });\n }\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum);\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of retailMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n\n for (const [index, item] of cmsMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item?.subMenu;\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\n const subMenu: IMenuItemData = subMenus[Number(index)];\n let parentMenuId = item?.id;\n\n if (subMenu.id === this.state.activeMenu) {\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\n parentMenuId = undefined;\n }\n\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\n }\n return subMenu;\n }\n const found = this._getFromSubMenu(subMenu);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootEnabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootEnabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Add shop all link for Mobile submenu.\n */\n private readonly _addShopAllLink = (): void => {\n const { menuItemData } = this.props.navProps;\n this.menuItemData = menuItemData;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n this.menuItemData[0].subMenu?.map(item => {\n const shopAllObject = {};\n Object.assign(shopAllObject, { imageSource: item.imageSource });\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\n Object.assign(shopAllObject, { linkURL: item.linkURL });\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\n item.subMenu.unshift(shopAllObject);\n }\n return item;\n });\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootEnabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\n\n/**\n * Render the Navigation menu.\n * @param props - The navigation menu view props.\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\n */\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\n if (props.config.enabletopMenu) {\n return ;\n }\n\n return ;\n};\n\nexport default navigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageSettings, Image, RichTextComponent } from '@msdyn365-commerce/core';\nimport { IWriteReviewData, IWriteReviewViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IWriteReviewProps } from '../definition-extensions/write-review.ext.props.autogenerated';\n\n/**\n * Render Product Image.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductImage = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\n \n );\n};\n\n/**\n * Render Product Description.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductDescription = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const product = props.data.product.result;\n return (\n \n
{renderProductImage(props)}
\n
\n
{product?.Name}
\n
{product?.ItemId}
\n
\n
\n );\n};\n\n/**\n * Create Write Review Modal.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst createReviewModal = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const { resources, moduleProps, reviewModal } = props;\n\n return (\n \n {reviewModal.modalHeader}\n \n \n \n {renderProductDescription(props)}\n \n
{resources.selectRatingLabel}
\n {reviewModal.rating}\n
\n
\n \n {resources.reviewTitleLabel}\n {reviewModal.titleInput}\n \n \n {resources.reviewTextLabel}\n {reviewModal.textInput}\n \n {reviewModal.privacyPolicyUrl}\n {reviewModal.error}\n
\n
\n \n {reviewModal.submitButton}\n {reviewModal.cancelButton}\n \n
\n );\n};\n\n/**\n * WriteReview view.\n * @param props - WriteReview ViewProps.\n * @returns WriteReview view module.\n */\nconst WriteReviewView: React.FC> = props => {\n const { config, heading, signInMessage, signInButton, modalToggle, moduleProps } = props;\n const { paragraph } = config;\n const isAuthenticated = props.context.request.user.isAuthenticated;\n const text = paragraph && ;\n\n return (\n \n {heading}\n {!isAuthenticated ? (\n <>\n {signInMessage}\n {signInButton}\n \n ) : (\n <>\n {text}\n {modalToggle}\n {createReviewModal(props)}\n \n )}\n \n );\n};\n\nexport default WriteReviewView;\n"],"names":["GenericPopup","React","constructor","state","popupVisible","recallVisible","_onDismissRecall","this","createCookieRecall","setState","_onDismissPopup","props","config","recallEnabled","recallShowAfterPopup","setTimeout","_displayRecallNow","_displayPopupNow","cookieCheckbox","createCookie","render","className","viewProps","_objectSpread","classNamePopup","classnames","classNameRecall","onDismissRecall","onDismissPopup","handleTextRecall","renderView","cookie","Cookies","hidePopupIfCookieIsSet","get","modalId","delayRecall","delayPopup","expireDays","date","Date","setDate","getDate","options","expires","set","recallDismissableForDays","slots","recallDismissable","modalHeader","recallText","closeButtonAriaLabel","closeButtonLabel","resources","_window$dataLayer","_window$dataLayer$pus","label","modalName","window","dataLayer","push","call","event","eventCategory","eventAction","eventLabel","handleClose","popupElement","document","querySelector","form","getElementsByTagName","length","_window$dataLayer2","_window$dataLayer2$pu","Modal","id","isOpen","onClosed","ModalHeader","toggle","ModalBody","Object","assign","renderModuleAttributes","content","onClick","PvaChatConnector","componentDidMount","isOboRequest","context","request","url","botFrameworkCDNURL","app","pvaChatConnectorBotFrameworkCDNURL","script","createElement","src","async","crossOrigin","body","appendChild","CartAmountTrigger","ProactiveChatTrigger","super","totalInCart","min","proactiveOnCartAmountMin","max","proactiveOnCartAmountMax","telemetry","debug","name","cart","_getCart","isEmpty","TotalAmount","retVal","getContextProvider","eCommerceCustIsProactiveChat","eCommerceCustProactiveType","eCommerceCustProactiveShoppingCartAmount","getMessage","proactiveOnCartAmountMessage","proactiveDefaultMessage","getCartState","actionContext","CartNumberOfItemsTrigger","numberOfItems","proactiveOnCartNoOfItemsMin","proactiveOnCartNoOfItemsMax","TotalItems","eCommerceCustProactiveShoppingCartNumberOfItems","proactiveOnCartNoOfItemsMessage","CartSpecificProductTrigger","product","isValid","CartLines","_cart$cart$CartLines","i","_cart$cart$CartLines2","proactiveOnCartSpecificProductList","_this$props$config$pr","j","_this$props$config$pr2","ItemId","eCommerceCustProactiveShoppingCartSpecificProduct","proactiveOnCartSpecificProductMessage","ProactiveChatNames","DateRangeTrigger","start","_toDate","proactiveOnDateRangeStart","end","proactiveOnDateRangeEnd","now","setHours","getTime","DateRange","eCommerceCustProactiveFromDate","toUTCString","eCommerceCustProactiveToDate","proactiveOnDateRangeMessage","dateParts","split","FromSpecificPageTrigger","proactiveOnFromSpecificPageList","fromSpecificPageTrimmed","trim","referrer","indexOf","FromSpecificPage","eCommerceCustProactiveCameFromPage","proactiveOnFromSpecificPageMessage","PageVisitTrigger","visits","cookieName","cookies","expdate","setTime","isConsentGiven","setConsentCookie","_updateVisitCounter","proactiveOnPageVisitNumber","clear","domain","location","hostname","path","pathname","PageVisits","eCommerceCustProactiveNumberOfVisits","proactiveOnPageVisitMessage","value","SpecificCountryRegionTrigger","customerCountryCode","suggestedMarket","proactiveOnSpecificLocation","toLowerCase","eCommerceCustProactiveCountryCode","SpecificLocation","proactiveOnSpecificCountryRegionMessage","SpecificPageTrigger","proactiveOnSpecificPageList","specificPageTrimmed","href","SpecificPage","proactiveOnSpecificPageMessage","WaitOnTimeTrigger","proactiveOnWaitTimeSeconds","isNaN","waitTimeInMilliseconds","Number","undefined","triggerTime","WaitOnTime","eCommerceCustProactiveTimeOnPage","proactiveOnWaitTimeMessage","ProactiveTriggers","user","userId","uuidv4","_getContext","data","enabled","timeout","message","_proactiveCheck","e","exception","provider","_getProvider","_this$props$context$r","eCommerceOperatingUnitNumber","apiSettings","oun","eCommerceBaseUrl","baseUrl","eCommerceDataAreaId","channel","InventLocationDataAreaId","UserId","AccountNumber","customerAccountNumber","Email","emailAddress","FirstName","firstName","anonymousUserName","LastName","lastName","Name","eCommerceCustPageURL","eCommerceCustChatType","proactiveChatEnabled","proactive","_isProactive","validate","getChatWrapperStyle","position","top","right","bottom","left","zIndex","display","justifyContent","getMaximizedChatWrapperStyle","isMobileDevice","height","width","padding","chatHeight","chatWidth","getChatButtonStyle","alignItems","backgroundColor","startChatButtonBackgroundColor","color","startChatButtonTextColor","borderColor","startChatButtonBorderColor","borderRadius","startChatButtonBorderRadius","borderStyle","startChatButtonBorderStyle","borderWidth","startChatButtonBorderWidth","storeLogoURL","cursor","outlineStyle","alignSelf","boxShadow","WebkitBoxShadow","MozBoxShadow","getButtonStoreLogoStyle","headerBackgroundColor","headerTextColor","marginRight","boxSizing","getChatStoreLogoStyle","margin","getChatMessagesStyle","minimized","getChatMessageHeader","chatHeaderHeight","backgroundImage","headerBackgroundImageURL","backgroundRepeat","flexDirection","chatBorderStyle","chatBorderWidth","getMinimizeButtonStyle","borderTop","borderLeft","borderRight","borderBottom","marginTop","getCloseButtonStyle","border","getChatMessageContent","chatBorderColor","getProactiveWrapperStyle","getProactiveMessageHeader","getProactiveMessageContent","getProactiveButtonStyle","outline","fontFormat","font","arr","join","CommerceChatStore","setNewMessage","setNewMessageAction","powervaDirectlineTokenURL","botID","tenantID","fetch","method","then","r","json","token","pvaChatConnectorPowervaDirectlineTokenURL","pvaChatConnectorBotID","pvaChatConnectorTenantID","_ref","dispatch","next","action","type","payload","language","navigator","_activity$from","activity","from","role","triggerQuery","text","TermsAndConditionsLink","target","rel","CustomWebChat","_ref2","Components","WebChat","AccessKeySinkSurface","BasicToaster","BasicTranscript","termsAndConditionsLink","BasicSendBox","setUserId","useState","useMemo","ctx","toString","directLine","createDirectLine","directLineToken","commerceChatStore","store","createStore","_ref3","actionHandler","styleOptions","bubbleStyling","bubbleBackground","bubbleTextColor","bubbleBorderColor","bubbleBorderRadius","bubbleBorderStyle","bubbleBorderWidth","bubbleFromUserBackground","bubbleFromUserTextColor","bubbleFromUserBorderColor","bubbleFromUserBorderRadius","bubbleFromUserBorderStyle","bubbleFromUserBorderWidth","getBubbleStyling","avatarStyling","avatarBorderRadius","avatarSize","botAvatarBackgroundColor","botAvatarImage","botAvatarInitials","userAvatarBackgroundColor","userAvatarImage","userAvatarInitials","showAvatarInGroup","getAvatarStyling","suggestedActionStyling","suggestedActionLayout","suggestedActionBackground","suggestedActionTextColor","suggestedActionBorderColor","suggestedActionBorderRadius","suggestedActionBorderStyle","suggestedActionBorderWidth","suggestedActionDisabledBorderStyle","suggestedActionDisabledBorderWidth","suggestedActionDisabledTextColor","suggestedActionHeight","suggestedActionImageHeight","suggestedActionsCarouselFlipperCursor","suggestedActionsCarouselFlipperBoxWidth","suggestedActionsCarouselFlipperSize","suggestedActionsFlowMaxHeight","suggestedActionsStackedHeight","suggestedActionsStackedOverflow","suggestedActionsStackedLayoutButtonMaxHeight","suggestedActionsStackedLayoutButtonTextWrap","getSuggestedActionStyling","otherStyling","groupTimestamp","sendTimeout","sendTimeoutForAttachments","timestampColor","timestampFormat","notificationDebounceTimeout","hideToaster","toasterHeight","toasterMaxHeight","toasterSingularMaxHeight","toastFontSize","toastIconWidth","toastSeparatorColor","toastTextPadding","toastErrorBackgroundColor","toastErrorColor","toastInfoBackgroundColor","toastInfoColor","toastSuccessBackgroundColor","toastSuccessColor","toastWarnBackgroundColor","toastWarnColor","typingAnimationBackgroundImage","typingAnimationDuration","typingAnimationHeight","typingAnimationWidth","videoHeight","markdownExternalLinkIconImage","markdownRespectCRLF","internalLiveRegionFadeAfter","accent","subtle","getOtherStyling","hideUploadButton","primaryFont","getChatStyleOptions","Composer","userID","INVALID_TOKEN","loaded","setLoaded","setMinimized","newMessage","setToken","isProactive","setIsProactive","proactiveMessage","setProactiveMessage","closed","setClosed","setProvider","isMobile","variant","VariantType","Browser","Viewport","chatStyle","getChatStyling","ChatWrapperStyle","MaximizedChatWrapperStyle","ChatButtonStyle","ButtonStoreLogoStyle","ChatStoreLogoStyle","ChatMessagesStyle","ChatMessageHeader","MinimizeButtonStyle","CloseButtonStyle","ChatMessageContent","ProactiveWrapperStyle","ProactiveMessageHeader","ProactiveMessageContent","ProactiveButtonStyle","RedDotStyle","background","handleMaximizeButtonClick","useEffect","getDirectLineToken","catch","contextProvider","ContextProvider","prov","init","isValidToken","style","alt","fontWeight","fontSize","chatButtonHeader","chatButtonText","flexGrow","handleMinimizeButtonClick","handleCloseButtonClick","version","viewBox","xmlSpace","d","fill","ChatCore","unableToLoadChatMessage","interval","setInterval","clearInterval","Chat","SignUpItem","wrapper","errorMessage","input","Node","SignUpEmailVerification","email","buttonWrapper","buttons","successMessage","key","map","button","SignUpLoading","_ref4","modal","modalBody","icon","signUp","viewState","loading","defaultAADConainer","aadConainer","heading","signUpLocalAccount","Module","isShowLoading","LocalAccount","_props$context","_props$context2","localAccount","items","emailVerification","disclaimer","locale","uiLocales","query","ui_locales","regionCRM","includes","RegionCRM","birthDate","setBirthDate","formatDateState","setFormatDateState","pattern","patternUS","checkDate","currentTarget","today","match","signUpButton","getElementById","console","log","onclick","preventDefault","stopPropagation","item","isRequired","verificationControlWrapper","htmlFor","birthdayLabelText","birthdayErrorText","maxLength","onKeyUp","onPaste","Msdyn365","BirthdayText","renderThirdPartyPrivacy","defaultChecked","textGenericMarketing","required","textThirdParty","error","index","AccountGenericTile","handleHeadingChange","handleLinkTextChange","linkIndex","links","linkText","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","moduleProps","tag","editProps","onEdit","requestContext","LinksComponent","onTextChange","_mapEditableLinks","linkdata","editableLinks","payLoad","getPayloadObject","forEach","link","contentAction","etext","attributes","getTelemetryAttributes","editableLink","ariaLabel","linkUrl","destinationUrl","openInNewTab","additionalProperties","disabled","Button","description","errorClassName","GetMaxLength","parsedMaxLength","parseInt","onChange","forId","SignIn","moduleClassName","handleParagraphChange","signInDisclaimer","handleSignInHeadingChange","signInHeading","handleSignUpHeadingChange","signUpHeading","_onInit","_prePopulateData","_updateErrorMessage","initializationTimer","_isInitializationSuccessful","isInitialized","emailRegex","emailId","SA_FIELDS","AttributeFields","ID","errorMessages","requiredField_email","requriedEmailError","requiredField_password","requriedPasswordError","invalid_email","invalidEmailError","invalid_password","invalidPasswordError","unknown_error","unknownError","EmailRegex","defaultRegex","source","componentDidUpdate","shouldComponentUpdate","nextProps","nextState","signIn","SignInLoadingIconComponent","SignInLoadingMessageComponent","loadingMessage","signInSection","signInSectionHeading","signInLocalAccount","_renderInput","emailAddressLabelText","emailAddressAriaLabel","passwordLabelText","forgetPassword","SignInLinkComponent","forgotPasswordButtonAriaLabel","forgotPasswordButtonText","SignInErrorComponent","signInButton","SignInButtonComponent","loginButtonAriaLabel","loginButtonText","signInSocialAccount","socialAccounts","_renderSocialAccount","facebookButtonText","facebookButtonAriaLabel","facebookIcon","microsoftButtonText","microsoftButtonAriaLabel","microsoftIcon","signInB2BAccount","_renderB2BSocialAccount","b2bButtonText","b2bButtonAriaLabel","displayB2bAccountManagerSignin","signUpSection","signUpSectionHeading","signUpDescription","SignInDescriptionComponent","signUpDescriptionText","signUpLink","signUpButtonAriaLabel","signUpButtonText","labelText","SignInLabelComponent","SignInInputComponent","iconImage","image","_createImageMarkup","SignInTextComponent","_displayB2bAccountManagerSignin","imageProps","gridSettings","imageSettings","pictureClassName","shouldSkipToMainImage","__decorate","observable","observer","SignInLoading","SocialAccount","B2BAccount","createSearchResultModal","modalProps","refineMenu","sortByDropDown","isRecoSearchPage","createModalBody","modalFooter","renderSort","renderRefiner","refiners","RefineMenuContainer","RefinerSectionContainer","submenu","SortingContainer","renderCategoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryHierarchySeparator","category","renderTitle","title","TitleContainer","titlePrefix","titleText","titleCount","_props$context$action","SearchResultContainer","products","pagination","ProductsContainer","ProductSectionContainer","choiceSummary","modalToggle","searchResultModal","TitleViewProps","categoryHierarchy","sortByOptions","CategoryNavContainer","RefineAndProductSectionContainer","FeatureSearchContainer","similarLookProduct","recommendation","InvoiceDetailsHeaderComponent","msdyn365Commerce","createComponent","component","invoiceDetails","onError","invoiceNumberText","invoiceIdLabel","replace","invoiceOrderItemsText","lines","invoiceOrderItem","invoiceOrderItems","invoiceInfoContainerClassName","orderInfoContainerClassName","orderInfoClassName","orderMainInfoClassName","orderDetailsClassName","actionsClassName","amountSummaryClassName","orderDate","invoiceDate","cultureFormatter","formatDate","year","month","day","formatShortDate","dueDate","formatLongDate","dueDateText","invoicePaymentDueDateText","isOnBehalfOfRequest","invoicePlacedByLabel","customerName","invoiceAmountDueText","formatAmount","amount","currencyCode","formatCurrency","amountDue","PayInvoiceComponent","typeName","invoice","InvoiceDetailsPaymentDetailsComponent","invoicePaymentDetails","lineClassName","ObjectExtensions","isNullOrUndefined","totalDiscount","invoicePaymentDiscounts","subtotal","invoicePaymentSubtotal","totalCharges","invoicePaymentCharges","totalTax","invoicePaymentTax","totalAmount","invoicePaymentInvoiceTotal","ArrayExtensions","hasElements","line","InvoiceDetailsProductsComponent","productLineClass","productLineInfoContainerClass","productLineDetailsClass","productLineSmallDetailsClass","quantity","Quantity","productUrl","ProductName","ProductId","getProductPageUrlSync","RecordId","_renderProductImage","cropFocalRegion","fallbackImage","getFallbackImageUrl","Image","altText","primaryImageUrl","fallBackSrc","viewports","xs","q","w","h","lg","xl","lazyload","loadFailureBehavior","_renderProductDimensions","StringExtensions","isNullOrWhitespace","ColorName","invoiceProductColor","SizeName","invoiceProductSize","StyleName","invoiceProductStyle","Price","invoiceQuantity","NetAmount","InvoiceDetailsModel","Id","InvoiceDate","CustomerName","InvoiceDueDate","AmountBalance","status","InvoicePaidStatusValue","SalesInvoiceLine","_products$find","find","PrimaryImageUrl","TotalDiscount","InvoiceSubtotal","TotalCharges","TotalTaxAmount","CurrencyCode","InvoicePaidStatus","Paid","InvoiceDetails","errorState","otherError","_onAddToCartFailed","bind","_setPayInvoiceErrorModalClose","_getProducts","ChannelId","invoiceDetailsModel","payInvoiceErrorModalOpen","header","_renderHeader","_renderProducts","paymentDetails","_renderPaymentDetails","payInvoiceError","_renderInvoiceErrors","_className","channelId","arguments","productInputs","filter","ProductInput","getSimpleProductsAction","newErrorState","errorHost","errorCode","_this$state$errorStat","payInvoiceErrorDialogHeader","payInvoiceErrorDialogBodyErrorTitle","payInvoiceErrorDialogBodyErrorDescription","payInvoiceErrorDialogFooterGoToCartButtonText","payInvoiceErrorDialogFooterCancelButtonText","cartUrl","getUrlSync","InvoiceErrorComponent","showError","errorDialogHeader","errorDialogBodyErrorTitle","errorDialogBodyErrorDescription","errorDialogFooterGoToCartButtonText","errorDialogFooterCancelButtonText","setPayInvoiceErrorModalClose","InvoiceDetailsView","messageHeader","Alert","assertive","ModalFooter","InvoicesFilterState","getInvoicesFilterStateResources","filterState","ShowAll","invoicesFilterShowAll","invoiceStatusPaid","PartiallyPaid","invoiceStatusPartiallyPaid","Unpaid","invoiceStatusUnpaid","Error","onClickHandler","onStateClick","InvoicesFilterComponent","popoverRef","popoverState","setPopoverState","togglePopover","setFilterState","currentState","onFilterStateClick","clickedState","onFilterStateChanged","innerRef","Popover","placement","EnumExtensions","getEnumValues","renderFilterStateItem","stateStringRepresentation","InvoicesTableHeaderComponent","rowClassName","switchCheckedState","onSelectAll","isSelectedAll","headerCells","getMobileHeaderCells","invoiceListSelectAllRadioAriaLabelText","checked","invoicesText","invoiceDateMobileText","getDesktopHeaderCells","invoiceDateText","invoiceUsersText","invoiceAmountText","invoiceDueDateText","invoiceStatusText","invoiceActionsText","onRequestSpecificInvoice","requestInvoiceButtonReference","onRequestInvoice","setShowPreviousActions","onClickViewDetails","linkToInvoiceDetails","MsDyn365","isBrowser","isShowActions","setShowActions","shouldShowActions","extraActionsPopup","invoiceViewDetailsButtonAriaLabel","invoiceViewDetailsButtonText","invoiceActionsButtonTextAriaLabel","invoiceActionsButtonIsOnBehalfOfTextAriaLabel","showActions","getInvoiceDetailsPageUrlSync","actionsContainerClassName","payInvoiceClassName","reference","payInvoiceReferences","RequestInvoiceButton","innerReference","invoiceReferences","requestInvoiceButtonLabel","invoiceRequestButtonLabel","onClicked","InvoicesTableRowComponent","onSelectLine","isSelected","rowCells","getMobileRowCells","invoiceRowArialabel","format","invoiceListSelectRadioAriaLabelText","getInvoiceStatusText","getDesktopRowCells","customer","isCurrentUser","invoiceCurrentUser","isMobileView","viewport","_window","device","Type","innerWidth","sm","md","getViewport","onSelectAllHandler","invoices","InvoicesTableComponent","setIsMobile","updateViewport","addEventListener","headerClassName","all","isAdmin","IsB2bAdmin","invoiceButtonReferences","payInvoiceButtonReferences","MakePaymentComponentActions","_event","setDisabled","payInvoices","buttonReferences","MakePaymentComponent","hasInvoices","canBePaid","makePaymentButtonAriaLabel","makePaymentButtonText","PayInvoiceComponentActions","payInvoiceButtonAriaLabel","payInvoiceButtonText","InvoiceModel","CustomerAccountNumber","invoiceStatus","None","invoiceStatusNone","invoicesToAdd","errorReason","failureReason","cartState","result","addInvoicesToCart","invoiceIds","_result$errorDetails","_result$errorDetails2","errorDetails","LocalizedMessage","ErrorResourceId","onSubmitRequestClick","onClosing","filteredInvoices","onSubmitRequest","checkboxRef","closingFlag","_inputInvoice$current","current","searchInputChangedHandler","setSearchInput","onCancelHandler","renderInvoiceOptions","setSelectedInvoiceIndex","_invoice","_checkboxRef$current$","onInvoiceSelect","onInvoiceSelectHandler","checkboxId","checkboxName","ref","RequestInvoiceModal","isModalOpen","modalHeaderLabel","sendToEmailLabel","submitRequestLabel","cancelLabel","searchPlaceholderLabel","invoicesFoundString","singleInvoiceFoundString","searchButtonAltText","selectedInvoiceIndex","setFilteredInvoices","searchInput","shouldShowSearchResults","setShouldShowSearchResults","invoiceOptionsData","invoiceOptions","setInvoiceOptions","focusElement","_focusElement$current","focus","searchEntered","searchEnteredHandler","updatedInvoices","isNullOrEmpty","toLocaleUpperCase","searchResultString","invoicesFoundReplaceIndex","horizontalPosition","verticalPosition","autoFocus","fade","onOpened","setFilteredInvoicesToSelectedInvoices","selectedInvoices","requestInvoiceDialogAriaLabel","substring","placeholder","InvoicesList","buttonChildReference","buttonChildPayButtonReference","_onToggleInvoiceRequestParentModal","selectedButtonElement","payInvoiceRequestReference","_onToggleInvoiceRequestModal","_queryResultSettings","QueryResultSettingsProxy","fromModuleData","QueryResultSettings","makePaymentReference","_updateInvoicesState","_handleFilterStateChange","_loadMoreInvoices","_requestInvoice","_requestSpecificInvoice","invoicesFilterState","isLoading","isPageLoaded","isInvoiceRequestModalOpen","_customerBalance$resu","_customerBalance$resu2","_heading$text","customerBalance","invoicesListTitle","invoicesListDescTitle","invoicesListDescCount","amountText","OpenInvoiceBalance","toFixed","Currency","totalCount","OpenInvoiceCount","countText","invoicesListTitleHeading","Heading","invoiceRequestModal","_renderInvoiceRequestModal","_renderInvoicesFilter","_renderPagination","_renderListContainer","_renderEmptyInvoiceLinesPageContent","invoicesData","_initializeWithInvoices","reaction","_this$props$data$b2bU","callerContext","b2bUserId","b2bUserInformation","B2BUserId","invoiceId","BusinessPartnerUsersDataActions","BusinessPartnerOperationDeliveryType","_addInvoices","newInvoices","concat","containerClass","actionsContainerClass","invoiceEmptyInvoiceLinesTitle","invoiceEmptyInvoiceLinesDescription","invoiceEmptyInvoiceLinesContinueShoppingButtonAriaLabel","invoiceEmptyInvoiceLinesContinueShoppingButtonText","containerHeaderClass","containerContentClass","_renderMakePayment","_renderInvoiceRequestButton","_renderInvoicesList","searchCriteria","businessPartner","getCurrentAsync","BusinessPartnerId","getCustomer","GetCustomerInput","CustomerId","InvoicePaidStatusValues","_getInvoicesSearchCriteria","Paging","Skip","getInvoices","GetInvoicesInput","filterClassName","tableClassName","_newErrorState$errorR","invoiceErrorInvoiceIdNotExist","invoiceErrorFailedAddInvoiceToCart","shouldShowAdditionalInfoInPopup","makePaymentResources","_getSelectedInvoices","moduleId","moduleTypeName","navigationUrl","_this$state$selectedB","invoiceErrorMessageHeader","_data$invoices","Top","invoicesLoadMore","invoiceRequestModalCancelLabel","invoiceRequestModalSubmitLabel","invoiceRequestModalHeaderLabel","invoiceRequestModalSendToEmailLabel","invoiceRequestModalSearch","invoiceRequestModalInvoiceSearchDisplay","invoiceRequestModalSingleInvoiceSearchDisplay","invoiceRequestModalSearchButton","_this$state$selectedB2","specificInvoice","InvoiceListView","MenuTypeIndexId","MenuSource","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","navigationMenuSource","menuItemList","nameTranslations","nameTranslation","Language","Text","resizeThrottledEventHandler","addThrottledEvent","componentWillUnmount","removeEventListener","_this$props$config$di","_this$props$config$di2","_mapData","isEmptyOrNullObject","Navigation","MenuList","ListItem","showCategoryImage","displayCategoryImage","showPromotionalContent","displayPromotionalImage","Link","DivContainer","ImageDivContainer","ImageContainer","Span","MobileDescriptionContainer","MobileBackButton","backButtonAriaLabel","MobileDescriptionLabel","menuItemData","mergedData","categories","_constructMenuItemData","cmsNavItems","idx","_constructTopMenuItemData","_this$props$config$en","_this$props$config$ro","enabletopMenu","mergedRootMenuData","topMenu","rootMenuNavigation","linkURL","imageSource","subMenu","retailItem","cmsItem","addedAllMenu","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","promoItem","_promoItem$categoryNa","_retailItem$Name","categoryName","_NavigationMenu$getFr","_NavigationMenu$getFr2","Images","Uri","RSItemIdInit","getFriendlyName","NameTranslations","Url","_getNestedChildren","promotionalContent","menuSource","Retail","CMSItemIdInit","imageDestinationURL","imageLink","_getCMSNestedChildren","Cms","shouldOpenNewTab","imageSourceUrl","nestedChildren","Children","allCategoryMenuText","getCategoryUrl","subMenus","_getViewport","computed","NavigationMenuView","currentLevel","_updateCategoryImage","categoryImageSrc","option","promotionalImage","imageSrc","promotionalItemImageSettings","categoryImage","categoryImageAltText","_handleDropdownToggle","parentId","isBackTrack","activeMenu","mobileViewLabelText","parentMenu","_handleGoBack","_handleClickOutside","menuNode","contains","_handleFocusOutside","relatedTarget","_closeSubmenu","_shouldAddFocusMenuRef","optionLinkText","_getCategoryImage","defaultImageSettings","_categoryImage$imageS","generateImageUrl","categoryImageSettings","menuItemRef","_this$menuItemRef$cur","children","tabIndex","_renderDisplay","menuItem","menuItemDatum","_getFromSubMenu","_createMenuItemList","found","_renderSubMenu","_renderButtonMenuItem","_renderLinkMenuItem","_renderSpanMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","levelClassName","menuOptions","hasOptions","haveSubmenu","Math","round","_renderMenu","onFocus","hoverEffect","isParent","imagesource","onMouseOver","onTelemetryClick","_renderPromotionalLink","level","currentItem","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","TabItemType","TabItem","moduleContentClassName","moduleHeaderClassName","_renderTabHeader","itemIndex","contentID","getContentID","tabId","activeContentIDResult","activeTabState","shown","activeContentIndex","TabContentContainer","TabHeaderContainer","TabItemContent","tabHeader","tabSlots","tabItemTitle","_renderTabItemContent","tabItemType","TabContent","tabItemContent","TabHeader","Tab","tabIndexQuery","_refHandler","activeLink","_onClick","update","createTabStateInput","currentTabIndex","newUrl","_setGetParameter","String","history","pushState","_onKeyDown","keyCode","slotLength","tabItems","defaultTabIndex","initialIndex","queryString","activeTab","queryTabIndex","_getTabHeader","_getTabContent","headingComponent","tabViewProps","TabContainer","headerSection","tabsSection","tabItemContainer","tabContents","tabHeaders","params","isEditor","dataActionTabId","selected","onKeyDown","paramName","paramValue","URL","requestUrl","URLSearchParams","search","decodeURIComponent","NavMenuConstants","getCategoryImage","alttext","categoryImageUrl","navProps","_props$navProps$confi","imageData","NavigationMenuRootDisabled","supportedLevel","four","zero","escapeKey","_toggleNavBar","previousState","isNavOpen","_bindDesktopCategoryClick","menuId","isDrawerOpen","drawerKeyValue","newPair","categoryImageSource","isOnlyMobile","_closeNavMenu","_this$menuNode$curren","_escFunction","_this$menuNode$curren2","_customUpdateViewport","customResizeThrottledEventHandler","_renderMobileMenu","hamburgerAriaLabel","_renderCollapseMenu","Collapse","_renderDesktopMenu","_renderDrawerLink","entries","parentMenuId","menu","one","subMenuArray","isSubMenu","_this$props$navProps$","_this$props$navProps$2","rootMenu","subMenuItem","isEnableMultiSupportMenu","three","getMenuItem","isHavingSubmenu","two","_renderSubMenuDrawer","_renderLinkMenuItemLevelOne","_this$props$navProps$3","toggleButtonText","buttonText","keys","colProps","Drawer","collapseProps","openGlyph","closeGlyph","glyphPlacement","onToggle","menuSubItem","isHoverEffect","isSubmenu","_this$state$categoryI","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","_item$src","NavigationMenuRootEnabled","_addShopAllLink","_this$menuItemData$0$","shopAllObject","unshift","cmsMenuData","retailMenuItemData","retailMenuData","JSON","parse","stringify","renderProductDescription","_props$data$product$r","primaryImageSource","imageUrl","renderProductImage","signInMessage","paragraph","isAuthenticated","RichTextComponent","reviewModal","inputRow","selectRatingLabel","rating","reviewTitleLabel","titleInput","reviewTextLabel","textInput","privacyPolicyUrl","submitButton","cancelButton","createReviewModal"],"sourceRoot":""}