{"version":3,"file":"static/js/24.126864534885032c219f.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 }\r\n } = this.props;\r\n\r\n // const totalAmount = customerBalance.result?.PendingBalance || 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","_heading$text","heading","invoicesListTitle","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","toString","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":""}