{"version":3,"file":"static/js/9.ab60f7c322ab0319cd4c.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/fm-account-profile/components/fm-account-profile-text.tsx?4fc1","webpack://Msdyn365.Commerce.Online/./src/modules/fm-account-profile/components/fm-account-profile-attributes.tsx?af03","webpack://Msdyn365.Commerce.Online/./src/modules/fm-account-profile/components/fm-account-profile-description.tsx?e47a","webpack://Msdyn365.Commerce.Online/./src/modules/fm-account-profile/components/fm-account-profile-links.tsx?36e8","webpack://Msdyn365.Commerce.Online/./src/modules/fm-account-profile/fm-account-profile.tsx?311c","webpack://Msdyn365.Commerce.Online/./src/modules/fm-account-profile/fm-account-profile.view.tsx?890b","webpack://Msdyn365.Commerce.Online/./src/modules/generic-popup/generic-popup.tsx?12c8","webpack://Msdyn365.Commerce.Online/./src/modules/generic-popup/generic-popup.view.tsx?638f","webpack://Msdyn365.Commerce.Online/./src/themes/venchi/views/content-block.view.tsx?0a66","webpack://Msdyn365.Commerce.Online/./src/services/featureToggleService.ts?d980","webpack://Msdyn365.Commerce.Online/./src/themes/venchi/views/iframe.view.tsx?059a","webpack://Msdyn365.Commerce.Online/./src/themes/venchi/views/sign-up.view.tsx?e5d6","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/search-result-container.view.tsx?89df","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/product-comparison-button/product-comparison-button.tsx?9384","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison-button/product-comparison-button.view.tsx?94a7","webpack://Msdyn365.Commerce.Online/./src/modules/tab-item/tab-item.tsx?b1b8","webpack://Msdyn365.Commerce.Online/./src/modules/tab-item/tab-item.view.tsx?ee3b","webpack://Msdyn365.Commerce.Online/./src/modules/tab/tab.tsx?9ac6","webpack://Msdyn365.Commerce.Online/./src/modules/tab/tab.view.tsx?a99d","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/promocode.component.tsx?c06b","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/content-block.view.tsx?0db4","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/footer-item.view.tsx?15be","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/write-review.view.tsx?c67c"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\ninterface IAccountProfileText {\r\n className: string;\r\n text: string;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare\r\nconst IAccountProfileText: React.FC = ({ className, text }) => {text};\r\n\r\nexport default IAccountProfileText;\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, { IDictionary, Text } from '@msdyn365-commerce/core';\r\nimport { AttributeDefinition, Customer, CustomerAttribute } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { StringExtensions, updateCustomerAttributes, updateCustomerAttributesInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n format,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IPayLoad,\r\n ITelemetryContent\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { observable, reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IFmAccountProfileData } from '../fm-account-profile.data';\r\nimport { IFmAccountProfileProps } from '../fm-account-profile.props.autogenerated';\r\nimport TextComponent from './fm-account-profile-text';\r\n\r\ninterface IAttributePropertiesType {\r\n Name?: string;\r\n IsMandatory?: boolean;\r\n}\r\n\r\nexport interface IAccountProfileAttributesProps {\r\n accountProfileProps: IFmAccountProfileProps;\r\n}\r\n\r\nexport enum AccountAttributeDataTypeValue {\r\n Decimal = 3,\r\n Integer = 4,\r\n Text = 5,\r\n TrueFalse = 6\r\n}\r\n\r\nexport interface IAttributePayloadData {\r\n recordId?: number;\r\n name?: string;\r\n dataTypeValue?: number;\r\n isEnumeration?: boolean;\r\n lowerBoundValue?: number;\r\n upperBoundValue?: number;\r\n decimalValue?: number;\r\n integerValue?: number;\r\n textValue?: string;\r\n booleanValue?: boolean;\r\n isMandatory?: boolean;\r\n defaultValue?: string;\r\n}\r\n\r\nexport interface IAccountProfileAttributesState extends React.ComponentState {\r\n editAttributes: boolean;\r\n phone: string;\r\n vatNumber: string;\r\n attributes: IDictionary;\r\n attributeError: IDictionary;\r\n}\r\n\r\n/**\r\n *\r\n * AccountProfileAttributes class.\r\n * @extends {React.PureComponentIAccountProfileAttributesProps, IAccountProfileAttributesState>}\r\n */\r\n@observer\r\nclass AccountProfileAttributes extends React.Component {\r\n private readonly attributePayloadData: IAttributePayloadData[];\r\n\r\n @observable private isUpdatingAttributes: boolean = false;\r\n\r\n @observable private gotException: boolean = false;\r\n\r\n private hasError: boolean = false;\r\n\r\n private readonly telemetryContent?: ITelemetryContent;\r\n\r\n private initialAttributes: IDictionary;\r\n\r\n private initialCustomerAttributes?: CustomerAttribute[];\r\n\r\n private initialPhone: string;\r\n\r\n private initialVatNumber: string;\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private readonly editRef: React.RefObject;\r\n\r\n private readonly attributesContainerRef: React.RefObject;\r\n\r\n private readonly attributeClassName: string = 'ms-account-profile__attributes-element';\r\n\r\n private readonly maxIntegerLimit: number = 2_100_000_000;\r\n\r\n private readonly minIntegerLimit: number = -2_100_000_000;\r\n\r\n private readonly maxDecimalLimit: number = 7_900_000_000_000;\r\n\r\n private readonly minDecimalLimit: number = -7_900_000_000_000;\r\n\r\n private readonly maxStringLength: number = 1000;\r\n\r\n private readonly maxVATNumberLength: number = 20;\r\n\r\n private readonly maxPhoneLength: number = 25;\r\n\r\n private readonly editAsyncCustomerFeatureName: string = 'Dynamics.AX.Application.RetailEnableAsyncCustomerEditFeature';\r\n\r\n private isEditAsyncCustomerFeatureEnabled: boolean = false;\r\n\r\n constructor(props: IAccountProfileAttributesProps) {\r\n super(props);\r\n this.state = {\r\n editAttributes: false,\r\n phone: '',\r\n vatNumber: '',\r\n attributes: {},\r\n attributeError: {}\r\n };\r\n this.initialAttributes = {};\r\n this.initialCustomerAttributes = [];\r\n this.initialPhone = '';\r\n this.initialVatNumber = '';\r\n this.attributePayloadData = [];\r\n const telemetryPageName =\r\n (this.props.accountProfileProps &&\r\n this.props.accountProfileProps.context &&\r\n this.props.accountProfileProps.context.request &&\r\n this.props.accountProfileProps.context.request.telemetryPageName) ||\r\n '';\r\n const friendlyName = (this.props.accountProfileProps && this.props.accountProfileProps.friendlyName) || '';\r\n const telemetry = (this.props.accountProfileProps && this.props.accountProfileProps.telemetry) || {};\r\n this.telemetryContent = getTelemetryObject(telemetryPageName, friendlyName, telemetry);\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\r\n this.editRef = React.createRef();\r\n this.attributesContainerRef = React.createRef();\r\n }\r\n\r\n public componentDidMount(): void {\r\n this._buildPayloadData();\r\n this._getAttributes();\r\n this._getCustomerPhoneAndVatNumber();\r\n reaction(\r\n () => this.props.accountProfileProps.data.customerInformation.result,\r\n () => {\r\n const customerInformation = this.props.accountProfileProps.data.customerInformation.result;\r\n this.initialCustomerAttributes = customerInformation && customerInformation.Attributes;\r\n this._getAttributes();\r\n this._getCustomerPhoneAndVatNumber();\r\n }\r\n );\r\n reaction(\r\n () => this.props.accountProfileProps.data.attributeDefinitions.result,\r\n () => {\r\n this._buildPayloadData();\r\n }\r\n );\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IAccountProfileAttributesProps, nextState: IAccountProfileAttributesState): boolean {\r\n if (this.state === nextState && this.props.accountProfileProps.data === nextProps.accountProfileProps.data) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n return this._renderAttributes();\r\n }\r\n\r\n private readonly _renderAttributes = (): JSX.Element | null => {\r\n const { config, data, resources } = this.props.accountProfileProps;\r\n const attributeDefinitions: AttributeDefinition[] = data.attributeDefinitions.result || [];\r\n const additionalInformationSectionHeading =\r\n (config.additionalInformationSectionHeading && config.additionalInformationSectionHeading.text) || '';\r\n const showAttributes = config.showAttributes || '';\r\n const attributes = showAttributes.split(',');\r\n const elements = attributes.map(att => {\r\n const attributeDefinition: AttributeDefinition = attributeDefinitions.find(\r\n attribute => attribute.IsHidden === false && attribute.Name!.toLocaleLowerCase() === att.toLocaleLowerCase()\r\n ) || { RecordId: 0 };\r\n return this._renderAttribute(attributeDefinition);\r\n });\r\n const edit = (this.state && this.state.editAttributes) || false;\r\n this.payLoad.contentAction.etext = `${resources.attributesEditButtonText} ${additionalInformationSectionHeading}`;\r\n const editAttributes = getTelemetryAttributes(this.telemetryContent!, this.payLoad);\r\n this.payLoad.contentAction.etext = `${resources.attributesSaveButtonText} ${additionalInformationSectionHeading}`;\r\n const saveAttributes = getTelemetryAttributes(this.telemetryContent!, this.payLoad);\r\n this.payLoad.contentAction.etext = `${resources.attributesCancelButtonText} ${additionalInformationSectionHeading}`;\r\n const cancelAttributes = getTelemetryAttributes(this.telemetryContent!, this.payLoad);\r\n const customerInformation = data.customerInformation.result;\r\n\r\n this.isEditAsyncCustomerFeatureEnabled =\r\n data.featureState?.result?.find(feature => feature.Name === this.editAsyncCustomerFeatureName)?.IsEnabled || false;\r\n\r\n // Disable the 'Edit' button if the switch is enabled and the customer is async.\r\n const disableBtn: boolean =\r\n (this.props.accountProfileProps.context.app?.config?.canRenderAsyncCustomerDataAsUnmodifiable || false) &&\r\n (customerInformation?.IsAsyncCustomer || false) &&\r\n !this.isEditAsyncCustomerFeatureEnabled;\r\n return (\r\n \r\n {config.additionalInformationSectionHeading && (\r\n \r\n )}\r\n {config.showPhone && this._renderPhone()}\r\n {config.showVatNumber && this._renderVatNumber()}\r\n {elements}\r\n {this.gotException && (\r\n
\r\n \r\n
\r\n )}\r\n {!edit && (\r\n \r\n {resources.attributesEditButtonText}\r\n \r\n )}\r\n {edit && (\r\n \r\n {resources.attributesSaveButtonText}\r\n \r\n )}\r\n {edit && (\r\n \r\n {resources.attributesCancelButtonText}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n private readonly _renderPhone = (): JSX.Element | null => {\r\n const { phoneSectionHeading } = this.props.accountProfileProps.config;\r\n const heading = (phoneSectionHeading && phoneSectionHeading.text) || '';\r\n const className = (heading && heading.replace(/ /g, '_')) || '';\r\n const editAttributes = (this.state && this.state.editAttributes) || false;\r\n return (\r\n
\r\n {phoneSectionHeading && }\r\n \r\n {this._renderError('Phone')}\r\n
\r\n );\r\n };\r\n\r\n private readonly _renderVatNumber = (): JSX.Element | null => {\r\n const { vatNumberSectionHeading } = this.props.accountProfileProps.config;\r\n const heading = (vatNumberSectionHeading && vatNumberSectionHeading.text) || '';\r\n const className = (heading && heading.replace(/ /g, '_')) || '';\r\n const editAttributes = (this.state && this.state.editAttributes) || false;\r\n return (\r\n
\r\n {vatNumberSectionHeading && }\r\n \r\n {this._renderError('VATNumber')}\r\n
\r\n );\r\n };\r\n\r\n private readonly _renderAttribute = (customAttribute: AttributeDefinition): JSX.Element | null => {\r\n const editAttributes = (this.state && this.state.editAttributes) || false;\r\n const className = (customAttribute.Name && customAttribute.Name.replace(/ /g, '_')) || '';\r\n switch (customAttribute.ExtDataType && customAttribute.ExtDataType.Value) {\r\n case AccountAttributeDataTypeValue.Integer:\r\n case AccountAttributeDataTypeValue.Decimal:\r\n return this._renderIntegerDecimalInput(customAttribute, className, editAttributes);\r\n case AccountAttributeDataTypeValue.Text:\r\n return this._renderTextInputOrSelect(customAttribute, className, editAttributes);\r\n case AccountAttributeDataTypeValue.TrueFalse:\r\n return this._renderBoolean(customAttribute, className, editAttributes);\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n private readonly _renderIntegerDecimalInput = (\r\n customAttribute: AttributeDefinition,\r\n className: string,\r\n editAttributes: boolean\r\n ): JSX.Element | null => {\r\n const edit = (this.state && this.state.editAttributes) || false;\r\n const attributeProps = this._getAttributeProps(customAttribute.Name || '');\r\n const displayName: string = attributeProps.Name || '';\r\n return (\r\n
\r\n \r\n \r\n {this._renderError(customAttribute.Name || '')}\r\n
\r\n );\r\n };\r\n\r\n private readonly _renderTextInputOrSelect = (\r\n customAttribute: AttributeDefinition,\r\n className: string,\r\n editAttributes: boolean\r\n ): JSX.Element | null => {\r\n const isEnumeration: boolean = customAttribute.IsEnumeration || false;\r\n const edit = (this.state && this.state.editAttributes) || false;\r\n const attributeProps = this._getAttributeProps(customAttribute.Name || '');\r\n let displayName: string = attributeProps.Name || '';\r\n if (displayName === 'Birthday') {\r\n displayName = this.props.accountProfileProps.resources.birthdayHeadingText;\r\n }\r\n if (isEnumeration && customAttribute.EnumerationDetails) {\r\n const value = this.state.attributes[customAttribute.Name || ''] || '';\r\n const hasNoValue = value === '';\r\n return (\r\n
\r\n \r\n \r\n {hasNoValue && (\r\n \r\n )}\r\n {customAttribute.EnumerationDetails.map(option => {\r\n const selected = option.EnumerationValue === this.state.attributes[customAttribute.Name || ''];\r\n return (\r\n \r\n {option.EnumerationValue}\r\n \r\n );\r\n })}\r\n \r\n
\r\n );\r\n }\r\n\r\n if (this.props.accountProfileProps.config.source === 'FinanceOperationUS' && customAttribute.Name === 'Birthday') {\r\n return (\r\n
\r\n \r\n \r\n {this._renderError(customAttribute.Name || '')}\r\n
\r\n );\r\n }\r\n return (\r\n
\r\n \r\n \r\n {this._renderError(customAttribute.Name || '')}\r\n
\r\n );\r\n };\r\n\r\n private readonly _renderBoolean = (\r\n customAttribute: AttributeDefinition,\r\n className: string,\r\n editAttributes: boolean\r\n ): JSX.Element | null => {\r\n let value = this.state.attributes[customAttribute.Name || ''] || '';\r\n const hasNoValue = value === '';\r\n const render = !(hasNoValue && !editAttributes);\r\n value = value || 'false';\r\n const toggleState = (value === 'true' && 'enable') || 'disable';\r\n const arialabel = format(this.props.accountProfileProps.resources.attributeToggleButtonAriaLabel, customAttribute.Name);\r\n const ariaPressed = (value === 'true' && true) || false;\r\n const attributeProps = this._getAttributeProps(customAttribute.Name || '');\r\n const displayName: string = attributeProps.Name || '';\r\n let toggleValue = 'false';\r\n if (value === 'true') {\r\n toggleValue = 'false';\r\n } else {\r\n toggleValue = 'true';\r\n }\r\n\r\n return (\r\n \r\n \r\n {render && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n private readonly _renderError = (attributeName: string): JSX.Element | null => {\r\n const error: string = (this.state && this.state.attributeError && this.state.attributeError[attributeName]) || '';\r\n const hasError = !StringExtensions.isNullOrWhitespace(error);\r\n if (hasError) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n private readonly _getAttributeProps = (attributeName: string): IAttributePropertiesType => {\r\n const attributePayloadData = this.attributePayloadData.find(att => att.name === attributeName);\r\n const isMandatory: boolean = (attributePayloadData && attributePayloadData.isMandatory) || false;\r\n return {\r\n Name: isMandatory ? `${attributeName || ''} *` : attributeName || '',\r\n IsMandatory: isMandatory\r\n };\r\n };\r\n\r\n private readonly _onPhoneChange = (event: React.ChangeEvent): void => {\r\n const value = event.target.value;\r\n this.setState({ phone: value });\r\n };\r\n\r\n private readonly _onVatNumberChange = (event: React.ChangeEvent): void => {\r\n const value = event.target.value;\r\n this.setState({ vatNumber: value });\r\n };\r\n\r\n private readonly _enableAttributes = () => {\r\n this.hasError = false;\r\n\r\n // To clear exception messages\r\n this.gotException = false;\r\n this.setState({ editAttributes: true, attributeError: {} });\r\n if (MsDyn365.isBrowser) {\r\n setTimeout(() => {\r\n if (this.attributesContainerRef.current) {\r\n const attributes: HTMLCollectionOf = this.attributesContainerRef.current.getElementsByClassName(\r\n this.attributeClassName\r\n );\r\n if (attributes && attributes.length > 0) {\r\n this._setFocus(attributes[0] as HTMLElement);\r\n }\r\n }\r\n }, 0);\r\n }\r\n };\r\n\r\n private readonly _disableAttributes = () => {\r\n this.setState({\r\n editAttributes: false,\r\n attributeError: {},\r\n attributes: this.initialAttributes,\r\n phone: this.initialPhone,\r\n vatNumber: this.initialVatNumber\r\n });\r\n if (MsDyn365.isBrowser) {\r\n setTimeout(() => {\r\n this._setFocus(this.editRef.current);\r\n }, 0);\r\n }\r\n };\r\n\r\n private readonly _onAttributeChange = (attributeDefinition: AttributeDefinition) => (event: React.ChangeEvent) => {\r\n const value = event.target.value;\r\n const name = attributeDefinition.Name || '';\r\n this.setState({\r\n attributes: {\r\n ...this.state.attributes,\r\n [name]: value\r\n }\r\n });\r\n };\r\n\r\n private readonly _onUSBdayChange = (attributeDefinition: AttributeDefinition) => (event: React.ChangeEvent) => {\r\n const value = `1900/${event.target.value}`;\r\n const name = attributeDefinition.Name || '';\r\n this.setState({\r\n attributes: {\r\n ...this.state.attributes,\r\n [name]: value\r\n }\r\n });\r\n };\r\n\r\n private readonly _onAttributeCheck = (attributeDefinition: AttributeDefinition, value: string) => (\r\n event: React.MouseEvent\r\n ) => {\r\n const name = attributeDefinition.Name || '';\r\n this.setState({\r\n attributes: {\r\n ...this.state.attributes,\r\n [name]: value\r\n }\r\n });\r\n };\r\n\r\n private readonly _onAttributeSelect = (attributeDefinition: AttributeDefinition) => (event: React.ChangeEvent) => {\r\n const value = event.currentTarget.selectedOptions[0].value;\r\n const index = event.currentTarget.selectedOptions[0].index;\r\n const name = attributeDefinition.Name || '';\r\n this.setState({\r\n attributes: {\r\n ...this.state.attributes,\r\n [name]: value\r\n },\r\n selectedIndex: {\r\n ...this.state.selectedIndex,\r\n [name]: index\r\n }\r\n });\r\n };\r\n\r\n private readonly _getAttributes = () => {\r\n const { config, data } = this.props.accountProfileProps;\r\n const showAttributes = config.showAttributes || '';\r\n const showAttributesArray = showAttributes.split(',');\r\n const customer = data.customerInformation.result;\r\n const custmerAttributes: CustomerAttribute[] = (customer && customer.Attributes) || [];\r\n const attributes: IDictionary = {};\r\n\r\n showAttributesArray.forEach(showAttribute => {\r\n const attributePayloadData = this.attributePayloadData.find(att => att.name === showAttribute);\r\n const isMandatory: boolean = (attributePayloadData && attributePayloadData.isMandatory) || false;\r\n const defaultValue = attributePayloadData && attributePayloadData.defaultValue;\r\n const attribute = custmerAttributes.find(att => att.Name === showAttribute);\r\n let value: string = '';\r\n if (attribute && attribute.AttributeValue) {\r\n const name = (attribute && attribute.Name) || '';\r\n switch (attribute.DataTypeValue) {\r\n case AccountAttributeDataTypeValue.Integer:\r\n if (attribute.AttributeValue.IntegerValue) {\r\n value = String(attribute.AttributeValue.IntegerValue);\r\n attributes[name] = value;\r\n }\r\n break;\r\n case AccountAttributeDataTypeValue.Decimal:\r\n if (attribute.AttributeValue.DecimalValue) {\r\n value = String(attribute.AttributeValue.DecimalValue);\r\n attributes[name] = value;\r\n }\r\n break;\r\n case AccountAttributeDataTypeValue.Text:\r\n if (attribute.AttributeValue.StringValue) {\r\n value = attribute.AttributeValue.StringValue;\r\n attributes[name] = value;\r\n }\r\n break;\r\n case AccountAttributeDataTypeValue.TrueFalse:\r\n if (attribute.AttributeValue.BooleanValue !== null) {\r\n value = String(attribute.AttributeValue.BooleanValue);\r\n attributes[name] = value;\r\n }\r\n break;\r\n default:\r\n\r\n // Do nothing\r\n }\r\n }\r\n if (StringExtensions.isNullOrWhitespace(value) && isMandatory) {\r\n attributes[showAttribute] = '';\r\n }\r\n if (value.length === 0 && defaultValue) {\r\n attributes[showAttribute] = String(defaultValue);\r\n }\r\n });\r\n if (Object.keys(this.initialAttributes).length === 0) {\r\n this.initialAttributes = attributes;\r\n }\r\n this.setState({ attributes });\r\n };\r\n\r\n // eslint-disable-next-line\r\n private readonly _addOrUpdateAttribute = (customer: Customer) => {\r\n const { resources } = this.props.accountProfileProps;\r\n const { phone, vatNumber } = this.state;\r\n const attributeError: IDictionary = {};\r\n let hasError: boolean = false;\r\n let hasValue: boolean = true;\r\n for (const [key, value] of Object.entries(this.state.attributes)) {\r\n const payloadData: IAttributePayloadData = this.attributePayloadData.find(data => data.name === key) || {};\r\n if (payloadData) {\r\n switch (payloadData.dataTypeValue) {\r\n case AccountAttributeDataTypeValue.Decimal:\r\n const decimalValue = Number(value);\r\n if (isNaN(decimalValue)) {\r\n const typeError = format(resources.attributeInputTypeErrorText, payloadData.name, 'Decimal');\r\n attributeError[payloadData.name || ''] = typeError;\r\n hasError = true;\r\n } else if (payloadData.lowerBoundValue !== undefined && payloadData.upperBoundValue !== undefined) {\r\n if (decimalValue < payloadData.lowerBoundValue || decimalValue > payloadData.upperBoundValue) {\r\n const rangeError = format(\r\n resources.attributeInputRangeErrorText,\r\n payloadData.name,\r\n payloadData.lowerBoundValue,\r\n payloadData.upperBoundValue\r\n );\r\n attributeError[payloadData.name || ''] = rangeError;\r\n hasError = true;\r\n }\r\n } else {\r\n if (decimalValue > this.maxDecimalLimit) {\r\n attributeError[payloadData.name || ''] = format(\r\n resources.attributeInputValueExceedsMaximumErrorText,\r\n payloadData.name,\r\n this.maxDecimalLimit\r\n );\r\n hasError = true;\r\n }\r\n\r\n if (decimalValue < this.minDecimalLimit) {\r\n attributeError[payloadData.name || ''] = format(\r\n resources.attributeInputValueExceedsMinimumErrorText,\r\n payloadData.name,\r\n this.minDecimalLimit\r\n );\r\n hasError = true;\r\n }\r\n }\r\n\r\n if (!hasError) {\r\n if (StringExtensions.isNullOrWhitespace(value)) {\r\n hasValue = false;\r\n } else {\r\n payloadData.decimalValue = decimalValue;\r\n hasValue = true;\r\n }\r\n }\r\n break;\r\n case AccountAttributeDataTypeValue.Integer:\r\n const integerValue = Number(value);\r\n if (isNaN(integerValue) || value.includes('.')) {\r\n const typeError = format(resources.attributeInputTypeErrorText, payloadData.name, 'Integer');\r\n attributeError[payloadData.name || ''] = typeError;\r\n hasError = true;\r\n } else if (payloadData.lowerBoundValue !== undefined && payloadData.upperBoundValue !== undefined) {\r\n if (integerValue < payloadData.lowerBoundValue || integerValue > payloadData.upperBoundValue) {\r\n const rangeError = format(\r\n resources.attributeInputRangeErrorText,\r\n payloadData.name,\r\n payloadData.lowerBoundValue,\r\n payloadData.upperBoundValue\r\n );\r\n attributeError[payloadData.name || ''] = rangeError;\r\n hasError = true;\r\n }\r\n } else {\r\n if (integerValue > this.maxIntegerLimit) {\r\n attributeError[payloadData.name || ''] = format(\r\n resources.attributeInputValueExceedsMaximumErrorText,\r\n payloadData.name,\r\n this.maxIntegerLimit\r\n );\r\n hasError = true;\r\n }\r\n\r\n if (integerValue < this.minIntegerLimit) {\r\n attributeError[payloadData.name || ''] = format(\r\n resources.attributeInputValueExceedsMinimumErrorText,\r\n payloadData.name,\r\n this.minIntegerLimit\r\n );\r\n hasError = true;\r\n }\r\n }\r\n\r\n if (!hasError) {\r\n if (StringExtensions.isNullOrWhitespace(value)) {\r\n hasValue = false;\r\n } else {\r\n payloadData.integerValue = integerValue;\r\n hasValue = true;\r\n }\r\n }\r\n break;\r\n case AccountAttributeDataTypeValue.Text:\r\n let trimValue = '';\r\n if (!StringExtensions.isNullOrWhitespace(value)) {\r\n trimValue = value.trim();\r\n }\r\n if (trimValue.length > this.maxStringLength) {\r\n attributeError[payloadData.name || ''] = format(\r\n resources.attributeInputStringMaxLengthErrorText,\r\n payloadData.name,\r\n this.maxStringLength\r\n );\r\n hasError = true;\r\n }\r\n if (!hasError) {\r\n payloadData.textValue = trimValue;\r\n }\r\n break;\r\n case AccountAttributeDataTypeValue.TrueFalse:\r\n payloadData.booleanValue = value === 'true';\r\n break;\r\n default:\r\n\r\n // Do nothing\r\n }\r\n\r\n if (payloadData.isMandatory && StringExtensions.isNullOrWhitespace(value)) {\r\n attributeError[payloadData.name || ''] = format(resources.attributeInputMandatoryErrorText, payloadData.name);\r\n hasError = true;\r\n }\r\n\r\n const custmerAttributes: CustomerAttribute[] = (customer && customer.Attributes) || [];\r\n const attribute = custmerAttributes.find(att => att.Name === key);\r\n const index = custmerAttributes.findIndex(att => att.Name === key);\r\n\r\n if (index !== -1 && !hasValue) {\r\n custmerAttributes.splice(index, 1);\r\n }\r\n\r\n if (!hasError && hasValue) {\r\n if (attribute) {\r\n attribute.Attribute = undefined;\r\n attribute.DataTypeValue = payloadData.dataTypeValue;\r\n attribute.Name = payloadData.name;\r\n attribute.RecordId = payloadData.recordId;\r\n attribute.Units = undefined;\r\n attribute.AttributeValue = {\r\n IntegerValue: payloadData.integerValue,\r\n BooleanValue: payloadData.booleanValue,\r\n StringValue: payloadData.textValue,\r\n DecimalValue: payloadData.decimalValue\r\n };\r\n attribute.ExtensionProperties = [];\r\n attribute.NameTranslations = [];\r\n } else {\r\n custmerAttributes.push({\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CustomerAttribute',\r\n Attribute: undefined,\r\n DataTypeValue: payloadData.dataTypeValue,\r\n KeyName: payloadData.name,\r\n Name: payloadData.name,\r\n RecordId: payloadData.recordId,\r\n Units: undefined,\r\n AttributeValue: {\r\n // @ts-expect-error\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.CommercePropertyValue',\r\n IntegerValue: payloadData.integerValue,\r\n BooleanValue: payloadData.booleanValue,\r\n StringValue: payloadData.textValue,\r\n DecimalValue: payloadData.decimalValue\r\n },\r\n 'ExtensionProperties@odata.type': '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.CommerceProperty)',\r\n ExtensionProperties: [],\r\n 'NameTranslations@odata.type':\r\n '#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.TextValueTranslation)',\r\n NameTranslations: []\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (phone.trim().length > this.maxPhoneLength) {\r\n attributeError.Phone = format(resources.attributeInputStringMaxLengthErrorText, 'Phone', this.maxPhoneLength);\r\n hasError = true;\r\n } else {\r\n customer.Phone = phone.trim();\r\n }\r\n\r\n if (vatNumber.trim().length > this.maxVATNumberLength) {\r\n attributeError.VATNumber = format(resources.attributeInputStringMaxLengthErrorText, 'VAT Number', this.maxVATNumberLength);\r\n hasError = true;\r\n } else {\r\n customer.VatNumber = vatNumber.trim();\r\n }\r\n\r\n this.hasError = hasError;\r\n this.setState({ attributeError });\r\n };\r\n\r\n private readonly _saveAttributes = async () => {\r\n const { context, data } = this.props.accountProfileProps;\r\n const customer = data.customerInformation.result;\r\n\r\n let source: string;\r\n switch (this.props.accountProfileProps.config.source) {\r\n case 'FinanceOperationEU':\r\n source = 'Finance&Operation EU';\r\n break;\r\n case 'FinanceOperationUS':\r\n source = 'Finance&Operation US';\r\n break;\r\n default:\r\n source = 'Finance&Operation EU';\r\n }\r\n customer?.Attributes?.forEach(attribute => {\r\n if (attribute.Name === 'Source') {\r\n attribute.AttributeValue!.StringValue = source;\r\n attribute.ExtensionProperties![7].Value!.StringValue = source;\r\n }\r\n });\r\n\r\n if (customer && context) {\r\n this._addOrUpdateAttribute(customer);\r\n // console.log(customer.Attributes![3].AttributeValue?.StringValue);\r\n const input = new updateCustomerAttributesInput(\r\n customer.AccountNumber,\r\n customer.Attributes || [],\r\n context.request.apiSettings,\r\n customer.Phone,\r\n customer.VatNumber\r\n );\r\n\r\n this.isUpdatingAttributes = true;\r\n this.gotException = false;\r\n\r\n if (!this.hasError) {\r\n this.setState({ editAttributes: false });\r\n try {\r\n await updateCustomerAttributes(input, context.actionContext);\r\n // eslint-disable-next-line\r\n } catch (error) {\r\n this.gotException = true;\r\n customer.Attributes = this.initialCustomerAttributes;\r\n if (context.telemetry) {\r\n context.telemetry.exception(error as Error);\r\n context.telemetry.debug('Unable to update customer attributes');\r\n }\r\n this.setState({\r\n attributeError: {},\r\n attributes: this.initialAttributes,\r\n phone: this.initialPhone,\r\n vatNumber: this.initialVatNumber\r\n });\r\n }\r\n this.setState({ editAttributes: false });\r\n if (!this.gotException) {\r\n this.initialAttributes = this.state.attributes;\r\n this.initialCustomerAttributes = customer.Attributes;\r\n this.initialPhone = this.state.phone;\r\n this.initialVatNumber = this.state.vatNumber;\r\n }\r\n }\r\n\r\n this.isUpdatingAttributes = false;\r\n\r\n if (MsDyn365.isBrowser) {\r\n setTimeout(() => {\r\n this._setFocus(this.editRef.current);\r\n }, 0);\r\n }\r\n }\r\n };\r\n\r\n private readonly _setFocus = (element: HTMLElement | null) => {\r\n element?.focus();\r\n };\r\n\r\n private readonly _buildPayloadData = () => {\r\n const { data } = this.props.accountProfileProps;\r\n const attributeDefinitions = data.attributeDefinitions.result || [];\r\n const attributes: IDictionary = {};\r\n\r\n attributeDefinitions.forEach(attributeDefinition => {\r\n const attributePayloadData: IAttributePayloadData = {};\r\n attributePayloadData.recordId = attributeDefinition.RecordId;\r\n attributePayloadData.name = attributeDefinition.Name;\r\n attributePayloadData.dataTypeValue = attributeDefinition.DataTypeValue;\r\n attributePayloadData.isEnumeration = attributeDefinition.IsEnumeration;\r\n attributePayloadData.isMandatory = attributeDefinition.IsMandatory;\r\n switch (attributeDefinition.DataTypeValue) {\r\n case AccountAttributeDataTypeValue.Integer:\r\n const defaultIntegerValue = attributeDefinition.DefaultValue && attributeDefinition.DefaultValue.IntegerValue;\r\n attributePayloadData.lowerBoundValue = attributeDefinition.LowerBound && attributeDefinition.LowerBound.IntegerValue;\r\n attributePayloadData.upperBoundValue = attributeDefinition.UpperBound && attributeDefinition.UpperBound.IntegerValue;\r\n if (attributePayloadData.name && defaultIntegerValue) {\r\n attributePayloadData.defaultValue = String(defaultIntegerValue);\r\n attributes[attributePayloadData.name] = String(defaultIntegerValue);\r\n }\r\n break;\r\n case AccountAttributeDataTypeValue.Decimal:\r\n const defaultDecimalValue = attributeDefinition.DefaultValue && attributeDefinition.DefaultValue.DecimalValue;\r\n attributePayloadData.lowerBoundValue = attributeDefinition.LowerBound && attributeDefinition.LowerBound.DecimalValue;\r\n attributePayloadData.upperBoundValue = attributeDefinition.UpperBound && attributeDefinition.UpperBound.DecimalValue;\r\n if (attributePayloadData.name && defaultDecimalValue) {\r\n attributePayloadData.defaultValue = String(defaultDecimalValue);\r\n attributes[attributePayloadData.name] = String(defaultDecimalValue);\r\n }\r\n break;\r\n case AccountAttributeDataTypeValue.Text:\r\n const defaultStringValue = attributeDefinition.DefaultValue && attributeDefinition.DefaultValue.StringValue;\r\n if (attributePayloadData.name && defaultStringValue) {\r\n attributePayloadData.defaultValue = defaultStringValue;\r\n attributes[attributePayloadData.name] = defaultStringValue;\r\n }\r\n break;\r\n case AccountAttributeDataTypeValue.TrueFalse:\r\n const defaultBooleanValue =\r\n (attributeDefinition.DefaultValue && attributeDefinition.DefaultValue.BooleanValue) || false;\r\n if (attributePayloadData.name) {\r\n attributePayloadData.defaultValue = String(defaultBooleanValue);\r\n attributes[attributePayloadData.name] = String(defaultBooleanValue);\r\n }\r\n break;\r\n default:\r\n\r\n // Do nothing\r\n }\r\n this.attributePayloadData.push(attributePayloadData);\r\n });\r\n Object.keys(attributes).length > 0 && this.setState({ attributes });\r\n };\r\n\r\n private readonly _getCustomerPhoneAndVatNumber = () => {\r\n const customer = this.props.accountProfileProps.data.customerInformation.result;\r\n const phone = (customer && customer.Phone) || '';\r\n const vatNumber = (customer && customer.VatNumber) || '';\r\n this.setState({ phone, vatNumber });\r\n if (this.initialPhone.length === 0) {\r\n this.initialPhone = phone;\r\n }\r\n if (this.initialVatNumber.length === 0) {\r\n this.initialVatNumber = vatNumber;\r\n }\r\n };\r\n}\r\n\r\nexport default AccountProfileAttributes;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\ninterface IAccountProfileDescription {\r\n className: string;\r\n description: string;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare\r\nconst IAccountProfileDescription: React.FC = ({ className, description }) => (\r\n

{description}

\r\n);\r\n\r\nexport default IAccountProfileDescription;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { ILinkData } from '@msdyn365-commerce/core';\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface ILinksData {\r\n linkText?: string;\r\n linkUrl: ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n isDisabled?: boolean;\r\n}\r\n\r\nexport interface IAccountProfileLinks {\r\n links: ILinksData[];\r\n requestContext: Msdyn365.IRequestContext;\r\n\r\n /**\r\n * The telemetry content\r\n */\r\n telemetryContent?: ITelemetryContent;\r\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\r\n}\r\n\r\nconst AccountProfileLinks: React.FC = ({ links, telemetryContent, requestContext, onTextChange }) => {\r\n if (links.length === 0) {\r\n return null;\r\n }\r\n const editableLinks = _mapEditableLinks(links, telemetryContent);\r\n return (\r\n
\r\n {editableLinks && editableLinks.length > 0 ? (\r\n \r\n ) : null}\r\n
\r\n );\r\n};\r\n\r\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent?: ITelemetryContent): Msdyn365.ILinksData[] | null => {\r\n if (!linkdata || linkdata.length === 0) {\r\n return null;\r\n }\r\n const editableLinks: Msdyn365.ILinksData[] = [];\r\n const payLoad = getPayloadObject('click', telemetryContent!, '');\r\n linkdata.forEach((link, index) => {\r\n payLoad.contentAction.etext = link.linkText;\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: link.isDisabled ? 'ms-account-profile__section-link-disable' : 'ms-account-profile__section-link',\r\n linkText: link.linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: 'link',\r\n additionalProperties: attributes\r\n };\r\n editableLinks.push(editableLink);\r\n });\r\n\r\n return editableLinks;\r\n};\r\n\r\nexport default AccountProfileLinks;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { Customer } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport {\r\n ArrayExtensions,\r\n updateCustomerPersonalization,\r\n updateCustomerPersonalizationInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n IModuleProps,\r\n INodeProps,\r\n IPayLoad,\r\n ITelemetryContent\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport get from 'lodash/get';\r\nimport { computed, observable } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IFmAccountProfileData } from './fm-account-profile.data';\r\nimport {\r\n IFmAccountProfileProps,\r\n IEmailAddressSectionHeadingData,\r\n IHeadingData,\r\n INameSectionHeadingData\r\n} from './fm-account-profile.props.autogenerated';\r\nimport AccountProfileAttributes from './components/fm-account-profile-attributes';\r\nimport DescriptionComponent from './components/fm-account-profile-description';\r\nimport LinksComponent, { ILinksData } from './components/fm-account-profile-links';\r\nimport TextComponent from './components/fm-account-profile-text';\r\n\r\nexport interface IAccountPreference {\r\n accountPreference: INodeProps;\r\n heading: React.ReactNode;\r\n buttonWrapper: INodeProps;\r\n buttonYesText: React.ReactNode;\r\n buttonNoText: React.ReactNode;\r\n button: React.ReactNode;\r\n description: React.ReactNode;\r\n onUpdateAccountPreference(preferenceType?: string): void;\r\n}\r\n\r\nexport interface IAccountPreferences {\r\n accountPreferences: INodeProps;\r\n heading?: React.ReactNode;\r\n personalization: IAccountPreference;\r\n extraPreferences?: IAccountPreference[];\r\n}\r\n\r\nexport interface IAccountProfileItem {\r\n AccountProfileItem: INodeProps;\r\n heading?: React.ReactNode;\r\n links?: React.ReactNode;\r\n description?: React.ReactNode;\r\n}\r\n\r\nexport interface IAccountCustomerAttributes {\r\n customerAttributes?: React.ReactNode;\r\n}\r\n\r\nexport interface IAccountProfileViewProps extends IFmAccountProfileProps {\r\n AccountProfile: IModuleProps;\r\n accountProfileWrapper?: INodeProps;\r\n className: string;\r\n heading?: React.ReactNode;\r\n emailSection: IAccountProfileItem;\r\n nameSection: IAccountProfileItem;\r\n preferenceSection: IAccountPreferences;\r\n customerAttributesWrapper?: INodeProps;\r\n customerAttributesSection?: IAccountCustomerAttributes;\r\n infoMessageBar?: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * AccountProfile component.\r\n * @extends {React.Component>}\r\n */\r\n@observer\r\nclass AccountProfile extends React.Component> {\r\n @observable private isUpdatingPreference: boolean = false;\r\n\r\n private readonly telemetryContent?: ITelemetryContent;\r\n private readonly payLoad: IPayLoad;\r\n private readonly editAsyncCustomerFeatureName: string = 'Dynamics.AX.Application.RetailEnableAsyncCustomerEditFeature';\r\n\r\n private isEditAsyncCustomerFeatureEnabled: boolean = false;\r\n\r\n constructor(props: IFmAccountProfileProps) {\r\n super(props);\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IFmAccountProfileProps): boolean {\r\n if (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 {\r\n const { config, resources, data } = this.props;\r\n const { className, heading, emailAddressSectionHeading, nameSectionHeading, showAttributes, showPhone, showVatNumber } = config;\r\n\r\n const { editButtonText, editButtonAriaLabel } = resources;\r\n const customerInformation = data.customerInformation.result;\r\n\r\n this.isEditAsyncCustomerFeatureEnabled =\r\n data.featureState?.result?.find(feature => feature.Name === this.editAsyncCustomerFeatureName)?.IsEnabled || false;\r\n\r\n const invalidAsyncCustomerState: boolean =\r\n (this.props.context.app?.config?.canRenderAsyncCustomerDataAsUnmodifiable || false) &&\r\n (customerInformation?.IsAsyncCustomer || false) &&\r\n !this.isEditAsyncCustomerFeatureEnabled;\r\n\r\n // As per the design, phone and vat numbers are part of the profile attributes section\r\n const shouldRenderAttributes = (showAttributes && showAttributes.length > 0) || showPhone || showVatNumber || false;\r\n const editLink: ILinksData = {\r\n linkUrl: {\r\n destinationUrl: get(this.props, 'context.request.user.editProfileUrl', '')\r\n },\r\n linkText: editButtonText,\r\n ariaLabel: editButtonAriaLabel,\r\n isDisabled: invalidAsyncCustomerState\r\n };\r\n\r\n const viewProps = {\r\n ...this.props,\r\n className,\r\n AccountProfile: {\r\n moduleProps: this.props,\r\n className: classnames('ms-account-profile', config.className)\r\n },\r\n infoMessageBar: invalidAsyncCustomerState && (\r\n \r\n ),\r\n accountProfileWrapper: {\r\n className: classnames('ms-account-profile-wrapper')\r\n },\r\n heading: heading && (\r\n \r\n ),\r\n emailSection: this._renderEmailSection(\r\n classnames('ms-account-profile__section', 'ms-account-profile__section-email'),\r\n emailAddressSectionHeading as IEmailAddressSectionHeadingData,\r\n customerInformation && customerInformation.Email\r\n ),\r\n nameSection: this._renderNameSection(\r\n classnames('ms-account-profile__section', 'ms-account-profile__section-name'),\r\n nameSectionHeading as INameSectionHeadingData,\r\n this.getDescription(customerInformation),\r\n Msdyn365.isOboRequest(this.props.context.request) ? undefined : [editLink]\r\n ),\r\n preferenceSection: this._renderPreferenceSection(\r\n classnames('ms-account-profile__section', 'ms-account-profile__section-preferences'),\r\n invalidAsyncCustomerState,\r\n customerInformation\r\n ),\r\n customerAttributesWrapper: {\r\n className: classnames('ms-account-profile__attributes-wrapper')\r\n },\r\n customerAttributesSection: shouldRenderAttributes && this._renderCustomerAttributes()\r\n };\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading.text = event.target.value);\r\n\r\n public handleEmailHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\r\n (this.props.config.emailAddressSectionHeading!.text = event.target.value);\r\n\r\n public handleNameHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\r\n (this.props.config.nameSectionHeading!.text = event.target.value);\r\n\r\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\r\n if (this.props.resources.editButtonText) {\r\n this.props.resources.editButtonText = event.target.value;\r\n }\r\n };\r\n\r\n @computed get editProfileUrl(): string {\r\n return get(this.props, 'context.request.user.editProfileUrl', '');\r\n }\r\n\r\n private getDescription(customerInformation: Customer | undefined): string {\r\n let description = '';\r\n if (customerInformation !== undefined) {\r\n if (customerInformation.FirstName) {\r\n description += customerInformation.FirstName;\r\n }\r\n if (customerInformation.LastName) {\r\n description += customerInformation.FirstName ? ` ${customerInformation.LastName}` : customerInformation.LastName;\r\n }\r\n }\r\n return description;\r\n }\r\n\r\n private _renderEmailSection(\r\n className: string,\r\n heading?: IEmailAddressSectionHeadingData,\r\n description?: string,\r\n links?: ILinksData[]\r\n ): IAccountProfileItem {\r\n return {\r\n AccountProfileItem: {\r\n className\r\n },\r\n heading: heading && heading.text && (\r\n \r\n ),\r\n links: links && links.length > 0 && (\r\n \r\n ),\r\n description: description && (\r\n \r\n )\r\n };\r\n }\r\n\r\n private _renderNameSection(\r\n className: string,\r\n heading?: INameSectionHeadingData,\r\n description?: string,\r\n links?: ILinksData[]\r\n ): IAccountProfileItem {\r\n if (!ArrayExtensions.hasElements(links)) {\r\n return {\r\n AccountProfileItem: {\r\n className\r\n },\r\n heading: heading && (\r\n \r\n ),\r\n description: description && (\r\n \r\n )\r\n };\r\n }\r\n return {\r\n AccountProfileItem: {\r\n className\r\n },\r\n heading: heading && (\r\n \r\n ),\r\n links: (\r\n \r\n ),\r\n description: description && (\r\n \r\n )\r\n };\r\n }\r\n\r\n private readonly onClickEventHandler = (className: string) => async () => {\r\n return this._updateAccountPersonalization(className);\r\n };\r\n\r\n private _renderPreferenceSection(\r\n className: string,\r\n invalidAsyncCustomerState: boolean,\r\n customerInformation?: Customer\r\n ): IAccountPreferences | null {\r\n const {\r\n personalizationDescription,\r\n personalizationEnableButtonAriaLabel,\r\n webTrackingDescription,\r\n webTrackingEnableButtonAriaLabel\r\n } = this.props.resources;\r\n const { preferencesSectionHeading, personalizationSectionHeading, webTrackingSectionHeading } = this.props.config;\r\n const { enableDataAnalytics } = this.props.context.request.features;\r\n const extraPreferences: IAccountPreference[] = [];\r\n\r\n if (!customerInformation) {\r\n this.props.context.telemetry.error('Account profile data is empty, module wont render');\r\n return null;\r\n }\r\n\r\n // Show browser activity login preference if switch is enabled AND a heading is provided\r\n enableDataAnalytics &&\r\n webTrackingSectionHeading &&\r\n extraPreferences.push(\r\n this._renderPreference(\r\n 'web-tracking',\r\n webTrackingSectionHeading as IHeadingData,\r\n webTrackingEnableButtonAriaLabel,\r\n webTrackingDescription,\r\n customerInformation.OptOutWebActivityTracking || false,\r\n invalidAsyncCustomerState\r\n )\r\n );\r\n\r\n return {\r\n accountPreferences: {\r\n className\r\n },\r\n heading: preferencesSectionHeading && (\r\n \r\n ),\r\n personalization: this._renderPreference(\r\n 'personalization',\r\n personalizationSectionHeading as IHeadingData,\r\n personalizationEnableButtonAriaLabel,\r\n personalizationDescription,\r\n customerInformation.OptOutPersonalization || false,\r\n invalidAsyncCustomerState\r\n ),\r\n extraPreferences: extraPreferences || undefined\r\n };\r\n }\r\n\r\n private readonly _renderPreference = (\r\n className: string,\r\n sectionHeading: IHeadingData,\r\n enableAriaLabel: string,\r\n description: string,\r\n isOptOut: boolean,\r\n disableBtn: boolean\r\n ) => {\r\n const { toggleDisableText, toggleEnableText } = this.props.resources;\r\n const toggleState = isOptOut ? 'disable' : 'enable';\r\n const onClickHandler = this.onClickEventHandler(className);\r\n this.payLoad.contentAction.etext = sectionHeading.text;\r\n const attributes = getTelemetryAttributes(this.telemetryContent!, this.payLoad);\r\n\r\n return {\r\n accountPreference: {\r\n className: classnames('ms-account-profile__preference', `ms-account-profile__preference-${className}`, {\r\n 'ms-account-profile__personalization-updating': this.isUpdatingPreference\r\n })\r\n },\r\n heading: sectionHeading && (\r\n \r\n ),\r\n buttonWrapper: {\r\n className: classnames('ms-account-profile__toggle-wrapper', `ms-account-profile__toggle-${toggleState}`, {\r\n // Disable the toggle completely if customer is async.\r\n 'ms-account-profile__toggle-disabled': disableBtn\r\n })\r\n },\r\n buttonYesText: ,\r\n buttonNoText: ,\r\n button: (\r\n \r\n ),\r\n description: ,\r\n onUpdateAccountPreference: async () => this._updateAccountPersonalization(className)\r\n };\r\n };\r\n\r\n private readonly _updateAccountPersonalization = async (preferenceType?: string) => {\r\n const customerInformation = this.props.data.customerInformation.result;\r\n\r\n if (customerInformation) {\r\n const {\r\n telemetry,\r\n context: { request, actionContext }\r\n } = this.props;\r\n\r\n let isOptOutPersonalization = false;\r\n let input;\r\n\r\n switch (preferenceType) {\r\n case 'web-tracking':\r\n isOptOutPersonalization = customerInformation.OptOutWebActivityTracking || false;\r\n input = new updateCustomerPersonalizationInput(\r\n customerInformation.AccountNumber,\r\n !isOptOutPersonalization,\r\n request.apiSettings,\r\n preferenceType\r\n );\r\n break;\r\n case undefined:\r\n case 'personalization':\r\n default:\r\n isOptOutPersonalization = customerInformation.OptOutPersonalization || false;\r\n input = new updateCustomerPersonalizationInput(\r\n customerInformation.AccountNumber,\r\n !isOptOutPersonalization,\r\n request.apiSettings,\r\n preferenceType\r\n );\r\n }\r\n\r\n this.isUpdatingPreference = true;\r\n\r\n try {\r\n await updateCustomerPersonalization(input, actionContext);\r\n // eslint-disable-next-line\r\n } catch (error) {\r\n if (telemetry) {\r\n telemetry.exception(error as Error);\r\n telemetry.debug('Unable to update customer personalization');\r\n }\r\n }\r\n\r\n this.isUpdatingPreference = false;\r\n }\r\n };\r\n\r\n private readonly _renderCustomerAttributes = (): React.ReactNode => {\r\n return ;\r\n };\r\n}\r\n\r\nexport default AccountProfile;\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 * as React from 'react';\r\n\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport {\r\n IAccountPreference,\r\n IAccountPreferences,\r\n IAccountProfileItem,\r\n IAccountProfileViewProps\r\n} from '@msdyn365-commerce-modules/account-management/src/modules/account-profile/./account-profile';\r\nimport { IFmAccountProfileProps } from './fm-account-profile.props.autogenerated';\r\n\r\nimport { format } from '@msdyn365-commerce-modules/utilities/';\r\n\r\nconst AccountPreferencesSection: React.FC = ({ accountPreferences, heading, personalization, extraPreferences }) => {\r\n return (\r\n \r\n {heading}\r\n \r\n {extraPreferences &&\r\n extraPreferences.map((preferenceSecton, index) => {\r\n return ;\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst AccountPreferenceSection: React.FC = ({\r\n accountPreference,\r\n heading,\r\n description,\r\n buttonWrapper,\r\n buttonYesText,\r\n button,\r\n buttonNoText\r\n}) => {\r\n return (\r\n \r\n {heading}\r\n {description}\r\n \r\n {buttonNoText}\r\n {button}\r\n {buttonYesText}\r\n \r\n \r\n );\r\n};\r\n\r\nconst AccountProfileSection: React.FC = ({ AccountProfileItem, heading, links, description }) => {\r\n return (\r\n \r\n {heading}\r\n {description}\r\n {links}\r\n \r\n );\r\n};\r\n\r\nconst AccountProfileView: React.FC> = props => {\r\n const {\r\n AccountProfile,\r\n accountProfileWrapper,\r\n heading,\r\n emailSection,\r\n nameSection,\r\n preferenceSection,\r\n customerAttributesWrapper,\r\n customerAttributesSection\r\n } = props;\r\n React.useEffect(() => {\r\n if (document.getElementsByClassName('ms-account-profile__attributes-GenericMarketing').length) {\r\n // @ts-ignore\r\n // tslint:disable-next-line:no-inner-html\r\n document.getElementsByClassName('ms-account-profile__attributes-GenericMarketing')[1].innerHTML =\r\n props.context.request.locale.toLowerCase() !== 'en-us'\r\n ? format(props.resources.htmlGenericMarketing, props.config.privacyPolicyURL)\r\n : props.config.textGenericMarketing;\r\n }\r\n if (document.getElementsByClassName('ms-account-profile__attributes-Profiling').length) {\r\n // @ts-ignore\r\n // tslint:disable-next-line:no-inner-html\r\n document.getElementsByClassName('ms-account-profile__attributes-Profiling')[1].innerHTML = format(\r\n props.resources.htmlProfiling,\r\n props.config.privacyPolicyURL\r\n );\r\n }\r\n if (document.getElementsByClassName('ms-account-profile__attributes-ThirdParty').length) {\r\n // @ts-ignore\r\n // tslint:disable-next-line:no-inner-html\r\n document.getElementsByClassName('ms-account-profile__attributes-ThirdParty')[1].innerHTML = format(\r\n props.resources.htmlThirdParty,\r\n props.config.privacyPolicyURL\r\n );\r\n }\r\n\r\n const bd_input: HTMLInputElement = document.getElementsByClassName(\r\n 'ms-account-profile__attributes-element ms-account-profile__attributes_input ms-account-profile__attributes_input-edit-false ms-account-profile__Birthday-input'\r\n )[0] as HTMLInputElement;\r\n if (bd_input && props.context.request.canonicalDomain !== 'us.venchi.com') {\r\n document.getElementsByClassName('ms-account-profile__attributes-edit-button msc-btn')[0].addEventListener('click', () => {\r\n bd_input.setAttribute('type', 'date');\r\n });\r\n }\r\n }, []);\r\n\r\n return (\r\n \r\n {heading}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {accountProfileWrapper && (\r\n \r\n \r\n \r\n {customerAttributesWrapper && (\r\n {customerAttributesSection}\r\n )}\r\n \r\n )}\r\n
\r\n
\r\n
\r\n {customerAttributesWrapper && {customerAttributesSection}}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default AccountProfileView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nimport { IGenericPopupProps } from './generic-popup.props.autogenerated';\r\n\r\nimport classnames from 'classnames';\r\nimport Cookies from 'universal-cookie';\r\n\r\nexport interface IGenericPopupState {\r\n popupVisible: boolean;\r\n recallVisible: boolean;\r\n}\r\n\r\nexport interface IGenericPopupViewProps extends IGenericPopupProps<{}>, IGenericPopupState {\r\n onDismissRecall(): void;\r\n onDismissPopup(): void;\r\n handleTextRecall(): void;\r\n classNamePopup: string;\r\n classNameRecall: string;\r\n}\r\n\r\n/**\r\n *\r\n * GenericPopup component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass GenericPopup extends React.PureComponent, IGenericPopupState> {\r\n public state: IGenericPopupState = {\r\n popupVisible: false,\r\n recallVisible: false\r\n };\r\n\r\n public render(): JSX.Element | null {\r\n // const { closeButtonAriaLabel, closeButtonLabel } = this.props.resources;\r\n const { className } = this.props.config;\r\n const { popupVisible, recallVisible } = this.state;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n classNamePopup: classnames('venchi_popup'),\r\n classNameRecall: classnames('venchi-recall', 'slide-in', className),\r\n popupVisible, // State data\r\n recallVisible, // State data\r\n onDismissRecall: this._onDismissRecall, // Methods\r\n onDismissPopup: this._onDismissPopup, // Methods\r\n handleTextRecall: this._displayPopupNow\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private readonly _onDismissRecall = (): void => {\r\n this.createCookieRecall();\r\n this.setState({ recallVisible: false });\r\n };\r\n\r\n private readonly _onDismissPopup = (): void => {\r\n if (this.props.config.recallEnabled || false) {\r\n switch (this.props.config.recallShowAfterPopup) {\r\n case 'afterPopup':\r\n setTimeout(this._displayRecallNow, 3000);\r\n break;\r\n case 'afterPageReload':\r\n default:\r\n break;\r\n }\r\n }\r\n this.setState({\r\n popupVisible: false\r\n });\r\n };\r\n\r\n private readonly _displayRecallNow = (): void => {\r\n this.setState({\r\n popupVisible: false,\r\n recallVisible: true\r\n });\r\n };\r\n\r\n private readonly _displayPopupNow = (): void => {\r\n if (this.props.config.cookieCheckbox) {\r\n this.createCookie();\r\n }\r\n this.setState({\r\n popupVisible: true,\r\n recallVisible: false\r\n });\r\n };\r\n\r\n public async componentDidMount() {\r\n const cookie = new Cookies();\r\n if (this.props.config.hidePopupIfCookieIsSet) {\r\n if (!cookie.get(`${this.props.config.modalId}-shown`)) {\r\n setTimeout(this._displayPopupNow, 1000 * (this.props.config.delayPopup || 0));\r\n } else {\r\n if (this.props.config.recallEnabled && !cookie.get(`${this.props.config.modalId}-recall-hidden`)) {\r\n setTimeout(this._displayRecallNow, 1000 * (this.props.config.delayRecall || 0));\r\n }\r\n }\r\n } else {\r\n setTimeout(this._displayPopupNow, 1000 * (this.props.config.delayPopup || 0));\r\n }\r\n }\r\n\r\n private createCookie() {\r\n const cookie = new Cookies();\r\n // @ts-ignore\r\n if (this.props.config.expireDays >= 1) {\r\n var date = new Date();\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\r\n // @ts-ignore\r\n date.setDate(date.getDate() + (this.props.config.expireDays || 0));\r\n const options = { expires: date };\r\n cookie.set(`${this.props.config.modalId}-shown`, true, options);\r\n } else {\r\n cookie.set(`${this.props.config.modalId}-shown`, true);\r\n }\r\n }\r\n\r\n private createCookieRecall() {\r\n const cookie = new Cookies();\r\n // @ts-ignore\r\n if (this.props.config.recallDismissableForDays >= 1) {\r\n var date = new Date();\r\n // @ts-ignore\r\n date.setDate(\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\r\n date.getDate() + (this.props.config.recallDismissableForDays || 0)\r\n );\r\n const options = { expires: date };\r\n cookie.set(`${this.props.config.modalId}-recall-hidden`, true, options);\r\n } else {\r\n cookie.set(`${this.props.config.modalId}-recall-hidden`, true);\r\n }\r\n }\r\n}\r\n\r\nexport default GenericPopup;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\nimport { IGenericPopupViewProps } from './generic-popup';\r\nimport { Modal, ModalBody, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\n\r\nconst GenericPopupView: React.FC = props => {\r\n const {\r\n slots,\r\n popupVisible,\r\n recallVisible,\r\n classNamePopup,\r\n classNameRecall,\r\n onDismissRecall,\r\n onDismissPopup,\r\n handleTextRecall\r\n } = props;\r\n const { modalId, recallDismissable, modalHeader, recallText } = props.config;\r\n const { closeButtonAriaLabel, closeButtonLabel } = props.resources;\r\n\r\n React.useEffect(() => {\r\n if (popupVisible) {\r\n //@ts-ignore\r\n const label = props.config.modalName || 'Generic';\r\n window.dataLayer?.push?.({\r\n event: 'gaEvent',\r\n eventCategory: 'popup',\r\n eventAction: 'displayed',\r\n eventLabel: label\r\n });\r\n }\r\n }, [popupVisible]);\r\n\r\n const handleClose = React.useCallback(() => {\r\n const popupElement = document.querySelector('.venchi_popup');\r\n const form = popupElement?.getElementsByTagName('form');\r\n\r\n if (form?.length && popupVisible) {\r\n const label = props.config.modalName;\r\n window.dataLayer?.push?.({\r\n event: 'gaEvent',\r\n eventCategory: 'popup',\r\n eventAction: 'click_close',\r\n eventLabel: label\r\n });\r\n }\r\n onDismissPopup();\r\n }, [onDismissPopup, popupVisible, props]);\r\n\r\n return (\r\n <>\r\n \r\n {modalHeader}\r\n
\r\n \r\n
\r\n
{slots.content}
\r\n
\r\n
\r\n
\r\n
\r\n {recallVisible ? (\r\n
\r\n \r\n {recallDismissable ? (\r\n \r\n ) : (\r\n <>\r\n )}\r\n
\r\n ) : (\r\n <>\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default GenericPopupView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { IContentBlockViewProps } from '@msdyn365-commerce-modules/content-block/src/modules/content-block/./content-block';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { Image, IImageSettings, IImageProps } from \"@msdyn365-commerce/core\";\r\nimport { getFeatureToggleService } from '../../../services/featureToggleService';\r\n\r\n\r\nconst isValidImage = (image: any) => image.src && image.altText && image.title && image.gridSettings && image.imageSettings\r\n\r\nconst DEFAULT_IMAGE_MODE = 2\r\n\r\nconst defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { w: 100, h: 200 },\r\n sm: { w: 200, h: 200 },\r\n md: { w: 300, h: 300 },\r\n lg: { w: 400, h: 400 }\r\n },\r\n lazyload: false,\r\n mode: DEFAULT_IMAGE_MODE,\r\n backgroundColor: 'FF0000'\r\n};\r\n\r\n\r\nconst ContentBlockView: React.FC = props => {\r\n const { contentBlockContainer, imageContainer, detailsContainer, title, text, links, image } = props;\r\n //@ts-ignore\r\n const imageProps : IImageProps = image.props as IImageProps\r\n const imageSettings = imageProps.imageSettings || defaultImageSettings\r\n //@ts-ignore\r\n const htmlImage = image && {image.props.altText};\r\n\r\n //@ts-ignore\r\n const msdynImage = isValidImage(image.props) && ;\r\n const { isFeatureEnabled } = getFeatureToggleService(props.context.request.cookies);\r\n\r\n const contentBlockImage = isFeatureEnabled('msdyn-image') ? msdynImage : htmlImage;\r\n\r\n const entireLink = contentBlockContainer.className.includes('linkplacement__entirebanner');\r\n // @ts-ignore\r\n const link = links && 'props' in links ? links.props.links[0].linkUrl.destinationUrl : '';\r\n return (\r\n \r\n {entireLink ? (\r\n \r\n {contentBlockImage}\r\n \r\n {title}\r\n {text}\r\n \r\n \r\n ) : (\r\n <>\r\n {image && {contentBlockImage}}\r\n \r\n {title}\r\n {text}\r\n {links}\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ContentBlockView;\r\n","import { ICookieContext } from '@msdyn365-commerce/core-internal/dist/types';\r\nconst FEATURE_COOKIE_KEY = 'features';\r\n\r\nexport const getFeatureToggleService = (cookieContext: ICookieContext) => {\r\n const getFeaturesCookie = (cookieContext: ICookieContext) => cookieContext.get(FEATURE_COOKIE_KEY);\r\n\r\n const getEnabledFeatures = (): string[] => {\r\n const featuresCookie = getFeaturesCookie(cookieContext).value;\r\n return featuresCookie ? featuresCookie.split(',').map(feature => feature.trim()) : [];\r\n };\r\n\r\n const isFeatureEnabled = (featureName: string): boolean => getEnabledFeatures().includes(featureName);\r\n\r\n return {\r\n getEnabledFeatures,\r\n isFeatureEnabled\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\nimport { IIframeViewProps } from '@msdyn365-commerce-modules/iframe/src/modules/iframe/./iframe';\r\nimport { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\n/**\r\n *\r\n * IFrameView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class IFrameView extends React.PureComponent {\r\n public render(): JSX.Element | null {\r\n const { Heading, IframeContainer, IFrame, alert, cookieConsentAccepted } = this.props;\r\n\r\n return (\r\n \r\n {alert}\r\n {cookieConsentAccepted && cookieConsentAccepted === true ? (\r\n <>\r\n {Heading}\r\n
{IFrame}
\r\n \r\n ) : null}\r\n
\r\n );\r\n }\r\n}\r\nexport default IFrameView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport {\r\n ISignUpEmailVerification,\r\n ISignUpItem,\r\n ISignUpLoading,\r\n ISignUpLocalAccount,\r\n ISignUpViewProps\r\n} from '@msdyn365-commerce-modules/account-management/src/modules/sign-up/sign-up';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nconst SignUpItem: React.FC = ({ wrapper, label, errorMessage, input }) => {\r\n return (\r\n \r\n {label}\r\n {errorMessage}\r\n {input}\r\n \r\n );\r\n};\r\n\r\nconst SignUpEmailVerification: React.FC = ({ email, buttonWrapper, buttons, successMessage, errorMessage }) => {\r\n return (\r\n <>\r\n \r\n {successMessage &&\r\n successMessage.map((message: React.ReactNode) => {\r\n return <>{message};\r\n })}\r\n {errorMessage &&\r\n errorMessage.map((message: React.ReactNode) => {\r\n return <>{message};\r\n })}\r\n \r\n {buttons &&\r\n buttons.map((button: React.ReactNode) => {\r\n return <>{button};\r\n })}\r\n \r\n \r\n );\r\n};\r\n\r\nconst LocalAccount: React.FC = (\r\n { localAccount, items, emailVerification, buttons, errorMessage, disclaimer },\r\n props\r\n) => {\r\n const europe = ['/fr', '/de'];\r\n const locale = props?.context?.request?.locale;\r\n const uiLocales = props?.context?.request?.query.ui_locales;\r\n const regionCRM = europe.includes(uiLocales) ? uiLocales : props.config.RegionCRM;\r\n\r\n const [birthDate, setBirthDate] = React.useState('');\r\n const [formatDateState, setFormatDateState] = React.useState(true);\r\n const pattern = /^((1[6789]|[2-9][0-9])[0-9]{2}\\/(0[13578]|1[02])\\/(0[1-9]|[12][0-9]|3[01]))$|^((1[6789]|[2-9][0-9])[0-9]{2}\\/(0[469]|11)\\/(0[1-9]|[12][0-9]|30))$|^((16|[248][048]|[3579][26])00)|(1[6789]|[2-9][0-9])(0[48]|[13579][26]|[2468][048])\\/02\\/(0[1-9]|1[0-9]|2[0-9])$|^(1[6789]|[2-9][0-9])[0-9]{2}\\/02\\/(0[1-9]|1[0-9]|2[0-8])$/gm;\r\n const patternUS = /^((0[13578]|1[02])\\/(0[1-9]|[12][0-9]|3[01]))$|^((0[469]|11)\\/(0[1-9]|[12][0-9]|30))$|^02\\/(0[1-9]|1[0-9]|2[0-9])$/gm;\r\n\r\n const checkDate = (event: React.KeyboardEvent) => {\r\n const value = event.currentTarget.value;\r\n const today = new Date();\r\n if (value !== '' && (!value.match(locale !== 'en-US' ? pattern : patternUS) || today < new Date(value))) {\r\n setFormatDateState(false);\r\n } else {\r\n setFormatDateState(true);\r\n }\r\n if (locale === 'en-US') {\r\n setBirthDate(`1900/${value}`);\r\n }\r\n };\r\n if (typeof window !== 'undefined') {\r\n const signUpButton: HTMLElement = document.getElementById('continue') as HTMLElement;\r\n console.log(document.getElementById('continue'));\r\n if (signUpButton !== undefined) {\r\n signUpButton.onclick = e => {\r\n if (!formatDateState) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n };\r\n }\r\n }\r\n\r\n return (\r\n \r\n {items &&\r\n items.map((item: ISignUpItem) => {\r\n if (item.key === 'email' && emailVerification.isRequired) {\r\n return (\r\n \r\n \r\n
\r\n \r\n {formatDateState === false ? (\r\n

{props.resources.birthdayErrorText}

\r\n ) : (\r\n ''\r\n )}\r\n {locale !== 'en-US' ? (\r\n checkDate(e)}\r\n onPaste={e => e.preventDefault()}\r\n />\r\n ) : (\r\n <>\r\n checkDate(e)}\r\n onPaste={e => e.preventDefault()}\r\n />\r\n \r\n \r\n )}\r\n\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n {props.config.renderThirdPartyPrivacy && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n
\r\n );\r\n }\r\n return ;\r\n })}\r\n {errorMessage &&\r\n errorMessage.map((error: React.ReactNode, index: number) => {\r\n return {error};\r\n })}\r\n {buttons &&\r\n buttons.map((button: React.ReactNode, index: number) => {\r\n return {button};\r\n })}\r\n {disclaimer}\r\n
\r\n );\r\n};\r\n\r\nconst SignUpLoading: React.FC = ({ modal, modalBody, icon, message }) => {\r\n return (\r\n \r\n \r\n {icon}\r\n {message}\r\n \r\n \r\n );\r\n};\r\n\r\nconst SignUpView: React.FC = props => {\r\n const { signUp, viewState, loading, defaultAADConainer, aadConainer, heading, signUpLocalAccount } = props;\r\n\r\n return (\r\n \r\n {viewState.isShowLoading && }\r\n {viewState.isShowLoading && }\r\n \r\n {heading}\r\n {LocalAccount(signUpLocalAccount, props)}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default SignUpView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\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\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: 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.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.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('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\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 } = this.props;\n\n this.currentLevel = 1;\n return <>{isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()};\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n return (\n \n \n {this._renderDisplay()}\n \n \n );\n }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return this._renderDrawer(menuItem, setSize, posinset);\n }\n return this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset);\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset);\n } else if (item && item.linkText && !item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\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 this.setState({ parentMenu: undefined });\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 );\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 /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\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 this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\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);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\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\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 subMenuLevel = 3;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\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 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 /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\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 /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkMenuItem(\n option: IMenuItemData,\n index?: number,\n hoverEffect: boolean = true,\n isParent: boolean = false,\n setSize?: number,\n posinset?: number\n ): JSX.Element | null {\n const { Link, isMobileView } = 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 /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\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 /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\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 /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay =\n !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !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
\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\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 /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\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 this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n\n this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n private readonly _resetFocus = () => {\n if (this.props.isMobileView) {\n setTimeout(() => {\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n }, 0);\n }\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 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 * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined });\n }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\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 const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\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 {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISearchResultModalViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from '@msdyn365-commerce-modules/search-result-container';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst SearchResultContainerView: React.FC = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n \n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n {similarLookProduct}\n \n {errorMessage}\n {products}\n \n {pagination}\n \n );\n }\n return (\n \n {categoryHierarchy && {renderCategoryHierarchy(categoryHierarchy)}}\n \n {refineMenu && renderRefiner(refineMenu)}\n \n {similarLookProduct}\n
\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n
\n
\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n
\n \n {errorMessage}\n {products}\n \n {pagination}\n
\n
\n
\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n \n \n {refiners.map((submenu, index) => (\n {submenu}\n ))}\n \n \n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return {sortByDropDown};\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n \n {categoryHierarchyList.map((category, index) => (\n \n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n \n ))}\n \n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n \n

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

\n
\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. 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 { AsyncResult, Customer, ProductSearchResult, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IModuleProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { getCatalogId } from '@msdyn365-commerce/core';\nimport { ProductComparisonItem, ProductComparisonState } from '../product-comparison-state';\nimport { IProductComparisonButtonProps } from './product-comparison-button.props.autogenerated';\n\n/**\n * Represents product comparison view props.\n */\nexport interface IProductComparisonButtonViewProps extends IProductComparisonButtonProps<{}> {\n moduleProps: IModuleProps;\n productComparisonButton?: React.ReactNode;\n productComparisonPreview?: React.ReactNode;\n}\n\n/**\n * Represents the data which is required for the product comparison button to be rendered.\n */\nexport interface IProductComparisonButtonData {\n accountInformation?: AsyncResult;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonButtonFullProps extends IProductComparisonButtonProps {\n product: ProductSearchResult | SimpleProduct;\n catalogId: number;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonButtonState {\n canProductBeAddedToProductComparison: boolean;\n currentProductsCount: number;\n comparisonItemId: string;\n}\n\n/**\n * Represents the component which renders product comparison table.\n */\nexport class ProductComparisonButton extends React.PureComponent {\n private static _productComparisonPreview?: React.ReactNode;\n\n private readonly _className: string;\n\n private readonly _instanceId: string;\n\n private readonly _shouldUsePreview: boolean;\n\n private static _renderProductComparisonPreview(props: IProductComparisonButtonFullProps): React.ReactNode {\n if (!ProductComparisonButton._productComparisonPreview && ArrayExtensions.hasElements(props.slots.productComparisonPreview)) {\n ProductComparisonButton._productComparisonPreview = props.slots.productComparisonPreview[0];\n }\n\n return ProductComparisonButton._productComparisonPreview;\n }\n\n private static _renderProductComparisonButton(\n className: string,\n buttonText: string | undefined,\n title: string,\n onClickHandler?: () => void\n ): React.ReactNode {\n const isDisabled = ObjectExtensions.isNullOrUndefined(onClickHandler);\n let content: React.ReactNode;\n if (buttonText) {\n content = (\n <>\n
\n
{buttonText}
\n \n );\n }\n return (\n \n );\n }\n\n public constructor(props: IProductComparisonButtonFullProps) {\n super(props);\n\n this._className = 'ms-product-comparison-button';\n this._instanceId = `${this._className}-${this.props.id}-${Random.Guid.generateGuid()}`;\n\n this.state = this._getNewState();\n\n this._shouldUsePreview = !ProductComparisonButton._productComparisonPreview;\n ProductComparisonButton._renderProductComparisonPreview(this.props);\n }\n\n public componentDidMount(): void {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).listModifiedEvent.subscribe(\n {\n instanceId: this._instanceId,\n\n /**\n * Updates the state in case the state for the particular product was changed.\n */\n handler: () => {\n this.setState(this._getNewState());\n }\n }\n );\n }\n\n public getSnapshotBeforeUpdate(previousProps: Readonly): void {\n if (previousProps.product.RecordId !== this.props.product.RecordId || previousProps.catalogId !== this.props.catalogId) {\n this.setState(this._getNewState());\n }\n }\n\n public componentWillUnmount(): void {\n ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).listModifiedEvent.unsubscribe(this._instanceId);\n }\n\n public render(): React.ReactNode | null {\n const isConsentGiven = this.props.context.request.cookies.isConsentGiven();\n if (!isConsentGiven) {\n return null;\n }\n\n const viewProps: IProductComparisonButtonViewProps = {\n ...this.props,\n moduleProps: {\n moduleProps: this.props,\n className: this._className\n }\n };\n\n if (this._shouldUsePreview) {\n viewProps.productComparisonPreview = ProductComparisonButton._productComparisonPreview;\n }\n\n const buttonClassName = this.props.config.shouldDisplayText ? `${this._className}__button` : `${this._className}__icon`;\n\n if (!this.state.canProductBeAddedToProductComparison) {\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.removeFromComparisonButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n classnames(`${buttonClassName}__removing`, buttonClassName),\n buttonText,\n this.props.resources.removeFromComparisonButtonText,\n this._removeFromProductComparison\n );\n return this.props.renderView(viewProps);\n }\n\n const productsLimit = this._getProductsLimit();\n if (!ObjectExtensions.isNullOrUndefined(productsLimit) && productsLimit <= this.state.currentProductsCount) {\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.addToComparisonLimitReachedButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n buttonClassName,\n buttonText,\n this.props.resources.addToComparisonLimitReachedButtonText\n );\n return this.props.renderView(viewProps);\n }\n\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.addToComparisonButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n buttonClassName,\n buttonText,\n this.props.resources.addToComparisonButtonText,\n this._addToProductComparison\n );\n return this.props.renderView(viewProps);\n }\n\n private _getProductsLimit(): number | undefined | null {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n if (viewport === 'xs' || viewport === 'sm') {\n return this.props.context.app.config.productComparisonMobileProductsLimit;\n }\n return this.props.context.app.config.productComparisonDesktopProductsLimit;\n }\n\n /**\n * Adds current product to a product comparison list.\n */\n private readonly _addToProductComparison: () => void = () => {\n const item = new ProductComparisonItem(this.props.product.RecordId, this.props.catalogId);\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).addItem(item);\n };\n\n /**\n * Removes current product from the product comparison list where it was added earlier.\n */\n private readonly _removeFromProductComparison: () => void = () => {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).removeItemById(\n this.state.comparisonItemId\n );\n };\n\n private _getProdutComparisonDataByCatalogId(): ProductComparisonItem[] {\n const items = ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).items;\n const catalogId = getCatalogId(this.props.context.request);\n const productByCatalogId = items?.filter(product => product.catalogId === catalogId) ?? [];\n return productByCatalogId;\n }\n\n /**\n * Retrieves the state of the component based on the comparison data.\n * @returns State object for the component.\n */\n private readonly _getNewState: () => IProductComparisonButtonState = () => {\n const comparisonItemId = ProductComparisonItem.getItemId(this.props.product.RecordId, this.props.catalogId);\n const products = this._getProdutComparisonDataByCatalogId();\n return {\n comparisonItemId,\n canProductBeAddedToProductComparison: !ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).hasItemById(comparisonItemId),\n currentProductsCount: products.length\n };\n };\n}\n\nexport default ProductComparisonButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductComparisonButtonViewProps } from './product-comparison-button';\n\n/**\n * Represents product comparison button view.\n * @param props - View props for product comparison button.\n * @returns Functional component of product comparison button.\n */\nexport const ProductComparisonButtonViewFunctionalComponent: React.FC = props => {\n const { productComparisonButton, productComparisonPreview } = props;\n\n return (\n \n {productComparisonButton}\n {productComparisonPreview}\n \n );\n};\n\nexport default ProductComparisonButtonViewFunctionalComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleProps, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ITabItemData } from './tab-item.data';\nimport { ITabItemProps } from './tab-item.props.autogenerated';\n\nexport interface ITabItemViewProps {\n TabContentContainer: IModuleProps;\n TabHeaderContainer: IModuleProps;\n tabSlots: INodeProps;\n TabItemContent: INodeProps;\n tabItemType?: TabItemType;\n tabHeader: React.ReactNode;\n}\n\nexport interface ITabItemExtentedProps extends ITabItemProps {\n tabItemType?: TabItemType;\n isSelected?: boolean;\n itemIndex?: number;\n tabId?: string;\n}\n\nexport enum TabItemType {\n TabHeader,\n TabContent\n}\n\n/**\n *\n * TabItem component.\n * @extends {React.Component}\n */\n@observer\nclass TabItem extends React.PureComponent {\n private readonly moduleContentClassName: string = 'ms-tab-item-content';\n\n private readonly moduleHeaderClassName: string = 'ms-tab-item-header';\n\n constructor(props: ITabItemProps) {\n super(props);\n this._renderTabHeader = this._renderTabHeader.bind(this);\n }\n\n public render(): JSX.Element {\n const { slots, renderView, config, data, isSelected, itemIndex } = this.props;\n const index = itemIndex || 0;\n const contentID = getContentID(index, this.props.tabId || '');\n const activeContentIDResult = data && data.activeTabState && data.activeTabState.result;\n const shown =\n activeContentIDResult &&\n activeContentIDResult.tabId === this.props.tabId &&\n activeContentIDResult.activeContentIndex !== undefined\n ? activeContentIDResult.activeContentIndex === index\n : isSelected || false;\n const viewProps = {\n ...this.props,\n TabContentContainer: {\n moduleProps: this.props,\n className: classnames(this.moduleContentClassName, config.className)\n },\n TabHeaderContainer: {\n moduleProps: this.props,\n className: classnames(this.moduleHeaderClassName, config.className)\n },\n TabItemContent: {\n className: 'ms-tab-item-content__content',\n tag: 'section' as NodeTag,\n 'aria-hidden': !shown,\n role: 'tabpanel',\n tabIndex: shown ? 0 : -1,\n id: contentID\n },\n tabHeader: this._renderTabHeader(),\n tabSlots: slots\n };\n return renderView(viewProps) as React.ReactElement;\n }\n\n private _renderTabHeader(): React.ReactNode {\n return <>{this.props.config.tabItemTitle};\n }\n}\n\nexport const getContentID = (index: number, id: string) => {\n return `tab-item-content-${id}-${index}`;\n};\n\nexport default TabItem;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ITabItemViewProps, TabItemType } from './tab-item';\n\nconst TabItemView: React.FC = props => {\n const { tabItemType, tabSlots, TabContentContainer, TabHeaderContainer, TabItemContent, tabHeader } = props;\n\n switch (tabItemType) {\n case TabItemType.TabContent:\n return (\n \n \n {tabSlots &&\n tabSlots.tabItemContent &&\n tabSlots.tabItemContent.length &&\n _renderTabItemContent(tabSlots.tabItemContent)}\n \n \n );\n case TabItemType.TabHeader:\n return {tabHeader};\n default:\n return null;\n }\n};\n\nconst _renderTabItemContent = (items: React.ReactNode[]): JSX.Element | null => {\n return (\n <>\n {items && items.length > 0\n ? items.map((item: React.ReactNode, index: number) => {\n return {item};\n })\n : null}\n \n );\n};\nexport default TabItemView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { IModuleProps, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { createTabStateInput, getContentID, TabItemType } from '../..';\nimport { ITabData } from './tab.data';\nimport { ITabProps } from './tab.props.autogenerated';\n\n/**\n *\n * Tab component.\n * @extends {React.PureComponent>}\n */\n\nexport interface ICallToActionProps {\n link: INodeProps[];\n}\n\nexport interface ITabViewProps extends ITabProps<{}> {\n heading?: React.ReactNode;\n TabContainer: IModuleProps;\n headerSection: INodeProps;\n tabHeaderSection: INodeProps;\n tabsSection: INodeProps;\n tabItemContainer: INodeProps;\n tabHeaders: React.ReactNode;\n tabContents: React.ReactNode;\n}\n\nexport interface ITabViewStates {\n currentTabIndex: number;\n}\n\n/**\n *\n * Tab component.\n * @extends {React.Component>}\n */\n@observer\nclass Tab extends React.Component, ITabViewStates> {\n public readonly tabIndexQuery: string = 'activeTab';\n\n private activeLink: HTMLLIElement | null;\n\n constructor(props: ITabProps) {\n super(props);\n const { defaultTabIndex } = this.props.config;\n const { slots } = this.props;\n const slotLength = (slots && slots.tabItems && slots.tabItems.length) || 0;\n let initialIndex = defaultTabIndex && defaultTabIndex <= slotLength && defaultTabIndex > 0 ? defaultTabIndex - 1 : 0;\n const queryString: string =\n (this.props.context &&\n this.props.context.request &&\n this.props.context.request.query &&\n this.props.context.request.query.activeTab) ||\n '';\n let queryTabIndex: number = 0;\n if (queryString.indexOf(':') > 0) {\n const arr = queryString.split(':');\n const moduleId = arr[0];\n if (moduleId === this.props.id) {\n queryTabIndex = Number.parseInt(arr[1], 10);\n }\n }\n initialIndex = queryTabIndex > 0 && queryTabIndex <= slotLength ? queryTabIndex - 1 : initialIndex;\n this.state = { currentTabIndex: initialIndex };\n\n this._getTabHeader = this._getTabHeader.bind(this);\n this._getTabContent = this._getTabContent.bind(this);\n this._onClick = this._onClick.bind(this);\n this._onKeyDown = this._onKeyDown.bind(this);\n this._setGetParameter = this._setGetParameter.bind(this);\n this.activeLink = null;\n }\n\n public shouldComponentUpdate(nextProps: ITabProps, nextState: ITabViewStates): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { slots } = this.props;\n const { heading, className } = this.props.config;\n\n const headingComponent = heading && (\n \n );\n const slotLength = (slots && slots.tabItems && slots.tabItems.length) || 0;\n\n // Const queryTabIndex = this.props.context && this.props.context.request && this.props.context.request.query && +this.props.context.request.query.activeTabIndex || 0;\n // let activeIndex = defaultTabIndex && defaultTabIndex <= slotLength && defaultTabIndex > 0 ? defaultTabIndex - 1 : 0;\n // activeIndex = queryTabIndex > 0 && queryTabIndex <= slotLength ? queryTabIndex - 1 : activeIndex;\n\n const tabViewProps = {\n ...this.props,\n TabContainer: {\n moduleProps: this.props,\n className: classnames('ms-tab', className)\n },\n headerSection: { className: 'ms-tab-header-section' },\n tabsSection: { className: 'ms-tab-tabs-section', tag: 'ul' as NodeTag, role: 'tablist' },\n heading: headingComponent,\n config: this.props && this.props.config,\n tabItemContainer: {\n tag: 'div' as NodeTag,\n className: 'ms-tab-content-section'\n },\n tabContents: slotLength > 0 && slots.tabItems.map((item: React.ReactNode, index: number) => this._getTabContent(item, index)),\n tabHeaders: slotLength > 0 && slots.tabItems.map((item: React.ReactNode, index: number) => this._getTabHeader(item, index))\n };\n return this.props.renderView(tabViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: MsDyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public componentDidUpdate(): void {\n const { data } = this.props;\n if (!this.props.context.request.params.isEditor) {\n const dataActionTabId = data && data.activeTabState && data.activeTabState.result && data.activeTabState.result.tabId;\n if (dataActionTabId) {\n if (this.props.id === dataActionTabId) {\n this.activeLink && this.activeLink.focus();\n }\n } else {\n const queryString: string =\n (this.props.context &&\n this.props.context.request &&\n this.props.context.request.query &&\n this.props.context.request.query.activeTab) ||\n '';\n if (queryString.indexOf(':') > 0) {\n const arr = queryString.split(':');\n const moduleId = arr[0];\n if (moduleId === this.props.id) {\n this.activeLink && this.activeLink.focus();\n }\n }\n }\n }\n }\n\n /**\n *Set the activate link value on tab click.\n * @param link -Ref link value.\n */\n private readonly _refHandler = (link: HTMLLIElement | null) => {\n this.activeLink = link;\n };\n\n private _getTabHeader(item: React.ReactNode, index: number): React.ReactNode {\n const { data } = this.props;\n const activeContentIndex =\n data && data.activeTabState && data.activeTabState.result && data.activeTabState.result.activeContentIndex;\n const dataActionTabId = data && data.activeTabState && data.activeTabState.result && data.activeTabState.result.tabId;\n const selected =\n activeContentIndex !== undefined && dataActionTabId === this.props.id\n ? activeContentIndex === index\n : this.state.currentTabIndex === index;\n const contentID = getContentID(index, this.props.id);\n\n return (\n \n \n {React.cloneElement(item as React.ReactElement, {\n tabItemType: TabItemType.TabHeader,\n isSelected: index === this.state.currentTabIndex,\n itemIndex: index,\n tabId: this.props.id\n })}\n \n \n );\n }\n\n private readonly _onClick = (index: number, id: string) => (e: React.MouseEvent) => {\n const activeTabState = { activeContentIndex: index, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index + 1)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n };\n\n private readonly _onKeyDown = (index: number, id: string) => (e: React.KeyboardEvent) => {\n if (e.keyCode === 13) {\n const activeTabState = { activeContentIndex: index, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index + 1)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n }\n\n if (e.keyCode === 39 || e.keyCode === 37) {\n const { slots } = this.props;\n const slotLength = (slots && slots.tabItems && slots.tabItems.length) || 0;\n\n if (e.keyCode === 39) {\n // If we're at the end, go to the start\n if (index + 1 === slotLength) {\n index = -1;\n }\n const activeTabState = { activeContentIndex: index + 1, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index + 1 });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index + 2)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n\n // Move left\n } else if (e.keyCode === 37) {\n // If we're at the start, move to the end\n if (index === 0) {\n index = slotLength;\n }\n const activeTabState = { activeContentIndex: index - 1, tabId: id };\n this.props.context.actionContext.update(createTabStateInput(activeTabState), activeTabState);\n this.setState({ currentTabIndex: index - 1 });\n\n // Update query paramter\n const requestContext = this.props.context.request;\n const newUrl = this._setGetParameter(requestContext, this.tabIndexQuery, `${this.props.id}:${String(index)}`);\n requestContext && window.history.pushState({ path: newUrl }, '', newUrl);\n }\n }\n };\n\n private _getTabContent(item: React.ReactNode, index: number): React.ReactNode {\n return (\n \n {React.cloneElement(item as React.ReactElement, {\n tabItemType: TabItemType.TabContent,\n isSelected: index === this.state.currentTabIndex,\n itemIndex: index,\n tabId: this.props.id\n })}\n \n );\n }\n\n private _setGetParameter(requestContext: MsDyn365.IRequestContext, paramName: string, paramValue: string): string {\n let url;\n\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n url = new URL(window.location.href);\n } else {\n url = new URL(requestContext.url.requestUrl.href);\n }\n\n const params = new window.URLSearchParams(url.search);\n params.set(paramName, paramValue);\n url.search = decodeURIComponent(params.toString());\n return url.toString();\n }\n}\n\nexport default Tab;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ITabViewProps } from './tab';\n\nconst tabView: React.FC = props => {\n const { heading, TabContainer, tabHeaders, tabContents } = props;\n if (!props.heading && !props.tabHeaders && !props.tabContents) {\n props.context.telemetry.error('Tab content is empty, module wont render');\n return null;\n }\n return (\n \n {heading}\n {tabHeaders}\n {tabContents}\n \n );\n};\n\nexport default tabView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Coupon } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * IPromoCodeProps: Interface for promo code component.\n */\nexport interface IPromoCodeProps extends IComponentProps<{}> {\n cart: ICartState | undefined;\n promoCodeHeadingText: string;\n appliedPromoCodeHeadingText: string;\n removePromoAriaLabelFormat: string;\n promoPlaceholderText: string;\n promoCodeApplyButtonText: string;\n collapseTimeOut: number;\n removePromoText: string;\n invalidPromoCodeErrorText: string;\n failedToAddPromoCodeErrorText: string;\n duplicatePromoCodeErrorText: string;\n failedToRemovePromoCodeErrorText: string;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n promoCodeApplyCallback?(): void;\n}\n\n/**\n * IPromoCodeProps: Interface for promo code component.\n */\nexport interface IPromoCodeComponent extends IComponent {}\n\n/**\n * IPromoCodeProps: Interface for promo code state.\n */\ninterface IPromoCodeState {\n promoCodeInputValue: string;\n error: string;\n canApply: boolean;\n}\n\n/**\n *\n * The PromoCode component renders the promocode section.\n * @extends {React.PureComponent}\n */\nclass PromoCode extends React.PureComponent {\n private readonly payLoad: IPayLoad;\n\n public constructor(props: IPromoCodeProps) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, TelemetryConstant.ApplyPromoCode);\n this.state = {\n promoCodeInputValue: '',\n error: '',\n canApply: false\n };\n }\n\n public render(): JSX.Element {\n return (\n
\n
{this.props.promoCodeHeadingText}
\n {this._renderForm(this.props.promoPlaceholderText, this.props.promoCodeApplyButtonText, this.props.cart)}\n

\n {this.state.error}\n

\n {this._renderAppliedPromoCode(this.props)}\n
\n );\n }\n\n /**\n * On input change method.\n * @param event - Change event.\n */\n private readonly _onInputChangeHandler = (event: React.ChangeEvent) => {\n const error = event.target.value === '' ? '' : this.state.error;\n this.setState({\n promoCodeInputValue: event.target.value.trim(),\n error,\n canApply: !!event.target.value\n });\n };\n\n /**\n * Apply promo code method.\n * @param cartState - Cart state interface.\n */\n private readonly _applyPromotion = (cartState: ICartState | undefined) => {\n if (!cartState) {\n return;\n }\n const appliedPromo = this.state.promoCodeInputValue;\n\n cartState\n .addPromoCode({ promoCode: appliedPromo })\n .then(result => {\n if (result.status === 'SUCCESS') {\n // Show success text\n this.setState({ promoCodeInputValue: '', error: '', canApply: false });\n } else if (result.substatus === 'ALREADYADDED') {\n this.setState({ error: this.props.duplicatePromoCodeErrorText });\n } else {\n this.setState({ error: this.props.invalidPromoCodeErrorText });\n }\n })\n .catch(() => {\n this.setState({ error: this.props.failedToAddPromoCodeErrorText });\n });\n };\n\n /**\n * On submit action.\n * @param cartState - Cart state.\n * @returns Apply promotion.\n */\n private readonly _onSubmitHandler = (cartState: ICartState | undefined) => (event: React.FormEvent) => {\n event.preventDefault();\n this._applyPromotion(cartState);\n };\n\n /**\n * On apply promotion.\n * @param cartState - Cart state.\n * @returns Apply promotion.\n */\n private readonly applyPromotionHandler = (cartState: ICartState | undefined) => () => {\n this._applyPromotion(cartState);\n };\n\n /**\n * Renders promo code form.\n * @param promoPlaceholderText - Promo code input box placeholder string.\n * @param promoCodeApplyButtonText - Promo code button text string.\n * @param cartState - Cart state interface.\n * @returns Promo code form.\n */\n private readonly _renderForm = (promoPlaceholderText: string, promoCodeApplyButtonText: string, cartState: ICartState | undefined) => {\n const attributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
\n
\n \n \n
\n
\n );\n };\n\n /**\n * Remove promo code method.\n * @param cartState - Cart state interface.\n * @param event - Mouse event.\n */\n private readonly _removePromotion = (cartState: ICartState | undefined, event: React.MouseEvent) => {\n if (!cartState) {\n return;\n }\n const code = event.currentTarget.getAttribute('data-value') ?? '';\n cartState\n .removePromoCodes({\n promoCodes: [code]\n })\n .then(result => {\n if (result.status === 'SUCCESS') {\n this.setState({ error: '' });\n }\n })\n .catch(() => {\n this.setState({ error: this.props.failedToRemovePromoCodeErrorText });\n });\n };\n\n /**\n * Renders applied promo code form.\n * @param props - Promo code component props.\n * @returns Applied promo code.\n */\n private readonly _renderAppliedPromoCode = (props: IPromoCodeProps) => {\n if (!props.cart || !props.cart.cart.Coupons || !ArrayExtensions.hasElements(props.cart.cart.Coupons)) {\n return;\n }\n\n /**\n * On remove promotion action.\n * @param event - Mouse event.\n */\n const removePromotionHandler = (event: React.MouseEvent) => {\n this._removePromotion(props.cart, event);\n };\n\n return (\n <>\n {props.cart.cart.Coupons.map((coupon: Coupon) => {\n const ariaLabel = props.removePromoAriaLabelFormat\n ? format(props.removePromoAriaLabelFormat, props.removePromoText, coupon.Code)\n : '';\n\n return (\n
\n
\n {'Code '}\n {coupon.Code}\n {'Applied '}\n
\n \n
\n );\n })}\n \n );\n };\n}\n\nexport default PromoCode;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IContentBlockAdditionalContentItemViewProps,\n IContentBlockAdditionalContentViewProps,\n IContentBlockViewProps\n} from '@msdyn365-commerce-modules/content-block';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IContentBlockAdditionalContentViewProps) => {\n return (\n \n {additionalContent.additionalContentItems?.map((item: IContentBlockAdditionalContentItemViewProps) => {\n return (\n <>\n {item.heading}\n \n {item.text}\n {item.links}\n \n \n );\n })}\n \n );\n};\n\n/**\n * Render View.\n * @param props - The view props.\n * @returns -The JSX Element.\n */\nconst contentBlockView: React.FC = props => {\n const {\n contentBlockContainer,\n imageContainer,\n detailsContainer,\n title,\n text,\n links,\n image,\n contentBlockAnchorTag,\n imageLink,\n imageAriaLabel,\n additionalContent\n } = props;\n\n // @ts-expect-error HTML element need to be clear on run time.\n const hasImage: boolean = image.props.src;\n const imageClass: string = hasImage ? `${detailsContainer.className} withImage` : `${detailsContainer.className} withoutImage`;\n\n if (imageLink) {\n return (\n \n \n {image}\n \n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n }\n return (\n \n {image}\n \n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n \n \n );\n};\n\nexport default contentBlockView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IFooterViewProps } from '@msdyn365-commerce-modules/footer';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n *\n * FooterItemView component.\n * @extends {React.PureComponent}\n */\nexport class FooterItemView extends React.PureComponent {\n public render(): JSX.Element | null {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\n const { FooterItem } = this.props;\n return {this._renderElement(this.props)};\n }\n\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Cannot change the prop names as props are from business logic.\n const { heading, HeadingContainer, Link, linkText, image, text, EditableLink } = props;\n if (heading) {\n return (\n \n {' '}\n \n );\n } else if (Link && image) {\n return (\n \n {linkText}\n {image}\n \n );\n } else if (Link) {\n return EditableLink;\n }\n return (\n <>\n {text}\n {image}\n \n );\n }\n}\n\nexport default FooterItemView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\n\n/**\n * INavigationMenuViewRootProps.\n */\nexport interface INavigationMenuViewRootProps {\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\n}\n\n/**\n * Represent navigation menu state interface.\n */\nexport interface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: Msdyn365.IImageData[] | null;\n mobileViewLabelText?: string;\n drawerKeyValue: Msdyn365.IDictionary;\n isOnlyMobile: boolean;\n isNavOpen: boolean;\n}\n\n/**\n * NavMenuConstants enum.\n */\nexport enum NavMenuConstants {\n zero = 0,\n one = 1,\n two = 2,\n three = 3,\n four = 4,\n escapeKey = 27,\n rootMenu = 1\n}\n\n/**\n * GridSizes.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Get category image.\n * @param props - Navigation menu props.\n * @param categoryImage - Category Image.\n * @param alttext - AltText String.\n * @returns Returns Node.\n */\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootDisabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootDisabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n\n this.state = {\n activeMenu: 1,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = 1;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: 1,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = 1;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props.navProps;\n\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (ArrayExtensions.hasElements(menuItemData)) {\n menuItemData[0].id = 1;\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of menuItemData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\n if (!menu) {\n return null;\n }\n\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\n const item: IMenuItemData = menu[Number(index)];\n\n if (item.id === this.state.activeMenu) {\n if (!NavigationMenuRootDisabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\n }\n return item;\n }\n const found = this._getFromSubMenu(item.id, item.subMenu);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n
\n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootDisabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootDisabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n (this.menuNode.current?.children[0] as HTMLElement).focus();\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootDisabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse,\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootEnabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootEnabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private menuItemData: IMenuItemData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n return null;\n });\n }\n }\n this.state = {\n activeMenu: NavMenuConstants.rootMenu,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n\n this.telemetryContent = getTelemetryObject(\n this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs';\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n this._addShopAllLink();\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = NavMenuConstants.one;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {this.state.isOnlyMobile ? (\n this._renderMobileMenu()\n ) : (\n <>\n \n {this._renderCollapseMenu()}\n \n )}\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: NavMenuConstants.rootMenu,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = NavMenuConstants.one;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined && (\n \n \n {this.state.mobileViewLabelText}\n \n )}\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { Navigation } = this.props.navProps;\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return this._renderLinkMenuItem(item);\n } else if (!item.linkURL) {\n return this._renderSpanMenuItem(item);\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n let menuItemData: IMenuItemData[] = [];\n if (this.state.isOnlyMobile) {\n menuItemData = this.menuItemData;\n } else {\n menuItemData = this.props.navProps.menuItemData;\n }\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n let cmsMenuData: IMenuItemData[] | undefined = [];\n let retailMenuItemData: IMenuItemData[] | undefined = [];\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\n\n for (const item of retailMenuData) {\n retailMenuItemData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n item.subMenu = retailMenuItemData;\n }\n\n for (const item of menuItemData) {\n cmsMenuData = item.subMenu!.filter(subMenuItem => subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail);\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n let menuItem: IMenuItemData | null = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({\n parentMenu: undefined\n });\n } else {\n this.setState({\n parentMenu: undefined,\n mobileViewLabelText: menuItemDatum.linkText\n });\n }\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum);\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n if (menuItem) {\n menuItemList.push(\n \n {` `}\n {this._createMenuItemList(menuItem)} {` `}\n \n );\n }\n } else {\n for (const [index, item] of retailMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n\n for (const [index, item] of cmsMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item?.subMenu;\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\n const subMenu: IMenuItemData = subMenus[Number(index)];\n let parentMenuId = item?.id;\n\n if (subMenu.id === this.state.activeMenu) {\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\n parentMenuId = undefined;\n }\n\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\n }\n return subMenu;\n }\n const found = this._getFromSubMenu(subMenu);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false);\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return this._renderLinkMenuItem(menuItemData, menuItemData.id);\n } else if (!menuItemData.linkURL) {\n return this._renderSpanMenuItem(menuItemData);\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail);\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = option.subMenu && ArrayExtensions.hasElements(option.subMenu);\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu =\n hasOptions && isEnableMultiSupportMenu && this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one;\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n {menuItem}\n {subMenu}\n \n );\n });\n return this._renderMenu(levelClassName, menuOptions, isSubMenu);\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option);\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n {linkText}\n \n );\n }\n return null;\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n {option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile &&\n showCategoryImage &&\n this.state.categoryImage !== null &&\n this.state.categoryImage !== undefined &&\n !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass =\n this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay &&\n this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two &&\n 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {isCategoryImageDisplay &&\n ArrayExtensions.hasElements(categoryImages) &&\n categoryImages.map(item => (\n \n {getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n {isPromotionalContentDisplay &&\n this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n \n ))}\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({\n src: imageSource,\n altText: item.text,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl }\n });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootEnabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootEnabled.isBackTrack = true;\n this.setState(previousState => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Add shop all link for Mobile submenu.\n */\n private readonly _addShopAllLink = (): void => {\n const { menuItemData } = this.props.navProps;\n this.menuItemData = menuItemData;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n this.menuItemData[0].subMenu?.map(item => {\n const shopAllObject = {};\n Object.assign(shopAllObject, { imageSource: item.imageSource });\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\n Object.assign(shopAllObject, { linkURL: item.linkURL });\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\n item.subMenu.unshift(shopAllObject);\n }\n return item;\n });\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootEnabled;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\n\n/**\n * Render the Navigation menu.\n * @param props - The navigation menu view props.\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\n */\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\n if (props.config.enabletopMenu) {\n return ;\n }\n\n return ;\n};\n\nexport default navigationMenuView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageSettings, Image, RichTextComponent } from '@msdyn365-commerce/core';\nimport { IWriteReviewData, IWriteReviewViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IWriteReviewProps } from '../definition-extensions/write-review.ext.props.autogenerated';\n\n/**\n * Render Product Image.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductImage = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const primaryImageSource = props.data.product.result?.PrimaryImageUrl;\n const imageUrl = generateImageUrl(primaryImageSource, props.context.request.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=111&h=111&m=6', w: 111, h: 111 },\n sm: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n md: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n lg: { q: 'w=130&h=130&m=6', w: 130, h: 130 },\n xl: { q: 'w=130&h=130&m=6', w: 130, h: 130 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\n \n );\n};\n\n/**\n * Render Product Description.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst renderProductDescription = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const product = props.data.product.result;\n return (\n \n
{renderProductImage(props)}
\n
\n
{product?.Name}
\n
{product?.ItemId}
\n
\n
\n );\n};\n\n/**\n * Create Write Review Modal.\n * @param props - WriteReview ViewProps.\n * @returns JSX Element.\n */\nconst createReviewModal = (props: IWriteReviewViewProps & IWriteReviewProps): JSX.Element => {\n const { resources, moduleProps, reviewModal } = props;\n\n return (\n \n {reviewModal.modalHeader}\n \n \n \n {renderProductDescription(props)}\n \n
{resources.selectRatingLabel}
\n {reviewModal.rating}\n
\n
\n \n {resources.reviewTitleLabel}\n {reviewModal.titleInput}\n \n \n {resources.reviewTextLabel}\n {reviewModal.textInput}\n \n {reviewModal.privacyPolicyUrl}\n {reviewModal.error}\n
\n
\n \n {reviewModal.submitButton}\n {reviewModal.cancelButton}\n \n
\n );\n};\n\n/**\n * WriteReview view.\n * @param props - WriteReview ViewProps.\n * @returns WriteReview view module.\n */\nconst WriteReviewView: React.FC> = props => {\n const { config, heading, signInMessage, signInButton, modalToggle, moduleProps } = props;\n const { paragraph } = config;\n const isAuthenticated = props.context.request.user.isAuthenticated;\n const text = paragraph && ;\n\n return (\n \n {heading}\n {!isAuthenticated ? (\n <>\n {signInMessage}\n {signInButton}\n \n ) : (\n <>\n {text}\n {modalToggle}\n {createReviewModal(props)}\n \n )}\n \n );\n};\n\nexport default WriteReviewView;\n"],"names":["_ref","className","text","React","AccountAttributeDataTypeValue","AccountProfileAttributes","constructor","props","super","isUpdatingAttributes","gotException","hasError","attributeClassName","maxIntegerLimit","minIntegerLimit","maxDecimalLimit","minDecimalLimit","maxStringLength","maxVATNumberLength","maxPhoneLength","editAsyncCustomerFeatureName","isEditAsyncCustomerFeatureEnabled","_renderAttributes","_data$featureState","_this$props$accountPr","config","data","resources","this","accountProfileProps","attributeDefinitions","result","additionalInformationSectionHeading","elements","showAttributes","split","map","att","attributeDefinition","find","attribute","IsHidden","Name","toLocaleLowerCase","RecordId","_renderAttribute","edit","state","editAttributes","payLoad","contentAction","etext","attributesEditButtonText","getTelemetryAttributes","telemetryContent","attributesSaveButtonText","saveAttributes","attributesCancelButtonText","cancelAttributes","customerInformation","featureState","feature","IsEnabled","disableBtn","context","app","canRenderAsyncCustomerDataAsUnmodifiable","IsAsyncCustomer","ref","attributesContainerRef","classnames","Text","tag","showPhone","_renderPhone","showVatNumber","_renderVatNumber","attributesSaveExceptionMessage","Button","Object","assign","onClick","_enableAttributes","innerRef","editRef","title","disabled","_saveAttributes","_disableAttributes","phoneSectionHeading","heading","replace","type","onChange","_onPhoneChange","value","phone","_renderError","vatNumberSectionHeading","_onVatNumberChange","vatNumber","customAttribute","ExtDataType","Value","Integer","Decimal","_renderIntegerDecimalInput","_renderTextInputOrSelect","TrueFalse","_renderBoolean","attributeProps","_getAttributeProps","displayName","_onAttributeChange","attributes","IsMandatory","isEnumeration","IsEnumeration","birthdayHeadingText","EnumerationDetails","hasNoValue","id","_onAttributeSelect","key","selected","option","EnumerationValue","source","_onUSBdayChange","undefined","maxLength","render","toggleState","arialabel","format","attributeToggleButtonAriaLabel","ariaPressed","toggleValue","TextComponent","toggleDisableText","_onAttributeCheck","toggleEnableText","attributeName","error","attributeError","StringExtensions","isNullOrWhitespace","role","attributePayloadData","name","isMandatory","event","target","setState","MsDyn365","isBrowser","setTimeout","current","getElementsByClassName","length","_setFocus","initialAttributes","initialPhone","initialVatNumber","_objectSpread","currentTarget","selectedOptions","index","selectedIndex","_getAttributes","showAttributesArray","customer","custmerAttributes","Attributes","forEach","showAttribute","defaultValue","AttributeValue","DataTypeValue","IntegerValue","String","DecimalValue","StringValue","BooleanValue","keys","_addOrUpdateAttribute","hasValue","entries","payloadData","dataTypeValue","decimalValue","Number","isNaN","typeError","attributeInputTypeErrorText","lowerBoundValue","upperBoundValue","rangeError","attributeInputRangeErrorText","attributeInputValueExceedsMaximumErrorText","attributeInputValueExceedsMinimumErrorText","integerValue","includes","trimValue","trim","attributeInputStringMaxLengthErrorText","textValue","booleanValue","attributeInputMandatoryErrorText","findIndex","splice","Attribute","recordId","Units","ExtensionProperties","NameTranslations","push","KeyName","Phone","VATNumber","VatNumber","async","_customer$Attributes","input","updateCustomerAttributesInput","AccountNumber","request","apiSettings","updateCustomerAttributes","actionContext","initialCustomerAttributes","telemetry","exception","debug","element","focus","_buildPayloadData","defaultIntegerValue","DefaultValue","LowerBound","UpperBound","defaultDecimalValue","defaultStringValue","defaultBooleanValue","_getCustomerPhoneAndVatNumber","telemetryPageName","friendlyName","getTelemetryObject","getPayloadObject","componentDidMount","reaction","shouldComponentUpdate","nextProps","nextState","__decorate","observable","observer","description","_mapEditableLinks","linkdata","editableLinks","link","linkText","editableLink","ariaLabel","isDisabled","linkUrl","destinationUrl","openInNewTab","additionalProperties","links","requestContext","onTextChange","Msdyn365","editProps","AccountProfile","isUpdatingPreference","handleHeadingChange","handleEmailHeadingChange","emailAddressSectionHeading","handleNameHeadingChange","nameSectionHeading","handleLinkTextChange","linkIndex","editButtonText","onClickEventHandler","_updateAccountPersonalization","_renderPreference","sectionHeading","enableAriaLabel","isOptOut","onClickHandler","accountPreference","onEdit","buttonWrapper","buttonYesText","buttonNoText","button","toString","DescriptionComponent","onUpdateAccountPreference","isOptOutPersonalization","preferenceType","OptOutWebActivityTracking","updateCustomerPersonalizationInput","OptOutPersonalization","updateCustomerPersonalization","_renderCustomerAttributes","_this$props$context$a","editButtonAriaLabel","invalidAsyncCustomerState","shouldRenderAttributes","editLink","get","viewProps","moduleProps","infoMessageBar","accountProcessingPendingInfoMessage","accountProfileWrapper","emailSection","_renderEmailSection","Email","nameSection","_renderNameSection","getDescription","preferenceSection","_renderPreferenceSection","customerAttributesWrapper","customerAttributesSection","renderView","FirstName","LastName","AccountProfileItem","LinksComponent","ArrayExtensions","hasElements","personalizationDescription","personalizationEnableButtonAriaLabel","webTrackingDescription","webTrackingEnableButtonAriaLabel","preferencesSectionHeading","personalizationSectionHeading","webTrackingSectionHeading","enableDataAnalytics","features","extraPreferences","accountPreferences","personalization","computed","AccountPreferencesSection","Node","AccountPreferenceSection","preferenceSecton","_ref2","AccountProfileSection","_ref3","document","innerHTML","locale","toLowerCase","htmlGenericMarketing","privacyPolicyURL","textGenericMarketing","htmlProfiling","htmlThirdParty","bd_input","canonicalDomain","addEventListener","setAttribute","Module","GenericPopup","popupVisible","recallVisible","_onDismissRecall","createCookieRecall","_onDismissPopup","recallEnabled","recallShowAfterPopup","_displayRecallNow","_displayPopupNow","cookieCheckbox","createCookie","classNamePopup","classNameRecall","onDismissRecall","onDismissPopup","handleTextRecall","cookie","Cookies","hidePopupIfCookieIsSet","modalId","delayRecall","delayPopup","expireDays","date","Date","setDate","getDate","options","expires","set","recallDismissableForDays","slots","recallDismissable","modalHeader","recallText","closeButtonAriaLabel","closeButtonLabel","_window$dataLayer","_window$dataLayer$pus","label","modalName","window","dataLayer","call","eventCategory","eventAction","eventLabel","handleClose","popupElement","querySelector","form","getElementsByTagName","_window$dataLayer2","_window$dataLayer2$pu","Modal","isOpen","onClosed","ModalHeader","toggle","ModalBody","renderModuleAttributes","content","defaultImageSettings","viewports","xs","w","h","sm","md","lg","lazyload","mode","backgroundColor","contentBlockContainer","imageContainer","detailsContainer","image","imageProps","imageSettings","htmlImage","src","alt","altText","msdynImage","gridSettings","isValidImage","Image","isFeatureEnabled","cookieContext","getEnabledFeatures","featuresCookie","getFeaturesCookie","featureName","getFeatureToggleService","cookies","contentBlockImage","entireLink","href","IFrameView","Heading","IframeContainer","IFrame","alert","cookieConsentAccepted","SignUpItem","wrapper","errorMessage","SignUpEmailVerification","email","buttons","successMessage","message","SignUpLoading","_ref4","modal","modalBody","icon","signUp","viewState","loading","defaultAADConainer","aadConainer","signUpLocalAccount","isShowLoading","LocalAccount","_props$context","_props$context2","localAccount","items","emailVerification","disclaimer","uiLocales","query","ui_locales","regionCRM","RegionCRM","birthDate","setBirthDate","formatDateState","setFormatDateState","pattern","patternUS","checkDate","today","match","signUpButton","getElementById","console","log","onclick","e","preventDefault","stopPropagation","item","isRequired","verificationControlWrapper","htmlFor","birthdayLabelText","birthdayErrorText","onKeyUp","onPaste","BirthdayText","renderThirdPartyPrivacy","defaultChecked","required","textThirdParty","NavigationMenuView","currentLevel","_positionInSetOffset","escapeKey","_updateCategoryImage","categoryImageSrc","promotionalImage","promotionalContent","imageSrc","promotionalItemImageSettings","categoryImage","categoryImageAltText","_handleDropdownToggle","parentId","isMobileView","activeMenu","parentMenu","showCategoryImage","imageSource","_resetFocus","menuNode","_handleClickOutside","contains","_handleFocusOutside","relatedTarget","_closeSubmenu","_escFunction","keyCode","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","getAttribute","_getCategoryImage","categoryImageUrl","generateImageUrl","q","_categoryImage$imageS","ImageData","categoryImageSettings","loadFailureBehavior","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","bind","body","componentWillUnmount","removeEventListener","_renderMobileMenu","_renderDesktopMenu","menuItemData","Navigation","menuItem","posinset","_renderDrawerMenu","MenuList","tabIndex","_renderDisplay","setSize","subMenu","_renderDrawer","_renderLinkMenuItem","toggleButtonText","keyValue","isDrawerOpen","colProps","Drawer","toggleButtonProps","openGlyph","onToggle","collapseProps","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","currentPos","_menuItem$subMenu2","_menuItem$subMenu","_renderDrawerLink","linkURL","_renderSpanMenuItem","ListItem","menuItemList","menuItemDatum","_getFromSubMenu","_createMenuItemList","subMenus","i","found","_renderSubMenu","_renderButtonMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","levelClassName","menuOptions","idx","hasOptions","haveSubmenu","Math","round","_renderMenu","onFocus","hoverEffect","arguments","isParent","Link","imagesource","shouldOpenNewTab","onMouseOver","onTelemetryClick","_renderPromotionalLink","Span","level","currentItem","submenu","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","_item$additionalPrope","createSearchResultModal","modalProps","refineMenu","sortByDropDown","isRecoSearchPage","createModalBody","modalFooter","renderSort","renderRefiner","refiners","RefineMenuContainer","RefinerSectionContainer","SortingContainer","renderCategoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryHierarchySeparator","category","renderTitle","TitleContainer","titlePrefix","titleText","titleCount","_props$context$action","SearchResultContainer","products","pagination","ProductsContainer","ProductSectionContainer","choiceSummary","isMobile","modalToggle","searchResultModal","TitleViewProps","categoryHierarchy","sortByOptions","CategoryNavContainer","RefineAndProductSectionContainer","FeatureSearchContainer","similarLookProduct","recommendation","MenuTypeIndexId","MenuSource","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","viewport","device","Type","navigationMenuSource","nameTranslations","nameTranslation","Language","resizeThrottledEventHandler","addThrottledEvent","_this$props$config$di","_this$props$config$di2","_mapData","isEmptyOrNullObject","xl","displayCategoryImage","displayPromotionalImage","ImageContainer","MobileDescriptionContainer","MobileBackButton","backButtonAriaLabel","MobileDescriptionLabel","mergedData","categories","_constructMenuItemData","cmsNavItems","_constructTopMenuItemData","_this$props$config$en","_this$props$config$ro","enabletopMenu","mergedRootMenuData","topMenu","rootMenuNavigation","retailItem","cmsItem","addedAllMenu","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","filter","promoItem","_promoItem$categoryNa","_retailItem$Name","categoryName","_NavigationMenu$getFr","_NavigationMenu$getFr2","Images","Uri","RSItemIdInit","getFriendlyName","Url","_getNestedChildren","menuSource","Retail","CMSItemIdInit","imageDestinationURL","imageLink","_getCMSNestedChildren","Cms","imageSourceUrl","nestedChildren","Children","allCategoryMenuText","getCategoryUrl","_getViewport","innerWidth","isBackTrack","mobileViewLabelText","_handleGoBack","_shouldAddFocusMenuRef","optionLinkText","menuItemRef","componentDidUpdate","_this$menuItemRef$cur","children","ProductComparisonButton","_addToProductComparison","_this$props$data$acco","ProductComparisonItem","product","catalogId","ProductComparisonState","instance","accountInformation","addItem","_removeFromProductComparison","_this$props$data$acco2","removeItemById","comparisonItemId","_getNewState","_this$props$data$acco3","getItemId","_getProdutComparisonDataByCatalogId","canProductBeAddedToProductComparison","hasItemById","currentProductsCount","_className","_instanceId","Random","Guid","generateGuid","_shouldUsePreview","_productComparisonPreview","_renderProductComparisonPreview","productComparisonPreview","ObjectExtensions","isNullOrUndefined","_this$props$data$acco4","listModifiedEvent","subscribe","instanceId","handler","getSnapshotBeforeUpdate","previousProps","_this$props$data$acco5","unsubscribe","isConsentGiven","buttonClassName","shouldDisplayText","removeFromComparisonButtonText","productComparisonButton","_renderProductComparisonButton","productsLimit","_getProductsLimit","addToComparisonLimitReachedButtonText","addToComparisonButtonText","variant","VariantType","Browser","productComparisonMobileProductsLimit","productComparisonDesktopProductsLimit","_this$props$data$acco6","_items$filter","getCatalogId","ProductComparisonButtonViewFunctionalComponent","TabItemType","TabItem","moduleContentClassName","moduleHeaderClassName","_renderTabHeader","isSelected","itemIndex","contentID","getContentID","tabId","activeContentIDResult","activeTabState","shown","activeContentIndex","TabContentContainer","TabHeaderContainer","TabItemContent","tabHeader","tabSlots","tabItemTitle","_renderTabItemContent","tabItemType","TabContent","tabItemContent","TabHeader","Tab","tabIndexQuery","_refHandler","activeLink","_onClick","update","createTabStateInput","currentTabIndex","newUrl","_setGetParameter","history","pushState","path","_onKeyDown","slotLength","tabItems","defaultTabIndex","initialIndex","queryString","activeTab","queryTabIndex","indexOf","arr","parseInt","_getTabHeader","_getTabContent","headingComponent","tabViewProps","TabContainer","headerSection","tabsSection","tabItemContainer","tabContents","tabHeaders","params","isEditor","dataActionTabId","onKeyDown","paramName","paramValue","url","URL","location","requestUrl","URLSearchParams","search","decodeURIComponent","PromoCode","_onInputChangeHandler","promoCodeInputValue","canApply","_applyPromotion","cartState","appliedPromo","addPromoCode","promoCode","then","status","substatus","duplicatePromoCodeErrorText","invalidPromoCodeErrorText","catch","failedToAddPromoCodeErrorText","_onSubmitHandler","applyPromotionHandler","_renderForm","promoPlaceholderText","promoCodeApplyButtonText","onSubmit","placeholder","_removePromotion","_event$currentTarget$","code","removePromoCodes","promoCodes","failedToRemovePromoCodeErrorText","_renderAppliedPromoCode","cart","Coupons","removePromotionHandler","coupon","removePromoAriaLabelFormat","removePromoText","Code","TelemetryConstant","ApplyPromoCode","promoCodeHeadingText","renderAdditionalContent","additionalContent","_additionalContent$ad","additionalContentNode","additionalContentItems","additionalContentItemContainer","additionalContentItemLinks","contentBlockAnchorTag","imageAriaLabel","imageClass","FooterItemView","FooterItem","_renderElement","HeadingContainer","EditableLink","NavMenuConstants","getCategoryImage","alttext","navProps","_props$navProps$confi","imageData","NavigationMenuRootDisabled","supportedLevel","four","zero","_toggleNavBar","previousState","isNavOpen","_bindDesktopCategoryClick","menuId","categoryImageSource","isOnlyMobile","_closeNavMenu","_this$menuNode$curren","_this$menuNode$curren2","_customUpdateViewport","customResizeThrottledEventHandler","hamburgerAriaLabel","_renderCollapseMenu","Collapse","parentMenuId","menu","one","subMenuArray","isSubMenu","_this$props$navProps$","_this$props$navProps$2","rootMenu","subMenuItem","isEnableMultiSupportMenu","three","getMenuItem","isHavingSubmenu","two","_renderSubMenuDrawer","_renderLinkMenuItemLevelOne","_this$props$navProps$3","timeout","isHoverEffect","isSubmenu","_this$state$categoryI","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","_item$src","NavigationMenuRootEnabled","_addShopAllLink","_this$menuItemData$0$","shopAllObject","unshift","cmsMenuData","retailMenuItemData","retailMenuData","JSON","parse","stringify","renderProductDescription","_props$data$product$r","primaryImageSource","PrimaryImageUrl","imageUrl","fallBackSrc","cropFocalRegion","renderProductImage","ItemId","signInMessage","signInButton","paragraph","isAuthenticated","user","RichTextComponent","reviewModal","inputRow","selectRatingLabel","rating","reviewTitleLabel","titleInput","reviewTextLabel","textInput","privacyPolicyUrl","submitButton","cancelButton","createReviewModal"],"sourceRoot":""}