{"version":3,"file":"static/js/24.c341e1bcdab559298c21.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/components/invoice-error-component.tsx?70c3","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/components/invoices-filter-component.tsx?742b","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/components/invoices-table/components/invoices-table-header-component.tsx?9171","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/helpers/invoice-status.ts?135b","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/helpers/pay-invoices.ts?48fe","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/components/pay-invoice-component.tsx?152e","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/components/request-invoice-button.tsx?f574","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/components/invoices-table/components/invoices-table-row-component.tsx?3581","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/components/invoices-table/invoices-table-component.tsx?e61f","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/components/make-payment-component.tsx?b306","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/components/request-invoice-modal.tsx?e6f1","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/helpers/invoice-data.ts?7485","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/gdn-invoices-list.tsx?0d0c","webpack://Msdyn365.Commerce.Online/./src/modules/gdn-invoices-list/gdn-invoices-list.view.tsx?9e28","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/components/navigation-menu-utilities.tsx?091e","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/components/navigation-menu-root-disabled.tsx?1d9a","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/components/navigation-menu-root-enabled.tsx?c6ea","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/navigation-menu.view.tsx?fbed","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/components/navigation-menu-utilities.tsx?fc24","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/components/navigation-menu-root-disabled.tsx?6af5","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/components/navigation-menu-root-enabled.tsx?2139","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/navigation-menu.view.tsx?15d9","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/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"],"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\n/* eslint-disable no-duplicate-imports */\r\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { Alert, Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nexport interface IInvoiceErrorProps extends IComponentProps {\r\n messageHeader?: string;\r\n errorMessage?: string;\r\n otherError?: string;\r\n showError: boolean;\r\n payInvoiceErrorModalOpen: boolean;\r\n\r\n errorDialogHeader: string;\r\n errorDialogBodyErrorTitle: string;\r\n errorDialogBodyErrorDescription: string;\r\n errorDialogFooterGoToCartButtonText: string;\r\n errorDialogFooterCancelButtonText: string;\r\n cartUrl: string;\r\n\r\n setPayInvoiceErrorModalClose(): void;\r\n}\r\n\r\nexport interface IInvoiceErrorComponent extends IComponent {}\r\n\r\nexport const InvoiceError: React.FC = ({\r\n messageHeader,\r\n errorMessage,\r\n otherError,\r\n showError,\r\n payInvoiceErrorModalOpen,\r\n errorDialogHeader,\r\n errorDialogBodyErrorTitle,\r\n errorDialogBodyErrorDescription,\r\n errorDialogFooterGoToCartButtonText,\r\n errorDialogFooterCancelButtonText,\r\n cartUrl,\r\n setPayInvoiceErrorModalClose\r\n}) => {\r\n const errorMessages: (string | undefined)[] = [];\r\n\r\n if (otherError) {\r\n errorMessages.push(otherError);\r\n } else {\r\n errorMessages.push(errorMessage);\r\n }\r\n\r\n const className = 'msc-pay-invoice-error-dialog';\r\n\r\n return (\r\n <>\r\n 0} color='danger' assertive aria-label={messageHeader}>\r\n \r\n {errorMessages.map((message, index) => {\r\n return (\r\n
\r\n {message}\r\n
\r\n );\r\n })}\r\n
\r\n \r\n \r\n {errorDialogHeader}\r\n \r\n \r\n
\r\n
{errorDialogBodyErrorTitle}
\r\n
{errorDialogBodyErrorDescription}
\r\n
\r\n
\r\n \r\n \r\n {errorDialogFooterGoToCartButtonText}\r\n \r\n \r\n {errorDialogFooterCancelButtonText}\r\n \r\n \r\n
\r\n \r\n );\r\n};\r\n\r\n// @ts-expect-error\r\nexport const InvoiceErrorComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'InvoiceError',\r\n { component: InvoiceError }\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 { IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { EnumExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, Popover } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport { IInvoiceStatusResources } from '../helpers/invoice-status';\r\n\r\nexport interface IInvoicesFilterResources extends IInvoiceStatusResources {\r\n invoicesFilterShowAll: string;\r\n}\r\n\r\nexport interface IInvoicesFilterProps extends IComponentProps {\r\n className: string;\r\n disabled: boolean;\r\n\r\n resources: IInvoicesFilterResources;\r\n\r\n currentState: InvoicesFilterState;\r\n onFilterStateChanged(state: InvoicesFilterState): void;\r\n}\r\n\r\nexport enum InvoicesFilterState {\r\n ShowAll,\r\n Paid,\r\n PartiallyPaid,\r\n Unpaid\r\n}\r\n\r\nconst getInvoicesFilterStateResources = (filterState: InvoicesFilterState, resources: IInvoicesFilterResources): string => {\r\n switch (filterState) {\r\n case InvoicesFilterState.ShowAll:\r\n return resources.invoicesFilterShowAll;\r\n case InvoicesFilterState.Paid:\r\n return resources.invoiceStatusPaid;\r\n case InvoicesFilterState.PartiallyPaid:\r\n return resources.invoiceStatusPartiallyPaid;\r\n case InvoicesFilterState.Unpaid:\r\n return resources.invoiceStatusUnpaid;\r\n default:\r\n throw new Error('Failed to retrieve resource description for unknown invoices filter state.');\r\n }\r\n};\r\n\r\n/**\r\n * On Click function.\r\n * @param onStateClick -Invoice filter state function.\r\n * @param filterState -Invoice filter state.\r\n * @returns Set Invoice filter state.\r\n */\r\nconst onClickHandler = (onStateClick: (filterState: InvoicesFilterState) => void, filterState: InvoicesFilterState) => () => {\r\n onStateClick(filterState);\r\n};\r\n\r\nconst renderFilterStateItem = (\r\n filterState: InvoicesFilterState,\r\n resources: IInvoicesFilterResources,\r\n className: string,\r\n onStateClick: (filterState: InvoicesFilterState) => void\r\n): React.ReactNode => {\r\n const stateStringRepresentation = InvoicesFilterState[filterState];\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst InvoicesFilter: React.FC = (props: IInvoicesFilterProps) => {\r\n const popoverRef = React.createRef();\r\n const [popoverState, setPopoverState] = React.useState(false);\r\n const togglePopover = React.useCallback(() => {\r\n setPopoverState(!popoverState);\r\n }, [popoverState]);\r\n\r\n const [filterState, setFilterState] = React.useState(props.currentState);\r\n\r\n const onFilterStateClick = (clickedState: InvoicesFilterState) => {\r\n setFilterState(clickedState);\r\n setPopoverState(false);\r\n props.onFilterStateChanged(clickedState);\r\n };\r\n\r\n return (\r\n
\r\n \r\n {getInvoicesFilterStateResources(filterState, props.resources)}\r\n \r\n \r\n {EnumExtensions.getEnumValues(InvoicesFilterState).map(state => {\r\n return renderFilterStateItem(state, props.resources, props.className, onFilterStateClick);\r\n })}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport const InvoicesFilterComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\r\n // @ts-expect-error\r\n IInvoicesFilterProps\r\n>('InvoicesFilterComponent', { component: InvoicesFilter });\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 { IComponent, IComponentProps, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\nexport interface IInvoicesTableHeaderResources {\r\n invoicesText: string;\r\n invoiceNumberText: string;\r\n invoiceDateMobileText: string;\r\n invoiceDateText: string;\r\n invoiceUsersText: string;\r\n invoiceAmountText: string;\r\n invoiceDueDateText: string;\r\n invoiceAmountDueText: string;\r\n invoiceStatusText: string;\r\n invoiceActionsText: string;\r\n invoiceListSelectAllRadioAriaLabelText: string;\r\n}\r\n\r\nexport interface IInvoicesTableHeaderProps extends IComponentProps {\r\n context: ICoreContext;\r\n className: string;\r\n\r\n isSelectedAll: boolean;\r\n isMobile: boolean;\r\n isAdmin: boolean;\r\n\r\n resources: IInvoicesTableHeaderResources;\r\n\r\n onSelectAll(isSelected: boolean): void;\r\n}\r\n\r\nexport interface IInvoicesTableHeaderComponent extends IComponent {}\r\n\r\nconst getDesktopHeaderCells = (props: IInvoicesTableHeaderProps, rowClassName: string, switchCheckedState: () => void) => {\r\n const { resources } = props;\r\n return (\r\n <>\r\n \r\n \r\n \r\n {resources.invoiceNumberText}\r\n {resources.invoiceDateText}\r\n {resources.invoiceUsersText}\r\n {resources.invoiceAmountText}\r\n {resources.invoiceDueDateText}\r\n {resources.invoiceAmountDueText}\r\n {resources.invoiceStatusText}\r\n {resources.invoiceActionsText}\r\n \r\n );\r\n};\r\n\r\nconst getMobileHeaderCells = (props: IInvoicesTableHeaderProps, rowClassName: string, switchCheckedState: () => void) => {\r\n const { resources } = props;\r\n return (\r\n <>\r\n \r\n \r\n \r\n {resources.invoicesText}\r\n {resources.invoiceDateMobileText}\r\n \r\n {` `}\r\n {/* Actions */}\r\n \r\n );\r\n};\r\n\r\nconst InvoicesTableHeader: React.FC = (props: IInvoicesTableHeaderProps): JSX.Element => {\r\n const rowClassName = `${props.className}__row`;\r\n\r\n const switchCheckedState = () => {\r\n props.onSelectAll(!props.isSelectedAll);\r\n };\r\n\r\n let headerCells: JSX.Element;\r\n if (props.isMobile) {\r\n headerCells = getMobileHeaderCells(props, rowClassName, switchCheckedState);\r\n } else {\r\n headerCells = getDesktopHeaderCells(props, rowClassName, switchCheckedState);\r\n }\r\n\r\n return (\r\n \r\n {headerCells}\r\n \r\n );\r\n};\r\n\r\nexport const InvoicesTableHeaderComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\r\n // @ts-expect-error\r\n IInvoicesTableHeaderComponent\r\n>('InvoicesTableHeaderComponent', { component: InvoicesTableHeader });\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 { InvoicePaidStatus } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport interface IInvoiceStatusResources {\r\n invoiceStatusNone: string;\r\n invoiceStatusUnpaid: string;\r\n invoiceStatusPartiallyPaid: string;\r\n invoiceStatusPaid: string;\r\n}\r\n\r\nexport const getInvoiceStatusText = (resources: IInvoiceStatusResources, invoiceStatus: InvoicePaidStatus | undefined) => {\r\n switch (invoiceStatus) {\r\n case InvoicePaidStatus.None:\r\n return resources.invoiceStatusNone;\r\n\r\n case InvoicePaidStatus.Unpaid:\r\n return resources.invoiceStatusUnpaid;\r\n\r\n case InvoicePaidStatus.PartiallyPaid:\r\n return resources.invoiceStatusPartiallyPaid;\r\n\r\n case InvoicePaidStatus.Paid:\r\n return resources.invoiceStatusPaid;\r\n default:\r\n return '';\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 { getUrlSync, IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport { IInvoiceErrorState } from '../gdn-invoices-list';\r\nimport { IPayableInvoice } from './invoice-data';\r\n\r\nexport type ICartActionFailureReason = 'EMPTYINPUT' | 'CARTACTIONFAILED';\r\nexport interface IAddInvoicesToCartFailureResult {\r\n failureReason: ICartActionFailureReason;\r\n}\r\n\r\nexport const payInvoices = async (\r\n invoices: IPayableInvoice[],\r\n actionContext: IActionContext,\r\n onError: (errorState: IInvoiceErrorState) => void\r\n) => {\r\n const invoicesToAdd: string[] = invoices.filter(invoice => invoice.canBePaid).map(invoice => invoice.id);\r\n\r\n if (!ArrayExtensions.hasElements(invoicesToAdd)) {\r\n onError({ errorMessage: '', errorReason: { failureReason: 'EMPTYINPUT' } });\r\n return;\r\n }\r\n\r\n const cartState = await getCartState(actionContext);\r\n const result = await cartState.addInvoicesToCart({ invoiceIds: invoicesToAdd });\r\n\r\n if (result.status !== 'SUCCESS') {\r\n onError({\r\n errorMessage: '',\r\n errorReason: { failureReason: 'CARTACTIONFAILED' },\r\n otherError: result.errorDetails?.LocalizedMessage,\r\n errorCode: result.errorDetails?.ErrorResourceId\r\n });\r\n return;\r\n }\r\n\r\n const cartUrl = getUrlSync('cart', actionContext);\r\n if (cartUrl) {\r\n window?.location.assign(cartUrl);\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 { IComponent, IComponentProps, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport React, { useState } from 'react';\r\n\r\nimport { IPayableInvoice } from '../helpers/invoice-data';\r\nimport { payInvoices } from '../helpers/pay-invoices';\r\nimport { IInvoiceErrorState } from '../gdn-invoices-list';\r\n\r\nexport interface IPayInvoiceData {\r\n invoice: IPayableInvoice;\r\n}\r\n\r\nexport interface IPayInvoiceResources {\r\n payInvoiceButtonText: string;\r\n payInvoiceButtonAriaLabel: string;\r\n}\r\n\r\nexport interface IPayInvoiceProps extends IComponentProps {\r\n context: ICoreContext;\r\n className: string;\r\n reference?: React.RefObject;\r\n resources: IPayInvoiceResources;\r\n disabled?: boolean;\r\n\r\n onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\r\n}\r\n\r\ninterface IPayInvoiceComponent extends IComponent {}\r\n\r\nconst onClick = async (\r\n _event: React.MouseEvent,\r\n props: IPayInvoiceProps,\r\n setDisabled: (disabled: boolean) => void\r\n): Promise => {\r\n if (props.data.invoice.amount !== undefined) {\r\n if (props.data.invoice.amount < 0) {\r\n // props.onError ? { errorMessage: '', errorReason: { failureReason: 'EMPTYINPUT' } } : _event.preventDefault();\r\n setDisabled(false);\r\n } else {\r\n setDisabled(true);\r\n }\r\n } else {\r\n setDisabled(true);\r\n }\r\n\r\n const propagateError = (errorState: IInvoiceErrorState): void => {\r\n if (props.onError) {\r\n props.onError(errorState, props.reference);\r\n }\r\n setDisabled(false);\r\n };\r\n\r\n await payInvoices([props.data.invoice], props.context.actionContext, propagateError);\r\n};\r\n\r\nconst PayInvoiceComponentActions = {\r\n onClick\r\n};\r\n\r\n/**\r\n * On click handler function.\r\n * @param props -Invoice props.\r\n * @param setDisabled -Set disabled.\r\n * @returns Pay invoice component action.\r\n */\r\nconst onClickHandler = (props: IPayInvoiceProps, setDisabled: React.Dispatch>) => async (\r\n event: React.MouseEvent\r\n) => {\r\n await PayInvoiceComponentActions.onClick(event, props, setDisabled);\r\n};\r\n\r\nconst PayInvoice: React.FC = (props: IPayInvoiceProps): JSX.Element => {\r\n const [disabled, setDisabled] = useState(false);\r\n\r\n return (\r\n \r\n {props.resources.payInvoiceButtonText}\r\n \r\n );\r\n};\r\n\r\n// @ts-expect-error\r\nexport const PayInvoiceComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'PayInvoiceComponent',\r\n { component: PayInvoice, ...PayInvoiceComponentActions }\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 { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\ninterface IRequestInvoiceButtonProps {\r\n innerReference?: React.RefObject;\r\n className: string;\r\n requestInvoiceButtonLabel: string;\r\n onClicked(): void;\r\n}\r\n\r\nexport const RequestInvoiceButton: React.FC = ({\r\n className,\r\n onClicked,\r\n requestInvoiceButtonLabel,\r\n innerReference\r\n}) => {\r\n return (\r\n \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 MsDyn365, {\r\n IComponent,\r\n IComponentProps,\r\n ICoreContext,\r\n IDateFormatOptions,\r\n isOboRequest,\r\n msdyn365Commerce\r\n} from '@msdyn365-commerce/core';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport { getInvoiceDetailsPageUrlSync, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, format } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React, { useState } from 'react';\r\n\r\nimport { InvoiceModel } from '../../../helpers/invoice-data';\r\nimport { getInvoiceStatusText, IInvoiceStatusResources } from '../../../helpers/invoice-status';\r\nimport { IInvoiceErrorState } from '../../../gdn-invoices-list';\r\nimport { IPayInvoiceResources, PayInvoiceComponent } from '../../pay-invoice-component';\r\nimport { RequestInvoiceButton } from '../../request-invoice-button';\r\n\r\ninterface IInvoicesTableRowData {\r\n invoice: InvoiceModel;\r\n index: number;\r\n customer: Customer;\r\n}\r\n\r\nexport interface IInvoicesTableRowResources extends IInvoiceStatusResources, IPayInvoiceResources {\r\n invoiceCurrentUser: string;\r\n invoiceViewDetailsButtonText: string;\r\n invoiceViewDetailsButtonAriaLabel: string;\r\n invoiceActionsButtonTextAriaLabel?: string;\r\n invoiceActionsButtonIsOnBehalfOfTextAriaLabel?: string;\r\n invoiceRequestButtonLabel: string;\r\n invoiceListSelectRadioAriaLabelText: string;\r\n}\r\n\r\nexport interface IInvoicesTableRowProps extends IComponentProps {\r\n context: ICoreContext;\r\n className: string;\r\n isMobile: boolean;\r\n invoiceReferences?: React.RefObject;\r\n payInvoiceReferences?: React.RefObject;\r\n resources: IInvoicesTableRowResources;\r\n\r\n onChange(): void;\r\n onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\r\n onRequestInvoice?(invoice: InvoiceModel, requestInvoiceButtonReference: React.RefObject): void;\r\n}\r\n\r\nexport interface IInvoicesTableRowComponent extends IComponent {}\r\n\r\nconst formatAmount = (context: ICoreContext, amount: number | undefined, currencyCode: string | undefined) => {\r\n if (amount === undefined) {\r\n return '';\r\n }\r\n return context.cultureFormatter.formatCurrency(amount, currencyCode);\r\n};\r\n\r\nconst formatDate = (context: ICoreContext, date: Date | undefined) => {\r\n if (date === undefined) {\r\n return '';\r\n }\r\n\r\n const dateOptions: IDateFormatOptions = { year: 'numeric', month: 'long', day: 'numeric' };\r\n return context.cultureFormatter.formatDate(date, dateOptions);\r\n};\r\n\r\n/**\r\n * Request specific invoice function.\r\n * @param props -Invoice table row props.\r\n * @param requestInvoiceButtonReference -Reference button.\r\n * @returns Call Request Invoice.\r\n */\r\nconst onRequestSpecificInvoice = (\r\n props: IInvoicesTableRowProps,\r\n requestInvoiceButtonReference: React.RefObject\r\n) => () => {\r\n props.onRequestInvoice!(props.data.invoice, requestInvoiceButtonReference);\r\n};\r\n\r\nconst getDesktopRowCells = (props: IInvoicesTableRowProps, onSelectLine: () => void) => {\r\n const {\r\n data: { invoice, customer }\r\n } = props;\r\n\r\n const isCurrentUser =\r\n !StringExtensions.isNullOrWhitespace(customer.AccountNumber) && customer.AccountNumber === invoice.customerAccountNumber;\r\n\r\n const linkToInvoiceDetails = getInvoiceDetailsPageUrlSync(props.data.invoice.id, props.context.actionContext);\r\n const invoiceRowArialabel = format(props.resources.invoiceListSelectRadioAriaLabelText, invoice.id);\r\n return (\r\n <>\r\n \r\n {checkIfCreditNote(invoice.amount) && (\r\n \r\n )}\r\n \r\n \r\n \r\n {invoice.id}\r\n \r\n \r\n \r\n {formatDate(props.context, invoice.invoiceDate)}\r\n \r\n \r\n {invoice.customerName}\r\n {isCurrentUser ? {props.resources.invoiceCurrentUser} : null}\r\n \r\n {formatAmount(props.context, invoice.amount, invoice.currencyCode)}\r\n \r\n {formatDate(props.context, invoice.dueDate)}\r\n \r\n {formatAmount(props.context, invoice.amountDue, invoice.currencyCode)}\r\n \r\n {getInvoiceStatusText(props.resources, invoice.status)}\r\n \r\n {extraActionsPopup(props)}\r\n \r\n );\r\n};\r\n\r\nlet setShowPreviousActions: React.Dispatch> | undefined;\r\n\r\n/**\r\n * On Click view details function.\r\n * @param linkToInvoiceDetails -Link to invoice details.\r\n * @returns Go to invoice details.\r\n */\r\nconst onClickViewDetails = (linkToInvoiceDetails: string) => () => {\r\n if (MsDyn365.isBrowser) {\r\n window.location.href = linkToInvoiceDetails;\r\n }\r\n return;\r\n};\r\n\r\n/**\r\n * Toggle function.\r\n * @param isShowActions -Link to invoice details.\r\n * @param setShowActions -Link to invoice details.\r\n * @returns Go to invoice details.\r\n */\r\nconst toggle = (isShowActions: boolean, setShowActions: React.Dispatch>) => () => {\r\n const shouldShowActions = !isShowActions;\r\n if (shouldShowActions) {\r\n if (setShowPreviousActions) {\r\n setShowPreviousActions(false);\r\n }\r\n setShowActions(shouldShowActions);\r\n setShowPreviousActions = setShowActions;\r\n } else {\r\n setShowPreviousActions = undefined;\r\n setShowActions(shouldShowActions);\r\n }\r\n};\r\n\r\nconst extraActionsPopup = (props: IInvoicesTableRowProps): JSX.Element | null => {\r\n const {\r\n resources: {\r\n invoiceViewDetailsButtonAriaLabel,\r\n invoiceViewDetailsButtonText,\r\n invoiceActionsButtonTextAriaLabel,\r\n invoiceActionsButtonIsOnBehalfOfTextAriaLabel\r\n },\r\n data: { index, invoice }\r\n } = props;\r\n\r\n const [showActions, setShowActions] = useState(false);\r\n const isOnBehalfOfRequest = isOboRequest(props.context.request);\r\n\r\n const linkToInvoiceDetails = getInvoiceDetailsPageUrlSync(props.data.invoice.id, props.context.actionContext);\r\n\r\n const className = `${props.className}__extra-actions-cell`;\r\n const actionsContainerClassName = `${className}__actions-container`;\r\n const payInvoiceClassName = `${actionsContainerClassName}__pay-invoice`;\r\n return (\r\n
\r\n \r\n {showActions && !isOnBehalfOfRequest && (\r\n
\r\n \r\n {invoiceViewDetailsButtonText}\r\n \r\n {checkIfCreditNote(invoice.amount) && (\r\n \r\n )}\r\n \r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nconst checkIfCreditNote = (amount: number | undefined) => amount && amount > 0;\r\n\r\nconst getMobileRowCells = (props: IInvoicesTableRowProps, onSelectLine: () => void) => {\r\n const {\r\n data: { invoice }\r\n } = props;\r\n\r\n const linkToInvoiceDetails = getInvoiceDetailsPageUrlSync(props.data.invoice.id, props.context.actionContext);\r\n const invoiceRowArialabel = format(props.resources.invoiceListSelectRadioAriaLabelText, invoice.id);\r\n return (\r\n <>\r\n \r\n {checkIfCreditNote(invoice.amount) && (\r\n \r\n )}\r\n \r\n \r\n \r\n {invoice.id}\r\n \r\n
\r\n {invoice.customerName}\r\n \r\n \r\n {formatDate(props.context, invoice.dueDate)}\r\n
\r\n {getInvoiceStatusText(props.resources, invoice.status)}\r\n \r\n {extraActionsPopup(props)}\r\n \r\n );\r\n};\r\n\r\nconst InvoicesTableRow: React.FC = (props: IInvoicesTableRowProps): JSX.Element => {\r\n const {\r\n data: { invoice }\r\n } = props;\r\n\r\n const onSelectLine = () => {\r\n invoice.isSelected = !invoice.isSelected;\r\n props.onChange();\r\n };\r\n\r\n let rowCells: JSX.Element;\r\n if (props.isMobile) {\r\n rowCells = getMobileRowCells(props, onSelectLine);\r\n } else {\r\n rowCells = getDesktopRowCells(props, onSelectLine);\r\n }\r\n\r\n return {rowCells};\r\n};\r\n\r\nexport const InvoicesTableRowComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\r\n // @ts-expect-error\r\n IInvoicesTableRowComponent\r\n>('InvoicesTableRowComponent', { component: InvoicesTableRow });\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 { IComponent, IComponentProps, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport React, { useState } from 'react';\r\n\r\nimport { InvoiceModel } from '../../helpers/invoice-data';\r\nimport { IInvoiceErrorState } from '../../gdn-invoices-list';\r\nimport { IInvoicesTableHeaderResources, InvoicesTableHeaderComponent } from './components/invoices-table-header-component';\r\nimport { IInvoicesTableRowResources, InvoicesTableRowComponent } from './components/invoices-table-row-component';\r\n\r\ninterface IInvoicesTableData {\r\n invoices: InvoiceModel[];\r\n customer: Customer;\r\n}\r\n\r\nexport interface IInvoicesTableResources extends IInvoicesTableHeaderResources, IInvoicesTableRowResources {}\r\n\r\nexport interface IInvoicesTableProps extends IComponentProps {\r\n context: ICoreContext;\r\n className: string;\r\n invoiceButtonReferences?: React.RefObject[];\r\n payInvoiceButtonReferences?: React.RefObject[];\r\n resources: IInvoicesTableResources;\r\n\r\n onChange(): void;\r\n onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\r\n onRequestInvoice(invoice: InvoiceModel, requestInvoiceButtonReference: React.RefObject): void;\r\n}\r\n\r\nexport interface IInvoicesTableComponent extends IComponent {}\r\n\r\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nconst getViewport = (context: ICoreContext): GridSize => {\r\n // Always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (window?.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n }\r\n return 'xl';\r\n }\r\n }\r\n\r\n return 'xs';\r\n};\r\n\r\nconst isMobileView = (context: ICoreContext) => {\r\n const viewport = getViewport(context);\r\n return viewport === 'xs' || viewport === 'sm';\r\n};\r\n\r\n/**\r\n * On select all function.\r\n * @param props -Invoice table props.\r\n * @returns On change.\r\n */\r\nconst onSelectAllHandler = (props: IInvoicesTableProps) => (isSelected: boolean) => {\r\n props.data.invoices.forEach(invoice => {\r\n if (invoice.amount && invoice.amount > 0) {\r\n invoice.isSelected = isSelected;\r\n }\r\n });\r\n props.onChange();\r\n};\r\n\r\nconst InvoicesTable: React.FC = (props: IInvoicesTableProps): JSX.Element => {\r\n const [isMobile, setIsMobile] = useState(isMobileView(props.context));\r\n\r\n const updateViewport = () => {\r\n setIsMobile(isMobileView(props.context));\r\n };\r\n\r\n if (typeof window !== undefined && window.addEventListener) {\r\n window.addEventListener('resize', updateViewport);\r\n }\r\n const rowClassName = `${props.className}__row`;\r\n const headerClassName = `${props.className}__header`;\r\n\r\n return (\r\n \r\n invoice.isSelected)}\r\n isMobile={isMobile}\r\n isAdmin={props.data.customer.IsB2bAdmin || false}\r\n onSelectAll={onSelectAllHandler(props)}\r\n resources={props.resources}\r\n data={{}}\r\n />\r\n {props.data.invoices.map((invoice, index: number) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n );\r\n};\r\n\r\nexport const InvoicesTableComponent: React.FunctionComponent = msdyn365Commerce.createComponent<\r\n // @ts-expect-error\r\n IInvoicesTableComponent\r\n>('InvoicesTableComponent', { component: InvoicesTable });\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 { IComponent, IComponentProps, ICoreContext, ITelemetry, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport React, { useState } from 'react';\r\n\r\nimport { InvoiceModel } from '../helpers/invoice-data';\r\nimport { payInvoices } from '../helpers/pay-invoices';\r\nimport { IInvoiceErrorState } from '../gdn-invoices-list';\r\n\r\ninterface IMakePaymentData {\r\n invoices: InvoiceModel[];\r\n}\r\n\r\nexport interface IMakePaymentResources {\r\n makePaymentButtonText: string;\r\n makePaymentButtonAriaLabel: string;\r\n}\r\n\r\nexport interface IMakePaymentProps extends IComponentProps {\r\n context: ICoreContext;\r\n itemKey?: string;\r\n telemetry: ITelemetry;\r\n moduleId: string;\r\n moduleTypeName: string;\r\n telemetryContent?: ITelemetryContent;\r\n navigationUrl?: string;\r\n buttonReferences?: React.RefObject;\r\n resources: IMakePaymentResources;\r\n disabled?: boolean;\r\n\r\n onError?(errorState: IInvoiceErrorState, reference?: React.RefObject): void;\r\n}\r\n\r\nexport interface IMakePaymentComponent extends IComponent {}\r\n\r\nconst onClick = async (\r\n _event: React.MouseEvent,\r\n props: IMakePaymentProps,\r\n setDisabled: (disabled: boolean) => void\r\n): Promise => {\r\n setDisabled(true);\r\n\r\n const propagateError = (errorState: IInvoiceErrorState): void => {\r\n if (props.onError) {\r\n props.onError(errorState, props.buttonReferences);\r\n }\r\n setDisabled(false);\r\n };\r\n\r\n await payInvoices(props.data.invoices, props.context.actionContext, propagateError);\r\n};\r\n\r\nconst MakePaymentComponentActions = {\r\n onClick\r\n};\r\n\r\n/**\r\n * On Click function.\r\n * @param input -Make payment props.\r\n * @param setDisabled -Set Disabled.\r\n * @returns Make payment component on click.\r\n */\r\nconst onClickHandler = (input: IMakePaymentProps, setDisabled: React.Dispatch>) => async (\r\n event: React.MouseEvent\r\n) => {\r\n await MakePaymentComponentActions.onClick(event, input, setDisabled);\r\n};\r\n\r\nconst MakePayment: React.FC = (input: IMakePaymentProps): JSX.Element => {\r\n const {\r\n data: { invoices }\r\n } = input;\r\n const hasInvoices = ArrayExtensions.hasElements(invoices.filter(invoice => invoice.canBePaid));\r\n const [disabled, setDisabled] = useState(false);\r\n\r\n return (\r\n \r\n {input.resources.makePaymentButtonText}\r\n \r\n );\r\n};\r\n\r\n// @ts-expect-error\r\nexport const MakePaymentComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'MakePayment',\r\n { component: MakePayment }\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 { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\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 classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { InvoiceModel } from '../helpers/invoice-data';\r\nimport { IGdnInvoicesListResources } from '../gdn-invoices-list.props.autogenerated';\r\n\r\ninterface IRequestInvoiceModalProps {\r\n className: string;\r\n email: string;\r\n isModalOpen: boolean;\r\n submitRequestLabel: string;\r\n modalHeaderLabel: string;\r\n sendToEmailLabel: string;\r\n cancelLabel: string;\r\n searchPlaceholderLabel: string;\r\n invoices: InvoiceModel[];\r\n invoicesFoundString: string;\r\n singleInvoiceFoundString: string;\r\n searchButtonAltText: string;\r\n resources: IGdnInvoicesListResources;\r\n toggle(): void;\r\n onSubmitRequest(invoiceId: string): void;\r\n}\r\n\r\n/**\r\n * On submit request click function.\r\n * @param selectedInvoiceIndex -Check is busy.\r\n * @param onClosing -On closing function.\r\n * @param filteredInvoices -Invoice modal.\r\n * @param onSubmitRequest -On submit request function.\r\n * @returns Call on submit request.\r\n */\r\nconst onSubmitRequestClick = (\r\n onClosing: () => void,\r\n filteredInvoices: InvoiceModel[],\r\n onSubmitRequest: (invoiceId: string) => void,\r\n checkboxRef: React.MutableRefObject\r\n) => () => {\r\n const defaultIndex = 0;\r\n let closingFlag: number = 0;\r\n\r\n filteredInvoices.map((invoice, index) => {\r\n const inputInvoice = checkboxRef.current[Number(index)] as React.RefObject;\r\n if (inputInvoice.current?.checked === true && index >= defaultIndex) {\r\n onSubmitRequest(invoice.id);\r\n closingFlag = closingFlag + 1;\r\n }\r\n });\r\n if (closingFlag <= filteredInvoices.length) {\r\n onClosing();\r\n }\r\n};\r\n\r\n/**\r\n * On search input change function.\r\n * @param setSearchInput -Set search input.\r\n * @returns Set search input function.\r\n */\r\nconst searchInputChangedHandler = (setSearchInput: React.Dispatch>) => (\r\n event: React.ChangeEvent\r\n) => {\r\n setSearchInput(event.target.value);\r\n};\r\n\r\n/**\r\n * Search entered handler.\r\n * @param invoices -InvoiceModel.\r\n * @param searchInput -String.\r\n * @param setFilteredInvoices -InvoiceModel action.\r\n * @param filteredInvoices -Filtered Invoices.\r\n * @param setSelectedInvoiceIndex -Selected Invoice Index.\r\n * @param setShouldShowSearchResults -Show search result action.\r\n * @param setInvoiceOptions -Invoice options action.\r\n * @param selectedInvoiceIndex -Selected invoice index.\r\n * @param className -String.\r\n * @returns Set invoice options.\r\n */\r\nconst searchEnteredHandler = (\r\n invoices: InvoiceModel[],\r\n searchInput: string,\r\n setFilteredInvoices: React.Dispatch>,\r\n filteredInvoices: InvoiceModel[],\r\n setSelectedInvoiceIndex: React.Dispatch>,\r\n setShouldShowSearchResults: React.Dispatch>,\r\n setInvoiceOptions: React.Dispatch>,\r\n selectedInvoiceIndex: number,\r\n className: string,\r\n checkboxRef: React.MutableRefObject\r\n) => () => {\r\n let updatedInvoices = filteredInvoices;\r\n if (!StringExtensions.isNullOrEmpty(searchInput)) {\r\n updatedInvoices = invoices.filter(invoice => invoice.id.toLocaleUpperCase().includes(searchInput.toLocaleUpperCase()));\r\n } else {\r\n updatedInvoices = invoices;\r\n }\r\n\r\n if (ArrayExtensions.hasElements(updatedInvoices)) {\r\n setFilteredInvoices(updatedInvoices);\r\n setSelectedInvoiceIndex(0);\r\n } else {\r\n setFilteredInvoices(updatedInvoices);\r\n setSelectedInvoiceIndex(-1);\r\n }\r\n setShouldShowSearchResults(true);\r\n\r\n setInvoiceOptions(\r\n renderInvoiceOptions(\r\n StringExtensions.isNullOrEmpty(searchInput) ? invoices : updatedInvoices,\r\n setSelectedInvoiceIndex,\r\n className,\r\n checkboxRef\r\n )\r\n );\r\n};\r\n\r\n/**\r\n * On cancel function.\r\n * @param onClosing -Closing function.\r\n * @param toggle -Toggle Function.\r\n * @returns Toggle function.\r\n */\r\nconst onCancelHandler = (onClosing: () => void, toggle: () => void) => () => {\r\n onClosing();\r\n toggle();\r\n};\r\n\r\n/**\r\n * On invoice select.\r\n * @param setSelectedInvoiceIndex -Set Selected Invoice Index.\r\n * @param index -Number.\r\n * @returns Set Selected Invoice Index.\r\n */\r\nconst onInvoiceSelectHandler = (setSelectedInvoiceIndex: (newIndex: number) => void, index: number) => () => {\r\n setSelectedInvoiceIndex(index);\r\n};\r\n\r\nconst renderInvoiceOptions = (\r\n filteredInvoices: InvoiceModel[],\r\n setSelectedInvoiceIndex: (newIndex: number) => void,\r\n className: string,\r\n checkboxRef: React.MutableRefObject\r\n) => {\r\n checkboxRef.current = filteredInvoices.map((_invoice, i) => checkboxRef.current[Number(i)] ?? React.createRef());\r\n return (\r\n
\r\n {filteredInvoices.map((invoice, index) => {\r\n const onInvoiceSelect = onInvoiceSelectHandler(setSelectedInvoiceIndex, index);\r\n\r\n const checkboxId = `invoice__${invoice.id}`;\r\n const checkboxName = `invoiceSelect__${invoice.id}`;\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n })}\r\n
\r\n );\r\n};\r\n\r\nexport const RequestInvoiceModal: React.FC = ({\r\n className,\r\n email,\r\n isModalOpen,\r\n toggle,\r\n modalHeaderLabel,\r\n sendToEmailLabel,\r\n submitRequestLabel,\r\n cancelLabel,\r\n onSubmitRequest,\r\n invoices,\r\n searchPlaceholderLabel,\r\n invoicesFoundString,\r\n singleInvoiceFoundString,\r\n searchButtonAltText,\r\n resources\r\n}) => {\r\n const [selectedInvoiceIndex, setSelectedInvoiceIndex] = React.useState(-1);\r\n const [filteredInvoices, setFilteredInvoices] = React.useState(invoices);\r\n const [searchInput, setSearchInput] = React.useState('');\r\n const [shouldShowSearchResults, setShouldShowSearchResults] = React.useState(false);\r\n const focusDelay = 110;\r\n const checkboxRef = React.useRef([]);\r\n const invoiceOptionsData = renderInvoiceOptions(filteredInvoices, setSelectedInvoiceIndex, className, checkboxRef);\r\n const [invoiceOptions, setInvoiceOptions] = React.useState(invoiceOptionsData);\r\n const focusElement = React.useRef(null);\r\n React.useEffect(() => {\r\n if (isModalOpen && focusElement.current) {\r\n setTimeout(() => {\r\n focusElement.current?.focus();\r\n }, focusDelay);\r\n }\r\n }, [isModalOpen]);\r\n\r\n /**\r\n * Sets the filtered invoices to the ones that were selected on the main screen.\r\n */\r\n const setFilteredInvoicesToSelectedInvoices = () => {\r\n setSelectedInvoiceIndex(-1);\r\n const selectedInvoices = invoices.filter(invoice => invoice.isSelected);\r\n if (ArrayExtensions.hasElements(selectedInvoices)) {\r\n setFilteredInvoices(selectedInvoices);\r\n\r\n // If only one invoice selected, auto select it\r\n if (selectedInvoices.length === 1) {\r\n setSelectedInvoiceIndex(0);\r\n }\r\n\r\n setInvoiceOptions(renderInvoiceOptions(selectedInvoices, setSelectedInvoiceIndex, className, checkboxRef));\r\n } else {\r\n setFilteredInvoices(invoices);\r\n setInvoiceOptions(renderInvoiceOptions(invoices, setSelectedInvoiceIndex, className, checkboxRef));\r\n }\r\n };\r\n\r\n const searchEntered = searchEnteredHandler(\r\n invoices,\r\n searchInput,\r\n setFilteredInvoices,\r\n filteredInvoices,\r\n setSelectedInvoiceIndex,\r\n setShouldShowSearchResults,\r\n setInvoiceOptions,\r\n selectedInvoiceIndex,\r\n className,\r\n checkboxRef\r\n );\r\n\r\n const onClosing = () => {\r\n setSelectedInvoiceIndex(-1);\r\n setFilteredInvoices(invoices);\r\n setSearchInput('');\r\n setShouldShowSearchResults(false);\r\n };\r\n\r\n /**\r\n * Sets the invoices that are possible to select when the dialog is opened.\r\n */\r\n const onOpened = () => {\r\n setSearchInput('');\r\n setFilteredInvoicesToSelectedInvoices();\r\n };\r\n\r\n const searchResultString = filteredInvoices.length === 1 ? singleInvoiceFoundString : invoicesFoundString;\r\n const invoicesFoundReplaceIndex = searchResultString.indexOf('{0}');\r\n\r\n return (\r\n \r\n \r\n {modalHeaderLabel}\r\n \r\n \r\n
\r\n \r\n
\r\n {email}\r\n
\r\n
\r\n {shouldShowSearchResults && (\r\n
\r\n {searchResultString.substring(0, invoicesFoundReplaceIndex)}\r\n {filteredInvoices.length}\r\n {searchResultString.substring(invoicesFoundReplaceIndex + 3)}\r\n
\r\n )}\r\n
\r\n \r\n \r\n
\r\n {invoiceOptions}\r\n
\r\n
\r\n
\r\n \r\n \r\n {submitRequestLabel}\r\n \r\n \r\n \r\n \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 { InvoicePaidStatus, OrderInvoice } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport interface IPayableInvoice {\r\n readonly amount?: number;\r\n readonly id: string;\r\n readonly canBePaid: boolean;\r\n}\r\n\r\n/**\r\n * Represents invoice data model.\r\n */\r\nexport class InvoiceModel implements IPayableInvoice {\r\n public id: string;\r\n\r\n public invoiceDate?: Date;\r\n\r\n public customerAccountNumber?: string;\r\n\r\n public customerName?: string;\r\n\r\n public amount?: number;\r\n\r\n public dueDate?: Date;\r\n\r\n public amountDue?: number;\r\n\r\n public status?: InvoicePaidStatus;\r\n\r\n public currencyCode?: string;\r\n\r\n public isSelected: boolean;\r\n\r\n public constructor(invoice: OrderInvoice) {\r\n this.id = invoice.Id || '';\r\n this.invoiceDate = invoice.InvoiceDate ? new Date(invoice.InvoiceDate) : undefined;\r\n this.customerAccountNumber = invoice.CustomerAccountNumber;\r\n this.customerName = invoice.CustomerName;\r\n this.amount = invoice.TotalAmount;\r\n this.dueDate = invoice.InvoiceDueDate ? new Date(invoice.InvoiceDueDate) : undefined;\r\n this.amountDue = invoice.AmountBalance;\r\n this.status = invoice.InvoicePaidStatusValue;\r\n this.currencyCode = invoice.CurrencyCode;\r\n\r\n this.isSelected = false;\r\n }\r\n\r\n public get canBePaid(): boolean {\r\n return this.status !== InvoicePaidStatus.Paid;\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 { getUrlSync, isOboRequest } from '@msdyn365-commerce/core';\r\nimport {\r\n BusinessPartnerOperationDeliveryType,\r\n BusinessPartnerUsersDataActions,\r\n InvoicePaidStatus,\r\n InvoiceSearchCriteria,\r\n IQueryResultSettings,\r\n OrderInvoice\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { getCurrentAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnersDataActions.g';\r\nimport {\r\n ArrayExtensions,\r\n getCustomer,\r\n GetCustomerInput,\r\n // getInvoices,\r\n IQueryResultSettingsModuleConfig,\r\n QueryResultSettingsProxy,\r\n StringExtensions\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Alert, Button, Heading, IModuleProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\n\r\nimport { InvoiceErrorComponent } from './components/invoice-error-component';\r\nimport { InvoicesFilterComponent, InvoicesFilterState } from './components/invoices-filter-component';\r\nimport { InvoicesTableComponent } from './components/invoices-table/invoices-table-component';\r\nimport { IMakePaymentResources, MakePaymentComponent } from './components/make-payment-component';\r\nimport { RequestInvoiceButton } from './components/request-invoice-button';\r\nimport { RequestInvoiceModal } from './components/request-invoice-modal';\r\nimport { InvoiceModel } from './helpers/invoice-data';\r\nimport { IAddInvoicesToCartFailureResult } from './helpers/pay-invoices';\r\nimport { IGdnInvoicesListData } from './gdn-invoices-list.data';\r\nimport { IGdnInvoicesListProps } from './gdn-invoices-list.props.autogenerated';\r\nimport getGdnInvoices, { GetGdnInvoicesInput } from '../../actions/get-gdn-invoices.action';\r\n\r\nexport type InvoicesListStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\r\nexport type InvoiceErrorHost = 'ADDINVOICETOCART';\r\n\r\nexport interface IInvoicesListViewProps extends IGdnInvoicesListProps {\r\n moduleProps: IModuleProps;\r\n\r\n header: JSX.Element;\r\n filter: JSX.Element;\r\n content?: JSX.Element;\r\n invoiceRequestModal?: JSX.Element;\r\n pagination?: JSX.Element;\r\n}\r\n\r\nexport interface IInvoiceErrorState {\r\n errorHost?: InvoiceErrorHost;\r\n errorReason?: IAddInvoicesToCartFailureResult;\r\n errorMessage: string;\r\n otherError?: string;\r\n errorCode?: string;\r\n}\r\n\r\nexport interface IInvoicesListState {\r\n invoices: InvoiceModel[];\r\n invoicesFilterState: InvoicesFilterState;\r\n errorState: IInvoiceErrorState;\r\n isInvoiceRequestModalOpen: boolean;\r\n isLoading: boolean;\r\n isOpen: boolean;\r\n isPageLoaded: boolean;\r\n payInvoiceErrorModalOpen: boolean;\r\n selectedButtonElement?: HTMLButtonElement | null;\r\n}\r\n\r\n/**\r\n * InvoicesList component.\r\n * @extends {React.Component, IInvoicesListState>}\r\n */\r\n@observer\r\nclass InvoicesList extends React.Component, IInvoicesListState> {\r\n private readonly getInvoiceType = this.props.config?.invoiceTypes || [];\r\n\r\n private readonly _className: string = 'msc-invoices-list';\r\n\r\n private readonly payInvoiceRequestReference: React.RefObject;\r\n\r\n private readonly makePaymentReference: React.RefObject;\r\n\r\n private buttonChildReference: React.RefObject[] = [];\r\n\r\n private buttonChildPayButtonReference: React.RefObject[] = [];\r\n\r\n private readonly _queryResultSettings: IQueryResultSettings;\r\n\r\n private invoiceIds: string[] = [];\r\n\r\n constructor(props: IGdnInvoicesListProps) {\r\n super(props);\r\n\r\n this._queryResultSettings = QueryResultSettingsProxy.fromModuleData(\r\n this.props.context.request,\r\n this.props.config as IQueryResultSettingsModuleConfig\r\n ).QueryResultSettings;\r\n this.payInvoiceRequestReference = React.createRef();\r\n this.makePaymentReference = React.createRef();\r\n this._updateInvoicesState = this._updateInvoicesState.bind(this);\r\n this._onAddToCartFailed = this._onAddToCartFailed.bind(this);\r\n this._onToggleInvoiceRequestModal = this._onToggleInvoiceRequestModal.bind(this);\r\n this._handleFilterStateChange = this._handleFilterStateChange.bind(this);\r\n this._loadMoreInvoices = this._loadMoreInvoices.bind(this);\r\n this._requestInvoice = this._requestInvoice.bind(this);\r\n this._requestSpecificInvoice = this._requestSpecificInvoice.bind(this);\r\n this._setPayInvoiceErrorModalClose = this._setPayInvoiceErrorModalClose.bind(this);\r\n this.state = {\r\n invoices: [],\r\n invoicesFilterState: InvoicesFilterState.ShowAll,\r\n isLoading: true,\r\n isOpen: true,\r\n isPageLoaded: false,\r\n errorState: { errorMessage: '' },\r\n isInvoiceRequestModalOpen: false,\r\n payInvoiceErrorModalOpen: false,\r\n selectedButtonElement: null\r\n };\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IGdnInvoicesListProps, nextState: IInvoicesListState): boolean {\r\n if (this.state === nextState && this.props.data === nextProps.data) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n config: { className = '', heading },\r\n context: {\r\n request: { channel },\r\n cultureFormatter: {\r\n formatCurrency,\r\n\r\n // @ts-expect-error\r\n currencyCode\r\n }\r\n },\r\n data: { customerBalance },\r\n resources: { invoicesListTitle, invoicesListDescTitle, invoicesListDescCount }\r\n } = this.props;\r\n\r\n const totalAmount = customerBalance.result?.OpenInvoiceBalance || 0;\r\n const amountText = `${formatCurrency(totalAmount.toFixed(2), currencyCode)} ${channel?.Currency || 'USD'}`;\r\n\r\n const totalCount = customerBalance.result?.OpenInvoiceCount || 0;\r\n const countText = invoicesListDescCount.replace('{0}', totalCount.toString());\r\n const invoicesListTitleHeading = heading?.text ?? invoicesListTitle;\r\n\r\n const headerClassName = `${this._className}__header`;\r\n\r\n const header = (\r\n
\r\n \r\n
\r\n
{invoicesListDescTitle}
\r\n
{amountText}
\r\n
{countText}
\r\n
\r\n
\r\n );\r\n\r\n const viewProps: IInvoicesListViewProps = {\r\n ...(this.props as IGdnInvoicesListProps),\r\n moduleProps: {\r\n moduleProps: this.props,\r\n className: classnames(this._className, className)\r\n },\r\n header,\r\n invoiceRequestModal: this._renderInvoiceRequestModal(),\r\n filter: this._renderInvoicesFilter(this._className),\r\n pagination: this._renderPagination()\r\n };\r\n\r\n if (!this.state.isPageLoaded) {\r\n return this.props.renderView(viewProps);\r\n }\r\n\r\n if (ArrayExtensions.hasElements(this.state.invoices)) {\r\n viewProps.content = this._renderListContainer();\r\n } else {\r\n viewProps.content = this._renderEmptyInvoiceLinesPageContent();\r\n }\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n await this.props.data.customer;\r\n const invoicesData = await this.props.data.invoices;\r\n this._initializeWithInvoices(invoicesData);\r\n\r\n reaction(\r\n () => this.state.isInvoiceRequestModalOpen,\r\n async () => {\r\n if (this.invoiceIds && !this.state.isInvoiceRequestModalOpen) {\r\n const context = { callerContext: this.props.context.actionContext };\r\n const b2bUserId: string = this.props.data.b2bUserInformation?.result?.B2BUserId || '';\r\n for (const invoiceId of this.invoiceIds) {\r\n await BusinessPartnerUsersDataActions.requestInvoiceCopyAsync(\r\n context,\r\n b2bUserId,\r\n invoiceId,\r\n BusinessPartnerOperationDeliveryType.Email\r\n );\r\n }\r\n this.invoiceIds = [];\r\n }\r\n }\r\n );\r\n }\r\n\r\n private _initializeWithInvoices(invoicesData: OrderInvoice[]): void {\r\n const invoices = invoicesData.map((invoice, index) => {\r\n this.buttonChildReference[Number(index)] = React.createRef();\r\n this.buttonChildPayButtonReference[Number(index)] = React.createRef();\r\n return new InvoiceModel(invoice);\r\n });\r\n this.setState({\r\n invoices,\r\n isLoading: false,\r\n isPageLoaded: true\r\n });\r\n }\r\n\r\n private _addInvoices(invoicesData: OrderInvoice[]): void {\r\n const newInvoices = invoicesData.map(invoice => new InvoiceModel(invoice));\r\n const invoices = this.state.invoices.concat(newInvoices);\r\n this.setState({\r\n invoices,\r\n isLoading: false\r\n });\r\n }\r\n\r\n private _renderEmptyInvoiceLinesPageContent(): JSX.Element {\r\n const containerClass = `${this._className}__empty-lines__container`;\r\n const actionsContainerClass = `${containerClass}__actions`;\r\n return (\r\n
\r\n
{this.props.resources.invoiceEmptyInvoiceLinesTitle}
\r\n
{this.props.resources.invoiceEmptyInvoiceLinesDescription}
\r\n
\r\n \r\n {this.props.resources.invoiceEmptyInvoiceLinesContinueShoppingButtonText}\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderListContainer(): JSX.Element {\r\n const containerClass = `${this._className}__container`;\r\n const containerHeaderClass = `${containerClass}__header`;\r\n const containerContentClass = `${containerClass}__content`;\r\n const isOnBehalfOfRequest = isOboRequest(this.props.context.request);\r\n\r\n return (\r\n
\r\n
\r\n {this._renderMakePayment(containerHeaderClass, isOnBehalfOfRequest)}\r\n {this._renderInvoiceRequestButton()}\r\n
\r\n
{this._renderInvoiceErrors()}
\r\n
{this._renderInvoicesList(containerContentClass)}
\r\n
\r\n );\r\n }\r\n\r\n private _updateInvoicesState(): void {\r\n this.setState({\r\n invoices: this.state.invoices\r\n });\r\n }\r\n\r\n private async _getInvoicesSearchCriteria(state: InvoicesFilterState): Promise {\r\n const searchCriteria: InvoiceSearchCriteria = {};\r\n\r\n const context = this.props.context.actionContext;\r\n\r\n const businessPartner = await getCurrentAsync({ callerContext: context });\r\n searchCriteria.BusinessPartnerId = businessPartner.BusinessPartnerId;\r\n\r\n const customer = await getCustomer(new GetCustomerInput(context.requestContext.apiSettings), context);\r\n searchCriteria.CustomerId = customer.AccountNumber;\r\n\r\n switch (state) {\r\n case InvoicesFilterState.ShowAll:\r\n searchCriteria.InvoicePaidStatusValues = [InvoicePaidStatus.None];\r\n break;\r\n case InvoicesFilterState.Paid:\r\n searchCriteria.InvoicePaidStatusValues = [InvoicePaidStatus.Paid];\r\n break;\r\n case InvoicesFilterState.PartiallyPaid:\r\n searchCriteria.InvoicePaidStatusValues = [InvoicePaidStatus.PartiallyPaid];\r\n break;\r\n case InvoicesFilterState.Unpaid:\r\n searchCriteria.InvoicePaidStatusValues = [InvoicePaidStatus.Unpaid];\r\n break;\r\n default:\r\n throw new Error('Failed to process unknown invoices filter state.');\r\n }\r\n\r\n return searchCriteria;\r\n }\r\n\r\n private async _handleFilterStateChange(state: InvoicesFilterState): Promise {\r\n this.setState({\r\n invoicesFilterState: state,\r\n isLoading: true\r\n });\r\n\r\n const searchCriteria = await this._getInvoicesSearchCriteria(state);\r\n\r\n if (this._queryResultSettings.Paging) {\r\n this._queryResultSettings.Paging.Skip = 0;\r\n }\r\n\r\n const invoices = await getGdnInvoices(\r\n new GetGdnInvoicesInput(searchCriteria, this._queryResultSettings, this.getInvoiceType),\r\n this.props.context.actionContext\r\n );\r\n this._initializeWithInvoices(invoices);\r\n }\r\n\r\n private _renderInvoicesFilter(className: string): JSX.Element {\r\n const containerClass = `${this._className}__container`;\r\n const containerContentClass = `${containerClass}__content`;\r\n const filterClassName = `${className}__filter`;\r\n return (\r\n
\r\n
{this._renderInvoiceInCartPaymentMessage()}
\r\n \r\n
\r\n );\r\n }\r\n\r\n private _renderInvoicesList(className: string): JSX.Element {\r\n const tableClassName = `${className}__table`;\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _onAddToCartFailed(newErrorState: IInvoiceErrorState, reference?: React.RefObject): void {\r\n const errorState = { ...newErrorState };\r\n errorState.errorHost = 'ADDINVOICETOCART';\r\n errorState.errorMessage =\r\n newErrorState.errorReason?.failureReason === 'EMPTYINPUT'\r\n ? this.props.resources.invoiceErrorInvoiceIdNotExist\r\n : this.props.resources.invoiceErrorFailedAddInvoiceToCart;\r\n\r\n const shouldShowAdditionalInfoInPopup =\r\n errorState.errorCode === 'Microsoft_Dynamics_Commerce_Runtime_InvoiceLineNotAllowedWithItemLines';\r\n this.setState({ errorState, payInvoiceErrorModalOpen: shouldShowAdditionalInfoInPopup, selectedButtonElement: reference?.current });\r\n }\r\n\r\n private _renderMakePayment(className: string, disabled: boolean): JSX.Element {\r\n const id = `${className}__make-payment`;\r\n const makePaymentResources: IMakePaymentResources = {\r\n makePaymentButtonText: this.props.resources.makePaymentButtonText,\r\n makePaymentButtonAriaLabel: this.props.resources.makePaymentButtonAriaLabel\r\n };\r\n\r\n const selectedInvoices = this._getSelectedInvoices();\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _setPayInvoiceErrorModalClose(): void {\r\n this.setState({\r\n payInvoiceErrorModalOpen: false\r\n });\r\n this.state.selectedButtonElement?.focus();\r\n }\r\n\r\n private _renderInvoiceErrors(): JSX.Element {\r\n const {\r\n resources: {\r\n payInvoiceErrorDialogHeader,\r\n payInvoiceErrorDialogBodyErrorTitle,\r\n payInvoiceErrorDialogBodyErrorDescription,\r\n payInvoiceErrorDialogFooterGoToCartButtonText,\r\n payInvoiceErrorDialogFooterCancelButtonText\r\n }\r\n } = this.props;\r\n\r\n const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\r\n\r\n const errorClassName = `${this._className}__errors`;\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _renderInvoiceInCartPaymentMessage(): JSX.Element {\r\n const cart = this.props.data.cart?.result;\r\n\r\n if (!cart?.hasInvoiceLine) {\r\n return <>;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n // Dismiss alert.\r\n private readonly _onDismiss = () => {\r\n this.setState({\r\n isOpen: false\r\n });\r\n };\r\n\r\n private _renderPagination(): JSX.Element | undefined {\r\n const { data, resources } = this.props;\r\n const invoices = data?.invoices?.result;\r\n if (!invoices || invoices.length < this._queryResultSettings.Paging!.Top!) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n \r\n {resources.invoicesLoadMore}\r\n \r\n );\r\n }\r\n\r\n private async _loadMoreInvoices(): Promise {\r\n this.setState({ isLoading: true });\r\n const searchCriteria = await this._getInvoicesSearchCriteria(this.state.invoicesFilterState);\r\n if (this._queryResultSettings.Paging) {\r\n this._queryResultSettings.Paging.Skip! += this._queryResultSettings.Paging.Top!;\r\n }\r\n const newInvoices = await getGdnInvoices(\r\n new GetGdnInvoicesInput(searchCriteria, this._queryResultSettings, this.getInvoiceType),\r\n this.props.context.actionContext\r\n );\r\n this._addInvoices(newInvoices);\r\n }\r\n\r\n private _renderInvoiceRequestModal(): JSX.Element {\r\n const customer = this.props.data.customer.result;\r\n const {\r\n invoiceRequestModalCancelLabel,\r\n invoiceRequestModalSubmitLabel,\r\n invoiceRequestModalHeaderLabel,\r\n invoiceRequestModalSendToEmailLabel,\r\n invoiceRequestModalSearch,\r\n invoiceRequestModalInvoiceSearchDisplay,\r\n invoiceRequestModalSingleInvoiceSearchDisplay,\r\n invoiceRequestModalSearchButton\r\n } = this.props.resources;\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _onToggleInvoiceRequestModal(): void {\r\n this.setState({\r\n isInvoiceRequestModalOpen: !this.state.isInvoiceRequestModalOpen\r\n });\r\n if (this.state.isInvoiceRequestModalOpen) {\r\n this.state.selectedButtonElement?.focus();\r\n }\r\n }\r\n\r\n /**\r\n * Request specific invoice function.\r\n */\r\n private readonly _onToggleInvoiceRequestParentModal = () => {\r\n this.setState(\r\n {\r\n selectedButtonElement: this.payInvoiceRequestReference.current\r\n },\r\n () => {\r\n this._onToggleInvoiceRequestModal();\r\n }\r\n );\r\n };\r\n\r\n private _renderInvoiceRequestButton(): JSX.Element | null {\r\n const { invoiceRequestButtonLabel } = this.props.resources;\r\n const customer = this.props.data.customer.result;\r\n\r\n if (StringExtensions.isNullOrWhitespace(customer?.Email)) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _requestInvoice(invoiceId: string): void {\r\n this.invoiceIds.push(invoiceId);\r\n this._onToggleInvoiceRequestModal();\r\n }\r\n\r\n private _getSelectedInvoices(): InvoiceModel[] {\r\n let selectedInvoices = this.state.invoices.filter(invoice => invoice.isSelected);\r\n if (!ArrayExtensions.hasElements(selectedInvoices)) {\r\n selectedInvoices = this.state.invoices;\r\n }\r\n\r\n return selectedInvoices;\r\n }\r\n\r\n private _requestSpecificInvoice(\r\n specificInvoice: InvoiceModel,\r\n requestInvoiceButtonReference: React.RefObject\r\n ): void {\r\n this.state.invoices.forEach((invoice: InvoiceModel) => {\r\n if (invoice === specificInvoice) {\r\n invoice.isSelected = true;\r\n } else {\r\n invoice.isSelected = false;\r\n }\r\n });\r\n this.setState({\r\n selectedButtonElement: requestInvoiceButtonReference.current\r\n });\r\n this._onToggleInvoiceRequestModal();\r\n }\r\n}\r\n\r\nexport default InvoicesList;\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 { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IInvoicesListViewProps } from './gdn-invoices-list';\r\n\r\nexport const InvoiceListView: React.FC = props => {\r\n const { header, filter, content, invoiceRequestModal, pagination } = props;\r\n\r\n return (\r\n \r\n {header}\r\n {invoiceRequestModal}\r\n {filter}\r\n {content}\r\n {pagination}\r\n \r\n );\r\n};\r\n\r\nexport default InvoiceListView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport * as React from 'react';\r\n\r\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\r\n\r\n/**\r\n * INavigationMenuViewRootProps.\r\n */\r\nexport interface INavigationMenuViewRootProps {\r\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\r\n}\r\n\r\n/**\r\n * Represent navigation menu state interface.\r\n */\r\nexport interface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n categoryImage?: Msdyn365.IImageData[] | null;\r\n mobileViewLabelText?: string;\r\n isDrawerOpen: boolean;\r\n desktopCategoryId: number;\r\n isOnlyMobile: boolean;\r\n isNavOpen: boolean;\r\n}\r\n\r\n/**\r\n * NavMenuConstants enum.\r\n */\r\nexport enum NavMenuConstants {\r\n zero = 0,\r\n one = 1,\r\n two = 2,\r\n three = 3,\r\n four = 4,\r\n escapeKey = 27,\r\n rootMenu = 1\r\n}\r\n\r\n/**\r\n * GridSizes.\r\n */\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * Get category image.\r\n * @param props - Navigation menu props.\r\n * @param categoryImage - Category Image.\r\n * @param alttext - AltText String.\r\n * @returns Returns Node.\r\n */\r\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\r\n\r\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n if (categoryImageUrl !== undefined) {\r\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n addThrottledEvent,\r\n Button,\r\n Collapse, Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IPayLoad,\r\n isMobile,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\r\n\r\n/**\r\n *\r\n * NavigationMenuRootDisabled component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuRootDisabled extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n\r\n private readonly supportedLevel: number = NavMenuConstants.four;\r\n\r\n private currentLevel: number = NavMenuConstants.zero;\r\n\r\n private readonly menuNode: React.RefObject;\r\n\r\n private readonly menuItemRef: React.RefObject;\r\n\r\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private readonly attributes?: Msdyn365.IDictionary;\r\n\r\n private customResizeThrottledEventHandler?: (event: Event) => void;\r\n\r\n public constructor(props: INavigationMenuViewRootProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.menuItemRef = React.createRef();\r\n const { menuItemData } = this.props.navProps;\r\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\r\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\r\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\r\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\r\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\r\n const imageSource = item.image.src;\r\n this.promotionalImage.push({ src: imageSource, altText: item.text, additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\r\n return null;\r\n });\r\n }\r\n }\r\n this.state = {\r\n activeMenu: 1,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n isDrawerOpen: false,\r\n desktopCategoryId: -1,\r\n isOnlyMobile: this.isOnlyMobile,\r\n categoryImage: this.promotionalImage,\r\n isNavOpen: false\r\n };\r\n this.telemetryContent = getTelemetryObject(this.props.navProps.context.request.telemetryPageName!,\r\n this.props.navProps.friendlyName,\r\n this.props.navProps.telemetry);\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n }\r\n\r\n @computed public get isOnlyMobile(): boolean {\r\n return (isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\r\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n this._customUpdateViewport();\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\r\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\r\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.currentLevel = 1;\r\n const navbarKey = 'header-nav-mobile';\r\n return (\r\n \r\n {\r\n this.state.isOnlyMobile ? this._renderMobileMenu() : (<>\r\n \r\n {this._renderCollapseMenu()}\r\n )\r\n }\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Function to handle nav bar toggle.\r\n */\r\n private readonly _toggleNavBar = (): void => {\r\n this.setState(previousState => ({\r\n activeMenu: 1,\r\n isNavOpen: !previousState.isNavOpen\r\n }));\r\n };\r\n\r\n private _renderCollapseMenu(): JSX.Element | null {\r\n return (\r\n \r\n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\r\n \r\n );\r\n }\r\n\r\n private _renderMobileMenu(): JSX.Element {\r\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {this.state.isOnlyMobile && this.state.activeMenu !== undefined &&\r\n \r\n \r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n }\r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDesktopMenu(): JSX.Element {\r\n const { MenuList, Navigation } = this.props.navProps;\r\n\r\n return (\r\n \r\n \r\n {this._renderDisplay()}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\r\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\r\n return (\r\n this._renderLinkMenuItem(item)\r\n );\r\n } else if (!item.linkURL) {\r\n return (\r\n this._renderSpanMenuItem(item)\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem } = this.props.navProps;\r\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (ArrayExtensions.hasElements(menuItemData)) {\r\n menuItemData[0].id = 1;\r\n }\r\n\r\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\r\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\r\n\r\n if (menuItem) {\r\n menuItemList.push(\r\n \r\n {' '}\r\n {this._createMenuItemList(menuItem)}\r\n {' '}\r\n \r\n );\r\n }\r\n } else {\r\n\r\n for (const [index, item] of menuItemData.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n
\r\n );\r\n }\r\n\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\r\n if (!menu) {\r\n return null;\r\n }\r\n\r\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\r\n const item: IMenuItemData = menu[Number(index)];\r\n\r\n if (item.id === this.state.activeMenu) {\r\n if (!NavigationMenuRootDisabled.isBackTrack) {\r\n this.setState({ parentMenu: parentMenuId });\r\n } else {\r\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\r\n }\r\n return item;\r\n }\r\n const found = this._getFromSubMenu(item.id, item.subMenu);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\r\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false));\r\n }\r\n\r\n return (\r\n <>\r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n\r\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\r\n return (this._renderLinkMenuItem(menuItemData, menuItemData.id));\r\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\r\n\r\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\r\n if (activeMenu === NavMenuConstants.rootMenu) {\r\n subMenus = subMenuArray!.filter(subMenuItem => (subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail));\r\n }\r\n\r\n const { ListItem } = this.props.navProps;\r\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\r\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\r\n\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\r\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\r\n const hasOptions = (option.subMenu && ArrayExtensions.hasElements(option.subMenu));\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && this.state.isOnlyMobile) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\r\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\r\n menuItem = this.getMenuItem(option, index);\r\n } else {\r\n menuItem = null;\r\n }\r\n let subMenu;\r\n const isHavingSubmenu = hasOptions && isEnableMultiSupportMenu && (this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one);\r\n\r\n if (hasOptions && !this.state.isOnlyMobile) {\r\n\r\n if (this.currentLevel >= NavMenuConstants.two) {\r\n levelClassName = 'level-3';\r\n subMenu = this._renderSubMenuDrawer(levelClassName, option);\r\n } else if (this.currentLevel <= this.supportedLevel) {\r\n this.currentLevel++;\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\r\n }\r\n }\r\n\r\n if (isHavingSubmenu && this.state.isOnlyMobile) {\r\n this.currentLevel++;\r\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\r\n }\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n return (\r\n \r\n { menuItem}\r\n { subMenu}\r\n \r\n );\r\n });\r\n return (this._renderMenu(levelClassName, menuOptions, isSubMenu));\r\n }\r\n\r\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\r\n let menuItem: JSX.Element | null;\r\n if (this.currentLevel === NavMenuConstants.one) {\r\n menuItem = (option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option));\r\n } else {\r\n menuItem = (option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option));\r\n }\r\n return menuItem;\r\n }\r\n\r\n private _renderSubMenuDrawer(levelClassName: string, menuItem: IMenuItemData): JSX.Element | null {\r\n return (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\r\n return this._renderDrawerLink(menuSubItem);\r\n })}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handle desktop category click.\r\n * @param desktopCategoryId - Desktop category id used to identify the index of the category.\r\n * @returns Returns void.\r\n */\r\n private readonly _bindDesktopCategoryClick = (desktopCategoryId: number) => (): void => {\r\n if (this.state.desktopCategoryId !== desktopCategoryId) {\r\n this.setState({ desktopCategoryId, isDrawerOpen: true });\r\n } else {\r\n this.setState({ desktopCategoryId: -1, isDrawerOpen: false });\r\n }\r\n };\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n { linkText}\r\n \r\n );\r\n }\r\n return null;\r\n\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props.navProps;\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\r\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\r\n const isCategoryImageDisplay =\r\n !this.state.isOnlyMobile && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !isSubmenu;\r\n const isPromotionalContentDisplay =\r\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\r\n const divContainerClass = this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = NavMenuConstants.one;\r\n const menuLevelSupportClassName = isCategoryImageDisplay && this.props.navProps.config.menuLevelSupport &&\r\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two && 'navmenu-multi-level';\r\n\r\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\r\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\r\n return (\r\n \r\n \r\n {menuOptions}\r\n \r\n
\r\n {\r\n isCategoryImageDisplay && ArrayExtensions.hasElements(categoryImages) && categoryImages.map(item => (\r\n \r\n { getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\r\n { isPromotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n ))\r\n }\r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Handle Category image update.\r\n * @param categoryImageSource - Image source.\r\n * @param option - Menu Item data.\r\n * @returns Returns empty.\r\n */\r\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\r\n const linkText = option.linkText ? option.linkText : '';\r\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n for (const item of option.promotionalContent) {\r\n const imageSource = item.image.src;\r\n promotionalImage.push({ src: imageSource, altText: item.text, additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\r\n }\r\n }\r\n this.setState({\r\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\r\n });\r\n };\r\n\r\n /**\r\n * Handle dropdown toggle.\r\n * @param data - Menu Item data.\r\n * @param parentId - Number.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({\r\n activeMenu: data.id,\r\n parentMenu: parentId\r\n });\r\n if (this.props.navProps.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n NavigationMenuRootDisabled.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n };\r\n\r\n /**\r\n * Handle back navigation for menu items for mobile view.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleGoBack = () => () => {\r\n NavigationMenuRootDisabled.isBackTrack = true;\r\n this.setState((previousState) => ({ activeMenu: previousState.parentMenu }));\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on click on body.\r\n * @param event - MouseEvent.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if (this.menuNode.current &&\r\n !this.menuNode.current.contains(event.target as Node)) {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Checks to assign a ref for focus.\r\n * @param index -Sub menu list index.\r\n * @param mobileViewLabelText -Mobile view label text.\r\n * @param optionLinkText -Sub menu item link text.\r\n * @returns Boolean.\r\n */\r\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\r\n const firstIndex: number = 0;\r\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\r\n return true;\r\n }\r\n if (!optionLinkText || !mobileViewLabelText) {\r\n return false;\r\n }\r\n return mobileViewLabelText === optionLinkText;\r\n };\r\n\r\n /**\r\n * Function to handle nav menu close.\r\n */\r\n private readonly _closeNavMenu = (): void => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on esc key.\r\n * @param event - Event.\r\n */\r\n private readonly _escFunction = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n };\r\n\r\n /**\r\n * Custom update viewport.\r\n */\r\n private readonly _customUpdateViewport = (): void => {\r\n this.setState({ isOnlyMobile: this.isOnlyMobile });\r\n };\r\n}\r\n\r\nexport default NavigationMenuRootDisabled;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n addThrottledEvent,\r\n Button,\r\n Collapse, Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IPayLoad,\r\n isMobile,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\r\n\r\n/**\r\n *\r\n * NavigationMenuRootEnabled component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuRootEnabled extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n\r\n private readonly supportedLevel: number = NavMenuConstants.four;\r\n\r\n private currentLevel: number = NavMenuConstants.zero;\r\n\r\n private readonly menuNode: React.RefObject;\r\n\r\n private readonly menuItemRef: React.RefObject;\r\n\r\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\r\n\r\n private menuItemData: IMenuItemData[] = [];\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private readonly attributes?: Msdyn365.IDictionary;\r\n\r\n private customResizeThrottledEventHandler?: (event: Event) => void;\r\n\r\n public constructor(props: INavigationMenuViewRootProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.menuItemRef = React.createRef();\r\n const { menuItemData } = this.props.navProps;\r\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\r\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\r\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\r\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\r\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\r\n const imageSource = item.image.src;\r\n this.promotionalImage.push({ src: imageSource, altText: item.text, additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\r\n return null;\r\n });\r\n }\r\n }\r\n this.state = {\r\n activeMenu: NavMenuConstants.rootMenu,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n isDrawerOpen: false,\r\n desktopCategoryId: -1,\r\n isOnlyMobile: this.isOnlyMobile,\r\n categoryImage: this.promotionalImage,\r\n isNavOpen: false\r\n };\r\n\r\n this.telemetryContent = getTelemetryObject(this.props.navProps.context.request.telemetryPageName!,\r\n this.props.navProps.friendlyName,\r\n this.props.navProps.telemetry);\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n }\r\n\r\n @computed public get isOnlyMobile(): boolean {\r\n return (isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\r\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n this._customUpdateViewport();\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n this._addShopAllLink();\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\r\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\r\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.currentLevel = NavMenuConstants.one;\r\n const navbarKey = 'header-nav-mobile';\r\n return (\r\n \r\n {\r\n this.state.isOnlyMobile ? this._renderMobileMenu() : (<>\r\n {this.props.navProps.config.rootMenuNavigation}\r\n {this._renderCollapseMenu()}\r\n )\r\n }\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Function to handle nav bar toggle.\r\n */\r\n private readonly _toggleNavBar = (): void => {\r\n this.setState(previousState => ({\r\n activeMenu: NavMenuConstants.rootMenu,\r\n isNavOpen: !previousState.isNavOpen\r\n }));\r\n };\r\n\r\n private _renderCollapseMenu(): JSX.Element | null {\r\n return (\r\n \r\n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\r\n \r\n );\r\n }\r\n\r\n private _renderMobileMenu(): JSX.Element {\r\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\r\n\r\n this.currentLevel = NavMenuConstants.one;\r\n return (\r\n \r\n \r\n {this.state.isOnlyMobile && this.state.activeMenu !== undefined &&\r\n \r\n \r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n }\r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDesktopMenu(): JSX.Element {\r\n const { Navigation } = this.props.navProps;\r\n return (\r\n \r\n \r\n {this._renderDisplay()}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\r\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\r\n return (\r\n this._renderLinkMenuItem(item)\r\n );\r\n } else if (!item.linkURL) {\r\n return (\r\n this._renderSpanMenuItem(item)\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem } = this.props.navProps;\r\n let menuItemData: IMenuItemData[] = [];\r\n if (this.state.isOnlyMobile) {\r\n menuItemData = this.menuItemData;\r\n } else {\r\n menuItemData = this.props.navProps.menuItemData;\r\n }\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n let cmsMenuData: IMenuItemData[] | undefined = [];\r\n let retailMenuItemData: IMenuItemData[] | undefined = [];\r\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\r\n\r\n for (const item of retailMenuData) {\r\n retailMenuItemData = item.subMenu!.filter(subMenuItem => (subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail));\r\n item.subMenu = retailMenuItemData;\r\n }\r\n\r\n for (const item of menuItemData) {\r\n cmsMenuData = item.subMenu!.filter(subMenuItem => (subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail));\r\n }\r\n\r\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\r\n let menuItem: IMenuItemData | null = {};\r\n for (const menuItemDatum of menuItemData) {\r\n if (menuItemDatum.id === activeMenu) {\r\n menuItem = menuItemDatum;\r\n if (!NavigationMenuRootEnabled.isBackTrack) {\r\n this.setState({\r\n parentMenu: undefined\r\n });\r\n } else {\r\n this.setState({\r\n parentMenu: undefined,\r\n mobileViewLabelText: menuItemDatum.linkText\r\n });\r\n }\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemDatum);\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n if (menuItem) {\r\n menuItemList.push(\r\n \r\n {' '}\r\n {this._createMenuItemList(menuItem)}\r\n {' '}\r\n \r\n );\r\n }\r\n\r\n } else {\r\n for (const [index, item] of retailMenuData.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n
\r\n );\r\n }\r\n\r\n for (const [index, item] of cmsMenuData.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n }\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item?.subMenu;\r\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\r\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\r\n const subMenu: IMenuItemData = subMenus[Number(index)];\r\n let parentMenuId = item?.id;\r\n\r\n if (subMenu.id === this.state.activeMenu) {\r\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\r\n parentMenuId = undefined;\r\n }\r\n\r\n if (!NavigationMenuRootEnabled.isBackTrack) {\r\n this.setState({ parentMenu: parentMenuId });\r\n } else {\r\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\r\n }\r\n return subMenu;\r\n }\r\n const found = this._getFromSubMenu(subMenu);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\r\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false));\r\n }\r\n return (\r\n <>\r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n\r\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\r\n return (this._renderLinkMenuItem(menuItemData, menuItemData.id));\r\n } else if (!menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\r\n\r\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\r\n if (activeMenu === NavMenuConstants.rootMenu) {\r\n subMenus = subMenuArray!.filter(subMenuItem => (subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail));\r\n }\r\n\r\n const { ListItem } = this.props.navProps;\r\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\r\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\r\n\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\r\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\r\n const hasOptions = (option.subMenu && ArrayExtensions.hasElements(option.subMenu));\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && this.state.isOnlyMobile) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\r\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\r\n menuItem = this.getMenuItem(option, index);\r\n } else {\r\n menuItem = null;\r\n }\r\n let subMenu;\r\n const isHavingSubmenu = hasOptions && isEnableMultiSupportMenu && (this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one);\r\n\r\n if (hasOptions && !this.state.isOnlyMobile) {\r\n if (this.currentLevel >= NavMenuConstants.two) {\r\n levelClassName = 'level-3';\r\n subMenu = this._renderSubMenuDrawer(levelClassName, option);\r\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\r\n this.currentLevel++;\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\r\n }\r\n }\r\n if (isHavingSubmenu && this.state.isOnlyMobile) {\r\n this.currentLevel++;\r\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\r\n }\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n return (\r\n \r\n { menuItem}\r\n { subMenu}\r\n \r\n );\r\n });\r\n return (this._renderMenu(levelClassName, menuOptions, isSubMenu));\r\n }\r\n\r\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\r\n let menuItem: JSX.Element | null;\r\n if (this.currentLevel === NavMenuConstants.one) {\r\n menuItem = (option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option));\r\n } else {\r\n menuItem = (option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option));\r\n }\r\n return menuItem;\r\n }\r\n\r\n private _renderSubMenuDrawer(levelClassName: string, menuItem: IMenuItemData): JSX.Element | null {\r\n return (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\r\n return this._renderDrawerLink(menuSubItem);\r\n })}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handle desktop category click.\r\n * @param desktopCategoryId - Desktop category id used to identify the index of the category.\r\n * @returns Returns void.\r\n */\r\n private readonly _bindDesktopCategoryClick = (desktopCategoryId: number) => (): void => {\r\n if (this.state.desktopCategoryId !== desktopCategoryId) {\r\n this.setState({ desktopCategoryId, isDrawerOpen: true });\r\n } else {\r\n this.setState({ desktopCategoryId: -1, isDrawerOpen: false });\r\n }\r\n };\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n { linkText}\r\n \r\n );\r\n }\r\n return null;\r\n\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props.navProps;\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\r\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\r\n const isCategoryImageDisplay =\r\n !this.state.isOnlyMobile && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !isSubmenu;\r\n const isPromotionalContentDisplay =\r\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\r\n const divContainerClass = this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = NavMenuConstants.one;\r\n const menuLevelSupportClassName =\r\n isCategoryImageDisplay && this.props.navProps.config.menuLevelSupport &&\r\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two && 'navmenu-multi-level';\r\n\r\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\r\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\r\n return (\r\n \r\n \r\n {menuOptions}\r\n \r\n
\r\n {\r\n isCategoryImageDisplay && ArrayExtensions.hasElements(categoryImages) && categoryImages.map(item => (\r\n \r\n { getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\r\n { isPromotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n ))\r\n }\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handle Category image update.\r\n * @param categoryImageSource - Image source.\r\n * @param option - Menu Item data.\r\n * @returns Returns empty.\r\n */\r\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\r\n const linkText = option.linkText ? option.linkText : '';\r\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n for (const item of option.promotionalContent) {\r\n const imageSource = item.image.src;\r\n promotionalImage.push({ src: imageSource, altText: item.text, additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\r\n }\r\n }\r\n this.setState({\r\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\r\n });\r\n };\r\n\r\n /**\r\n * Handle dropdown toggle.\r\n * @param data - Menu Item data.\r\n * @param parentId - Number.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({\r\n activeMenu: data.id,\r\n parentMenu: parentId\r\n });\r\n if (this.props.navProps.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n NavigationMenuRootEnabled.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n };\r\n\r\n /**\r\n * Handle back navigation for menu items for mobile view.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleGoBack = () => () => {\r\n NavigationMenuRootEnabled.isBackTrack = true;\r\n this.setState((previousState) => ({ activeMenu: previousState.parentMenu }));\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on click on body.\r\n * @param event - MouseEvent.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if (this.menuNode.current &&\r\n !this.menuNode.current.contains(event.target as Node)) {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Add shop all link for Mobile submenu.\r\n */\r\n private readonly _addShopAllLink = (): void => {\r\n const { menuItemData } = this.props.navProps;\r\n this.menuItemData = menuItemData;\r\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\r\n this.menuItemData[0].subMenu?.map(item => {\r\n const shopAllObject = {};\r\n Object.assign(shopAllObject, { imageSource: item.imageSource });\r\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\r\n Object.assign(shopAllObject, { linkURL: item.linkURL });\r\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\r\n item.subMenu.unshift(shopAllObject);\r\n }\r\n return item;\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Checks to assign a ref for focus.\r\n * @param index -Sub menu list index.\r\n * @param mobileViewLabelText -Mobile view label text.\r\n * @param optionLinkText -Sub menu item link text.\r\n * @returns Boolean.\r\n */\r\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\r\n const firstIndex: number = 0;\r\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\r\n return true;\r\n }\r\n if (!optionLinkText || !mobileViewLabelText) {\r\n return false;\r\n }\r\n return mobileViewLabelText === optionLinkText;\r\n };\r\n\r\n /**\r\n * Function to handle nav menu close.\r\n */\r\n private readonly _closeNavMenu = (): void => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on esc key.\r\n * @param event - Event.\r\n */\r\n private readonly _escFunction = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\r\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n };\r\n\r\n /**\r\n * Custom update viewport.\r\n */\r\n private readonly _customUpdateViewport = (): void => {\r\n this.setState({ isOnlyMobile: this.isOnlyMobile });\r\n };\r\n\r\n}\r\n\r\nexport default NavigationMenuRootEnabled;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport * as React from 'react';\r\n\r\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\r\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\r\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\r\n\r\n/**\r\n * Render the Navigation menu.\r\n * @param props - The navigation menu view props.\r\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\r\n */\r\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\r\n\r\n if (props.config.enabletopMenu) {\r\n return ;\r\n }\r\n\r\n return ;\r\n\r\n};\r\n\r\nexport default navigationMenuView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport * as React from 'react';\r\n\r\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\r\n\r\n/**\r\n * INavigationMenuViewRootProps.\r\n */\r\nexport interface INavigationMenuViewRootProps {\r\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\r\n}\r\n\r\n/**\r\n * Represent navigation menu state interface.\r\n */\r\nexport interface INavigationState {\r\n parentMenu?: number;\r\n activeMenu?: number;\r\n categoryImage?: Msdyn365.IImageData[] | null;\r\n mobileViewLabelText?: string;\r\n isDrawerOpen: boolean;\r\n desktopCategoryId: number;\r\n isOnlyMobile: boolean;\r\n isNavOpen: boolean;\r\n}\r\n\r\n/**\r\n * NavMenuConstants enum.\r\n */\r\nexport enum NavMenuConstants {\r\n zero = 0,\r\n one = 1,\r\n two = 2,\r\n three = 3,\r\n four = 4,\r\n escapeKey = 27,\r\n rootMenu = 1\r\n}\r\n\r\n/**\r\n * GridSizes.\r\n */\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * Get category image.\r\n * @param props - Navigation menu props.\r\n * @param categoryImage - Category Image.\r\n * @param alttext - AltText String.\r\n * @returns Returns Node.\r\n */\r\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\r\n\r\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\r\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\r\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n if (categoryImageUrl !== undefined) {\r\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\r\n return (\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n addThrottledEvent,\r\n Button,\r\n Collapse, Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IPayLoad,\r\n isMobile,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\r\n\r\n/**\r\n *\r\n * NavigationMenuRootDisabled component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuRootDisabled extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n\r\n private readonly supportedLevel: number = NavMenuConstants.four;\r\n\r\n private currentLevel: number = NavMenuConstants.zero;\r\n\r\n private readonly menuNode: React.RefObject;\r\n\r\n private readonly menuItemRef: React.RefObject;\r\n\r\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private readonly attributes?: Msdyn365.IDictionary;\r\n\r\n private customResizeThrottledEventHandler?: (event: Event) => void;\r\n\r\n public constructor(props: INavigationMenuViewRootProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.menuItemRef = React.createRef();\r\n const { menuItemData } = this.props.navProps;\r\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\r\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\r\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\r\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\r\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\r\n const imageSource = item.image.src;\r\n this.promotionalImage.push({ src: imageSource, altText: item.text, additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\r\n return null;\r\n });\r\n }\r\n }\r\n this.state = {\r\n activeMenu: 1,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n isDrawerOpen: false,\r\n desktopCategoryId: -1,\r\n isOnlyMobile: this.isOnlyMobile,\r\n categoryImage: this.promotionalImage,\r\n isNavOpen: false\r\n };\r\n this.telemetryContent = getTelemetryObject(this.props.navProps.context.request.telemetryPageName!,\r\n this.props.navProps.friendlyName,\r\n this.props.navProps.telemetry);\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n }\r\n\r\n @computed public get isOnlyMobile(): boolean {\r\n return (isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\r\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n this._customUpdateViewport();\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\r\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\r\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.currentLevel = 1;\r\n const navbarKey = 'header-nav-mobile';\r\n return (\r\n \r\n {\r\n this.state.isOnlyMobile ? this._renderMobileMenu() : (<>\r\n \r\n {this._renderCollapseMenu()}\r\n )\r\n }\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Function to handle nav bar toggle.\r\n */\r\n private readonly _toggleNavBar = (): void => {\r\n this.setState(previousState => ({\r\n activeMenu: 1,\r\n isNavOpen: !previousState.isNavOpen\r\n }));\r\n };\r\n\r\n private _renderCollapseMenu(): JSX.Element | null {\r\n return (\r\n \r\n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\r\n \r\n );\r\n }\r\n\r\n private _renderMobileMenu(): JSX.Element {\r\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\r\n\r\n this.currentLevel = 1;\r\n return (\r\n \r\n \r\n {this.state.isOnlyMobile && this.state.activeMenu !== undefined &&\r\n \r\n \r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n }\r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDesktopMenu(): JSX.Element {\r\n const { MenuList, Navigation } = this.props.navProps;\r\n\r\n return (\r\n \r\n \r\n {this._renderDisplay()}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\r\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\r\n return (\r\n this._renderLinkMenuItem(item)\r\n );\r\n } else if (!item.linkURL) {\r\n return (\r\n this._renderSpanMenuItem(item)\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem } = this.props.navProps;\r\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n\r\n if (ArrayExtensions.hasElements(menuItemData)) {\r\n menuItemData[0].id = 1;\r\n }\r\n\r\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\r\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\r\n\r\n if (menuItem) {\r\n menuItemList.push(\r\n \r\n {' '}\r\n {this._createMenuItemList(menuItem)}\r\n {' '}\r\n \r\n );\r\n }\r\n } else {\r\n\r\n for (const [index, item] of menuItemData.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n
\r\n );\r\n }\r\n\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\r\n if (!menu) {\r\n return null;\r\n }\r\n\r\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\r\n const item: IMenuItemData = menu[Number(index)];\r\n\r\n if (item.id === this.state.activeMenu) {\r\n if (!NavigationMenuRootDisabled.isBackTrack) {\r\n this.setState({ parentMenu: parentMenuId });\r\n } else {\r\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\r\n }\r\n return item;\r\n }\r\n const found = this._getFromSubMenu(item.id, item.subMenu);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\r\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false));\r\n }\r\n\r\n return (\r\n <>\r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n\r\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\r\n return (this._renderLinkMenuItem(menuItemData, menuItemData.id));\r\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\r\n\r\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\r\n if (activeMenu === NavMenuConstants.rootMenu) {\r\n subMenus = subMenuArray!.filter(subMenuItem => (subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail));\r\n }\r\n\r\n const { ListItem } = this.props.navProps;\r\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\r\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\r\n\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\r\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\r\n const hasOptions = (option.subMenu && ArrayExtensions.hasElements(option.subMenu));\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && this.state.isOnlyMobile) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\r\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\r\n menuItem = this.getMenuItem(option, index);\r\n } else {\r\n menuItem = null;\r\n }\r\n let subMenu;\r\n const isHavingSubmenu = hasOptions && isEnableMultiSupportMenu && (this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one);\r\n\r\n if (hasOptions && !this.state.isOnlyMobile) {\r\n\r\n if (this.currentLevel >= NavMenuConstants.two) {\r\n levelClassName = 'level-3';\r\n subMenu = this._renderSubMenuDrawer(levelClassName, option);\r\n } else if (this.currentLevel <= this.supportedLevel) {\r\n this.currentLevel++;\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\r\n }\r\n }\r\n\r\n if (isHavingSubmenu && this.state.isOnlyMobile) {\r\n this.currentLevel++;\r\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\r\n }\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n return (\r\n \r\n { menuItem}\r\n { subMenu}\r\n \r\n );\r\n });\r\n return (this._renderMenu(levelClassName, menuOptions, isSubMenu));\r\n }\r\n\r\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\r\n let menuItem: JSX.Element | null;\r\n if (this.currentLevel === NavMenuConstants.one) {\r\n menuItem = (option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option));\r\n } else {\r\n menuItem = (option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option));\r\n }\r\n return menuItem;\r\n }\r\n\r\n private _renderSubMenuDrawer(levelClassName: string, menuItem: IMenuItemData): JSX.Element | null {\r\n return (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\r\n return this._renderDrawerLink(menuSubItem);\r\n })}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handle desktop category click.\r\n * @param desktopCategoryId - Desktop category id used to identify the index of the category.\r\n * @returns Returns void.\r\n */\r\n private readonly _bindDesktopCategoryClick = (desktopCategoryId: number) => (): void => {\r\n if (this.state.desktopCategoryId !== desktopCategoryId) {\r\n this.setState({ desktopCategoryId, isDrawerOpen: true });\r\n } else {\r\n this.setState({ desktopCategoryId: -1, isDrawerOpen: false });\r\n }\r\n };\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n { linkText}\r\n \r\n );\r\n }\r\n return null;\r\n\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props.navProps;\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\r\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\r\n const isCategoryImageDisplay =\r\n !this.state.isOnlyMobile && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !isSubmenu;\r\n const isPromotionalContentDisplay =\r\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\r\n const divContainerClass = this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = NavMenuConstants.one;\r\n const menuLevelSupportClassName = isCategoryImageDisplay && this.props.navProps.config.menuLevelSupport &&\r\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two && 'navmenu-multi-level';\r\n\r\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\r\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\r\n return (\r\n \r\n \r\n {menuOptions}\r\n \r\n
\r\n {\r\n isCategoryImageDisplay && ArrayExtensions.hasElements(categoryImages) && categoryImages.map(item => (\r\n \r\n { getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\r\n { isPromotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n ))\r\n }\r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Handle Category image update.\r\n * @param categoryImageSource - Image source.\r\n * @param option - Menu Item data.\r\n * @returns Returns empty.\r\n */\r\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\r\n const linkText = option.linkText ? option.linkText : '';\r\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n for (const item of option.promotionalContent) {\r\n const imageSource = item.image.src;\r\n promotionalImage.push({ src: imageSource, altText: item.text, additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\r\n }\r\n }\r\n this.setState({\r\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\r\n });\r\n };\r\n\r\n /**\r\n * Handle dropdown toggle.\r\n * @param data - Menu Item data.\r\n * @param parentId - Number.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({\r\n activeMenu: data.id,\r\n parentMenu: parentId\r\n });\r\n if (this.props.navProps.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n NavigationMenuRootDisabled.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n };\r\n\r\n /**\r\n * Handle back navigation for menu items for mobile view.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleGoBack = () => () => {\r\n NavigationMenuRootDisabled.isBackTrack = true;\r\n this.setState((previousState) => ({ activeMenu: previousState.parentMenu }));\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on click on body.\r\n * @param event - MouseEvent.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if (this.menuNode.current &&\r\n !this.menuNode.current.contains(event.target as Node)) {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Checks to assign a ref for focus.\r\n * @param index -Sub menu list index.\r\n * @param mobileViewLabelText -Mobile view label text.\r\n * @param optionLinkText -Sub menu item link text.\r\n * @returns Boolean.\r\n */\r\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\r\n const firstIndex: number = 0;\r\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\r\n return true;\r\n }\r\n if (!optionLinkText || !mobileViewLabelText) {\r\n return false;\r\n }\r\n return mobileViewLabelText === optionLinkText;\r\n };\r\n\r\n /**\r\n * Function to handle nav menu close.\r\n */\r\n private readonly _closeNavMenu = (): void => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on esc key.\r\n * @param event - Event.\r\n */\r\n private readonly _escFunction = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\r\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n };\r\n\r\n /**\r\n * Custom update viewport.\r\n */\r\n private readonly _customUpdateViewport = (): void => {\r\n this.setState({ isOnlyMobile: this.isOnlyMobile });\r\n };\r\n}\r\n\r\nexport default NavigationMenuRootDisabled;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n addThrottledEvent,\r\n Button,\r\n Collapse, Drawer,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IPayLoad,\r\n isMobile,\r\n ITelemetryContent,\r\n Module,\r\n Node,\r\n onTelemetryClick,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\r\n\r\n/**\r\n *\r\n * NavigationMenuRootEnabled component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class NavigationMenuRootEnabled extends React.PureComponent {\r\n private static isBackTrack: boolean = false;\r\n\r\n private readonly supportedLevel: number = NavMenuConstants.four;\r\n\r\n private currentLevel: number = NavMenuConstants.zero;\r\n\r\n private readonly menuNode: React.RefObject;\r\n\r\n private readonly menuItemRef: React.RefObject;\r\n\r\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\r\n\r\n private menuItemData: IMenuItemData[] = [];\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private readonly attributes?: Msdyn365.IDictionary;\r\n\r\n private customResizeThrottledEventHandler?: (event: Event) => void;\r\n\r\n public constructor(props: INavigationMenuViewRootProps) {\r\n super(props);\r\n this.menuNode = React.createRef();\r\n this.menuItemRef = React.createRef();\r\n const { menuItemData } = this.props.navProps;\r\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\r\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\r\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\r\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\r\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\r\n const imageSource = item.image.src;\r\n this.promotionalImage.push({ src: imageSource, altText: item.text, additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\r\n return null;\r\n });\r\n }\r\n }\r\n this.state = {\r\n activeMenu: NavMenuConstants.rootMenu,\r\n mobileViewLabelText: '',\r\n parentMenu: undefined,\r\n isDrawerOpen: false,\r\n desktopCategoryId: -1,\r\n isOnlyMobile: this.isOnlyMobile,\r\n categoryImage: this.promotionalImage,\r\n isNavOpen: false\r\n };\r\n\r\n this.telemetryContent = getTelemetryObject(this.props.navProps.context.request.telemetryPageName!,\r\n this.props.navProps.friendlyName,\r\n this.props.navProps.telemetry);\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n }\r\n\r\n @computed public get isOnlyMobile(): boolean {\r\n return (isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs');\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\r\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\r\n this._customUpdateViewport();\r\n document.body.addEventListener('mousedown', this._handleClickOutside);\r\n this._addShopAllLink();\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\r\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\r\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n this.currentLevel = NavMenuConstants.one;\r\n const navbarKey = 'header-nav-mobile';\r\n return (\r\n \r\n {\r\n this.state.isOnlyMobile ? this._renderMobileMenu() : (<>\r\n {this.props.navProps.config.rootMenuNavigation}\r\n {this._renderCollapseMenu()}\r\n )\r\n }\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Function to handle nav bar toggle.\r\n */\r\n private readonly _toggleNavBar = (): void => {\r\n this.setState(previousState => ({\r\n activeMenu: NavMenuConstants.rootMenu,\r\n isNavOpen: !previousState.isNavOpen\r\n }));\r\n };\r\n\r\n private _renderCollapseMenu(): JSX.Element | null {\r\n return (\r\n \r\n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\r\n \r\n );\r\n }\r\n\r\n private _renderMobileMenu(): JSX.Element {\r\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\r\n\r\n this.currentLevel = NavMenuConstants.one;\r\n return (\r\n \r\n \r\n {this.state.isOnlyMobile && this.state.activeMenu !== undefined &&\r\n \r\n \r\n \r\n {this.state.mobileViewLabelText}\r\n \r\n }\r\n {this._renderDisplay()}\r\n \r\n \r\n );\r\n }\r\n\r\n private _renderDesktopMenu(): JSX.Element {\r\n const { Navigation } = this.props.navProps;\r\n return (\r\n \r\n \r\n {this._renderDisplay()}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\r\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\r\n return (\r\n this._renderLinkMenuItem(item)\r\n );\r\n } else if (!item.linkURL) {\r\n return (\r\n this._renderSpanMenuItem(item)\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private _renderDisplay(): JSX.Element[] {\r\n const { ListItem } = this.props.navProps;\r\n let menuItemData: IMenuItemData[] = [];\r\n if (this.state.isOnlyMobile) {\r\n menuItemData = this.menuItemData;\r\n } else {\r\n menuItemData = this.props.navProps.menuItemData;\r\n }\r\n const { activeMenu } = this.state;\r\n const menuItemList: JSX.Element[] = [];\r\n let cmsMenuData: IMenuItemData[] | undefined = [];\r\n let retailMenuItemData: IMenuItemData[] | undefined = [];\r\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\r\n\r\n for (const item of retailMenuData) {\r\n retailMenuItemData = item.subMenu!.filter(subMenuItem => (subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail));\r\n item.subMenu = retailMenuItemData;\r\n }\r\n\r\n for (const item of menuItemData) {\r\n cmsMenuData = item.subMenu!.filter(subMenuItem => (subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail));\r\n }\r\n\r\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\r\n let menuItem: IMenuItemData | null = {};\r\n for (const menuItemDatum of menuItemData) {\r\n if (menuItemDatum.id === activeMenu) {\r\n menuItem = menuItemDatum;\r\n if (!NavigationMenuRootEnabled.isBackTrack) {\r\n this.setState({\r\n parentMenu: undefined\r\n });\r\n } else {\r\n this.setState({\r\n parentMenu: undefined,\r\n mobileViewLabelText: menuItemDatum.linkText\r\n });\r\n }\r\n break;\r\n }\r\n menuItem = this._getFromSubMenu(menuItemDatum);\r\n if (menuItem && menuItem.id === activeMenu) {\r\n break;\r\n }\r\n }\r\n\r\n if (menuItem) {\r\n menuItemList.push(\r\n \r\n {' '}\r\n {this._createMenuItemList(menuItem)}\r\n {' '}\r\n \r\n );\r\n }\r\n\r\n } else {\r\n for (const [index, item] of retailMenuData.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n
\r\n );\r\n }\r\n\r\n for (const [index, item] of cmsMenuData.entries()) {\r\n menuItemList.push(\r\n \r\n {this._createMenuItemList(item)}\r\n \r\n );\r\n }\r\n }\r\n\r\n return menuItemList;\r\n }\r\n\r\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\r\n const subMenus = item?.subMenu;\r\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\r\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\r\n const subMenu: IMenuItemData = subMenus[Number(index)];\r\n let parentMenuId = item?.id;\r\n\r\n if (subMenu.id === this.state.activeMenu) {\r\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\r\n parentMenuId = undefined;\r\n }\r\n\r\n if (!NavigationMenuRootEnabled.isBackTrack) {\r\n this.setState({ parentMenu: parentMenuId });\r\n } else {\r\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\r\n }\r\n return subMenu;\r\n }\r\n const found = this._getFromSubMenu(subMenu);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\r\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\r\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\r\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false));\r\n }\r\n return (\r\n <>\r\n {this._renderButtonMenuItem(menuItemData)}\r\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\r\n \r\n );\r\n\r\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\r\n return (this._renderLinkMenuItem(menuItemData, menuItemData.id));\r\n } else if (!menuItemData.linkURL) {\r\n return (this._renderSpanMenuItem(menuItemData));\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\r\n\r\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\r\n if (activeMenu === NavMenuConstants.rootMenu) {\r\n subMenus = subMenuArray!.filter(subMenuItem => (subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail));\r\n }\r\n\r\n const { ListItem } = this.props.navProps;\r\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\r\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\r\n\r\n if (activeMenu && this.state.activeMenu !== activeMenu) {\r\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\r\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n let levelClassName: string = '';\r\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\r\n const hasOptions = (option.subMenu && ArrayExtensions.hasElements(option.subMenu));\r\n let menuItem: JSX.Element | null;\r\n if (hasOptions && this.state.isOnlyMobile) {\r\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\r\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\r\n menuItem = this.getMenuItem(option, index);\r\n } else {\r\n menuItem = null;\r\n }\r\n let subMenu;\r\n const isHavingSubmenu = hasOptions && isEnableMultiSupportMenu && (this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one);\r\n\r\n if (hasOptions && !this.state.isOnlyMobile) {\r\n if (this.currentLevel >= NavMenuConstants.two) {\r\n levelClassName = 'level-3';\r\n subMenu = this._renderSubMenuDrawer(levelClassName, option);\r\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\r\n this.currentLevel++;\r\n levelClassName = `level-${this.currentLevel.toString()}`;\r\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\r\n }\r\n }\r\n if (isHavingSubmenu && this.state.isOnlyMobile) {\r\n this.currentLevel++;\r\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\r\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\r\n }\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n return (\r\n \r\n { menuItem}\r\n { subMenu}\r\n \r\n );\r\n });\r\n return (this._renderMenu(levelClassName, menuOptions, isSubMenu));\r\n }\r\n\r\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\r\n let menuItem: JSX.Element | null;\r\n if (this.currentLevel === NavMenuConstants.one) {\r\n menuItem = (option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option));\r\n } else {\r\n menuItem = (option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option));\r\n }\r\n return menuItem;\r\n }\r\n\r\n private _renderSubMenuDrawer(levelClassName: string, menuItem: IMenuItemData): JSX.Element | null {\r\n return (\r\n \r\n
\r\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\r\n return this._renderDrawerLink(menuSubItem);\r\n })}\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handle desktop category click.\r\n * @param desktopCategoryId - Desktop category id used to identify the index of the category.\r\n * @returns Returns void.\r\n */\r\n private readonly _bindDesktopCategoryClick = (desktopCategoryId: number) => (): void => {\r\n if (this.state.desktopCategoryId !== desktopCategoryId) {\r\n this.setState({ desktopCategoryId, isDrawerOpen: true });\r\n } else {\r\n this.setState({ desktopCategoryId: -1, isDrawerOpen: false });\r\n }\r\n };\r\n\r\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n const linkText = option.linkText ? option.linkText : '';\r\n const imagesource = option.imageSource ? option.imageSource : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\r\n const { Link } = this.props.navProps;\r\n this.payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n if (linkText && linkUrl) {\r\n return (\r\n \r\n { linkText}\r\n \r\n );\r\n }\r\n return null;\r\n\r\n }\r\n\r\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\r\n const { Span } = this.props.navProps;\r\n return (\r\n \r\n { option.linkText}\r\n \r\n );\r\n }\r\n\r\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\r\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\r\n const isCategoryImageDisplay =\r\n !this.state.isOnlyMobile && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !isSubmenu;\r\n const isPromotionalContentDisplay =\r\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\r\n const divContainerClass = this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\r\n this.currentLevel = NavMenuConstants.one;\r\n const menuLevelSupportClassName =\r\n isCategoryImageDisplay && this.props.navProps.config.menuLevelSupport &&\r\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two && 'navmenu-multi-level';\r\n\r\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\r\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\r\n return (\r\n \r\n \r\n {menuOptions}\r\n \r\n
\r\n {\r\n isCategoryImageDisplay && ArrayExtensions.hasElements(categoryImages) && categoryImages.map(item => (\r\n \r\n { getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\r\n { isPromotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\r\n ))\r\n }\r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Handle Category image update.\r\n * @param categoryImageSource - Image source.\r\n * @param option - Menu Item data.\r\n * @returns Returns empty.\r\n */\r\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\r\n const linkText = option.linkText ? option.linkText : '';\r\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\r\n\r\n // Read category and promotional image in one array\r\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\r\n for (const item of option.promotionalContent) {\r\n const imageSource = item.image.src;\r\n promotionalImage.push({ src: imageSource, altText: item.text, additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\r\n }\r\n }\r\n this.setState({\r\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\r\n });\r\n };\r\n\r\n /**\r\n * Handle dropdown toggle.\r\n * @param data - Menu Item data.\r\n * @param parentId - Number.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({\r\n activeMenu: data.id,\r\n parentMenu: parentId\r\n });\r\n if (this.props.navProps.showCategoryImage) {\r\n this._updateCategoryImage(data.imageSource!, data)();\r\n }\r\n } else {\r\n NavigationMenuRootEnabled.isBackTrack = false;\r\n this.setState({\r\n activeMenu: data.id,\r\n mobileViewLabelText: data.linkText!,\r\n parentMenu: parentId\r\n });\r\n }\r\n\r\n };\r\n\r\n /**\r\n * Handle back navigation for menu items for mobile view.\r\n * @returns Returns empty.\r\n */\r\n private readonly _handleGoBack = () => () => {\r\n NavigationMenuRootEnabled.isBackTrack = true;\r\n this.setState((previousState) => ({ activeMenu: previousState.parentMenu }));\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on click on body.\r\n * @param event - MouseEvent.\r\n */\r\n private readonly _handleClickOutside = (event: MouseEvent) => {\r\n if (this.menuNode.current &&\r\n !this.menuNode.current.contains(event.target as Node)) {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Add shop all link for Mobile submenu.\r\n */\r\n private readonly _addShopAllLink = (): void => {\r\n const { menuItemData } = this.props.navProps;\r\n this.menuItemData = menuItemData;\r\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\r\n this.menuItemData[0].subMenu?.map(item => {\r\n const shopAllObject = {};\r\n Object.assign(shopAllObject, { imageSource: item.imageSource });\r\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\r\n Object.assign(shopAllObject, { linkURL: item.linkURL });\r\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\r\n item.subMenu.unshift(shopAllObject);\r\n }\r\n return item;\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Checks to assign a ref for focus.\r\n * @param index -Sub menu list index.\r\n * @param mobileViewLabelText -Mobile view label text.\r\n * @param optionLinkText -Sub menu item link text.\r\n * @returns Boolean.\r\n */\r\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\r\n const firstIndex: number = 0;\r\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\r\n return true;\r\n }\r\n if (!optionLinkText || !mobileViewLabelText) {\r\n return false;\r\n }\r\n return mobileViewLabelText === optionLinkText;\r\n };\r\n\r\n /**\r\n * Function to handle nav menu close.\r\n */\r\n private readonly _closeNavMenu = (): void => {\r\n if (!this.state.isOnlyMobile) {\r\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\r\n } else {\r\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n };\r\n\r\n /**\r\n * Function to close the nav menu on esc key.\r\n * @param event - Event.\r\n */\r\n private readonly _escFunction = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\r\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\r\n }\r\n };\r\n\r\n /**\r\n * Custom update viewport.\r\n */\r\n private readonly _customUpdateViewport = (): void => {\r\n this.setState({ isOnlyMobile: this.isOnlyMobile });\r\n };\r\n\r\n}\r\n\r\nexport default NavigationMenuRootEnabled;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\r\nimport * as React from 'react';\r\n\r\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\r\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\r\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\r\n\r\n/**\r\n * Render the Navigation menu.\r\n * @param props - The navigation menu view props.\r\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\r\n */\r\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\r\n\r\n if (props.config.enabletopMenu) {\r\n return ;\r\n }\r\n\r\n return ;\r\n\r\n};\r\n\r\nexport default navigationMenuView;\r\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 * 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"],"names":["InvoiceErrorComponent","msdyn365Commerce","createComponent","component","_ref","messageHeader","errorMessage","otherError","showError","payInvoiceErrorModalOpen","errorDialogHeader","errorDialogBodyErrorTitle","errorDialogBodyErrorDescription","errorDialogFooterGoToCartButtonText","errorDialogFooterCancelButtonText","cartUrl","setPayInvoiceErrorModalClose","errorMessages","push","className","React","Alert","isOpen","length","color","assertive","map","message","index","key","Modal","toggle","ModalHeader","ModalBody","ModalFooter","Button","title","href","role","onClick","InvoicesFilterState","getInvoicesFilterStateResources","filterState","resources","ShowAll","invoicesFilterShowAll","Paid","invoiceStatusPaid","PartiallyPaid","invoiceStatusPartiallyPaid","Unpaid","invoiceStatusUnpaid","Error","onClickHandler","onStateClick","InvoicesFilterComponent","props","popoverRef","popoverState","setPopoverState","togglePopover","setFilterState","currentState","onFilterStateClick","clickedState","onFilterStateChanged","innerRef","disabled","Popover","id","placement","target","EnumExtensions","getEnumValues","state","renderFilterStateItem","stateStringRepresentation","InvoicesTableHeaderComponent","rowClassName","switchCheckedState","onSelectAll","isSelectedAll","headerCells","isMobile","getMobileHeaderCells","classnames","type","invoiceListSelectAllRadioAriaLabelText","checked","onChange","invoicesText","invoiceDateMobileText","getDesktopHeaderCells","invoiceNumberText","invoiceDateText","invoiceUsersText","invoiceAmountText","invoiceDueDateText","invoiceAmountDueText","invoiceStatusText","invoiceActionsText","getInvoiceStatusText","invoiceStatus","InvoicePaidStatus","None","invoiceStatusNone","payInvoices","async","invoices","actionContext","onError","invoicesToAdd","filter","invoice","canBePaid","ArrayExtensions","hasElements","errorReason","failureReason","cartState","getCartState","result","addInvoicesToCart","invoiceIds","_result$errorDetails","_result$errorDetails2","status","errorDetails","LocalizedMessage","errorCode","ErrorResourceId","getUrlSync","_window","window","location","assign","PayInvoiceComponentActions","_event","setDisabled","undefined","data","amount","context","errorState","reference","event","PayInvoiceComponent","_objectSpread","useState","payInvoiceButtonAriaLabel","payInvoiceButtonText","RequestInvoiceButton","onClicked","requestInvoiceButtonLabel","innerReference","formatAmount","currencyCode","cultureFormatter","formatCurrency","formatDate","date","year","month","day","onRequestSpecificInvoice","requestInvoiceButtonReference","onRequestInvoice","setShowPreviousActions","onClickViewDetails","linkToInvoiceDetails","MsDyn365","isBrowser","isShowActions","setShowActions","shouldShowActions","extraActionsPopup","invoiceViewDetailsButtonAriaLabel","invoiceViewDetailsButtonText","invoiceActionsButtonTextAriaLabel","invoiceActionsButtonIsOnBehalfOfTextAriaLabel","showActions","isOnBehalfOfRequest","isOboRequest","request","getInvoiceDetailsPageUrlSync","actionsContainerClassName","payInvoiceClassName","checkIfCreditNote","typeName","payInvoiceReferences","invoiceReferences","invoiceRequestButtonLabel","InvoicesTableRowComponent","onSelectLine","isSelected","rowCells","getMobileRowCells","invoiceRowArialabel","format","invoiceListSelectRadioAriaLabelText","customerName","dueDate","getDesktopRowCells","customer","isCurrentUser","StringExtensions","isNullOrWhitespace","AccountNumber","customerAccountNumber","invoiceDate","invoiceCurrentUser","amountDue","isMobileView","viewport","device","Type","innerWidth","gridSettings","xs","w","sm","md","lg","getViewport","onSelectAllHandler","forEach","InvoicesTableComponent","setIsMobile","updateViewport","addEventListener","headerClassName","all","isAdmin","IsB2bAdmin","invoiceButtonReferences","Number","payInvoiceButtonReferences","MakePaymentComponentActions","buttonReferences","input","MakePaymentComponent","hasInvoices","makePaymentButtonAriaLabel","makePaymentButtonText","onSubmitRequestClick","onClosing","filteredInvoices","onSubmitRequest","checkboxRef","closingFlag","_inputInvoice$current","current","searchInputChangedHandler","setSearchInput","value","onCancelHandler","renderInvoiceOptions","setSelectedInvoiceIndex","_invoice","i","_checkboxRef$current$","onInvoiceSelect","onInvoiceSelectHandler","checkboxId","checkboxName","name","ref","htmlFor","RequestInvoiceModal","email","isModalOpen","modalHeaderLabel","sendToEmailLabel","submitRequestLabel","cancelLabel","searchPlaceholderLabel","invoicesFoundString","singleInvoiceFoundString","searchButtonAltText","selectedInvoiceIndex","setFilteredInvoices","searchInput","shouldShowSearchResults","setShouldShowSearchResults","invoiceOptionsData","invoiceOptions","setInvoiceOptions","focusElement","setTimeout","_focusElement$current","focus","searchEntered","searchEnteredHandler","updatedInvoices","isNullOrEmpty","toLocaleUpperCase","includes","searchResultString","invoicesFoundReplaceIndex","indexOf","horizontalPosition","verticalPosition","autoFocus","fade","onOpened","setFilteredInvoicesToSelectedInvoices","selectedInvoices","requestInvoiceDialogAriaLabel","tag","substring","placeholder","InvoiceModel","constructor","this","Id","InvoiceDate","Date","CustomerAccountNumber","CustomerName","TotalAmount","InvoiceDueDate","AmountBalance","InvoicePaidStatusValue","CurrencyCode","InvoicesList","_this$props$config","super","getInvoiceType","config","invoiceTypes","_className","buttonChildReference","buttonChildPayButtonReference","_onDismiss","setState","_onToggleInvoiceRequestParentModal","selectedButtonElement","payInvoiceRequestReference","_onToggleInvoiceRequestModal","_queryResultSettings","QueryResultSettingsProxy","fromModuleData","QueryResultSettings","makePaymentReference","_updateInvoicesState","bind","_onAddToCartFailed","_handleFilterStateChange","_loadMoreInvoices","_requestInvoice","_requestSpecificInvoice","_setPayInvoiceErrorModalClose","invoicesFilterState","isLoading","isPageLoaded","isInvoiceRequestModalOpen","shouldComponentUpdate","nextProps","nextState","render","_customerBalance$resu","_customerBalance$resu2","_heading$text","heading","channel","customerBalance","invoicesListTitle","invoicesListDescTitle","invoicesListDescCount","amountText","OpenInvoiceBalance","toFixed","Currency","totalCount","OpenInvoiceCount","countText","replace","toString","invoicesListTitleHeading","text","header","Heading","viewProps","moduleProps","invoiceRequestModal","_renderInvoiceRequestModal","_renderInvoicesFilter","pagination","_renderPagination","content","_renderListContainer","_renderEmptyInvoiceLinesPageContent","renderView","invoicesData","_initializeWithInvoices","reaction","_this$props$data$b2bU","callerContext","b2bUserId","b2bUserInformation","B2BUserId","invoiceId","BusinessPartnerUsersDataActions","BusinessPartnerOperationDeliveryType","Email","_addInvoices","newInvoices","concat","containerClass","actionsContainerClass","invoiceEmptyInvoiceLinesTitle","invoiceEmptyInvoiceLinesDescription","invoiceEmptyInvoiceLinesContinueShoppingButtonAriaLabel","invoiceEmptyInvoiceLinesContinueShoppingButtonText","containerHeaderClass","containerContentClass","_renderMakePayment","_renderInvoiceRequestButton","_renderInvoiceErrors","_renderInvoicesList","searchCriteria","businessPartner","getCurrentAsync","BusinessPartnerId","getCustomer","GetCustomerInput","requestContext","apiSettings","CustomerId","InvoicePaidStatusValues","_getInvoicesSearchCriteria","Paging","Skip","getGdnInvoices","GetGdnInvoicesInput","filterClassName","_renderInvoiceInCartPaymentMessage","tableClassName","newErrorState","_newErrorState$errorR","errorHost","invoiceErrorInvoiceIdNotExist","invoiceErrorFailedAddInvoiceToCart","shouldShowAdditionalInfoInPopup","makePaymentResources","_getSelectedInvoices","telemetry","moduleId","moduleTypeName","navigationUrl","_this$state$selectedB","payInvoiceErrorDialogHeader","payInvoiceErrorDialogBodyErrorTitle","payInvoiceErrorDialogBodyErrorDescription","payInvoiceErrorDialogFooterGoToCartButtonText","payInvoiceErrorDialogFooterCancelButtonText","errorClassName","invoiceErrorMessageHeader","_this$props$data$cart","cart","hasInvoiceLine","invoiceInCartPaymentMessage","_data$invoices","Top","invoicesLoadMore","invoiceRequestModalCancelLabel","invoiceRequestModalSubmitLabel","invoiceRequestModalHeaderLabel","invoiceRequestModalSendToEmailLabel","invoiceRequestModalSearch","invoiceRequestModalInvoiceSearchDisplay","invoiceRequestModalSingleInvoiceSearchDisplay","invoiceRequestModalSearchButton","_this$state$selectedB2","specificInvoice","__decorate","observer","InvoiceListView","Module","Object","NavMenuConstants","getCategoryImage","categoryImage","alttext","categoryImageUrl","generateImageUrl","navProps","defaultImageSettings","viewports","q","h","lazyload","_props$navProps$confi","imageData","src","Msdyn365","imageSettings","categoryImageSettings","loadFailureBehavior","altText","NavigationMenuRootDisabled","supportedLevel","four","currentLevel","zero","escapeKey","promotionalImage","_toggleNavBar","previousState","activeMenu","isNavOpen","_bindDesktopCategoryClick","desktopCategoryId","isDrawerOpen","_updateCategoryImage","categoryImageSource","option","linkText","promotionalContent","item","imageSource","image","additionalProperties","linkUrl","destinationUrl","_handleDropdownToggle","parentId","isOnlyMobile","isBackTrack","mobileViewLabelText","parentMenu","showCategoryImage","_handleGoBack","_handleClickOutside","menuNode","contains","_shouldAddFocusMenuRef","optionLinkText","_closeNavMenu","_escFunction","keyCode","_customUpdateViewport","menuItemRef","menuItemData","subMenu","imagesource","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","payLoad","getPayloadObject","attributes","getTelemetryAttributes","variant","VariantType","Browser","componentDidMount","customResizeThrottledEventHandler","addThrottledEvent","document","body","componentDidUpdate","_this$menuItemRef$cur","children","componentWillUnmount","removeEventListener","Node","_renderMobileMenu","hamburgerAriaLabel","_renderCollapseMenu","Collapse","_renderDesktopMenu","MenuList","MobileBackButton","MobileDescriptionContainer","MobileDescriptionLabel","Navigation","tabIndex","_renderDisplay","_renderDrawerLink","linkURL","_renderLinkMenuItem","_renderSpanMenuItem","ListItem","menuItemList","menuItem","_getFromSubMenu","_createMenuItemList","entries","parentMenuId","menu","one","found","_renderSubMenu","_renderButtonMenuItem","subMenuArray","isSubMenu","_this$props$navProps$","_this$props$navProps$2","subMenus","rootMenu","subMenuItem","MenuTypeIndexId","Retail","isEnableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","three","error","levelClassName","menuOptions","hasOptions","getMenuItem","isHavingSubmenu","Math","round","two","_renderSubMenuDrawer","onMouseOver","_renderMenu","_renderLinkMenuItemLevelOne","_menuItem$linkText","Drawer","collapseProps","timeout","openGlyph","closeGlyph","glyphPlacement","toggleButtonText","onToggle","menuSubItem","Link","contentAction","etext","shouldOpenNewTab","onTelemetryClick","isHoverEffect","arguments","_renderPromotionalLink","Span","level","isSubmenu","_this$state$categoryI","DivContainer","ImageDivContainer","showPromotionalContent","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","_item$src","_item$additionalPrope","computed","NavigationMenuRootEnabled","_addShopAllLink","_this$menuItemData$0$","shopAllObject","allCategoryMenuText","menuSource","MenuSource","unshift","rootMenuNavigation","cmsMenuData","retailMenuItemData","retailMenuData","JSON","parse","stringify","menuItemDatum","enabletopMenu","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","navigationMenuSource","static","locale","nameTranslations","nameTranslation","find","Language","toLowerCase","Text","resizeThrottledEventHandler","_this$props$config$di","_this$props$config$di2","_mapData","isEmptyOrNullObject","xl","displayCategoryImage","displayPromotionalImage","ImageContainer","backButtonAriaLabel","mergedData","categories","_constructMenuItemData","cmsNavItems","idx","_constructTopMenuItemData","_this$props$config$en","_this$props$config$ro","mergedRootMenuData","topMenu","retailItem","cmsItem","addedAllMenu","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","promoItem","_promoItem$categoryNa","_retailItem$Name","categoryName","Name","_NavigationMenu$getFr","_NavigationMenu$getFr2","Images","Uri","RSItemIdInit","getFriendlyName","NameTranslations","Url","_getNestedChildren","ariaLabel","CMSItemIdInit","imageDestinationURL","imageLink","_getCMSNestedChildren","Cms","openInNewTab","category","imageSourceUrl","nestedChildren","Children","getCategoryUrl","_getViewport","observable","NavigationMenuView","categoryImageSrc","imageSrc","promotionalItemImageSettings","categoryImageAltText","_handleFocusOutside","relatedTarget","_closeSubmenu","_getCategoryImage","_categoryImage$imageS","Image","IsSubMenu","enableMultiSupportMenu","haveSubmenu","onFocus","hoverEffect","isParent","currentItem","submenu","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","menuId","drawerKeyValue","newPair","_this$menuNode$curren","_this$menuNode$curren2","_this$props$navProps$3","buttonText","keys","colProps"],"sourceRoot":""}