{"version":3,"file":"static/js/20.99cfa949fe3ef0e3b018.chunk.js","mappings":"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","sources":["webpack://venchi-ecommerce-msdyn365/./src/modules/product-specification/product-specification.view.tsx?7490","webpack://venchi-ecommerce-msdyn365/./src/modules/content-block/components/additional-content.tsx?d5f9","webpack://venchi-ecommerce-msdyn365/./src/modules/content-block/components/links.tsx?abbf","webpack://venchi-ecommerce-msdyn365/./src/modules/content-block/content-block.tsx?3084","webpack://venchi-ecommerce-msdyn365/./src/modules/order-lookup/utilities/order-lookup-utility.tsx?c60b","webpack://venchi-ecommerce-msdyn365/./src/modules/order-lookup/components/order-lookup-additional-fields.tsx?9951","webpack://venchi-ecommerce-msdyn365/./src/modules/order-lookup/components/order-lookup-fields.tsx?297b","webpack://venchi-ecommerce-msdyn365/./src/modules/order-lookup/order-lookup.tsx?72d3","webpack://venchi-ecommerce-msdyn365/./src/modules/product-specification/components/product-specification-table-stucture.tsx?c1c4","webpack://venchi-ecommerce-msdyn365/./src/modules/product-specification/product-specification.tsx?6583","webpack://venchi-ecommerce-msdyn365/./src/modules/tile-list/tile-list.tsx?78cb","webpack://venchi-ecommerce-msdyn365/./src/modules/fm-account-profile/components/fm-account-profile-text.tsx?4fc1","webpack://venchi-ecommerce-msdyn365/./src/modules/fm-account-profile/components/fm-account-profile-attributes.tsx?af03","webpack://venchi-ecommerce-msdyn365/./src/modules/fm-account-profile/components/fm-account-profile-description.tsx?e47a","webpack://venchi-ecommerce-msdyn365/./src/modules/fm-account-profile/components/fm-account-profile-links.tsx?36e8","webpack://venchi-ecommerce-msdyn365/./src/modules/fm-account-profile/components/fm-account-profile-consent-section.tsx?c8e8","webpack://venchi-ecommerce-msdyn365/./src/modules/fm-account-profile/fm-account-profile.tsx?311c","webpack://venchi-ecommerce-msdyn365/./src/modules/map-custom/map-custom.tsx?7be2","webpack://venchi-ecommerce-msdyn365/./src/modules/fm-account-profile/fm-account-profile.view.tsx?890b","webpack://venchi-ecommerce-msdyn365/./src/modules/map-custom/map-custom.view.tsx?fdae","webpack://venchi-ecommerce-msdyn365/./src/themes/venchi/views/account-generic-tile.view.tsx?19d2","webpack://venchi-ecommerce-msdyn365/./src/themes/venchi/views/store-selector.view.tsx?4246","webpack://venchi-ecommerce-msdyn365/./src/modules/content-block/content-block.view.tsx?1773","webpack://venchi-ecommerce-msdyn365/./src/modules/fabrikam/views/ratings-histogram.view.tsx?6e01","webpack://venchi-ecommerce-msdyn365/./src/modules/fabrikam/views/reviews-list.view.tsx?cd2e","webpack://venchi-ecommerce-msdyn365/./src/modules/order-lookup/order-lookup.view.tsx?b8e5","webpack://venchi-ecommerce-msdyn365/./src/modules/tile-list/tile-list.view.tsx?1b00","webpack://venchi-ecommerce-msdyn365/./src/modules/adventureworks/views/checkout-customer-account-payment.view.tsx?0efc","webpack://venchi-ecommerce-msdyn365/./src/modules/adventureworks/views/components/search.categorysuggest.tsx?6bcf","webpack://venchi-ecommerce-msdyn365/./src/modules/adventureworks/views/components/search.mobile.empty.tsx?ff32","webpack://venchi-ecommerce-msdyn365/./src/modules/adventureworks/views/components/search.form.tsx?d41a","webpack://venchi-ecommerce-msdyn365/./src/modules/adventureworks/views/components/search.keywordsuggest.tsx?2724","webpack://venchi-ecommerce-msdyn365/./src/modules/adventureworks/views/components/search.productsuggest.tsx?6616","webpack://venchi-ecommerce-msdyn365/./src/modules/adventureworks/views/search.view.tsx?bfa7","webpack://venchi-ecommerce-msdyn365/./src/common/utils/phone-number-utils.ts?2f98"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductSpecificationViewProps } from './product-specification';\n\nconst ProductSpecificationView: React.FC<IProductSpecificationViewProps> = props => {\n const { ProductSpecification, ProductSpecificationTableProps, ProductSpecificationTableBodyProps, productSpecificationResult } = props;\n const rowdata =\n productSpecificationResult &&\n ArrayExtensions.hasElements(productSpecificationResult) &&\n productSpecificationResult.filter(row => !ObjectExtensions.isNullOrUndefined(row));\n\n return rowdata && ArrayExtensions.hasElements(rowdata) ? (\n <Module {...ProductSpecification}>\n {props.title}\n <Node {...ProductSpecificationTableProps}>\n <Node {...ProductSpecificationTableBodyProps}>{rowdata}</Node>\n </Node>\n </Module>\n ) : null;\n};\n\nexport default ProductSpecificationView;\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 { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAdditionalContentData, ILinksData } from '../content-block.props.autogenerated';\n\n/**\n * IContentBlockAdditionalContentProps: Interface for\n * Content Block Additional Content Component props.\n */\nexport interface IContentBlockAdditionalContentProps {\n requestContext: Msdyn365.IRequestContext;\n additionalContent: IAdditionalContentData[] | undefined;\n handleAdditionalTextChange(index: number, event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalParagraphChange(index: number, event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalLinkTextChange(linkIndex: number, index: number, event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * IContentBlockAdditionalContentProps: Interface for\n * Content Block Additional Content view props.\n */\nexport interface IContentBlockAdditionalContentViewProps {\n additionalContentNode: INodeProps;\n additionalContentItems?: IContentBlockAdditionalContentItemViewProps[];\n}\n\n/**\n * IContentBlockAdditionalContentProps: Interface for\n * Content Block Additional Content Item view props.\n */\nexport interface IContentBlockAdditionalContentItemViewProps {\n heading: React.ReactNode;\n text: React.ReactNode;\n links: React.ReactNode;\n additionalContentItemContainer: INodeProps;\n additionalContentItemLinks: INodeProps;\n}\n\n/**\n * Renders additional content heading.\n * @param additionalContentHeading - Additional content heading.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @returns Heading Node.\n */\nconst renderHeading = (additionalContentHeading: string, props: IContentBlockAdditionalContentProps, itemIndex: number) => {\n const requestContext = props.requestContext;\n return (\n <Msdyn365.Text\n text={additionalContentHeading}\n tag='p'\n className='ms-content-block__details__additional-content__text'\n editProps={{\n /**\n * On edit event for heading text change.\n * @param event - Change event.\n */\n onEdit: event => {\n props.handleAdditionalTextChange(itemIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param additionalContentParagraphText - Additional content paragraph text.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @returns Paragraph Node.\n */\nconst renderParagraph = (additionalContentParagraphText: string, props: IContentBlockAdditionalContentProps, itemIndex: number) => {\n const requestContext = props.requestContext;\n return (\n <Msdyn365.Text\n text={additionalContentParagraphText}\n tag='p'\n className='ms-content-block__details__additional-content__paragraph'\n editProps={{\n /**\n * On edit event for heading text change.\n * @param event - Change event.\n */\n onEdit: event => {\n props.handleAdditionalTextChange(itemIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param ctaLink - Additional content link.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @param linkIndex - Additional content link index.\n * @returns Link Node.\n */\nconst renderLinks = (ctaLink: ILinksData, props: IContentBlockAdditionalContentProps, itemIndex: number, linkIndex: number) => {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: ctaLink.ariaLabel,\n className: 'ms-content-block__details__additional-content-cta-links',\n linkText: ctaLink.linkText,\n linkUrl: ctaLink.linkUrl.destinationUrl,\n openInNewTab: ctaLink.openInNewTab,\n role: 'link'\n };\n const requestContext = props.requestContext;\n return (\n <Msdyn365.Link\n key={linkIndex}\n link={editableLink}\n editProps={{\n /**\n * Handle additional Link Text change.\n * @param event - The keyboard event.\n */\n onTextChange: event => {\n props.handleAdditionalLinkTextChange(linkIndex, itemIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Create node for each additonal content item.\n * @param item - Content block additonal content item props.\n * @param props - Content Block Additional content component props.\n * @param itemIndex - Item index.\n * @returns IContentBlockAdditionalContentItemViewProps.\n */\nconst assembleNode = (\n item: IAdditionalContentData,\n props: IContentBlockAdditionalContentProps,\n itemIndex: number\n): IContentBlockAdditionalContentItemViewProps => {\n const headingNode = item.heading && renderHeading(item.heading, props, itemIndex);\n const paragraphNode = item.subtext && renderParagraph(item.subtext, props, itemIndex);\n const linksNode = item.links?.map((ctaLink: ILinksData, index: number) => {\n return renderLinks(ctaLink, props, itemIndex, index);\n });\n\n return {\n heading: headingNode,\n text: paragraphNode,\n links: linksNode,\n additionalContentItemContainer: { className: 'ms-content-block__details__additional-content__container' },\n additionalContentItemLinks: { className: 'ms-content-block__details__additional-content-cta' }\n };\n};\n\n/**\n * ContentBlockAdditionalContent component.\n * @param props - Content Block Additional content component props.\n * @returns Content Block Additional content view props.\n */\nexport const contentBlockAdditionalContent = (\n props: IContentBlockAdditionalContentProps\n): IContentBlockAdditionalContentViewProps | undefined => {\n const { additionalContent } = props;\n if (!additionalContent) {\n return undefined;\n }\n\n const reactNodes: IContentBlockAdditionalContentItemViewProps[] = [];\n additionalContent.map((item, index: number) => {\n return reactNodes.push(assembleNode(item, props, index));\n });\n\n return {\n additionalContentNode: { className: 'ms-content-block__details__additional-content' },\n additionalContentItems: reactNodes\n };\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 { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../content-block.props.autogenerated';\n\nexport interface IContentCardLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n role?: string;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\n/**\n *\n * ContentCardLinks component.\n * @extends {React.PureComponent<IContentCardLinks>}\n */\nexport class ContentCardLinks extends React.PureComponent<IContentCardLinks> {\n public render(): JSX.Element {\n const editableLinks = this._mapEditableLinks(this.props.links);\n return (\n <div className='ms-content-block__cta'>\n {editableLinks && editableLinks.length > 0 ? (\n <Msdyn365.Links\n links={editableLinks}\n editProps={{ onTextChange: this.props.onTextChange, requestContext: this.props.requestContext }}\n />\n ) : null}\n </div>\n );\n }\n\n private readonly _mapEditableLinks = (linkdata: ILinksData[]): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n linkdata.forEach((link, index) => {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\n const btnClass = index === 0 ? 'msc-cta__primary' : 'msc-cta__secondary';\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: btnClass,\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: this.props.role,\n additionalProperties: attributes,\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n };\n}\nexport default ContentCardLinks;\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 { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { contentBlockAdditionalContent, IContentBlockAdditionalContentViewProps } from './components/additional-content';\nimport LinksComponent from './components/links';\nimport { actionableRegion as region, IContentBlockConfig, IContentBlockProps } from './content-block.props.autogenerated';\n\nexport interface IContentBlockViewProps extends IContentBlockProps<{}> {\n title?: React.ReactNode;\n text?: React.ReactNode;\n image?: React.ReactNode;\n links?: React.ReactNode;\n className?: string;\n contentBlockContainer: IModuleProps;\n imageContainer: INodeProps;\n detailsContainer: INodeProps;\n contentBlockAnchorTag?: INodeProps;\n imageLink?: string;\n imageAriaLabel?: string;\n additionalContent?: IContentBlockAdditionalContentViewProps;\n handleAdditionalText?(): void;\n handleAdditionalParagraph?(): void;\n handleAdditionalLinkTextChange?(): void;\n}\n\n/**\n * Site-builder configuration for the module.\n */\nexport interface IContentBlockFullConfig extends IContentBlockConfig {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- This field comes from SDK.\n msdyn365__moduleLayout?: string;\n}\n\n/**\n * ContentCard component.\n * @extends {React.PureComponent<IContentBlockProps{}>}\n */\nexport class ContentBlock extends React.PureComponent<IContentBlockProps<{}>> {\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public render(): JSX.Element | null {\n const { heading, paragraph, image, links, className, imageAriaLabel } = this.props.config;\n const contentBlockTitle = heading && (\n <Msdyn365.Text\n className='ms-content-block__title'\n tag={heading.tag ?? 'h1'}\n text={heading.text}\n editProps={{ onEdit: this.handleTextChange, requestContext: this.props.context.request }}\n />\n );\n\n const contentBlockLinks = links && ArrayExtensions.hasElements(links) && (\n <LinksComponent\n {...{\n links,\n onTextChange: this.handleLinkTextChange,\n requestContext: this.props.context.request,\n telemetryContent: this.telemetryContent,\n role: (this.props.config as IContentBlockFullConfig).msdyn365__moduleLayout === 'tile' ? 'link' : 'button'\n }}\n />\n );\n const contentBlockText = paragraph && (\n <Msdyn365.RichTextComponent\n text={paragraph}\n className='ms-content-block__text'\n editProps={{ onEdit: this.handleParagraphChange, requestContext: this.props.context.request }}\n />\n );\n\n let contentBlockImageSettings: Msdyn365.IImageSettings | undefined;\n\n if (image && image.imageSettings && !image.imageSettings.backgroundColor && this.props.config.backgroundColor) {\n contentBlockImageSettings = {\n ...image?.imageSettings,\n backgroundColor: this.props.config.backgroundColor\n };\n } else {\n contentBlockImageSettings = image?.imageSettings;\n }\n\n const imageProps = {\n gridSettings: this.props.context.request.gridSettings ?? {},\n imageSettings: contentBlockImageSettings\n };\n\n const contentBlockImage = (\n <Msdyn365.Image\n {...image}\n {...imageProps}\n requestContext={this.props.context.request}\n preserveImageSpace={true}\n editProps={{\n key: this.props.config.image ?? {},\n requestContext: this.props.context.request,\n moduleType: this.props.typeName,\n imagePropertyName: 'image',\n moduleId: this.props.id,\n layout: (this.props.config as IContentBlockFullConfig).msdyn365__moduleLayout\n }}\n shouldSkipToMainImage\n />\n );\n\n const contentBlockContainerStyle: React.CSSProperties | undefined = this.props.config.backgroundColor\n ? { backgroundColor: this.props.config.backgroundColor }\n : undefined;\n\n if (!contentBlockTitle && !contentBlockText && !contentBlockLinks) {\n this.props.context.telemetry.error('Content block content is empty, module wont render.');\n return null;\n }\n const contentBlockviewProps = {\n ...this.props,\n title: contentBlockTitle,\n text: contentBlockText,\n image: contentBlockImage,\n links: contentBlockLinks,\n moduleClass: this.props.config.className,\n contentBlockContainer: {\n moduleProps: this.props,\n className: classnames('ms-content-block', className),\n style: contentBlockContainerStyle\n },\n imageContainer: { className: 'ms-content-block__image' },\n detailsContainer: { className: 'ms-content-block__details' },\n contentBlockAnchorTag: {\n tag: 'a',\n className: 'ms-content-block__link',\n role: 'link'\n },\n imageLink: this._getImageLink(),\n imageAriaLabel,\n additionalContent: contentBlockAdditionalContent({\n requestContext: this.props.context.request,\n additionalContent: this.props.config.additionalContent,\n handleAdditionalTextChange: this.handleAdditionalTextChange,\n handleAdditionalParagraphChange: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n }),\n handleAdditionalText: this.handleAdditionalTextChange,\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n };\n\n return this.props.renderView(contentBlockviewProps) as React.ReactElement;\n }\n\n /**\n * To handle text change.\n * @param event - To handle text change event.\n * @name - HandleTextChange\n * @public\n * @returns - The Text value.\n */\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n /**\n * To handle paragraph change.\n * @param event - To handle text change event.\n * @name - HandleParagraphChange\n * @public\n * @returns - The Paragraph value.\n */\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.paragraph = event.target.value);\n\n /**\n * Handle link text change.\n * @param linkIndex - The link index.\n * @returns - Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.links && this.props.config.links[Number(linkIndex)]) {\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\n }\n };\n\n public handleAdditionalTextChange(index: number, event: Msdyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent[Number(index)].heading = event.target.value;\n }\n }\n\n public handleAdditionalLinkTextChange(linkIndex: number, index: number, event: Msdyn365.ContentEditableEvent): void {\n const additionalContentObject =\n (this.props.config.additionalContent &&\n ArrayExtensions.hasElements(this.props.config.additionalContent) &&\n this.props.config.additionalContent[Number(index)]) ||\n {};\n if (additionalContentObject.links) {\n additionalContentObject.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n public handleAdditionalParagraphChange(index: number, event: Msdyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent[Number(index)].subtext = event.target.value;\n }\n }\n\n private _getImageLink(): string | null {\n const { imageLink, links, actionableRegion } = this.props.config;\n if (actionableRegion === region.imageAndLinks) {\n if (imageLink?.destinationUrl) {\n return imageLink.destinationUrl;\n } else if (links && ArrayExtensions.hasElements(links) && links[0].linkUrl) {\n return links[0].linkUrl.destinationUrl;\n }\n return null;\n }\n return null;\n }\n}\n\nexport default ContentBlock;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ExtensibleEnumeration } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, EmailRegex } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { IOrderLookupResources, IOrderLookupSearchAdditionalFieldsData } from '../order-lookup.props.autogenerated';\n\n/**\n * Render label.\n * @param className - Classname for label.\n * @param value - Text for label.\n * @returns -The JSX Element.\n */\nexport const labelGroup = (className: string, value: string): JSX.Element => {\n return <div className={className}>{value}</div>;\n};\n\n/**\n * Error label.\n * @param responseErrorMessage - Error message for label.\n * @param errorMessageClassName - Error message for class name.\n * @returns - Error ReactNode.\n */\nexport const renderErrorLabel = (responseErrorMessage: string, errorMessageClassName: string): React.ReactNode => {\n return responseErrorMessage && <div className={errorMessageClassName}>{responseErrorMessage}</div>;\n};\n\n/**\n * Registered user message.\n * @param resources - Resource values.\n * @param signInUrl - Signin url.\n * @param signInLinkClassName - Signin link classname.\n * @param registeredUserClassName - Registered user message classname.\n * @returns - ReactNode.\n */\nexport const renderRegisteredUserMessage = (\n resources: IOrderLookupResources,\n signInUrl: string,\n signInLinkClassName: string,\n registeredUserClassName: string\n): React.ReactNode => {\n const { orderLookupRegisteredUserText, orderLookupViewAccountText, orderLookupSignInLinkText } = resources;\n const message: string = orderLookupRegisteredUserText;\n const infoMessage: string = orderLookupViewAccountText;\n const signInText: string = orderLookupSignInLinkText;\n return (\n <div className={registeredUserClassName}>\n {message}\n <a className={signInLinkClassName} href={signInUrl}>\n {signInText}\n </a>\n {infoMessage}\n </div>\n );\n};\n\n/**\n * EmailValid submit.\n * @param email - Onsubmit of form and button click.\n * @returns - Boolean.\n */\nexport const isEmailValid = (email: string): boolean => {\n return EmailRegex.defaultRegex.test(email);\n};\n\n/**\n * Additional field validation for on submit.\n * @param name - Onsubmit of form and button click.\n * @returns - Boolean.\n */\nexport const isAdditionalFieldValid = (name: string): boolean => {\n const regEx = new RegExp('^(?!\\\\s)[A-Za-z0-9\\\\s]+$', 'u');\n return regEx.test(name);\n};\n\n/**\n * Validate order lookup field against extensible enum.\n * @param orderStatusLookUpParameter - Order lookup parameter.\n * @param orderLookupExtensibleEnum - Order lookup extensible enum.\n * @returns - Boolean.\n */\nexport const validateOrderLookupField = (\n orderStatusLookUpParameter: string,\n orderLookupExtensibleEnum: ExtensibleEnumeration[]\n): boolean => {\n let isValidField: boolean = false;\n for (const item of orderLookupExtensibleEnum) {\n if (item.Name.toLocaleLowerCase() === orderStatusLookUpParameter.toLocaleLowerCase()) {\n isValidField = true;\n return isValidField;\n }\n }\n return isValidField;\n};\n\n/**\n * Validate order lookup additional fields with proxy values.\n * @param value - Value to be validated.\n * @param orderLookupExtensibleEnum - Order lookup extensible enum.\n * @returns - Boolean.\n */\nexport const validateAdditionalFieldWithProxy = (value: string, orderLookupExtensibleEnum: ExtensibleEnumeration[]): boolean => {\n return !orderLookupExtensibleEnum.some(item => item.Name.toLocaleLowerCase() === value.toLocaleLowerCase());\n};\n\n/**\n * Validate order lookup additional fields against extensible enum.\n * @param orderStatusLookUpAdditionalParameters - Order lookup parameter.\n * @param orderLookupExtensibleEnum - Order lookup extensible enum.\n * @returns - Boolean.\n */\nexport const validateOrderLookupAdditionalField = (\n orderStatusLookUpAdditionalParameters: IOrderLookupSearchAdditionalFieldsData[],\n orderLookupExtensibleEnum: ExtensibleEnumeration[]\n): boolean => {\n let isValidAdditionalField: boolean = false;\n if (ArrayExtensions.hasElements(orderStatusLookUpAdditionalParameters)) {\n orderStatusLookUpAdditionalParameters.map(item => {\n const fieldKey: string = item.fieldKey ?? '';\n if (!isValidAdditionalField) {\n isValidAdditionalField = validateAdditionalFieldWithProxy(fieldKey, orderLookupExtensibleEnum);\n }\n return isValidAdditionalField;\n });\n } else {\n isValidAdditionalField = false;\n }\n return isValidAdditionalField;\n};\n\n/**\n * Render validation message if field does not matches with extensible enum.\n * @param orderLookupFieldValidationErrorMessage - Order lookup validation message.\n * @returns - ReactNode.\n */\nexport const renderFieldErrors = (orderLookupFieldValidationErrorMessage: string): React.ReactNode => {\n return <div className='ms-order-lookup__field-value__error-message'>{orderLookupFieldValidationErrorMessage}</div>;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { labelGroup } from '../utilities/order-lookup-utility';\n\n/**\n * Additional input field props.\n */\nexport interface IOrderLookupAdditionalFieldInfoInput {\n className: string;\n ariaLabel: string;\n inputType: string;\n value: string;\n name: string;\n additionalFieldLabel: string;\n additionalFieldLabelClassName: string;\n isValidAdditionalFieldName: boolean;\n additionalFieldValidationMessage: string;\n onChange(event: React.ChangeEvent<HTMLInputElement>): void;\n}\n\n/**\n * Order lookup additional field props.\n */\nexport interface IOrderLookupAdditionalFieldInfo {\n additionalFieldLabel: React.ReactNode;\n additionalFieldInput: React.ReactNode;\n additionalFieldError: React.ReactNode;\n}\n\n/**\n * RenderOrderLookupAdditionalFieldInput component.\n */\n@observer\nexport default class RenderOrderLookupAdditionalFieldInput extends React.Component<IOrderLookupAdditionalFieldInfoInput> {\n public constructor(props: IOrderLookupAdditionalFieldInfoInput) {\n super(props);\n }\n\n public shouldComponentUpdate(nextProps: IOrderLookupAdditionalFieldInfoInput): boolean {\n if (this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | undefined {\n return (\n <div className='ms-order-lookup__details__form__additional-fields'>\n {this._getOrderLookupAdditionalFields().additionalFieldLabel}\n {this._getOrderLookupAdditionalFields().additionalFieldError}\n {this._getOrderLookupAdditionalFields().additionalFieldInput}\n </div>\n );\n }\n\n /**\n * Function to create the order lookup additional fields.\n * @returns IOrderLookupFieldInfo.\n */\n private _getOrderLookupAdditionalFields(): IOrderLookupAdditionalFieldInfo {\n return {\n additionalFieldLabel: labelGroup(this.props.additionalFieldLabelClassName, this.props.additionalFieldLabel),\n additionalFieldInput: (\n <div className='ms-order-lookup__details__form__additional-fields__input-detail'>\n <input\n type={this.props.inputType}\n onChange={this.props.onChange}\n aria-label={this.props.ariaLabel}\n value={this.props.value}\n name={this.props.name}\n />\n </div>\n ),\n additionalFieldError: (\n <div className='ms-order-lookup__details__form__additional-fields__input-error'>\n {!this.props.isValidAdditionalFieldName ? this.props.additionalFieldValidationMessage : ''}\n </div>\n )\n };\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { labelGroup } from '../utilities/order-lookup-utility';\n\n/**\n * Input field props.\n */\nexport interface IOrderLookupFieldInfoInput {\n inputReference?: React.RefObject<HTMLInputElement>;\n className: string;\n ariaLabel: string;\n inputType: string;\n value: string;\n name: string;\n orderLookupLabel: string;\n orderLookupLabelClassName: string;\n fieldErrorClassName: string;\n isInputTypeError: boolean;\n isValidInputField: boolean;\n renderAlert(className: string): JSX.Element;\n onChange(event: React.ChangeEvent<HTMLInputElement>): void;\n}\n\n/**\n * Order lookup field props.\n */\nexport interface IOrderLookupFieldInfo {\n label: React.ReactNode;\n input: React.ReactNode;\n error: React.ReactNode;\n}\n\n/**\n * RenderOrderLookupInputs component.\n */\n@observer\nexport default class RenderOrderLookupFormFields extends React.Component<IOrderLookupFieldInfoInput> {\n public constructor(props: IOrderLookupFieldInfoInput) {\n super(props);\n }\n\n public shouldComponentUpdate(nextProps: IOrderLookupFieldInfoInput): boolean {\n if (this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | undefined {\n return (\n <div className={this.props.className}>\n {this._getOrderLookupFields().label}\n {this._getOrderLookupFields().error}\n {this._getOrderLookupFields().input}\n </div>\n );\n }\n\n /**\n * Function to create the order lookup fields.\n * @returns IOrderLookupFieldInfo.\n */\n private _getOrderLookupFields(): IOrderLookupFieldInfo {\n return {\n label: labelGroup(this.props.orderLookupLabelClassName, this.props.orderLookupLabel),\n input: (\n <div className='ms-order-lookup__details__form__fields__input-detail'>\n <input\n ref={this.props.inputReference}\n type={this.props.inputType}\n onChange={this.props.onChange}\n aria-label={this.props.ariaLabel}\n value={this.props.value}\n name={this.props.name}\n />\n </div>\n ),\n error: (\n <div className={this.props.fieldErrorClassName}>\n {this.props.isInputTypeError ? this.props.renderAlert(this.props.name) : ''}\n {this.props.isValidInputField ? this.props.renderAlert(this.props.name) : ''}\n </div>\n )\n };\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IActionContext } from '@msdyn365-commerce/core-internal';\nimport { ExtensibleEnumeration, StoreOperationsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport RenderOrderLookupAdditionalFieldInput from './components/order-lookup-additional-fields';\nimport RenderOrderLookupFormFields from './components/order-lookup-fields';\nimport {\n IOrderLookupProps,\n IOrderLookupSearchAdditionalFieldsData,\n orderStatusLookUpParametersType as orderStatusLookUpParametersTypes\n} from './order-lookup.props.autogenerated';\nimport {\n isAdditionalFieldValid,\n isEmailValid,\n renderErrorLabel,\n renderFieldErrors,\n renderRegisteredUserMessage,\n validateOrderLookupAdditionalField,\n validateOrderLookupField\n} from './utilities/order-lookup-utility';\n\n/**\n * OrderLookup view props.\n */\nexport interface IOrderLookupViewProps extends IOrderLookupProps<{}> {\n additionalProperties: JSX.Element[] | undefined;\n orderLookup: IModuleProps;\n orderLookupContainer: INodeProps;\n orderLookupAdditionalFieldContainer: INodeProps;\n paragraph?: React.ReactNode;\n heading?: React.ReactNode;\n submitButton?: INodeProps;\n submitButtonLabelText?: string;\n orderLookupForm?: INodeProps;\n renderOrderLookupInputField: JSX.Element | undefined;\n orderNumberInput?: JSX.Element | undefined;\n errorMessage?: React.ReactNode;\n fieldErrorMessage?: React.ReactNode;\n registeredUserMessage?: React.ReactNode;\n onChange?(event: React.ChangeEvent<HTMLInputElement>): void;\n submit?(): void;\n}\n\n/**\n * OrderLookupSearchValues -- supported values.\n */\nenum OrderLookupSearchValues {\n email = 'email',\n ordernumber = 'ordernumber'\n}\n\n/**\n * To render and handle state for additional order lookup fields.\n */\nexport interface IOrderLookupAdditionalFields {\n labelName: string;\n isValidFieldName: boolean;\n fieldValue: string;\n ariaLabel: string;\n additionalfieldErrorMessage: string;\n}\n\n/**\n * OrderLookup view props.\n */\nexport interface IOrderLookupFormState {\n orderNumber: string;\n email: string;\n isOrdNumberError: boolean;\n isEmailError: boolean;\n isValidEmailError: boolean;\n isReqError: boolean;\n isDisabled: boolean;\n isValidLookupField: boolean;\n isValidAdditionalLookupField: boolean;\n responseErrorMessage: string;\n additionalProperties: IOrderLookupAdditionalFields[];\n}\n\n/**\n *\n * OrderLookup component.\n * @extends {React.PureComponent<IOrderLookupProps<{}>>}\n */\nclass OrderLookup extends React.PureComponent<IOrderLookupProps<{}>, IOrderLookupFormState> {\n public orderNumberInputRef: React.RefObject<HTMLInputElement>;\n\n public emailInputRef: React.RefObject<HTMLInputElement>;\n\n public isEmailValue: boolean = false;\n\n private requiredErrorMessage: string | undefined;\n\n private emailValidationErrorMessage: string | undefined;\n\n private isOrderNumberValue: boolean = false;\n\n private orderLookupExtensibleEnum: ExtensibleEnumeration[] = [];\n\n public constructor(props: IOrderLookupProps<{}>) {\n super(props);\n this.orderNumberInputRef = React.createRef();\n this.emailInputRef = React.createRef();\n const { config } = this.props;\n const { orderLookupSearchAdditionalFields } = config;\n const additionalPropertyStates: IOrderLookupAdditionalFields[] = [];\n\n if (orderLookupSearchAdditionalFields) {\n for (const item of orderLookupSearchAdditionalFields) {\n additionalPropertyStates.push({\n labelName: item.labelName ?? '',\n isValidFieldName: true,\n fieldValue: '',\n ariaLabel: item.ariaLabel ?? '',\n additionalfieldErrorMessage: item.validationMessage ?? ''\n });\n }\n }\n\n this.state = {\n orderNumber: '',\n email: '',\n isOrdNumberError: false,\n isEmailError: false,\n isValidEmailError: false,\n isReqError: false,\n isDisabled: true,\n isValidLookupField: true,\n isValidAdditionalLookupField: false,\n responseErrorMessage: '',\n additionalProperties: additionalPropertyStates\n };\n }\n\n public render(): JSX.Element | null {\n const {\n config: { paragraph, heading },\n resources,\n context\n } = this.props;\n\n const {\n orderLookupDefaultHeadingText,\n orderLookupButtonLabel,\n orderLookupFormAriaLabel,\n orderLookupOrderNumberLabel,\n orderLookupOrderNumberAriaLabel,\n orderLookupSubmitAriaLabel,\n orderLookupFieldValidationErrorMessage\n } = resources;\n\n const { responseErrorMessage, isDisabled, orderNumber, isOrdNumberError } = this.state;\n\n const headingText = StringExtensions.isNullOrEmpty(heading?.text) ? orderLookupDefaultHeadingText : heading?.text;\n const headingTag = heading?.tag ?? 'h1';\n\n const moduleClassName = 'ms-order-lookup';\n const orderLookupContainerClassName = `${moduleClassName}__details`;\n const orderLookupHeadingClassName = `${orderLookupContainerClassName}__heading`;\n const orderLookupFormClassName = `${orderLookupContainerClassName}__form`;\n const orderLookupAdditionalFiledContainerClassName = `${orderLookupFormClassName}__additional-fields-container`;\n const orderLookupFormFieldsClassName = `${orderLookupFormClassName}__fields`;\n const orderNumberLabelClassName = `${orderLookupFormFieldsClassName}__order-number-label`;\n const orderNumberInputErrorClassName = `${orderLookupFormFieldsClassName}__order-number-input-error`;\n const submitButtonClassName = `${orderLookupFormClassName}__submit`;\n const labelErrorMessageClassName = `${moduleClassName}__error-message`;\n const registeredUserClassName = `${moduleClassName}__registered-user`;\n const signinLinkClassName = `${registeredUserClassName}__sign-in-link msc-btn`;\n\n const orderLookupHeading = (\n <Msdyn365.Text\n className={orderLookupHeadingClassName}\n tag={headingTag}\n text={headingText}\n editProps={{ onEdit: this.handleTextChange, requestContext: this.props.context.request }}\n />\n );\n\n const viewProps: IOrderLookupViewProps = {\n ...this.props,\n orderLookup: {\n moduleProps: this.props,\n className: moduleClassName\n },\n\n orderLookupContainer: {\n className: orderLookupContainerClassName\n },\n orderLookupAdditionalFieldContainer: {\n className: orderLookupAdditionalFiledContainerClassName\n },\n paragraph: paragraph && this._createParagraph(paragraph),\n heading: orderLookupHeading,\n\n renderOrderLookupInputField: this._renderOrderLookupInput(),\n orderLookupForm: {\n className: orderLookupFormClassName,\n tag: 'form',\n 'aria-label': orderLookupFormAriaLabel,\n name: 'orderLookupForm',\n role: 'form',\n autoComplete: 'off',\n onSubmit: this.handleSubmit\n },\n orderNumberInput: (\n <RenderOrderLookupFormFields\n inputReference={this.orderNumberInputRef}\n ariaLabel={orderLookupOrderNumberAriaLabel}\n className={orderLookupFormFieldsClassName}\n inputType='text'\n value={orderNumber}\n name={OrderLookupSearchValues.ordernumber}\n orderLookupLabel={orderLookupOrderNumberLabel}\n orderLookupLabelClassName={orderNumberLabelClassName}\n fieldErrorClassName={orderNumberInputErrorClassName}\n isInputTypeError={false}\n isValidInputField={isOrdNumberError}\n renderAlert={this._renderOrderNumberAlert}\n onChange={this.onChange}\n />\n ),\n\n submitButton: {\n className: submitButtonClassName,\n tag: Button,\n 'aria-label': orderLookupSubmitAriaLabel,\n type: 'submit',\n role: 'button',\n title: orderLookupButtonLabel,\n onClick: this.handleSubmit,\n disabled: isDisabled\n },\n\n submitButtonLabelText: orderLookupButtonLabel,\n errorMessage: renderErrorLabel(responseErrorMessage, labelErrorMessageClassName),\n fieldErrorMessage:\n (!this.state.isValidLookupField || this.state.isValidAdditionalLookupField) &&\n renderFieldErrors(orderLookupFieldValidationErrorMessage),\n registeredUserMessage: renderRegisteredUserMessage(\n resources,\n context.request.user.signInUrl ?? '',\n signinLinkClassName,\n registeredUserClassName\n ),\n onChange: this.onChange,\n submit: this.handleSubmit,\n additionalProperties: this._renderAdditionalFields()\n };\n return this.props.renderView(viewProps);\n }\n\n public async componentDidMount(): Promise<void> {\n const { config, context } = this.props;\n const { actionContext } = context;\n const { orderStatusLookUpParametersType, orderLookupSearchAdditionalFields } = config;\n let isOrderLookupAdditionalFieldValid: boolean = false;\n let isOrderLookupFieldValid: boolean = false;\n\n const getExtensibleEnumerations = await StoreOperationsDataActions.getExtensibleEnumerationsAsync({ callerContext: actionContext });\n this.orderLookupExtensibleEnum =\n getExtensibleEnumerations.find(item => item.TypeName === 'OrderLookupAdditionalCriteriaType')?.ExtensibleEnumerations ?? [];\n\n const orderLookupParameter: string = orderStatusLookUpParametersType ?? '';\n const orderLookupAdditionalParameter: IOrderLookupSearchAdditionalFieldsData[] = orderLookupSearchAdditionalFields ?? [];\n\n isOrderLookupFieldValid = validateOrderLookupField(orderLookupParameter, this.orderLookupExtensibleEnum);\n isOrderLookupAdditionalFieldValid = validateOrderLookupAdditionalField(\n orderLookupAdditionalParameter,\n this.orderLookupExtensibleEnum\n );\n this.setLookupFieldState(isOrderLookupFieldValid, isOrderLookupAdditionalFieldValid);\n }\n\n /**\n * Handle text change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleTextChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n /**\n * Handle paragraph change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent): void => {\n const { config } = this.props;\n config.paragraph = event.target.value;\n };\n\n /**\n * Sets isValidLookupField after validating with extensible emun.\n * @param isValidField - Sets the property.\n * @param isValidAdditionalField - Sets the additional field property.\n */\n public setLookupFieldState(isValidField: boolean, isValidAdditionalField: boolean): void {\n this.setState({ isValidLookupField: isValidField, isValidAdditionalLookupField: isValidAdditionalField });\n }\n\n /**\n * HandleSubmit submit.\n */\n public readonly handleSubmit = (): void => {\n const { config, context } = this.props;\n const { actionContext } = context;\n const { additionalProperties, orderNumber, email } = this.state;\n const orderLookupValue = email;\n const { orderStatusLookUpParametersType } = config;\n const orderLookupName = orderStatusLookUpParametersType !== undefined ? orderStatusLookUpParametersType : '';\n const isValid: boolean = this._validateOrderLookupForm();\n if (isValid) {\n const actionContextValue: IActionContext = actionContext;\n const orderDetailsPath = Msdyn365.getUrlSync('orderDetails', actionContextValue) ?? '';\n if (orderDetailsPath) {\n const baseUrl = new URL(window.location.origin);\n const redirectUrl = new URL(orderDetailsPath, baseUrl);\n const searchParameters = redirectUrl.searchParams;\n\n searchParameters.set('confirmationId', orderNumber);\n searchParameters.set('propertyName', orderLookupName);\n searchParameters.set('propertyValue', orderLookupValue);\n\n if (ArrayExtensions.hasElements(additionalProperties)) {\n additionalProperties.map((item, index) => {\n const fieldName = !StringExtensions.isNullOrWhitespace(item.ariaLabel)\n ? item.ariaLabel.replace(' ', '').toLocaleLowerCase()\n : '';\n const fieldValue = !StringExtensions.isNullOrWhitespace(item.fieldValue) ? item.fieldValue : '';\n searchParameters.set(`field${index + 1}Name`, fieldName);\n searchParameters.set(`field${index + 1}Value`, fieldValue);\n return item;\n });\n }\n\n window.location.assign(redirectUrl.toString());\n }\n }\n };\n\n /**\n * OnChange event.\n * @param event - Value of input field.\n */\n public readonly onChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n const { additionalProperties } = this.state;\n const { config } = this.props;\n const { orderStatusLookUpParametersType } = config;\n const name = event.target.name || '';\n const value = event.target.value || '';\n this.isOrderNumberValue = !StringExtensions.isNullOrWhitespace(this.orderNumberInputRef.current?.value);\n this.isEmailValue = !StringExtensions.isNullOrWhitespace(this.emailInputRef.current?.value);\n\n if (orderStatusLookUpParametersType?.toLocaleLowerCase() === 'none') {\n this.isEmailValue = true;\n }\n\n this.setState({ responseErrorMessage: '' });\n const additionalPropertyStates: IOrderLookupAdditionalFields[] = [];\n let isAdditionalFieldError: boolean = true as boolean;\n let isKeyExistInAdditionalFieldArray: boolean = false as boolean;\n\n for (const item of additionalProperties) {\n const fieldName: string = item.ariaLabel.replace(' ', '');\n if (fieldName.toLocaleLowerCase() === name.toLocaleLowerCase()) {\n additionalPropertyStates.push({\n labelName: item.labelName,\n isValidFieldName: true,\n fieldValue: value,\n ariaLabel: item.ariaLabel,\n additionalfieldErrorMessage: item.additionalfieldErrorMessage\n });\n } else {\n additionalPropertyStates.push({\n labelName: item.labelName,\n isValidFieldName: item.isValidFieldName,\n fieldValue: item.fieldValue,\n ariaLabel: item.ariaLabel,\n additionalfieldErrorMessage: item.additionalfieldErrorMessage\n });\n }\n if (fieldName.toLocaleLowerCase() === orderStatusLookUpParametersType?.toLocaleLowerCase()) {\n isKeyExistInAdditionalFieldArray = true;\n }\n }\n\n for (const items of additionalPropertyStates) {\n if (StringExtensions.isNullOrWhitespace(items.fieldValue)) {\n isAdditionalFieldError = false;\n }\n }\n\n this.setState({ additionalProperties: additionalPropertyStates });\n\n if (!isKeyExistInAdditionalFieldArray) {\n switch (name.toLocaleLowerCase()) {\n case OrderLookupSearchValues.ordernumber: {\n this.setState({\n orderNumber: value,\n isOrdNumberError: false,\n isReqError: false\n });\n break;\n }\n case OrderLookupSearchValues.email: {\n this.setState({\n email: value,\n isEmailError: false,\n isValidEmailError: false,\n isReqError: false\n });\n break;\n }\n default: {\n this.setState({ isReqError: false });\n }\n }\n }\n\n if (\n this.isOrderNumberValue &&\n this.isEmailValue &&\n isAdditionalFieldError &&\n this.state.isValidLookupField &&\n !this.state.isValidAdditionalLookupField\n ) {\n this.setState({ isDisabled: false });\n } else {\n this.setState({ isDisabled: true });\n }\n };\n\n private _createParagraph(text?: Msdyn365.RichText): React.ReactNode | null {\n const { context } = this.props;\n const { request } = context;\n if (!text) {\n return null;\n }\n return (\n <Msdyn365.RichTextComponent\n text={text}\n className='ms-order-lookup__details__text'\n editProps={{ onEdit: this.handleParagraphChange, requestContext: request }}\n />\n );\n }\n\n /**\n * Render order lookup validation message.\n * @param className - Class name for error field.\n * @returns - JSX.Element.\n */\n private readonly _renderAlert = (className: string): JSX.Element => {\n const {\n resources: { orderLookupEmailValidationErrorMessage, orderLookupRequiredTextErrorMessage }\n } = this.props;\n\n const { isEmailError, email, isValidEmailError, isReqError } = this.state;\n if (isEmailError) {\n this.requiredErrorMessage = orderLookupRequiredTextErrorMessage;\n }\n\n if (!StringExtensions.isNullOrEmpty(email) && isValidEmailError) {\n this.emailValidationErrorMessage = orderLookupEmailValidationErrorMessage;\n }\n\n const isRequireError = isReqError;\n const isEmailValidError = isValidEmailError;\n const isValidEmailInput = className.toLocaleLowerCase() === OrderLookupSearchValues.email;\n return (\n <>\n {isRequireError && (\n <span className={`${className}__alert`} role='alert'>\n {this.requiredErrorMessage}\n </span>\n )}\n {isEmailValidError && isValidEmailInput && (\n <span className={`${className}__alert`} role='alert'>\n {this.emailValidationErrorMessage}\n </span>\n )}\n </>\n );\n };\n\n /**\n * Render order number validation message.\n * @param className - Class name for error field.\n * @returns - JSX.Element.\n */\n private readonly _renderOrderNumberAlert = (className: string): JSX.Element => {\n const {\n resources: { orderLookupOrderNumberValidationErrorMessage, orderLookupRequiredTextErrorMessage }\n } = this.props;\n\n const { isOrdNumberError, isReqError } = this.state;\n return (\n <>\n {isReqError && (\n <span className={`${className}__alert`} role='alert'>\n {orderLookupRequiredTextErrorMessage}\n </span>\n )}\n {isOrdNumberError && (\n <span className={`${className}__alert`} role='alert'>\n {orderLookupOrderNumberValidationErrorMessage}\n </span>\n )}\n </>\n );\n };\n\n private _renderAdditionalFields(): JSX.Element[] | undefined {\n const { additionalProperties } = this.state;\n const additionalFieldsInput: JSX.Element[] = [];\n for (const item of additionalProperties) {\n const name: string = item.ariaLabel.replace(' ', '');\n additionalFieldsInput.push(\n <RenderOrderLookupAdditionalFieldInput\n className={name.toLocaleLowerCase()}\n ariaLabel={item.ariaLabel}\n inputType='text'\n value={item.fieldValue}\n name={name.toLocaleLowerCase()}\n additionalFieldLabel={item.labelName}\n additionalFieldLabelClassName='ms-order-lookup__details__form__additional-fields__label'\n isValidAdditionalFieldName={item.isValidFieldName}\n additionalFieldValidationMessage={item.additionalfieldErrorMessage}\n onChange={this.onChange}\n />\n );\n }\n return additionalFieldsInput;\n }\n\n /**\n * Render Input field for order lookup.\n * @returns - IOrderLookupFieldInfo.\n */\n private readonly _renderOrderLookupInput = (): JSX.Element | undefined => {\n const { email, isEmailError, isValidEmailError } = this.state;\n const {\n config: { orderStatusLookUpParametersType },\n resources: { orderLookupEmailLabel, orderLookupEmailAriaLabel }\n } = this.props;\n\n switch (orderStatusLookUpParametersType) {\n case orderStatusLookUpParametersTypes.none:\n return undefined;\n case orderStatusLookUpParametersTypes.email:\n default:\n return (\n <RenderOrderLookupFormFields\n inputReference={this.emailInputRef}\n ariaLabel={orderLookupEmailAriaLabel}\n className='ms-order-lookup__details__form__fields'\n inputType='text'\n value={email}\n name={OrderLookupSearchValues.email}\n orderLookupLabel={orderLookupEmailLabel}\n orderLookupLabelClassName='ms-order-lookup__details__form__fields__email-label'\n fieldErrorClassName='ms-order-lookup__details__form__fields__email-input-error'\n isInputTypeError={isEmailError}\n isValidInputField={isValidEmailError}\n renderAlert={this._renderAlert}\n onChange={this.onChange}\n />\n );\n }\n };\n\n /**\n * _validation for additional fields.\n * @returns - Returns IOrderLookupAdditionalFields[].\n */\n private readonly _additionalFieldValidation = (): IOrderLookupAdditionalFields[] => {\n const additionalPropertyStates: IOrderLookupAdditionalFields[] = [];\n for (const item of this.state.additionalProperties) {\n const isFieldValid: boolean = !StringExtensions.isNullOrWhitespace(item.fieldValue) && isAdditionalFieldValid(item.fieldValue);\n additionalPropertyStates.push({\n labelName: item.labelName,\n isValidFieldName: isFieldValid,\n fieldValue: item.fieldValue,\n ariaLabel: item.ariaLabel,\n additionalfieldErrorMessage: item.additionalfieldErrorMessage\n });\n }\n return additionalPropertyStates;\n };\n\n /**\n * _validateOrderLookupForm submit.\n * @returns - Returns boolean.\n */\n private readonly _validateOrderLookupForm = (): boolean => {\n const { config } = this.props;\n const { orderNumber, email } = this.state;\n const { orderStatusLookUpParametersType } = config;\n let additionalPropertyStates: IOrderLookupAdditionalFields[] = [];\n let isValid = false;\n let isDisable = false;\n\n if (ArrayExtensions.hasElements(this.state.additionalProperties)) {\n additionalPropertyStates = this._additionalFieldValidation();\n for (const item of additionalPropertyStates) {\n if (!item.isValidFieldName) {\n isDisable = true;\n }\n }\n\n if (isDisable) {\n this.setState({\n additionalProperties: additionalPropertyStates,\n isDisabled: true\n });\n }\n }\n\n if (StringExtensions.isNullOrWhitespace(orderNumber)) {\n this.setState({\n isOrdNumberError: true,\n isReqError: true,\n isDisabled: true\n });\n } else if (orderNumber.trim() !== orderNumber) {\n this.setState({\n isOrdNumberError: true,\n isReqError: false,\n isDisabled: true\n });\n } else if (\n orderStatusLookUpParametersType === orderStatusLookUpParametersTypes.email &&\n StringExtensions.isNullOrWhitespace(email)\n ) {\n this.setState({\n isEmailError: true,\n isReqError: true,\n isDisabled: true\n });\n } else if (orderStatusLookUpParametersType === orderStatusLookUpParametersTypes.email && !isEmailValid(email)) {\n this.setState({\n isValidEmailError: true,\n isDisabled: true\n });\n } else if (isDisable || !this.state.isValidLookupField || this.state.isValidAdditionalLookupField) {\n this.setState({\n isDisabled: true\n });\n } else {\n this.setState({\n isDisabled: false\n });\n isValid = true;\n }\n return isValid;\n };\n}\n\nexport default OrderLookup;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\n/**\n * Product specification table row.\n */\nexport interface IProductSpecificationTableRow {\n productName?: string;\n cellData?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Product specification table row component.\n * @param props - For product specification table row.\n * @param props.productName - Product name.\n * @param props.cellData - Cell data.\n * @param props.className - Class name.\n * @returns - Returns JSX element.\n */\nexport const ProductSpecificationTableRow: React.FC<IProductSpecificationTableRow> = ({ productName, cellData, className }) => (\n <tr className={className}>\n <th scope='row'>\n {/* eslint-disable-next-line react/no-danger */}\n <span dangerouslySetInnerHTML={getRichTextHtml(productName)} />\n </th>\n <td>{cellData}</td>\n </tr>\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 { AttributeValue } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { Drawer, IModuleProps, INodeProps, Module } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { AttributesForSelectedVariantInput, getAttributesForSelectedVariant } from '../..';\nimport { ProductSpecificationTableRow } from './components/product-specification-table-stucture';\nimport { IProductSpecificationData } from './product-specification.data';\nimport { displayStyle, IProductSpecificationProps } from './product-specification.props.autogenerated';\n\n/**\n * Maintain Drawer State.\n */\nexport interface IProductSpecificationState {\n isDrawerOpen: boolean;\n isAdditionalMediaDrawerOpen: boolean;\n drawerListId: number | undefined;\n}\n\n/**\n * Product specification view props.\n */\nexport interface IProductSpecificationViewProps extends IProductSpecificationProps<{}> {\n ProductSpecification: IModuleProps;\n ProductSpecificationTableProps: INodeProps;\n ProductSpecificationTableBodyProps: INodeProps;\n productSpecificationResult?: (JSX.Element | null)[];\n\n title?: React.ReactNode;\n isAccrodion?: boolean;\n handleText?(event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * Check for display style either accordion or table.\n */\nexport interface IProductSpecificationExtentedProps extends IProductSpecificationProps<IProductSpecificationData> {\n displayStyle?: displayStyle;\n}\n\n/**\n *\n * ProductSpecification component.\n * @extends {React.Component<IProductSpecificationProps<IProductSpecificationData>>}\n */\n@observer\nclass ProductSpecification extends React.Component<IProductSpecificationExtentedProps, IProductSpecificationState> {\n public constructor(props: IProductSpecificationExtentedProps) {\n super(props);\n this.state = {\n isDrawerOpen: false,\n isAdditionalMediaDrawerOpen: false,\n drawerListId: undefined\n };\n }\n\n public async componentDidMount(): Promise<void> {\n const { context, data, telemetry } = this.props;\n const catalogId = Msdyn365.getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n reaction(\n () => (data.product.result ? data.product.result.RecordId : null),\n () => {\n if (context && data.product.result) {\n const actionInput = new AttributesForSelectedVariantInput(\n data.product.result.RecordId,\n\n +context.actionContext.requestContext.apiSettings.channelId,\n data.product.result,\n catalogId\n );\n\n getAttributesForSelectedVariant(actionInput, this.props.context.actionContext).catch((error: Error) => {\n telemetry.error(error.message);\n telemetry.debug('Unable to update attributes for Product');\n telemetry.error(error.message);\n });\n }\n }\n );\n }\n\n public shouldComponentUpdate(nextProps: IProductSpecificationExtentedProps, nextState: IProductSpecificationState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n let data: IProductSpecificationData;\n try {\n data = this.props.data;\n } catch (error) {\n this.props.telemetry.error(`Something went wrong ------${error}`);\n return <div>{error}</div>;\n }\n\n if (!data.productSpecificationData.result || data.productSpecificationData.result.length <= 0) {\n this.props.telemetry.error('Product specification content is empty, module wont render.');\n return null;\n }\n\n const { heading, className } = this.props.config;\n const { productSpecificationData } = this.props.data;\n const isAccrodion = this.props.config.displayStyle === displayStyle.accordion;\n const viewProps = {\n ...this.props,\n handleText: this.handleHeadingChange,\n ProductSpecification: {\n moduleProps: this.props,\n className: classnames('ms-product-specification', className)\n },\n ProductSpecificationTableProps: isAccrodion\n ? {\n moduleProps: this.props,\n className: classnames('ms-product-specification__accordion', className)\n }\n : {\n className: classnames('ms-product-specification__table table-striped table-bordered'),\n tag: 'table'\n },\n isAccrodion,\n ProductSpecificationTableBodyProps: isAccrodion\n ? {}\n : {\n className: '',\n tag: 'tbody'\n },\n title: heading?.text && (\n <Msdyn365.Text\n className='ms-product-specification__heading'\n tag={heading.tag ?? 'h2'}\n text={heading.text}\n editProps={{ onEdit: this.handleHeadingChange, requestContext: this.props.context.request }}\n />\n ),\n productSpecificationResult:\n productSpecificationData.result && (isAccrodion ? this._createDrawerBody(data) : this._createTableBody(data))\n } as IProductSpecificationViewProps;\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle Heading Text Change.\n * @param event - Current event.\n */\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n private _createTableBody(content: IProductSpecificationData): (JSX.Element | null)[] {\n const tableRows = content.productSpecificationData.result!.map((product, index) => {\n const cellData: JSX.Element | null = this._renderProductCell(product);\n\n if (!cellData) {\n return null;\n }\n\n return (\n <>\n <ProductSpecificationTableRow\n className='ms-product-specification__table-row'\n key={index}\n productName={product.Name}\n cellData={cellData}\n />\n </>\n );\n });\n\n if (this.props.context.request.app?.config?.OmniChannelMedia && this.props.data.additionalMediaLocations.result?.length) {\n tableRows.push(this._createAdditionalMediaDrawer());\n }\n\n return tableRows;\n }\n\n private _createDrawerBody(content: IProductSpecificationData): (JSX.Element | null)[] {\n const accordionItemContainer: IModuleProps = {\n moduleProps: this.props,\n className: 'ms-product-specification-title'\n };\n\n const drawers = content.productSpecificationData.result!.map(product => {\n const cellData: JSX.Element | null = this._renderProductCell(product);\n if (!cellData) {\n return null;\n }\n return (\n <Module {...accordionItemContainer} key={product.RecordId}>\n <Drawer\n key={product.RecordId}\n collapseProps={{\n timeout: 0,\n isOpen: this.state.isDrawerOpen && this.state.drawerListId === product.RecordId\n }}\n className='ms-product-specification__drawer'\n openGlyph='ms-product-specification__drawer-open'\n closeGlyph='ms-product-specification__drawer-close'\n glyphPlacement='end'\n toggleButtonText={product.Name ?? ''}\n onToggle={this._toggle(product.RecordId)}\n >\n <div className='ms-product-details'>{cellData}</div>\n </Drawer>\n </Module>\n );\n });\n\n if (this.props.context.request.app?.config?.OmniChannelMedia && this.props.data.additionalMediaLocations.result?.length) {\n drawers.push(this._createAdditionalMediaDrawer());\n }\n\n return drawers;\n }\n private _createAdditionalMediaDrawer(): JSX.Element {\n const accordionItemContainer: IModuleProps = {\n moduleProps: this.props,\n className: 'ms-product-specification-title'\n };\n\n return (\n <Module {...accordionItemContainer} key={'additional_media_drawer'}>\n <Drawer\n key={'additional_media_drawer'}\n collapseProps={{\n timeout: 0,\n isOpen: this.state.isAdditionalMediaDrawerOpen\n }}\n className='ms-product-specification__drawer'\n openGlyph='ms-product-specification__drawer-open'\n closeGlyph='ms-product-specification__drawer-close'\n glyphPlacement='end'\n toggleButtonText={this.props.resources.additionalDownloadsText}\n onToggle={() => {\n this.setState(prevState => ({\n ...prevState,\n isAdditionalMediaDrawerOpen: !prevState.isAdditionalMediaDrawerOpen\n }));\n }}\n >\n <div className='ms-product-details'>\n <ul className='ms-product-details-additional-media'>\n {(this.props.data.additionalMediaLocations.result || []).map(mediaLocation => (\n <li key={mediaLocation.Uri}>\n <a href={mediaLocation.Uri} download>\n {mediaLocation.AltText}\n </a>\n </li>\n ))}\n </ul>\n </div>\n </Drawer>\n </Module>\n );\n }\n\n private readonly _toggle = (drawerListId: number | undefined) => (): void => {\n if (this.state.drawerListId !== drawerListId) {\n this.setState({ drawerListId, isDrawerOpen: true });\n } else {\n this.setState({ drawerListId: undefined, isDrawerOpen: false });\n }\n };\n\n private _renderProductCell(product: AttributeValue): JSX.Element | null {\n switch (product.DataTypeValue) {\n case 0: // None\n // Return span here instead of null so the row still shows\n return <span />;\n case 1: // Currency\n return this._renderCurrencyCell(product);\n case 2: // DateTime\n return this._renderDateTimeCell(product);\n case 3: // Decimal\n return this._renderDecimalCell(product);\n case 4: // Integer\n return this._renderIntegerCell(product);\n case 5: // Text\n return this._renderTextCell(product);\n case 6: // TrueFalse\n return this._renderTrueFalseCell(product);\n case 40: // Video\n this.props.telemetry.warning('Got video specification type, not supported yet so skipping line');\n return null;\n case 41: // Image\n this.props.telemetry.warning('Got image specification type, not supported yet so skipping line');\n return null;\n default:\n this.props.telemetry.warning(`Got unknown specification type ${product.DataTypeValue} so skipping line`);\n return null;\n }\n }\n\n private _renderCurrencyCell(product: AttributeValue): JSX.Element | null {\n if (product.CurrencyValue !== null && product.CurrencyValue !== undefined) {\n return (\n <span>\n {product.CurrencyCode}\n {product.CurrencyValue}\n </span>\n );\n }\n\n return null;\n }\n\n private _renderDateTimeCell(product: AttributeValue): JSX.Element | null {\n if (product.DateTimeOffsetValue?.toUTCString) {\n return <span>{product.DateTimeOffsetValue.toUTCString()}</span>;\n }\n\n return null;\n }\n\n private _renderIntegerCell(product: AttributeValue): JSX.Element | null {\n if (product.IntegerValue !== null && product.IntegerValue !== undefined) {\n return <span>{product.IntegerValue}</span>;\n }\n\n return null;\n }\n\n private _renderDecimalCell(product: AttributeValue): JSX.Element | null {\n if (product.FloatValue !== null && product.FloatValue !== undefined) {\n return <span>{product.FloatValue}</span>;\n }\n\n return null;\n }\n\n private _renderTextCell(product: AttributeValue): JSX.Element | null {\n if (product.TextValue !== null && product.TextValue !== undefined) {\n // eslint-disable-next-line react/no-danger\n return <span dangerouslySetInnerHTML={Msdyn365.getRichTextHtml(product.TextValue)} />;\n }\n\n return null;\n }\n\n private _renderTrueFalseCell(product: AttributeValue): JSX.Element | null {\n // TODO 20369885 setting to default value is needed to work around a platform bug where\n // config string value does not get its default value.\n if (product.BooleanValue) {\n return <span>{this.props.resources.trueValueText ? this.props.resources.trueValueText : 'Yes'}</span>;\n }\n return <span>{this.props.resources.falseValueText ? this.props.resources.falseValueText : 'No'}</span>;\n }\n}\n\nexport default ProductSpecification;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n Heading,\n IComponentNodeProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ITileListProps, ITitleData } from './tile-list.props.autogenerated';\n\n/**\n * Tile-list view props.\n */\nexport interface ITileListViewProps extends ITileListProps<{}> {\n title?: React.ReactNode;\n tiles: React.ReactNode[];\n tileItemContainer: INodeProps;\n tileListContainer: INodeProps;\n tileListHeading: INodeProps;\n singleSlideCarouselComponentProps: INodeProps;\n}\n\n/**\n *\n * TileList component.\n * @extends {React.PureComponent<ITileListProps<{}>>}\n */\nexport class TileList extends React.PureComponent<ITileListProps<{}>> {\n private readonly _telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n private static _createHeading(heading?: ITitleData): React.ReactNode | null {\n if (!heading || !heading.text || StringExtensions.isNullOrWhitespace(heading.text)) {\n return null;\n }\n return <Heading headingTag={heading.tag} text={heading.text} className='ms-tile-list__title' />;\n }\n public constructor(props: ITileListProps<{}>) {\n super(props);\n }\n\n public render(): JSX.Element | null {\n const { resources } = this.props;\n const { title, className } = this.props.config;\n const propsCarousel: IComponentNodeProps<ISingleSlideCarouselProps> = {\n tag: SingleSlideCarousel,\n className: this.props.config.className ?? '',\n flipperPrevLabel: resources.flipperPrevious,\n flipperNextLabel: resources.flipperNext,\n parentId: this.props.id,\n telemetryContent: this._telemetryContent,\n vertical: false\n };\n\n const viewProps = {\n ...this.props,\n title: TileList._createHeading(title),\n singleSlideCarouselComponentProps: propsCarousel,\n tileItemContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-tile__item',\n role: 'listitem'\n },\n tileListContainer: { className: classnames('ms-tile-list', className) },\n tileListHeading: { className: 'ms-tile-list__heading' },\n tiles: this.props.slots.content\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n}\n\nexport default TileList;\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 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<IAccountProfileText> = ({ className, text }) => <span className={className}>{text}</span>;\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<IFmAccountProfileData>;\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<string>;\r\n attributeError: IDictionary<string>;\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<IAccountProfileAttributesProps, IAccountProfileAttributesState> {\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<string>;\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<HTMLButtonElement>;\r\n\r\n private readonly attributesContainerRef: React.RefObject<HTMLDivElement>;\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\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 <div\r\n ref={this.attributesContainerRef}\r\n className={classnames('ms-account-profile__attributes', {\r\n 'ms-account-profile__attributes-updating': this.isUpdatingAttributes\r\n })}\r\n >\r\n {config.additionalInformationSectionHeading && (\r\n <Text\r\n className='ms-account-profile__attributes-tile__heading'\r\n tag={config.additionalInformationSectionHeading.tag || 'h2'}\r\n text={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 <div className='ms-account-profile__attributes-error'>\r\n <label className='ms-account-profile__attributes-error-label'>\r\n {this.props.accountProfileProps.resources.attributesSaveExceptionMessage}\r\n </label>\r\n </div>\r\n )}\r\n {!edit && (\r\n <Button\r\n className={classnames('ms-account-profile__attributes-edit-button', {\r\n // Disable the toggle completely if customer is async.\r\n 'ms-account-profile__attributes-edit-button-disabled': disableBtn\r\n })}\r\n aria-label={`${resources.attributesEditButtonText} ${additionalInformationSectionHeading}`}\r\n onClick={this._enableAttributes}\r\n innerRef={this.editRef}\r\n title={resources.attributesEditButtonText}\r\n disabled={disableBtn}\r\n {...editAttributes}\r\n >\r\n {resources.attributesEditButtonText}\r\n </Button>\r\n )}\r\n {edit && (\r\n <Button\r\n className={classnames('ms-account-profile__attributes-save-button')}\r\n aria-label={resources.attributesSaveButtonText}\r\n onClick={this._saveAttributes}\r\n title={resources.attributesSaveButtonText}\r\n {...saveAttributes}\r\n >\r\n {resources.attributesSaveButtonText}\r\n </Button>\r\n )}\r\n {edit && (\r\n <Button\r\n className={classnames('ms-account-profile__attributes-cancel-button')}\r\n aria-label={resources.attributesCancelButtonText}\r\n onClick={this._disableAttributes}\r\n title={resources.attributesCancelButtonText}\r\n {...cancelAttributes}\r\n >\r\n {resources.attributesCancelButtonText}\r\n </Button>\r\n )}\r\n </div>\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 <div className={classnames('ms-account-profile__attributes__section', `ms-account-profile__attributes-${className}`)}>\r\n {phoneSectionHeading && <Text className='ms-account-profile__attributes__section-heading' tag='h3' text={heading} />}\r\n <input\r\n type='text'\r\n aria-label={heading}\r\n className={classnames(\r\n this.attributeClassName,\r\n 'ms-account-profile__attributes_input',\r\n `ms-account-profile__attributes_input-edit-${editAttributes}`,\r\n `ms-account-profile__${className}-input`\r\n )}\r\n onChange={this._onPhoneChange}\r\n value={this.state.phone || ''}\r\n disabled={!editAttributes}\r\n />\r\n {this._renderError('Phone')}\r\n </div>\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 <div className={classnames('ms-account-profile__attributes__section', `ms-account-profile__attributes-${className}`)}>\r\n {vatNumberSectionHeading && <Text className='ms-account-profile__attributes__section-heading' tag='h3' text={heading} />}\r\n <input\r\n type='text'\r\n aria-label={heading}\r\n className={classnames(\r\n this.attributeClassName,\r\n 'ms-account-profile__attributes_input',\r\n `ms-account-profile__attributes_input-edit-${editAttributes}`,\r\n `ms-account-profile__${className}-input`\r\n )}\r\n onChange={this._onVatNumberChange}\r\n value={this.state.vatNumber || ''}\r\n disabled={!editAttributes}\r\n />\r\n {this._renderError('VATNumber')}\r\n </div>\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 <div className={classnames('ms-account-profile__attributes__section', `ms-account-profile__attributes-${className}`)}>\r\n <Text className='ms-account-profile__attributes__section-heading' tag='h3' text={displayName} />\r\n <input\r\n type='text'\r\n aria-label={customAttribute.Name}\r\n className={classnames(\r\n this.attributeClassName,\r\n 'ms-account-profile__attributes_input',\r\n `ms-account-profile__attributes_input-edit-${edit}`,\r\n `ms-account-profile__${className}-input`\r\n )}\r\n onChange={this._onAttributeChange(customAttribute)}\r\n value={this.state.attributes[customAttribute.Name || ''] || ''}\r\n disabled={!editAttributes}\r\n aria-required={attributeProps.IsMandatory || false}\r\n />\r\n {this._renderError(customAttribute.Name || '')}\r\n </div>\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 <div className={classnames('ms-account-profile__attributes__section', `ms-account-profile__attributes-${className}`)}>\r\n <Text className='ms-account-profile__attributes__section-heading' tag='h3' text={displayName} />\r\n <select\r\n id={`ms-account-profile__attributes-${className}`}\r\n aria-label={customAttribute.Name}\r\n className={classnames(\r\n this.attributeClassName,\r\n 'ms-account-profile__attributes_select',\r\n `ms-account-profile__attributes_select-edit-${edit}`,\r\n `ms-account-profile__attributes-${className}_select`\r\n )}\r\n onChange={this._onAttributeSelect(customAttribute)}\r\n disabled={!editAttributes}\r\n aria-required={attributeProps.IsMandatory || false}\r\n >\r\n {hasNoValue && (\r\n <option\r\n className='ms-account-profile__attributes_select__option'\r\n key='blank'\r\n selected={hasNoValue}\r\n aria-selected={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 <option\r\n className='ms-account-profile__attributes_select__option'\r\n key={option.EnumerationValue}\r\n selected={selected}\r\n aria-selected={selected}\r\n >\r\n {option.EnumerationValue}\r\n </option>\r\n );\r\n })}\r\n </select>\r\n </div>\r\n );\r\n }\r\n\r\n if (this.props.accountProfileProps.config.source === 'FinanceOperationUS' && customAttribute.Name === 'Birthday') {\r\n return (\r\n <div className={classnames('ms-account-profile__attributes__section', `ms-account-profile__attributes-${className}`)}>\r\n <Text className='ms-account-profile__attributes__section-heading' tag='h3' text={displayName} />\r\n <input\r\n type='text'\r\n aria-label={customAttribute.Name}\r\n className={classnames(\r\n this.attributeClassName,\r\n 'ms-account-profile__attributes_input',\r\n `ms-account-profile__attributes_input-edit-${edit}`,\r\n `ms-account-profile__${className}-input`\r\n )}\r\n onChange={this._onUSBdayChange(customAttribute)}\r\n value={\r\n this.state.attributes[customAttribute.Name] !== undefined\r\n ? this.state.attributes[customAttribute.Name].replace('1900/', '').replace('/1900', '')\r\n : ''\r\n }\r\n disabled={!editAttributes}\r\n aria-required={attributeProps.IsMandatory || false}\r\n maxLength={5}\r\n />\r\n {this._renderError(customAttribute.Name || '')}\r\n </div>\r\n );\r\n }\r\n return (\r\n <div className={classnames('ms-account-profile__attributes__section', `ms-account-profile__attributes-${className}`)}>\r\n <Text className='ms-account-profile__attributes__section-heading' tag='h3' text={displayName} />\r\n <input\r\n type='text'\r\n aria-label={customAttribute.Name}\r\n className={classnames(\r\n this.attributeClassName,\r\n 'ms-account-profile__attributes_input',\r\n `ms-account-profile__attributes_input-edit-${edit}`,\r\n `ms-account-profile__${className}-input`\r\n )}\r\n onChange={this._onAttributeChange(customAttribute)}\r\n value={this.state.attributes[customAttribute.Name || ''] || ''}\r\n disabled={!editAttributes}\r\n aria-required={attributeProps.IsMandatory || false}\r\n />\r\n {this._renderError(customAttribute.Name || '')}\r\n </div>\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 <div\r\n className={classnames(\r\n 'ms-account-profile__attributes__section',\r\n 'ms-account-profile__attributes__section__toggle',\r\n `ms-account-profile__attributes-${className}`\r\n )}\r\n >\r\n <Text className='ms-account-profile__attributes__section-heading' tag='h3' text={displayName} />\r\n {render && (\r\n <div\r\n className={`ms-account-profile__attributes__section__toggle-wrapper ms-account-profile__attributes__section__toggle-${toggleState}`}\r\n >\r\n <TextComponent\r\n className='ms-account-profile__attributes__section__toggle-disable-text'\r\n text={this.props.accountProfileProps.resources.toggleDisableText}\r\n />\r\n <Button\r\n className={classnames(\r\n this.attributeClassName,\r\n 'ms-account-profile__attributes__section__toggle-button',\r\n `ms-account-profile__attributes__section__toggle-${toggleState}-button`\r\n )}\r\n aria-label={`${arialabel}`}\r\n aria-pressed={ariaPressed}\r\n value={value}\r\n onClick={this._onAttributeCheck(customAttribute, toggleValue)}\r\n disabled={!editAttributes}\r\n />\r\n <TextComponent\r\n className='ms-account-profile__attributes__section__toggle-enable-text'\r\n text={this.props.accountProfileProps.resources.toggleEnableText}\r\n />\r\n </div>\r\n )}\r\n </div>\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 <div className='ms-account-profile__attributes-error' role='alert' aria-live='assertive'>\r\n <label className='ms-account-profile__attributes-error-label'>{error}</label>\r\n </div>\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<HTMLInputElement>): 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<HTMLInputElement>): 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<Element> = 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<HTMLInputElement>) => {\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<HTMLInputElement>) => {\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<HTMLElement>\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<HTMLSelectElement>) => {\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<string> = {};\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<string> = {};\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 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<string> = {};\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<IAccountProfileDescription> = ({ className, description }) => (\r\n <p className={className}>{description}</p>\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<IAccountProfileLinks> = ({ 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 <div className='ms-account-profile__section-links'>\r\n {editableLinks && editableLinks.length > 0 ? (\r\n <Msdyn365.Links links={editableLinks} editProps={{ onTextChange, requestContext }} />\r\n ) : null}\r\n </div>\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","import React, { useState } from 'react';\r\nimport classnames from 'classnames';\r\n\r\nimport { Text } from '@msdyn365-commerce/core';\r\nimport { Button, format } from '@msdyn365-commerce-modules/utilities';\r\nimport { updateCustomerAttributes, updateCustomerAttributesInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport isEqual from 'lodash/isEqual';\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\nimport { updateAllConsentsAsync } from '../../../actions/DataActionExtension.g';\r\n\r\n// import PhoneInputComponent from '../../../common/components/phone-number-input';\r\n\r\nexport interface ProfileConsent {\r\n text: string; // GenMarketing, Profiling, ThirdParty\r\n value: boolean;\r\n}\r\n\r\nexport enum ConsentText {\r\n GEN_MARKETING = 'GenMarketing',\r\n PROFILING = 'Profiling',\r\n THIRD_PARTY = 'ThirdParty'\r\n}\r\n\r\nexport enum ConsentName {\r\n EMAIL = 'Email',\r\n SMS = 'Sms'\r\n}\r\n\r\ninterface ConsentChannel {\r\n title: string; // Marketing telefono | Marketing Email\r\n text: string; // Numbero telefono | Indirizzo Email\r\n name: ConsentName; // Sms | Email\r\n value: string; // +3935165656 | test@venchi.com\r\n emailConsents: ProfileConsent[];\r\n smsConsents: ProfileConsent[];\r\n}\r\n\r\ninterface IAccountProfileAttributesProps {\r\n accountProfileProps: IFmAccountProfileProps<IFmAccountProfileData>;\r\n}\r\n\r\ninterface ProfileConsentSectionProps {\r\n consentChannel: ConsentChannel;\r\n locale: string;\r\n hideCountryCodeSelector: boolean;\r\n}\r\n\r\nconst ProfileConsentSection = (props: IAccountProfileAttributesProps & ProfileConsentSectionProps) => {\r\n let initialChannelValue = props.consentChannel.value;\r\n let initialConsents =\r\n props.consentChannel.name === ConsentName.SMS ? props.consentChannel.smsConsents : props.consentChannel.emailConsents;\r\n\r\n const MAX_PHONE_LENGTH = 25;\r\n\r\n const [consents, setConsents] = useState<ProfileConsent[]>(initialConsents);\r\n\r\n const [channelValue, setChannelValue] = useState<string>(initialChannelValue);\r\n const [canEdit, setCanEdit] = useState<boolean>(false);\r\n const [isUpdating, setIsUpdating] = useState<boolean>(false);\r\n const [validationError, setValidationError] = useState<string>('');\r\n const [gotExceptionError, setGotExceptionError] = useState<boolean>(false);\r\n\r\n // Used when we want to change phone number in this component, otherwise remove it\r\n // const handleAttributeChange = (event: any) => {\r\n // setChannelValue(event.target.value);\r\n // };\r\n\r\n const handleConsentToggle = (consent: ProfileConsent) => {\r\n setConsents(prevConsents => prevConsents.map(c => (c.text === consent.text ? { ...c, value: !c.value } : c)));\r\n };\r\n\r\n const handleSaveButton = async () => {\r\n const { context, data, resources } = props.accountProfileProps;\r\n const customer = data.customerInformation.result;\r\n\r\n if (!customer || !context) {\r\n return;\r\n }\r\n\r\n const promises: Promise<any>[] = [];\r\n\r\n if (props.consentChannel.name === ConsentName.SMS) {\r\n if (channelValue.trim().length > MAX_PHONE_LENGTH) {\r\n setValidationError(format(resources.attributeInputStringMaxLengthErrorText, 'Phone', MAX_PHONE_LENGTH));\r\n } else {\r\n customer.Phone = channelValue.trim();\r\n\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 if (customer.Phone !== initialChannelValue) {\r\n promises.push(\r\n updateCustomerAttributes(input, context.actionContext).then(() => {\r\n initialChannelValue = channelValue;\r\n })\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (!isEqual(consents, initialConsents)) {\r\n const updatedConsents = {\r\n key: 0,\r\n ...(props.consentChannel.name === ConsentName.SMS\r\n ? {\r\n GenMarketingSms: consents.find(c => c.text === ConsentText.GEN_MARKETING)?.value,\r\n ProfilingSms: consents.find(c => c.text === ConsentText.PROFILING)?.value,\r\n ThirdPartySms: consents.find(c => c.text === ConsentText.THIRD_PARTY)?.value,\r\n GenMarketingEmail: props.consentChannel.emailConsents.find(c => c.text === ConsentText.GEN_MARKETING)?.value,\r\n ProfilingEmail: props.consentChannel.emailConsents.find(c => c.text === ConsentText.PROFILING)?.value,\r\n ThirdPartyEmail: props.consentChannel.emailConsents.find(c => c.text === ConsentText.THIRD_PARTY)?.value\r\n }\r\n : {\r\n GenMarketingEmail: consents.find(c => c.text === ConsentText.GEN_MARKETING)?.value,\r\n ProfilingEmail: consents.find(c => c.text === ConsentText.PROFILING)?.value,\r\n ThirdPartyEmail: consents.find(c => c.text === ConsentText.THIRD_PARTY)?.value,\r\n GenMarketingSms: props.consentChannel.smsConsents.find(c => c.text === ConsentText.GEN_MARKETING)?.value,\r\n ProfilingSms: props.consentChannel.smsConsents.find(c => c.text === ConsentText.PROFILING)?.value,\r\n ThirdPartySms: props.consentChannel.smsConsents.find(c => c.text === ConsentText.THIRD_PARTY)?.value\r\n })\r\n };\r\n promises.push(updateAllConsentsAsync({ callerContext: context.actionContext }, updatedConsents));\r\n }\r\n\r\n if (!promises.length) {\r\n return;\r\n }\r\n\r\n setIsUpdating(true);\r\n setCanEdit(false);\r\n\r\n try {\r\n await Promise.all(promises);\r\n initialConsents = consents;\r\n } catch (error) {\r\n setGotExceptionError(true);\r\n\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\r\n setChannelValue(initialChannelValue);\r\n }\r\n\r\n setIsUpdating(false);\r\n };\r\n\r\n const handleCancelButton = () => {\r\n setConsents(initialConsents);\r\n setCanEdit(false);\r\n setChannelValue(initialChannelValue);\r\n };\r\n\r\n const handleEditButton = () => {\r\n setGotExceptionError(false);\r\n setValidationError('');\r\n setCanEdit(true);\r\n };\r\n\r\n const renderConsentRow = (consent: ProfileConsent): JSX.Element | null => {\r\n const value = consent.value;\r\n const toggleState = value ? 'enable' : 'disable';\r\n const ariaLabel = format(props.accountProfileProps.resources.attributeToggleButtonAriaLabel, consent.text);\r\n\r\n const attributeClassName = 'ms-account-profile__attributes-element';\r\n\r\n let text;\r\n\r\n switch (consent.text) {\r\n case ConsentText.GEN_MARKETING:\r\n text =\r\n props.locale.toLowerCase() !== 'en-us'\r\n ? format(\r\n props.accountProfileProps.resources.htmlGenericMarketing,\r\n props.accountProfileProps.config.privacyPolicyURL\r\n )\r\n : props.accountProfileProps.config.textGenericMarketing;\r\n break;\r\n case ConsentText.PROFILING:\r\n text = format(props.accountProfileProps.resources.htmlProfiling, props.accountProfileProps.config.privacyPolicyURL);\r\n break;\r\n case ConsentText.THIRD_PARTY:\r\n text = format(props.accountProfileProps.resources.htmlThirdParty, props.accountProfileProps.config.privacyPolicyURL);\r\n break;\r\n }\r\n\r\n return (\r\n <div className={classnames('ms-account-profile__attributes__section', 'ms-account-profile__attributes__section__toggle')}>\r\n <div dangerouslySetInnerHTML={{ __html: String(text) }} />\r\n\r\n <div\r\n className={`ms-account-profile__attributes__section__toggle-wrapper ms-account-profile__attributes__section__toggle-${toggleState}`}\r\n >\r\n <TextComponent\r\n className='ms-account-profile__attributes__section__toggle-disable-text'\r\n text={props.accountProfileProps.resources.toggleDisableText}\r\n />\r\n <Button\r\n className={classnames(\r\n attributeClassName,\r\n 'ms-account-profile__attributes__section__toggle-button',\r\n `ms-account-profile__attributes__section__toggle-${toggleState}-button`\r\n )}\r\n aria-label={`${ariaLabel}`}\r\n aria-pressed={value}\r\n value={String(value)}\r\n onClick={() => handleConsentToggle(consent)}\r\n disabled={!canEdit}\r\n />\r\n <TextComponent\r\n className='ms-account-profile__attributes__section__toggle-enable-text'\r\n text={props.accountProfileProps.resources.toggleEnableText}\r\n />\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const editAsyncCustomerFeatureName = 'Dynamics.AX.Application.RetailEnableAsyncCustomerEditFeature';\r\n\r\n const customerInformation = props.accountProfileProps.data.customerInformation.result;\r\n const isEditAsyncCustomerFeatureEnabled =\r\n props.accountProfileProps.data.featureState?.result?.find(feature => feature.Name === editAsyncCustomerFeatureName)?.IsEnabled ||\r\n 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 (props.accountProfileProps.context.app?.config?.canRenderAsyncCustomerDataAsUnmodifiable || false) &&\r\n (customerInformation?.IsAsyncCustomer || false) &&\r\n !isEditAsyncCustomerFeatureEnabled;\r\n\r\n const additionalInformationSectionHeading =\r\n (props.accountProfileProps.config.additionalInformationSectionHeading &&\r\n props.accountProfileProps.config.additionalInformationSectionHeading.text) ||\r\n '';\r\n\r\n // Used when we want to change phone number in this component, otherwise remove it\r\n // This error is shown under the register button.\r\n // const [phoneErrorMessage, setPhoneErrorMessage] = React.useState('');\r\n\r\n // console.log(phoneErrorMessage);\r\n\r\n // TODO add channelCountryRegionISOCode to props a\r\n // const currentChannelCountryRegionISOCode = props.channelCountryRegionISOCode;\r\n // const currentChannelCountryRegionISOCode = 'IT';\r\n\r\n // TODO: use this code to detect if the phone number format\r\n // is correct and has country code prefix.\r\n // const detectCountryCode = (value: string) => {\r\n // for (const country of countryCodeOptions) {\r\n // if (value.startsWith(country.dial_code)) {\r\n // return country;\r\n // }\r\n // }\r\n // return null;\r\n // };\r\n return (\r\n <div\r\n className={classnames('ms-account-profile__attributes', {\r\n 'ms-account-profile__attributes-updating': isUpdating\r\n })}\r\n >\r\n <Text className='ms-account-profile__attributes-tile__heading' tag={'h3'} text={props.consentChannel.title} />\r\n\r\n <div className={classnames('ms-account-profile__attributes__section')}>\r\n <Text className='ms-account-profile__attributes__section-heading' tag='h3' text={props.consentChannel.text} />\r\n\r\n <input\r\n type='text'\r\n aria-label={props.consentChannel.text}\r\n className={classnames('ms-account-profile__attributes_input', `ms-account-profile__attributes_input-edit-${canEdit}`)}\r\n // onChange={handleAttributeChange}\r\n value={channelValue}\r\n disabled={true}\r\n />\r\n {/* {props.consentChannel.name === ConsentName.SMS && !canEdit && (\r\n <input\r\n type='text'\r\n aria-label={props.consentChannel.text}\r\n className={classnames(\r\n 'ms-account-profile__attributes_input',\r\n `ms-account-profile__attributes_input-edit-${canEdit}`\r\n )}\r\n onChange={handleAttributeChange}\r\n value={channelValue}\r\n disabled={true}\r\n />\r\n )} */}\r\n\r\n {/* {props.consentChannel.name === ConsentName.SMS && canEdit && (\r\n <PhoneInputComponent\r\n channelCountryRegionISOCode={currentChannelCountryRegionISOCode}\r\n isCountryCodeHidden={props.hideCountryCodeSelector || false}\r\n phoneInputId={'phone-consent-profile'}\r\n phoneValue={channelValue}\r\n resources={{\r\n phoneValidationErrorMin: 'props.resources.phoneValidationErrorMin',\r\n phoneValidationErrorMax: 'props.resources.phoneValidationErrorMax',\r\n phoneValidationErrorNumeric: 'props.resources.phoneValidationErrorNumeric'\r\n }}\r\n onPhoneNumberChange={(phoneNumber: string, fullPhoneNumber: string, hasValidationError: boolean) => {\r\n if (!hasValidationError) {\r\n setPhoneErrorMessage('');\r\n } else {\r\n setPhoneErrorMessage('props.resources.phoneValidationErrorMessage');\r\n }\r\n const phoneNumberHidden: HTMLInputElement = document.getElementById(\r\n 'extension_PhoneNumber'\r\n ) as HTMLInputElement;\r\n\r\n phoneNumberHidden.value = phoneNumber ? fullPhoneNumber : '';\r\n }}\r\n />\r\n )} */}\r\n\r\n {validationError && (\r\n <div className='ms-account-profile__attributes-error' role='alert' aria-live='assertive'>\r\n <label className='ms-account-profile__attributes-error-label'>{validationError}</label>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {consents.map(renderConsentRow)}\r\n\r\n {!canEdit && (\r\n <Button\r\n className={classnames('ms-account-profile__attributes-edit-button', {\r\n // Disable the toggle completely if customer is async.\r\n 'ms-account-profile__attributes-edit-button-disabled': disableBtn\r\n })}\r\n aria-label={`${props.accountProfileProps.resources.attributesEditButtonText} ${additionalInformationSectionHeading}`}\r\n onClick={handleEditButton}\r\n title={props.accountProfileProps.resources.attributesEditButtonText}\r\n disabled={disableBtn}\r\n >\r\n {props.accountProfileProps.resources.attributesEditButtonText}\r\n </Button>\r\n )}\r\n {gotExceptionError && (\r\n <div className='ms-account-profile__attributes-error'>\r\n <label className='ms-account-profile__attributes-error-label'>\r\n {props.accountProfileProps.resources.attributesSaveExceptionMessage}\r\n </label>\r\n </div>\r\n )}\r\n {canEdit && (\r\n <Button\r\n className={classnames('ms-account-profile__attributes-save-button')}\r\n aria-label={props.accountProfileProps.resources.attributesSaveButtonText}\r\n onClick={handleSaveButton}\r\n title={props.accountProfileProps.resources.attributesSaveButtonText}\r\n >\r\n {props.accountProfileProps.resources.attributesSaveButtonText}\r\n </Button>\r\n )}\r\n {canEdit && (\r\n <Button\r\n className={classnames('ms-account-profile__attributes-cancel-button')}\r\n aria-label={props.accountProfileProps.resources.attributesCancelButtonText}\r\n onClick={handleCancelButton}\r\n title={props.accountProfileProps.resources.attributesCancelButtonText}\r\n >\r\n {props.accountProfileProps.resources.attributesCancelButtonText}\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default ProfileConsentSection;\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\n\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 IPhoneSectionHeadingData\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\nimport ProfileConsentSection, { ConsentName, ConsentText } from './components/fm-account-profile-consent-section';\r\nimport { validatePhoneNumberWithCountryCode } from '../../common/utils/phone-number-utils';\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<IFmAccountProfileData> {\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 phoneSection: IAccountProfileItem;\r\n preferenceSection: IAccountPreferences;\r\n customerAttributesWrapper?: INodeProps;\r\n customerAttributesSection?: IAccountCustomerAttributes;\r\n emailConsentsWrapper?: INodeProps;\r\n emailConsentsSection?: IAccountCustomerAttributes;\r\n phoneConsentsWrapper?: INodeProps;\r\n phoneConsentsSection?: IAccountCustomerAttributes;\r\n infoMessageBar?: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * AccountProfile component.\r\n * @extends {React.Component<IFmAccountProfileProps<IFmAccountProfileData>>}\r\n */\r\n@observer\r\nclass AccountProfile extends React.Component<IFmAccountProfileProps<IFmAccountProfileData>> {\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<IFmAccountProfileData>) {\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<IFmAccountProfileData>): 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 private _renderModifyPhoneLabel(): string {\r\n const phone = this.props.data.customerInformation.result?.Phone || '';\r\n\r\n if (!phone) {\r\n return this.props.resources.modifyEmptyPhoneText;\r\n }\r\n\r\n if (phone && !validatePhoneNumberWithCountryCode(phone)) {\r\n return this.props.resources.modifyInvalidPhoneText;\r\n }\r\n\r\n return this.props.resources.modifyValidPhoneText;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { config, resources, data } = this.props;\r\n\r\n const {\r\n className,\r\n heading,\r\n emailAddressSectionHeading,\r\n nameSectionHeading,\r\n phoneSectionHeading,\r\n showAttributes,\r\n showPhone,\r\n showVatNumber\r\n } = 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 <Msdyn365.Text className='ms-account-profile__info' text={resources.accountProcessingPendingInfoMessage} />\r\n ),\r\n accountProfileWrapper: {\r\n className: classnames('ms-account-profile-wrapper')\r\n },\r\n heading: heading && (\r\n <Msdyn365.Text\r\n className='ms-account-loyalty-tile__heading'\r\n tag={heading.tag || 'h2'}\r\n text={heading.text}\r\n editProps={{ onEdit: this.handleHeadingChange, requestContext: this.props.context.request }}\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 phoneSection: this._renderPhoneSection(\r\n classnames('ms-account-profile__section', 'ms-account-profile__section-phone'),\r\n phoneSectionHeading as IPhoneSectionHeadingData,\r\n this.props.data.customerInformation.result?.Phone || ''\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 emailConsentsWrapper: {\r\n className: classnames('ms-account-profile__attributes-wrapper ms-account-profile__attributes-wrapper--email')\r\n },\r\n emailConsentsSection: shouldRenderAttributes && this._renderEmailConsents(),\r\n phoneConsentsWrapper: {\r\n className: classnames('ms-account-profile__attributes-wrapper')\r\n },\r\n phoneConsentsSection: shouldRenderAttributes && this._renderPhoneConsents()\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 <Msdyn365.Text\r\n className='ms-account-profile__section-heading'\r\n tag={heading.tag || 'h2'}\r\n text={heading.text}\r\n editProps={{ onEdit: this.handleEmailHeadingChange, requestContext: this.props.context.request }}\r\n />\r\n ),\r\n links: links && links.length > 0 && (\r\n <LinksComponent\r\n {...{\r\n links,\r\n onTextChange: this.handleLinkTextChange,\r\n requestContext: this.props.context.request,\r\n telemetryContent: this.telemetryContent\r\n }}\r\n />\r\n ),\r\n description: description && (\r\n <DescriptionComponent className='ms-account-profile__section-description' description={description} />\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 <Msdyn365.Text\r\n className='ms-account-profile__section-heading'\r\n tag={heading.tag || 'h2'}\r\n text={heading.text}\r\n editProps={{ onEdit: this.handleNameHeadingChange, requestContext: this.props.context.request }}\r\n />\r\n ),\r\n description: description && (\r\n <DescriptionComponent className='ms-account-profile__section-description' description={description} />\r\n )\r\n };\r\n }\r\n return {\r\n AccountProfileItem: {\r\n className\r\n },\r\n heading: heading && (\r\n <Msdyn365.Text\r\n className='ms-account-profile__section-heading'\r\n tag={heading.tag || 'h2'}\r\n text={heading.text}\r\n editProps={{ onEdit: this.handleNameHeadingChange, requestContext: this.props.context.request }}\r\n />\r\n ),\r\n links: (\r\n <LinksComponent\r\n {...{\r\n links,\r\n onTextChange: this.handleLinkTextChange,\r\n requestContext: this.props.context.request,\r\n telemetryContent: this.telemetryContent\r\n }}\r\n />\r\n ),\r\n description: description && (\r\n <DescriptionComponent className='ms-account-profile__section-description' description={description} />\r\n )\r\n };\r\n }\r\n\r\n private _renderPhoneSection(className: string, heading?: IPhoneSectionHeadingData, description?: string): IAccountProfileItem {\r\n return {\r\n AccountProfileItem: {\r\n className\r\n },\r\n heading: heading && (\r\n <Msdyn365.Text\r\n className='ms-account-profile__section-heading'\r\n tag={heading.tag || 'h2'}\r\n text={heading.text}\r\n editProps={{ onEdit: this.handleNameHeadingChange, requestContext: this.props.context.request }}\r\n />\r\n ),\r\n description: (\r\n <>\r\n <input\r\n type='text'\r\n aria-label='Phone'\r\n className='ms-account-profile__attributes-element ms-account-profile__attributes_input ms-account-profile__attributes_input-edit-false'\r\n value={description}\r\n aria-required='false'\r\n disabled\r\n />\r\n <p\r\n className={`ms-account-profile__section-description ms-account-profile__section-description--phone ${\r\n description && !validatePhoneNumberWithCountryCode(description)\r\n ? 'ms-account-profile__section-description--warning'\r\n : ''\r\n }`}\r\n >\r\n {this._renderModifyPhoneLabel()}\r\n </p>\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 <Msdyn365.Text\r\n className='ms-account-profile__section-heading'\r\n tag={preferencesSectionHeading.tag || 'h2'}\r\n text={preferencesSectionHeading.text}\r\n editProps={{ onEdit: this.handleHeadingChange, requestContext: this.props.context.request }}\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 <Msdyn365.Text\r\n className='ms-account-profile__preference-heading'\r\n tag={sectionHeading.tag || 'h2'}\r\n text={sectionHeading.text}\r\n editProps={{ onEdit: this.handleHeadingChange, requestContext: this.props.context.request }}\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: <TextComponent className='ms-account-profile__toggle-enable-text' text={toggleEnableText} />,\r\n buttonNoText: <TextComponent className='ms-account-profile__toggle-disable-text' text={toggleDisableText} />,\r\n button: (\r\n <Button\r\n className={classnames('ms-account-profile__toggle-button', `ms-account-profile__toggle-${toggleState}-button`)}\r\n aria-label={enableAriaLabel}\r\n value={isOptOut.toString()}\r\n aria-pressed={!isOptOut}\r\n onClick={onClickHandler}\r\n disabled={disableBtn}\r\n {...attributes}\r\n />\r\n ),\r\n description: <DescriptionComponent className='ms-account-profile__preference-description' description={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 <AccountProfileAttributes accountProfileProps={this.props} />;\r\n };\r\n\r\n private readonly _renderEmailConsents = (): React.ReactNode => {\r\n const profileConsents = this.props.data.profileConsents.result;\r\n const consentChannel = {\r\n text: this.props.resources.emailConsentText,\r\n title: this.props.resources.emailConsentTitle,\r\n name: ConsentName.EMAIL,\r\n value: this.props.data.customerInformation.result?.Email || '',\r\n emailConsents: [\r\n { text: ConsentText.GEN_MARKETING, value: profileConsents?.GenMarketingEmail || false },\r\n { text: ConsentText.PROFILING, value: profileConsents?.ProfilingEmail || false },\r\n { text: ConsentText.THIRD_PARTY, value: profileConsents?.ThirdPartyEmail || false }\r\n ],\r\n smsConsents: [\r\n { text: ConsentText.GEN_MARKETING, value: profileConsents?.GenMarketingSms || false },\r\n { text: ConsentText.PROFILING, value: profileConsents?.ProfilingSms || false },\r\n { text: ConsentText.THIRD_PARTY, value: profileConsents?.ThirdPartySms || false }\r\n ]\r\n };\r\n\r\n return (\r\n <ProfileConsentSection\r\n accountProfileProps={this.props}\r\n consentChannel={consentChannel}\r\n locale={this.props.context.request.locale}\r\n hideCountryCodeSelector={false}\r\n />\r\n );\r\n };\r\n\r\n private readonly _renderPhoneConsents = (): React.ReactNode => {\r\n const profileConsents = this.props.data.profileConsents.result;\r\n const consentChannel = {\r\n text: this.props.resources.phoneConsentText,\r\n title: this.props.resources.phoneConsentTitle,\r\n name: ConsentName.SMS,\r\n value: this.props.data.customerInformation.result?.Phone || '',\r\n emailConsents: [\r\n { text: ConsentText.GEN_MARKETING, value: profileConsents?.GenMarketingEmail || false },\r\n { text: ConsentText.PROFILING, value: profileConsents?.ProfilingEmail || false },\r\n { text: ConsentText.THIRD_PARTY, value: profileConsents?.ThirdPartyEmail || false }\r\n ],\r\n smsConsents: [\r\n { text: ConsentText.GEN_MARKETING, value: profileConsents?.GenMarketingSms || false },\r\n { text: ConsentText.PROFILING, value: profileConsents?.ProfilingSms || false },\r\n { text: ConsentText.THIRD_PARTY, value: profileConsents?.ThirdPartySms || false }\r\n ]\r\n };\r\n\r\n return (\r\n <ProfileConsentSection\r\n accountProfileProps={this.props}\r\n consentChannel={consentChannel}\r\n locale={this.props.context.request.locale}\r\n hideCountryCodeSelector={false}\r\n />\r\n );\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\n\r\n// tslint:disable:no-reference\r\n/// <reference path=\"types/MicrosoftMaps/Microsoft.Maps.All.d.ts\" />\r\n\r\nimport { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\r\nimport classname from 'classnames';\r\nimport { reaction, when } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IStoreInfo } from '@msdyn365-commerce-modules/bopis-utilities';\r\n\r\nimport { IMapCustomData } from './map-custom.data';\r\nimport { IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport { IMapCustomProps, IMapCustomResources, IPushpinOptionsData } from './map-custom.props.autogenerated';\r\n\r\n/**\r\n * Header Interface.\r\n */\r\nexport interface IHeader {\r\n headerProps: INodeProps;\r\n heading: React.ReactNode;\r\n}\r\n/**\r\n * MapViewProps Interface.\r\n */\r\nexport interface IMapViewProps extends IMapCustomProps<IMapCustomData> {\r\n ModuleProps: IModuleProps;\r\n Header: IHeader;\r\n MapProps: INodeProps;\r\n Map: Microsoft.Maps.Map | undefined;\r\n}\r\n\r\nenum StoreType {\r\n VenchiStore,\r\n Retailer\r\n}\r\n\r\ninterface PushpinData {\r\n pushpin: Microsoft.Maps.Pushpin;\r\n storeType: StoreType;\r\n index: number;\r\n}\r\n\r\n/**\r\n *\r\n * Map component.\r\n * @extends {React.Component<IMapCustomProps<IMapCustomData>>}\r\n */\r\n@observer\r\nclass Map extends React.PureComponent<IMapCustomProps<IMapCustomData>> {\r\n private map: Microsoft.Maps.Map | undefined;\r\n private clusterLayer: Microsoft.Maps.ClusterLayer | undefined;\r\n private pushpinMap: globalThis.Map<string, PushpinData> = new globalThis.Map();\r\n private selectedPushPin: PushpinData | undefined = undefined;\r\n private clusterClickHandler: Microsoft.Maps.IHandlerId | undefined = undefined;\r\n private cachedLastInlineShownStoreInfo: IStoreInfo | undefined;\r\n private cachedOrgUnitFoundCount: number = 0;\r\n //TODO finire sviluppo\r\n // public previousPositionUser = undefined;\r\n\r\n private readonly mapRef: React.RefObject<HTMLElement> = React.createRef<HTMLElement>();\r\n\r\n public constructor(props: IMapCustomProps<IMapCustomData>) {\r\n super(props);\r\n }\r\n\r\n public componentDidMount(): void {\r\n const {\r\n context: {\r\n telemetry,\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n }\r\n } = this.props;\r\n\r\n if (channel && !channel.BingMapsApiKey) {\r\n telemetry.error('BingMapsApiKey is missing.');\r\n return;\r\n }\r\n\r\n if (channel && !channel.BingMapsEnabled) {\r\n telemetry.error('Map is disabled from HQ.');\r\n return;\r\n }\r\n\r\n if (this.props.data.storeSelectorStateManager.result?.isMapApiLoaded) {\r\n this._initMap();\r\n this._updateMapForOrgUnitChanges();\r\n }\r\n\r\n when(\r\n () => !!this.props.data.storeSelectorStateManager.result?.setMapModuleLoaded,\r\n () => {\r\n this.props.data.storeSelectorStateManager.result?.setMapModuleLoaded(true);\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.loadMapApi,\r\n () => {\r\n this.props.data.storeSelectorStateManager.result?.loadMapApi({\r\n key: channel?.BingMapsApiKey,\r\n lang: this.props.context.actionContext.requestContext.locale,\r\n market: this.props.context?.actionContext?.requestContext?.channel?.ChannelCountryRegionISOCode\r\n });\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.isMapApiLoaded,\r\n () => {\r\n this._initMap();\r\n }\r\n );\r\n\r\n // reaction(\r\n // () => {\r\n // return [\r\n // this.props.data.storeSelectorStateManager.result?.context?.orgUnitStoreInformation,\r\n // this.props.data.storeSelectorStateManager.result?.selectedStoreLocationId,\r\n // this.map\r\n // ];\r\n // },\r\n // () => {\r\n // this._updateMap();\r\n // }\r\n // );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.context?.orgUnitStoreInformation,\r\n () => {\r\n this._updateMapForOrgUnitChanges();\r\n }\r\n );\r\n\r\n reaction(\r\n () => this.props.data.storeSelectorStateManager.result?.selectedStoreLocationId,\r\n () => {\r\n this._updateMapForSelectedStore();\r\n }\r\n );\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n config: { heading, className },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n\r\n const shouldDisplayMap = storeSelectorStateManager?.listMapViewState.displayMap;\r\n\r\n const viewProps: IMapViewProps = {\r\n ...this.props,\r\n ModuleProps: {\r\n tag: 'div',\r\n moduleProps: this.props,\r\n className: classname('ms-map', { show: shouldDisplayMap }, className)\r\n },\r\n Header: {\r\n headerProps: { className: 'ms-map__header' },\r\n heading: heading?.text && (\r\n <Msdyn365.Text\r\n className='ms-map__heading'\r\n {...heading}\r\n tag={heading.tag || 'h2'}\r\n text={heading.text}\r\n editProps={{ onEdit: this.handleHeadingChange, requestContext: this.props.context.request }}\r\n />\r\n )\r\n },\r\n MapProps: {\r\n tag: 'div',\r\n className: 'ms-map__body',\r\n ref: this.mapRef\r\n },\r\n Map: this.map\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Method to be called on heading change.\r\n * @param event -Content Edit Event.\r\n */\r\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent): void => {\r\n this.props.config.heading!.text = event.target.value;\r\n };\r\n\r\n /**\r\n * Initialize the map.\r\n */\r\n private readonly _initMap = () => {\r\n const {\r\n context: {\r\n actionContext: {\r\n requestContext: { channel }\r\n }\r\n },\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager }\r\n }\r\n } = this.props;\r\n if (storeSelectorStateManager?.isMapApiLoaded && !this.map) {\r\n this.map = new Microsoft.Maps.Map(this.mapRef.current as HTMLElement, {\r\n credentials: channel?.BingMapsApiKey,\r\n pushpinAccessible: true,\r\n labelOverlay: Microsoft.Maps.LabelOverlay.hidden,\r\n showMapTypeSelector: false,\r\n showLocateMeButton: true,\r\n showTrafficButton: false,\r\n navigationBarMode: 3 as Microsoft.Maps.NavigationBarMode,\r\n enableInertia: true,\r\n customMapStyle: {\r\n elements: {\r\n countryRegion: { labelVisible: false }\r\n },\r\n version: '1.0'\r\n }\r\n });\r\n //TODO restore this pls cause i'll cry if not\r\n // Microsoft.Maps.Events.addHandler(this.map, 'click', async () => {\r\n // await storeSelectorStateManager.setSelectedStoreLocationId(undefined);\r\n // });\r\n }\r\n };\r\n\r\n private checkSameLocation(input: IStoreInfo, secondInput: IStoreInfo) {\r\n return input.Latitude === secondInput.Latitude && input.Longitude === secondInput.Longitude;\r\n }\r\n\r\n /**\r\n * Update the map.\r\n */\r\n private readonly _updateMapForOrgUnitChanges = () => {\r\n const pushpinOptions = this.props.config.pushpinOptions;\r\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager?.result;\r\n const orgUnitStoreInformation = storeSelectorStateManager?.context?.orgUnitStoreInformation;\r\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\r\n const positionUser = storeSelectorStateManager?.lastInlineShownStoreInfo;\r\n var positionUserChanged: boolean = false;\r\n var firstOrgUnitsRender: boolean = false;\r\n if (positionUser) {\r\n if (\r\n this.cachedLastInlineShownStoreInfo === undefined ||\r\n !this.checkSameLocation(positionUser, this.cachedLastInlineShownStoreInfo)\r\n ) {\r\n this.cachedLastInlineShownStoreInfo = positionUser;\r\n positionUserChanged = true;\r\n }\r\n }\r\n if (this.map && orgUnitStoreInformation) {\r\n this.pushpinMap = new globalThis.Map();\r\n //TODO RESTORE\r\n var currentLayer: Microsoft.Maps.Layer = this.map?.layers[0];\r\n if (currentLayer) {\r\n currentLayer.clear();\r\n }\r\n // if (this.clusterClickHandler) {\r\n // Microsoft.Maps.Events.removeHandler(this.clusterClickHandler);\r\n // }\r\n this.map.layers.clear();\r\n this.selectedPushPin = undefined;\r\n\r\n const storeLocationList = orgUnitStoreInformation.filter(store => store.OrgUnitAvailability !== undefined);\r\n if (this.cachedOrgUnitFoundCount === 0 && storeLocationList.length > 0) {\r\n this.cachedOrgUnitFoundCount = storeLocationList.length;\r\n firstOrgUnitsRender = true;\r\n }\r\n const firstThreeLocations = storeLocationList\r\n .slice(0, 3)\r\n .reduce((acc: Microsoft.Maps.Location[], org: IFullOrgUnitAvailability) => {\r\n const storeLocation = org.OrgUnitAvailability?.OrgUnitLocation;\r\n if (storeLocation && storeLocation.Latitude && storeLocation.Longitude) {\r\n acc.push(new Microsoft.Maps.Location(storeLocation.Latitude, storeLocation.Longitude));\r\n }\r\n return acc;\r\n }, []);\r\n\r\n for (const [index, unitStoreInfo] of storeLocationList.entries()) {\r\n const storeLocation = unitStoreInfo.OrgUnitAvailability?.OrgUnitLocation;\r\n if (storeLocation?.Latitude && storeLocation.Longitude && storeLocation.OrgUnitNumber) {\r\n const isSelectedLocation = selectedStoreLocationId === storeLocation.OrgUnitNumber;\r\n const storeType =\r\n storeLocation.OrgUnitName && storeLocation.OrgUnitName.startsWith('R ')\r\n ? StoreType.Retailer\r\n : StoreType.VenchiStore;\r\n const options = this._getPushpinOptions(\r\n isSelectedLocation,\r\n index,\r\n storeType,\r\n pushpinOptions,\r\n storeLocation,\r\n this.props.resources\r\n );\r\n\r\n const pushpin = new Microsoft.Maps.Pushpin(\r\n new Microsoft.Maps.Location(storeLocation.Latitude, storeLocation.Longitude),\r\n options\r\n );\r\n\r\n Microsoft.Maps.Events.addHandler(pushpin, 'click', () => {\r\n this.handleClickEventOnPushPinStore(storeLocation.OrgUnitNumber);\r\n });\r\n\r\n this.pushpinMap.set(storeLocation.OrgUnitNumber, { pushpin: pushpin, storeType: storeType, index: index });\r\n\r\n if (isSelectedLocation) {\r\n this.selectedPushPin = { pushpin: pushpin, storeType: storeType, index: index };\r\n }\r\n }\r\n }\r\n\r\n if (positionUserChanged || firstOrgUnitsRender) {\r\n if (positionUser?.Latitude && positionUser.Longitude) {\r\n const currentLocation = new Microsoft.Maps.Location(positionUser.Latitude, positionUser.Longitude);\r\n if (firstThreeLocations) {\r\n const boundLocations = [currentLocation, ...firstThreeLocations];\r\n this.map.setView({\r\n bounds: Microsoft.Maps.LocationRect.fromLocations(boundLocations),\r\n padding: 100\r\n });\r\n }\r\n } else if (this.selectedPushPin) {\r\n const pushpinObject = this.selectedPushPin.pushpin;\r\n\r\n if (this.map.getZoom() >= 13) {\r\n this.map.setView({ center: pushpinObject.getLocation() });\r\n } else {\r\n this.map.setView({ center: pushpinObject.getLocation(), zoom: 14 });\r\n }\r\n } else {\r\n this.map.setView({\r\n bounds: Microsoft.Maps.LocationRect.fromShapes(\r\n Array.from(this.pushpinMap.values()).map(pushpinData => pushpinData.pushpin)\r\n )\r\n });\r\n }\r\n }\r\n\r\n Microsoft.Maps.loadModule('Microsoft.Maps.Clustering', () => {\r\n // Check if there are any pushpins to cluster\r\n if (this.map) {\r\n if (this.clusterLayer) {\r\n this.clusterLayer.clear();\r\n if (this.clusterClickHandler) {\r\n Microsoft.Maps.Events.removeHandler(this.clusterClickHandler);\r\n }\r\n }\r\n if (this.pushpinMap.size > 0) {\r\n // Convert pushpinMap values to an array of pushpins\r\n const pushpins = Array.from(this.pushpinMap.values()).map(pushpinData => pushpinData.pushpin);\r\n\r\n // Create a ClusterLayer with the pushpins\r\n this.clusterLayer = new Microsoft.Maps.ClusterLayer(pushpins, {\r\n clusteredPinCallback: this.customizeClusteredPin,\r\n gridSize: 92,\r\n clusteringEnabled: true\r\n });\r\n // Set options\r\n this.map.setOptions({ pushpinAccessible: true });\r\n\r\n // Add event handler for cluster click\r\n this.clusterClickHandler = Microsoft.Maps.Events.addHandler(this.clusterLayer, 'click', this.clusterClicked);\r\n\r\n // Insert the cluster layer into the map layers\r\n //@ts-ignore\r\n this.map.layers.insert(this.clusterLayer);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n private readonly _updateMapForSelectedStore = () => {\r\n const pushpinOptions = this.props.config.pushpinOptions;\r\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager?.result;\r\n const selectedStoreLocationId = storeSelectorStateManager?.selectedStoreLocationId;\r\n\r\n if (this.map) {\r\n if (this.selectedPushPin) {\r\n this.selectedPushPin.pushpin.setOptions(\r\n this._getPushpinColorAndIcon(false, this.selectedPushPin.storeType, pushpinOptions)\r\n );\r\n }\r\n if (selectedStoreLocationId) {\r\n // eslint-disable-next-line security/detect-object-injection\r\n const currentPushpin = this.pushpinMap.get(selectedStoreLocationId);\r\n if (currentPushpin) {\r\n const pushpinObject = currentPushpin.pushpin;\r\n pushpinObject.setOptions(this._getPushpinColorAndIcon(true, currentPushpin.storeType, pushpinOptions));\r\n this.selectedPushPin = currentPushpin;\r\n const mapLayer: Microsoft.Maps.Layer = this.map?.layers[0];\r\n if (mapLayer) {\r\n const containedPushpins: (Microsoft.Maps.ClusterPushpin | Microsoft.Maps.Pushpin)[] = mapLayer.getPrimitives() as (\r\n | Microsoft.Maps.ClusterPushpin\r\n | Microsoft.Maps.Pushpin\r\n )[];\r\n const mapBounds: Microsoft.Maps.LocationRect = this.map.getBounds();\r\n if (!containedPushpins.includes(pushpinObject)) {\r\n if (mapBounds && mapBounds.contains(pushpinObject.getLocation())) {\r\n const currentZoom = this.map.getZoom();\r\n const maxZoom = this.map.getZoomRange().max;\r\n if (currentZoom < maxZoom) {\r\n const nextZoom = currentZoom <= 13 ? 14 : currentZoom + 1;\r\n this.map.setView({ center: pushpinObject.getLocation(), zoom: nextZoom });\r\n }\r\n } else {\r\n if (this.map.getZoom() >= 13) {\r\n this.map.setView({ center: pushpinObject.getLocation() });\r\n } else {\r\n this.map.setView({ center: pushpinObject.getLocation(), zoom: 14 });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n // private selectFirstWithinDisplayed(){\r\n // if (this.map && this.clusterLayer) {\r\n // const currentlyDisplayedPushPinsthis = this.clusterLayer.getDisplayedPushpins();\r\n // if (currentlyDisplayedPushPinsthis) {\r\n // const first =\r\n // }\r\n // }\r\n // }\r\n\r\n private customizeClusteredPin = (cluster: Microsoft.Maps.ClusterPushpin) => {\r\n Microsoft.Maps.Events.addHandler(cluster, 'click', this.clusterClicked);\r\n };\r\n\r\n private clusterClicked = (e: any) => {\r\n if (this.map && e.target) {\r\n //Check to see if the clicked pushpin has any contained pushpins (this would be a cluster).\r\n if (e.target.containedPushpins) {\r\n var locs = [];\r\n for (var i = 0, len = e.target.containedPushpins.length; i < len; i++) {\r\n //Get the location of each pushpin.\r\n // eslint-disable-next-line security/detect-object-injection\r\n locs.push(e.target.containedPushpins[i].getLocation());\r\n }\r\n\r\n //Create a bounding box for the pushpins.\r\n var bounds = Microsoft.Maps.LocationRect.fromLocations(locs);\r\n\r\n //Zoom into the bounding box of the cluster.\r\n //Add a padding to compensate for the pixel area of the pushpins.\r\n this.map.setView({ bounds: bounds, padding: 100 });\r\n }\r\n }\r\n };\r\n\r\n //TODO RESTORE\r\n /**\r\n * Handle click event.\r\n * @param orgUnitNumber - Organization unit number.\r\n */\r\n private readonly handleClickEventOnPushPinStore = (orgUnitNumber: string | undefined): void => {\r\n const storeSelectorStateManager = this.props.data.storeSelectorStateManager.result;\r\n if (orgUnitNumber) {\r\n //setTimeout(() => {\r\n storeSelectorStateManager?.setSelectedStoreLocationId(orgUnitNumber);\r\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers -- Time out.\r\n //}, 500);\r\n }\r\n };\r\n\r\n /**\r\n * Get the pushpin option.\r\n * @param isSelectedLocation - Is selected location.\r\n * @param index - Index.\r\n * @param pushpinOptions - PushpinOptions.\r\n * @returns - The pushpin options.\r\n */\r\n private readonly _getPushpinColorAndIcon = (\r\n isSelectedLocation: boolean,\r\n storeType: StoreType,\r\n pushpinOptions?: IPushpinOptionsData\r\n ) => {\r\n // const text = undefined;\r\n\r\n // const size = pushpinOptions?.size || 1;\r\n var color: string | undefined = '#8c7760';\r\n if (storeType === StoreType.Retailer) {\r\n color = isSelectedLocation ? pushpinOptions?.selectionColor_retailer || '#e87722' : pushpinOptions?.color_retailer || '#004f71';\r\n } else {\r\n color = isSelectedLocation ? pushpinOptions?.selectionColor_store || '#e87722' : pushpinOptions?.color_store || '#542D00';\r\n }\r\n //const icon = this._getSvgIcon(size, color, text);\r\n return {\r\n // Fallback if icon doesn't render properly\r\n color: color,\r\n icon: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 400 750\">\r\n <defs>\r\n <filter id=\"shadow\" x=\"-100%\" y=\"-100%\" width=\"300%\" height=\"300%\">\r\n <feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"50\"></feGaussianBlur>\r\n <feOffset dx=\"0\" dy=\"80\" result=\"offsetblur\"></feOffset>\r\n <feComponentTransfer>\r\n <feFuncA type=\"linear\" slope=\"0.3\"></feFuncA>\r\n </feComponentTransfer>\r\n <feMerge>\r\n <feMergeNode></feMergeNode>\r\n <feMergeNode in=\"SourceGraphic\"></feMergeNode>\r\n </feMerge>\r\n </filter>\r\n </defs>\r\n <path fill=\"#ffffff\" fill-opacity=\"0.8\" stroke=\"${color ||\r\n '#542D00'}\" stroke-width=\"24\" transform=\"scale(1.2) translate(-36 20)\" d=\"M200,551.7c0,0.1,0.2,0.3,0.2,0.3S375.4,283,375.4,194.6c0-130.1-88.8-186.7-175.4-186.9 C113.4,7.9,24.6,64.5,24.6,194.6c0,88.4,175.3,357.4,175.3,357.4S200,551.7,200,551.7z\"/>\r\n <path fill=\"${color ||\r\n '#542D00'}\" stroke=\"#542D00\" stroke-opacity=\"0.5\" transform=\"scale(0.8) translate(48 120)\" stroke-width=\"4\" filter=\"url(#shadow)\" d=\"M200,551.7c0,0.1,0.2,0.3,0.2,0.3S375.4,283,375.4,194.6c0-130.1-88.8-186.7-175.4-186.9 C113.4,7.9,24.6,64.5,24.6,194.6c0,88.4,175.3,357.4,175.3,357.4S200,551.7,200,551.7z\"></path>\r\n </svg>`\r\n };\r\n };\r\n\r\n /**\r\n * Get the pushpin option.\r\n * @param isSelectedLocation - Is selected location.\r\n * @param index - Index.\r\n * @param pushpinOptions - PushpinOptions.\r\n * @returns - The pushpin options.\r\n */\r\n private readonly _getPushpinOptions = (\r\n isSelectedLocation: boolean,\r\n index: number,\r\n storeType: StoreType,\r\n pushpinOptions?: IPushpinOptionsData,\r\n storeLocation?: OrgUnitLocation,\r\n mapResources?: IMapCustomResources\r\n ) => {\r\n const { color, icon } = this._getPushpinColorAndIcon(isSelectedLocation, storeType, pushpinOptions);\r\n if (storeLocation) {\r\n return {\r\n // Fallback if icon doesn't render properly\r\n color: color,\r\n icon,\r\n //text: storeLocation.OrgUnitNumber!,\r\n title: `${storeType === StoreType.Retailer ? mapResources?.storeLabelRetailer : mapResources?.storeLabelVenchi} ${index +\r\n 1}`\r\n };\r\n }\r\n return {\r\n // Fallback if icon doesn't render properly\r\n color: color,\r\n icon,\r\n title: storeType === StoreType.Retailer ? mapResources?.storeLabelRetailer : mapResources?.storeLabelVenchi\r\n };\r\n };\r\n}\r\n\r\nexport default Map;\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 { IAccountPreference, IAccountPreferences, IAccountProfileItem } from '@msdyn365-commerce-modules/account-management';\r\n\r\nimport { validatePhoneNumberWithCountryCode } from '../../common/utils/phone-number-utils';\r\nimport { IAccountProfileViewProps } from './fm-account-profile';\r\nimport { IFmAccountProfileProps } from './fm-account-profile.props.autogenerated';\r\n\r\nconst AccountPreferencesSection: React.FC<IAccountPreferences> = ({ accountPreferences, heading, personalization, extraPreferences }) => {\r\n return (\r\n <Node {...accountPreferences}>\r\n {heading}\r\n <AccountPreferenceSection {...personalization} />\r\n {extraPreferences &&\r\n extraPreferences.map((preferenceSecton, index) => {\r\n return <AccountPreferenceSection {...preferenceSecton} key={index} />;\r\n })}\r\n </Node>\r\n );\r\n};\r\n\r\nconst AccountPreferenceSection: React.FC<IAccountPreference> = ({\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 <Node {...accountPreference}>\r\n {heading}\r\n {description}\r\n <Node {...buttonWrapper}>\r\n {buttonNoText}\r\n {button}\r\n {buttonYesText}\r\n </Node>\r\n </Node>\r\n );\r\n};\r\n\r\nconst AccountProfileSection: React.FC<IAccountProfileItem> = ({ AccountProfileItem, heading, links, description }) => {\r\n return (\r\n <Node {...AccountProfileItem}>\r\n {heading}\r\n {description}\r\n {links}\r\n </Node>\r\n );\r\n};\r\n\r\nconst AccountProfileView: React.FC<IAccountProfileViewProps & IFmAccountProfileProps<{}>> = props => {\r\n const {\r\n AccountProfile,\r\n accountProfileWrapper,\r\n heading,\r\n emailSection,\r\n nameSection,\r\n phoneSection,\r\n preferenceSection,\r\n customerAttributesWrapper,\r\n customerAttributesSection,\r\n emailConsentsSection,\r\n emailConsentsWrapper,\r\n phoneConsentsSection,\r\n phoneConsentsWrapper\r\n } = props;\r\n\r\n React.useEffect(() => {\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\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 const showPhoneConsentSection = React.useMemo(\r\n () =>\r\n props.data.customerInformation.result?.Phone && validatePhoneNumberWithCountryCode(props.data.customerInformation.result.Phone),\r\n []\r\n );\r\n\r\n return (\r\n <Module {...AccountProfile}>\r\n {heading}\r\n <div className={'row row-fullwidth'}>\r\n <div className={'container'}>\r\n <div className={'row'}>\r\n <div className={'col-lg-4 ms-account-profile__main-info'}>\r\n <div>\r\n {accountProfileWrapper && (\r\n <Node {...accountProfileWrapper}>\r\n <AccountProfileSection {...emailSection} />\r\n <AccountProfileSection {...nameSection} />\r\n <AccountProfileSection {...phoneSection} />\r\n {customerAttributesWrapper && (\r\n <Node {...customerAttributesWrapper}>{customerAttributesSection}</Node>\r\n )}\r\n </Node>\r\n )}\r\n </div>\r\n </div>\r\n {/* <div className={'col-lg-4 ms-account-profile__main-info extra'}>\r\n {customerAttributesWrapper && <Node {...customerAttributesWrapper}>{customerAttributesSection}</Node>}\r\n </div> */}\r\n <div className={'col-lg-4 ms-account-profile__main-info extra'}>\r\n {emailConsentsWrapper && <Node {...emailConsentsWrapper}>{emailConsentsSection}</Node>}\r\n </div>\r\n {showPhoneConsentSection && (\r\n <div className={'col-lg-4 ms-account-profile__main-info extra'}>\r\n {phoneConsentsWrapper && <Node {...phoneConsentsWrapper}>{phoneConsentsSection}</Node>}\r\n </div>\r\n )}\r\n <div className={'col-lg-4 ms-account-profile__preferences'}>\r\n <AccountPreferencesSection {...preferenceSection} />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </Module>\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IHeader, IMapViewProps } from './map-custom';\r\n\r\nconst MapHeader: React.FC<IHeader> = ({ headerProps, heading }) => <Node {...headerProps}>{heading}</Node>;\r\n\r\nconst MapView: React.FC<IMapViewProps> = ({ ModuleProps, Header, MapProps }) => (\r\n <Module {...ModuleProps}>\r\n {Header && <MapHeader {...Header} />}\r\n <Node {...MapProps} />\r\n </Module>\r\n);\r\n\r\nexport default MapView;\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 { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nimport { IAccountGenericTileViewProps } from '@msdyn365-commerce-modules/account-management';\r\nimport { IAccountGenericTileProps } from '../definition-extensions/account-generic-tile.ext.props.autogenerated.js';\r\n\r\nconst AccountGenericTileView: React.FC<IAccountGenericTileViewProps & IAccountGenericTileProps<{}>> = props => {\r\n const { AccountGenericTile, heading, links } = props;\r\n const textField = props.config.text;\r\n const text = textField && <Msdyn365.RichTextComponent text={textField} className='ms-account-generic-tile__description' />;\r\n\r\n return (\r\n <Module {...AccountGenericTile}>\r\n {heading}\r\n {text}\r\n {links}\r\n </Module>\r\n );\r\n};\r\n\r\nexport default AccountGenericTileView;\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 { IStoreSelectorViewProps } from '@msdyn365-commerce-modules/store-selector';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nconst StoreSelectorView: React.FC<IStoreSelectorViewProps> = props => {\r\n const {\r\n BodyContainerProps,\r\n FooterContainerProps,\r\n HeaderContainerProps,\r\n HeaderProps,\r\n ModuleProps,\r\n // headerText,\r\n locationsMessage,\r\n search,\r\n state,\r\n spinner,\r\n locationsList,\r\n noLocationsMessage,\r\n terms\r\n } = props;\r\n const currentUrl = ModuleProps.moduleProps.context.request.url.requestUrl.href;\r\n const baseUrl = currentUrl.substring(0, currentUrl.lastIndexOf('/') + 1);\r\n React.useEffect(() => {\r\n const titles = Array.from(document.querySelectorAll('.ms-store-select__location-line-item-store-name'));\r\n if (titles.length > 0) {\r\n titles.forEach(el => {\r\n const storeName = el.textContent;\r\n if (storeName && storeName.startsWith('R ')) {\r\n el.closest('.ms-store-select__location-line-item')?.classList.add('location-type__dealer');\r\n el.textContent = storeName.replace('R ', '');\r\n }\r\n // @ts-ignore\r\n if (props.config.renderLinkToStorePage) {\r\n const goToStoreCtn = el.closest('.ms-store-select__location-line-item')?.querySelector('.go-to-store');\r\n if (goToStoreCtn === null) {\r\n const storeUrl = storeName\r\n ?.replace('R ', '')\r\n .toLowerCase()\r\n .replace(/[ .&@',]/g, '-')\r\n .replace(/-+/g, '-');\r\n const goToStore = document.createElement('div');\r\n goToStore.className = 'go-to-store';\r\n // tslint:disable-next-line:no-inner-html\r\n goToStore.innerHTML = `<a target=\"_blank\" href=\"${baseUrl}${storeUrl}\">${\r\n // @ts-ignore\r\n props.resources.goToStorePage ? props.resources.goToStorePage : 'Go to Store page'\r\n }</a>`;\r\n el.closest('.ms-store-select__location-line-item:not(.location-type__dealer)')\r\n ?.querySelector('.ms-store-select__location-line-item-content')\r\n ?.appendChild(goToStore);\r\n }\r\n }\r\n });\r\n }\r\n }, [locationsList]);\r\n\r\n return (\r\n <Module {...ModuleProps}>\r\n <Node {...HeaderContainerProps}>{HeaderProps}</Node>\r\n <Node {...BodyContainerProps}>\r\n {locationsMessage}\r\n {search}\r\n {state.isSearchInProgress ? spinner : <>{locationsList ? locationsList : noLocationsMessage}</>}\r\n </Node>\r\n <Node {...FooterContainerProps}>{terms}</Node>\r\n </Module>\r\n );\r\n};\r\n\r\nexport default StoreSelectorView;\r\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 { IContentBlockAdditionalContentItemViewProps, IContentBlockAdditionalContentViewProps } from './components/additional-content';\nimport { IContentBlockViewProps } from './content-block';\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 <Node {...additionalContent.additionalContentNode}>\n {additionalContent.additionalContentItems?.map((item: IContentBlockAdditionalContentItemViewProps) => {\n return (\n <>\n {item.heading}\n <Node {...item.additionalContentItemContainer}>\n {item.text}\n <Node {...item.additionalContentItemLinks}>{item.links}</Node>\n </Node>\n </>\n );\n })}\n </Node>\n );\n};\n\nconst ContentBlockView: React.FC<IContentBlockViewProps> = 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 if (imageLink) {\n return (\n <Module {...contentBlockContainer}>\n <Node\n {...contentBlockAnchorTag}\n href={imageLink}\n className={contentBlockAnchorTag ? contentBlockAnchorTag.className : ''}\n aria-label={imageAriaLabel}\n >\n <Node {...imageContainer}>{image}</Node>\n </Node>\n <Node {...detailsContainer}>\n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n </Node>\n </Module>\n );\n }\n return (\n <Module {...contentBlockContainer}>\n <Node {...imageContainer}>{image}</Node>\n <Node {...detailsContainer}>\n {title}\n {text}\n {links}\n {additionalContent && renderAdditionalContent(additionalContent)}\n </Node>\n </Module>\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 { IHistogramItemViewProps, IRatingsHistogramViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst RatingsHistogramView: React.FC<IRatingsHistogramViewProps> = props => {\n const { heading, histogramItems, histogramProps, moduleProps } = props;\n return (\n <Module {...moduleProps}>\n {heading}\n <Node {...histogramProps}>\n {histogramItems.map(item => {\n return histogramItem(item);\n })}\n </Node>\n </Module>\n );\n};\n\nconst histogramItem = (props: IHistogramItemViewProps) => {\n return (\n <Node {...props.buttonProps}>\n {props.starLabel}\n {props.bar}\n {props.percentage}\n </Node>\n );\n};\n\nexport default RatingsHistogramView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IReviewModalViewProps } from '@msdyn365-commerce-modules/ratings-reviews';\nimport {\n IReportReviewModalViewProps,\n IReviewCardViewProps,\n IReviewsListState,\n IReviewsListViewProps\n} from '@msdyn365-commerce-modules/ratings-reviews/src/modules/reviews-list';\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst ReviewsListview: React.FC<IReviewsListViewProps> = props => {\n const {\n averageRating,\n filterByDropdown,\n moduleProps,\n noReviewsMessage,\n noReviewsWithFilterMessage,\n pageControls,\n refineReviewsProps,\n reportReviewModal,\n reviewsListProps,\n reviewCards,\n reviewCount,\n reviewModal,\n sortByDropdown,\n state,\n userReview\n } = props;\n\n if (!userReview && reviewCards.length === 0 && !state.isFilterApplied) {\n return <Module {...moduleProps}>{noReviewsMessage}</Module>;\n }\n\n return (\n <Module {...moduleProps}>\n {averageRating}\n {reviewCount}\n <Node {...refineReviewsProps}>\n {sortByDropdown}\n {filterByDropdown}\n </Node>\n <Node {...reviewsListProps}>\n {userReview && buildReviewCard(userReview)}\n {reviewCards.map(review => {\n return buildReviewCard(review);\n })}\n </Node>\n {reviewCards.length === 0 && state.isFilterApplied && noReviewsWithFilterMessage}\n {pageControls}\n {createReviewModal(reviewModal, moduleProps)}\n {createReportModal(reportReviewModal, state)}\n </Module>\n );\n};\n\nconst buildReviewCard = (props: IReviewCardViewProps) => {\n return (\n <Node {...props.cardProps}>\n <Node {...props.headerProps}>\n {props.rating}\n {props.name}\n {props.date}\n </Node>\n <Node {...props.cardBodyProps}>\n <Node {...props.reviewProps}>\n {props.reviewTitle}\n {props.reviewText}\n </Node>\n <Node {...props.responseProps}>\n {props.responseName}\n {props.responseDate}\n {props.responseText}\n </Node>\n <Node {...props.controlsProps}>\n {props.ratingHelpfulLabel}\n {props.like}\n {props.dislike}\n {props.edit}\n {props.report}\n </Node>\n </Node>\n </Node>\n );\n};\n\nconst createReviewModal = (props: IReviewModalViewProps, moduleProps: IModuleProps): JSX.Element => {\n return (\n <Module {...moduleProps} {...props.modal}>\n {props.modalHeader}\n <Node {...props.modalBody}>\n <Node {...props.form}>\n <Node {...props.inputRow}>\n {props.rating}\n {props.ratingLabel}\n </Node>\n <Node {...props.inputRow}>\n {props.titleLabel}\n {props.titleInput}\n </Node>\n <Node {...props.inputRow}>\n {props.textLabel}\n {props.textInput}\n </Node>\n {props.privacyPolicyUrl}\n {props.error}\n </Node>\n </Node>\n <Node {...props.modalFooter}>\n {props.submitButton}\n {props.cancelButton}\n </Node>\n </Module>\n );\n};\n\nconst createReportModal = (props: IReportReviewModalViewProps, state: IReviewsListState): JSX.Element => {\n return (\n <Node {...props.modal}>\n <Node {...props.modalHeader}>{state.reported ? props.headerSubmitted : props.header}</Node>\n <Node {...props.modalBody}>\n {state.reported ? props.reportSubmittedMessage : [props.reportMessage, props.radioButtons, props.error]}\n </Node>\n <Node {...props.modalFooter}>{state.reported ? props.succesfulButton : [props.submitButton, props.cancelButton]}</Node>\n </Node>\n );\n};\n\nexport default ReviewsListview;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderLookupViewProps } from './order-lookup';\n\n/**\n * View component.\n * @param props - The view properties.\n * @returns - Returns JSX Element.\n */\nexport const OrderLookupViewComponent: React.FC<IOrderLookupViewProps> = props => {\n const {\n orderLookup,\n orderLookupContainer,\n orderLookupAdditionalFieldContainer,\n heading,\n paragraph,\n orderLookupForm,\n renderOrderLookupInputField,\n orderNumberInput,\n errorMessage,\n submitButton,\n additionalProperties,\n registeredUserMessage,\n fieldErrorMessage\n } = props;\n return (\n <Module {...orderLookup}>\n <Node {...orderLookupContainer}>\n {heading}\n {paragraph}\n <Node className={orderLookupForm?.className ?? ''}>\n {orderNumberInput}\n {renderOrderLookupInputField}\n {ArrayExtensions.hasElements(additionalProperties) && (\n <Node {...orderLookupAdditionalFieldContainer}>\n {additionalProperties.map((item: JSX.Element) => (\n <React.Fragment key=''>{item}</React.Fragment>\n ))}\n </Node>\n )}\n {fieldErrorMessage}\n <Node {...submitButton} className={submitButton?.className ?? ''}>\n {props.submitButtonLabelText}\n </Node>\n {errorMessage}\n </Node>\n {registeredUserMessage}\n </Node>\n </Module>\n );\n};\n\nexport default OrderLookupViewComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport React, { ReactNode } from 'react';\n\nimport { ITileListViewProps } from './tile-list';\n\n/**\n * View component.\n * @param props - The view properties.\n * @returns Returns props.\n */\nexport const tileListView: React.FC<ITileListViewProps> = props => {\n const { title, tiles, tileListContainer, tileListHeading, tileItemContainer, singleSlideCarouselComponentProps } = props;\n return (\n <Node {...tileListContainer}>\n <Node {...tileListHeading}>{title}</Node>\n <Node {...singleSlideCarouselComponentProps}>\n {tiles.map((tileItem: ReactNode, index: number) => {\n const keyIndex = `tile-list-item__${index}`;\n return (\n <Node {...tileItemContainer} key={keyIndex}>\n {tileItem}\n </Node>\n );\n })}\n </Node>\n </Node>\n );\n};\n\nexport default tileListView;\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 { ICheckoutCustomerAccountPaymentViewProps } from '@msdyn365-commerce-modules/checkout/src/modules/checkout-customer-account-payment/checkout-customer-account-payment';\nimport { IAccountPaymentEditViewForm } from '@msdyn365-commerce-modules/checkout/src/modules/checkout-customer-account-payment/components/get-account-payment-form-edit-mode';\nimport { IAccountPaymentSummaryViewForm } from '@msdyn365-commerce-modules/checkout/src/modules/checkout-customer-account-payment/components/get-account-payment-form-summary-mode';\n\nexport const SummaryForm: React.FC<IAccountPaymentSummaryViewForm> = ({\n formProps,\n label,\n addPaymentButton,\n appliedLine,\n bottomBorder,\n paymentAmountInput\n}) => (\n <Node {...formProps}>\n <>\n {label}\n {paymentAmountInput}\n {addPaymentButton}\n {appliedLine}\n {bottomBorder}\n </>\n </Node>\n);\n\nexport const EditForm: React.FC<IAccountPaymentEditViewForm> = ({\n formProps,\n inputLabel,\n inputAmount,\n addPaymentButton,\n customerName,\n customerAccountNumber,\n customerSince,\n accountCredit,\n alert,\n accountDetails,\n appliedLine,\n bottomBorder\n}) => (\n <Node {...formProps}>\n <>\n {customerName}\n {customerAccountNumber}\n {customerSince}\n {accountCredit}\n {accountDetails}\n {inputLabel}\n {alert}\n {inputAmount}\n {addPaymentButton}\n {appliedLine}\n {bottomBorder}\n </>\n </Node>\n);\n\nconst CheckoutCustomerAccountView: React.FC<ICheckoutCustomerAccountPaymentViewProps> = props => {\n const { checkoutCustomerAccount, checkoutErrorRef, summaryView, editView, moduleState, alert } = props;\n return (\n <Module {...checkoutCustomerAccount} ref={checkoutErrorRef}>\n {alert}\n {moduleState.isReady && summaryView && <SummaryForm {...summaryView} />}\n {!moduleState.isReady && editView && <EditForm {...editView} />}\n </Module>\n );\n};\n\nexport default CheckoutCustomerAccountView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ISearchData, ISearchViewProps } from '@msdyn365-commerce-modules/search';\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\n\n/**\n * Render Categories heading.\n * @param inCategoriesHeading - The Keywords result heading.\n * @returns The JSX Element.\n */\nconst renderCategorySuggestionsTitle = (inCategoriesHeading: string): JSX.Element => {\n const categoryAutoSuggestionHeading = inCategoriesHeading ? inCategoriesHeading : 'In categories';\n\n return <div className='msc-autoSuggest__categoryResults-title'>{categoryAutoSuggestionHeading}</div>;\n};\n\n/**\n * Render Categories suggestion result.\n * @param inCategoriesHeading - The Categories result heading.\n * @param noResultText - The \"No Result\" text.\n * @param props - The Categories suggestion result.\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\n * @param isLoadingNode - The autosuggestion loading node.\n * @returns The JSX Element.\n */\nexport const CategorySuggestionsComponent = (\n inCategoriesHeading: string,\n noResultText: string,\n props: ISearchViewProps & ISearchProps<ISearchData>,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n): JSX.Element => {\n return props.autosuggestCategory ? (\n <Node {...props.CategorySuggest}>\n {renderCategorySuggestionsTitle(inCategoriesHeading)}\n <Node {...props.UlCategory}>\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n props.autosuggestCategory.text.map(text => {\n return text;\n })}\n </Node>\n </Node>\n ) : (\n <Node {...props.CategorySuggest}>\n {renderCategorySuggestionsTitle(inCategoriesHeading)}\n <Node {...props.UlCategory}>\n <li className='msc-autoSuggest__categoryResults-no-results'>{noResultText}</li>\n </Node>\n </Node>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, Image } from '@msdyn365-commerce/core';\nimport { ISearchData } from '@msdyn365-commerce-modules/search';\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\n\n/**\n * Render Products Suggestion result heading.\n * @param props -The props.\n * @returns The JSX Element.\n */\nconst renderProductNotFoundResultsImage = (props: ISearchProps<ISearchData>): JSX.Element | null => {\n const noSearchResultImage: IImageData | undefined = props.config.noSearchResultImage;\n if (!noSearchResultImage || !noSearchResultImage.src) {\n return null;\n }\n const imageSettings = {\n lazyload: true,\n viewports: {\n xs: { w: 100, h: 100, q: 'w=100&h=100&q=60&m=6' }\n }\n };\n return (\n <Image\n altText={noSearchResultImage.altText}\n className='msc-autoSuggest__productResults-no-results-image-img'\n gridSettings={props.context.request.gridSettings!}\n src={noSearchResultImage.src}\n requestContext={props.context.request}\n imageSettings={imageSettings}\n />\n );\n};\n\n/**\n * Render Product suggestion result.\n * @param props -The props.\n * @returns The JSX Element.\n */\nexport const MobileAutoSuggestEmptyComponent = (props: ISearchProps<ISearchData>): JSX.Element => {\n return (\n <Node className='msc-autoSuggest__productResults-empty-mobile-content'>\n <div className='msc-autoSuggest__productResults-empty-mobile-no-results-image'>{renderProductNotFoundResultsImage(props)}</div>\n <div className='msc-autoSuggest__productResults-empty-mobile-text-content'>\n <div className='msc-autoSuggest__productResults-empty-mobile-heading'>{props.resources.emptyMobileSearchTextHeading}</div>\n <div className='msc-autoSuggest__productResults-empty-mobile-text'>{props.resources.emptyMobileSearchText}</div>\n </div>\n </Node>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ISearchData, ISearchFormViewProps } from '@msdyn365-commerce-modules/search';\nimport { Button, INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\nimport { MobileAutoSuggestEmptyComponent } from './search.mobile.empty';\n\n/**\n * Render Clear button for mobile viewport.\n * @param clearSearchButtonText -The Clear button text.\n * @param clearSearch -Clear Search callback.\n * @returns -The JSX Element.\n */\nconst renderClearButton = (clearSearchButtonText: string, clearSearch: () => void): JSX.Element => {\n return (\n <Button className='ms-search__form-control__clear' title={clearSearchButtonText || 'Clear'} onClick={clearSearch}>\n {clearSearchButtonText || 'Clear'}\n </Button>\n );\n};\n\n/**\n * Render Search form.\n * @param form -Form view props.\n * @param searchForm -Search Form props.\n * @param formWrapper -Form Wrapper props.\n * @param isMobile -Is mobile viewport flag.\n * @param clearSearchButtonText -The Clear button text.\n * @param props -The props for resource.\n * @param isSearchText -Is SearchText flag for input text.\n * @param clearSearch -Clear Search callback.\n * @returns -The JSX Element.\n */\nexport const FormComponent = (\n form: ISearchFormViewProps,\n searchForm: INodeProps,\n formWrapper: INodeProps,\n isMobile: boolean,\n clearSearchButtonText: string,\n props: ISearchProps<ISearchData>,\n isSearchText: boolean,\n clearSearch: () => void\n): JSX.Element => {\n const cancelButtonNode = (\n <Button\n className='ms-search__form-cancelSearch'\n aria-label={props.resources.cancelBtnAriaLabel}\n onClick={clearSearch}\n type='button'\n />\n );\n\n return isMobile ? (\n <Node {...searchForm}>\n {form.cancelBtn}\n <Node {...formWrapper}>\n {form.input}\n {isSearchText && renderClearButton(clearSearchButtonText, clearSearch)}\n {!isSearchText ? MobileAutoSuggestEmptyComponent(props) : null}\n </Node>\n </Node>\n ) : (\n <Node {...searchForm}>\n <Node {...formWrapper}>\n {form.submitBtn}\n {form.input}\n {isSearchText && cancelButtonNode}\n </Node>\n </Node>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ISearchKeywordViewProps } from '@msdyn365-commerce-modules/search';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * Render keywords heading.\n * @param keywordsHeading -The Keywords result heading.\n * @returns The JSX Element.\n */\nconst renderKeywordSuggestionsTitle = (keywordsHeading: string): JSX.Element => {\n const categoryAutoSuggestionHeading = keywordsHeading ? keywordsHeading : 'Keywords';\n\n return <div className='msc-autoSuggest_keywordsResults-title'>{categoryAutoSuggestionHeading}</div>;\n};\n\n/**\n * Render keywords reults.\n * @param keywordSuggest -The Keywords suggest Node props.\n * @param ulKeyword -The List Node props.\n * @param keywordsHeading -The Keywords result heading.\n * @param noResultText -The \"No Result\" text.\n * @param keywordSuggestions -The Keywords suggestion result.\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\n * @param isLoadingNode - The autosuggestion loading node.\n * @returns -The JSX Element.\n */\nexport const KeywordSuggestionsComponent = (\n keywordSuggest: INodeProps,\n ulKeyword: INodeProps,\n keywordsHeading: string,\n noResultText: string,\n keywordSuggestions?: ISearchKeywordViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n): JSX.Element => {\n return keywordSuggestions ? (\n <Node {...keywordSuggest}>\n {renderKeywordSuggestionsTitle(keywordsHeading)}\n <Node {...ulKeyword}>\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n keywordSuggestions.text.map(text => {\n return text;\n })}\n </Node>\n </Node>\n ) : (\n <Node {...keywordSuggest}>\n {renderKeywordSuggestionsTitle(keywordsHeading)}\n <Node {...ulKeyword}>\n <li className='msc-autoSuggest__keywordResults-no-results'>{noResultText}</li>\n </Node>\n </Node>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageData, Image } from '@msdyn365-commerce/core';\nimport { ISearchData, ISearchProductViewProps } from '@msdyn365-commerce-modules/search';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\n\n/**\n * Render Products Suggestion result heading.\n * @param productSuggestionsHeading -The products suggestion result heading.\n * @returns The JSX Element.\n */\nconst renderProductSuggestionsTitle = (productSuggestionsHeading: string): JSX.Element => {\n const productAutoSuggestionHeading = productSuggestionsHeading ? productSuggestionsHeading : 'Products';\n\n return <div className='msc-autoSuggest__productResults-title'>{productAutoSuggestionHeading}</div>;\n};\n\n/**\n * Render Products Suggestion result heading.\n * @param props -The props.\n * @returns The JSX Element.\n */\nconst renderProductNotFoundResultsImage = (props: ISearchProps<ISearchData>): JSX.Element | null => {\n const noSearchResultImage: IImageData | undefined = props.config.noSearchResultImage;\n if (!noSearchResultImage || !noSearchResultImage.src) {\n return null;\n }\n return (\n <Image\n altText={noSearchResultImage.altText}\n className='msc-autoSuggest__productResults-no-results-image-img'\n gridSettings={props.context.request.gridSettings!}\n src={noSearchResultImage.src}\n />\n );\n};\n\n/**\n * Render Products No result section.\n * @param props -The props.\n * @returns The JSX Element.\n */\nconst renderProductNotFoundResults = (props: ISearchProps<ISearchData>): JSX.Element => {\n return (\n <Node className='msc-autoSuggest__productResults-no-results-content'>\n <div className='msc-autoSuggest__productResults-no-results-image'>{renderProductNotFoundResultsImage(props)}</div>\n <div className='msc-autoSuggest__productResults-no-results-content-title'>{props.resources.noResultContentHeadingText}</div>\n <div className='msc-autoSuggest__productResults-no-results-content-paragraph'>\n {props.resources.noResultContentParagraphText}\n </div>\n </Node>\n );\n};\n\n/**\n * Render Product suggestion result.\n * @param productSuggest -The product suggest Node props.\n * @param ulProduct -The List Node props.\n * @param props -The props.\n * @param productSuggestions -The Product suggestion result.\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\n * @param isLoadingNode - The autosuggestion loading node.\n * @returns The JSX Element.\n */\nexport const ProductSuggestionsComponent = (\n productSuggest: INodeProps,\n ulProduct: INodeProps,\n props: ISearchProps<ISearchData>,\n productSuggestions?: ISearchProductViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n): JSX.Element => {\n const liProduct: INodeProps = {\n tag: 'li',\n className: 'msc-no-result-content'\n };\n return productSuggestions ? (\n <Node {...productSuggest}>\n {renderProductSuggestionsTitle(props.resources.productSuggestionHeading)}\n <Node {...ulProduct}>\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n productSuggestions.items.map((item, index) => {\n return (\n <Node {...item.LiProduct} key={item.id ?? index}>\n <Node {...item.AProduct}>\n {item.thumbnail}\n {item.text}\n {item.price}\n </Node>\n </Node>\n );\n })}\n </Node>\n </Node>\n ) : (\n <Node {...productSuggest}>\n {renderProductSuggestionsTitle(props.resources.productSuggestionHeading)}\n <Node {...ulProduct}>\n <Node {...liProduct}>{renderProductNotFoundResults(props)}</Node>\n </Node>\n </Node>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ISearchData, ISearchFormViewProps, ISearchViewProps } from '@msdyn365-commerce-modules/search';\nimport { Button, format, isMobile, Module, Node, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { ISearchProps } from '../definition-extensions/search.ext.props.autogenerated';\nimport { CategorySuggestionsComponent } from './components/search.categorysuggest';\nimport { FormComponent } from './components/search.form';\nimport { KeywordSuggestionsComponent } from './components/search.keywordsuggest';\nimport { ProductSuggestionsComponent } from './components/search.productsuggest';\n\n/**\n * Render Title for AutoSuggest.\n * @param searchSuggestionHeading -The heading resource string.\n * @param searchText -The search string.\n * @returns -The JSX Element.\n */\nconst renderTitle = (searchSuggestionHeading: string, searchText: string): JSX.Element => {\n const searchTextString = '\"'.concat(searchText.concat('\"'));\n const searchAutoSuggestionHeading = searchSuggestionHeading\n ? format(searchSuggestionHeading, searchTextString)\n : `Search for ${searchTextString}`;\n\n return <Node className='msc-autoSuggest__search-title'>{searchAutoSuggestionHeading}</Node>;\n};\n\n/**\n * Search View.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst SearchView: React.FC<ISearchViewProps & ISearchProps<ISearchData>> = (\n props: ISearchViewProps & ISearchProps<ISearchData>\n): JSX.Element => {\n const {\n Search,\n AutoSuggestAriaLabel,\n AutoSuggestAriaLabelText,\n searchText,\n AutoSuggest,\n KeywordSuggest,\n ProductSuggest,\n UlKeyword,\n UlProduct,\n form,\n autosuggestKeyword,\n autosuggestProduct,\n SearchForm,\n FormWrapper,\n label,\n context,\n isLoadingAutoSuggest,\n isLoadingNode,\n callbacks: { handleCancelSearchFocused }\n } = props;\n\n const { searchSuggestionHeading, categorySuggestionHeading, keywordsHeading, noResultText, clearSearchButtonText } = props.resources;\n\n const [searchTextString, setSearchTextString] = useState<string>();\n const [isMobilePort, setIsMobile] = useState<boolean>(false);\n\n useEffect(() => {\n setSearchTextString(searchText);\n }, [searchText]);\n\n /**\n * ClearSearch callback method to clear search string.\n */\n const clearSearch = (): void => {\n setSearchTextString('');\n\n const propsForm = props.form as ISearchFormViewProps;\n const propsFormInput = propsForm.input as React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>;\n const propsFormInputCurrent = (propsFormInput.ref as React.RefObject<HTMLInputElement>).current;\n\n if (propsFormInputCurrent) {\n propsFormInputCurrent.value = '';\n }\n\n propsFormInput.value = '';\n props.searchText = '';\n props.FormWrapper.action = '';\n };\n\n const isMobileViewport = useCallback(() => {\n const isMobileView = isMobile({ variant: VariantType.Browser, context: context.request }) === 'xs';\n setIsMobile(isMobileView);\n }, [context]);\n\n useEffect(() => {\n window.addEventListener('resize', isMobileViewport);\n isMobileViewport();\n }, [isMobileViewport]);\n\n const viewport = isMobile({ variant: VariantType.Browser, context: context.request });\n\n const isMobileView = viewport === 'sm' || viewport === 'xs';\n\n AutoSuggest.className = !StringExtensions.isNullOrEmpty(searchTextString)\n ? `${AutoSuggest.className} show`\n : `${AutoSuggest.className} hide`;\n const isSearchText: boolean = !StringExtensions.isNullOrEmpty(searchTextString);\n\n return (\n <Module {...Search}>\n {label}\n {FormComponent(\n form as ISearchFormViewProps,\n SearchForm,\n FormWrapper,\n isMobilePort,\n clearSearchButtonText,\n props,\n isSearchText,\n clearSearch\n )}\n {!isMobileView && (\n <Node {...AutoSuggest}>\n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\n <Node {...AutoSuggestAriaLabel}>{AutoSuggestAriaLabelText}</Node>\n ) : (\n ''\n )}\n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\n <>\n <Node className='msc-autoSuggest__search-title-container'>\n <Button\n className='ms-search__form-cancelSearch'\n aria-label={props.resources.cancelBtnAriaLabel}\n onClick={clearSearch}\n onBlur={handleCancelSearchFocused}\n type='button'\n />\n {renderTitle(searchSuggestionHeading, searchText)}\n </Node>\n <Node className='msc-autoSuggest__results-container'>\n <Node className='msc-autoSuggest__results'>\n {CategorySuggestionsComponent(\n categorySuggestionHeading,\n noResultText,\n props,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n {KeywordSuggestionsComponent(\n KeywordSuggest,\n UlKeyword,\n keywordsHeading,\n noResultText,\n autosuggestKeyword,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n </Node>\n {ProductSuggestionsComponent(\n ProductSuggest,\n UlProduct,\n props,\n autosuggestProduct,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n </Node>\n </>\n ) : null}\n </Node>\n )}\n {isMobileView && props.isSearchFormExpanded && (\n <Node {...AutoSuggest}>\n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\n <Node {...AutoSuggestAriaLabel}>{AutoSuggestAriaLabelText}</Node>\n ) : (\n ''\n )}\n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\n <>\n <Node className='msc-autoSuggest__search-title-container'>\n {(form as ISearchFormViewProps).cancelBtn}\n {renderTitle(searchSuggestionHeading, searchText)}\n </Node>\n <Node className='msc-autoSuggest__results-container'>\n <Node className='msc-autoSuggest__results'>\n {CategorySuggestionsComponent(\n categorySuggestionHeading,\n noResultText,\n props,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n {KeywordSuggestionsComponent(\n KeywordSuggest,\n UlKeyword,\n keywordsHeading,\n noResultText,\n autosuggestKeyword,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n </Node>\n {ProductSuggestionsComponent(\n ProductSuggest,\n UlProduct,\n props,\n autosuggestProduct,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n </Node>\n </>\n ) : null}\n </Node>\n )}\n </Module>\n );\n};\nexport default SearchView;\n","import countryCodeOptions from '../components/phone-number-input/countryCodes.json';\r\n\r\nconst detectCountryCode = (value: string) => {\r\n for (const country of countryCodeOptions) {\r\n if (value.startsWith(country.dial_code)) {\r\n return country.dial_code;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexport const validatePhoneNumberWithCountryCode = (phoneNumber: string) => {\r\n const countryCode = detectCountryCode(phoneNumber);\r\n\r\n if (!countryCode) {\r\n return false;\r\n }\r\n\r\n const phoneNumberWithoutPrefix = phoneNumber.replace(countryCode, '');\r\n const phoneRegex = /^\\d{4,11}$/;\r\n\r\n if (\r\n phoneNumberWithoutPrefix.length &&\r\n (!phoneRegex.test(phoneNumberWithoutPrefix) || phoneNumberWithoutPrefix.length < 4 || phoneNumberWithoutPrefix.length > 11)\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n"],"names":["props","ProductSpecification","ProductSpecificationTableProps","ProductSpecificationTableBodyProps","productSpecificationResult","rowdata","ArrayExtensions","hasElements","filter","row","ObjectExtensions","isNullOrUndefined","React","Module","Object","assign","title","Node","assembleNode","item","itemIndex","_item$links","heading","renderHeading","additionalContentHeading","requestContext","Msdyn365","text","tag","className","editProps","onEdit","event","handleAdditionalTextChange","subtext","renderParagraph","additionalContentParagraphText","links","map","ctaLink","index","renderLinks","linkIndex","editableLink","ariaLabel","linkText","linkUrl","destinationUrl","openInNewTab","role","key","link","onTextChange","handleAdditionalLinkTextChange","additionalContentItemContainer","additionalContentItemLinks","contentBlockAdditionalContent","additionalContent","reactNodes","push","additionalContentNode","additionalContentItems","ContentCardLinks","constructor","_mapEditableLinks","linkdata","length","editableLinks","forEach","payLoad","getPayloadObject","this","telemetryContent","contentAction","etext","attributes","getTelemetryAttributes","btnClass","additionalProperties","onClick","onTelemetryClick","render","ContentBlock","getTelemetryObject","context","request","telemetryPageName","friendlyName","telemetry","handleTextChange","config","target","value","handleParagraphChange","paragraph","handleLinkTextChange","Number","_heading$tag","_this$props$context$r","_this$props$config$im","image","imageAriaLabel","contentBlockTitle","contentBlockLinks","LinksComponent","msdyn365__moduleLayout","contentBlockText","contentBlockImageSettings","imageSettings","backgroundColor","_objectSpread","imageProps","gridSettings","contentBlockImage","preserveImageSpace","moduleType","typeName","imagePropertyName","moduleId","id","layout","shouldSkipToMainImage","contentBlockContainerStyle","undefined","error","contentBlockviewProps","moduleClass","contentBlockContainer","moduleProps","classnames","style","imageContainer","detailsContainer","contentBlockAnchorTag","imageLink","_getImageLink","handleAdditionalParagraphChange","handleAdditionalText","handleAdditionalParagraph","renderView","additionalContentObject","actionableRegion","labelGroup","renderErrorLabel","responseErrorMessage","errorMessageClassName","renderRegisteredUserMessage","resources","signInUrl","signInLinkClassName","registeredUserClassName","orderLookupRegisteredUserText","orderLookupViewAccountText","orderLookupSignInLinkText","message","infoMessage","signInText","href","renderFieldErrors","orderLookupFieldValidationErrorMessage","RenderOrderLookupAdditionalFieldInput","super","shouldComponentUpdate","nextProps","_getOrderLookupAdditionalFields","additionalFieldLabel","additionalFieldError","additionalFieldInput","additionalFieldLabelClassName","type","inputType","onChange","name","isValidAdditionalFieldName","additionalFieldValidationMessage","__decorate","observer","RenderOrderLookupFormFields","_getOrderLookupFields","label","input","orderLookupLabelClassName","orderLookupLabel","ref","inputReference","fieldErrorClassName","isInputTypeError","renderAlert","isValidInputField","OrderLookupSearchValues","OrderLookup","isEmailValue","isOrderNumberValue","orderLookupExtensibleEnum","handleSubmit","actionContext","orderNumber","email","state","orderLookupValue","orderStatusLookUpParametersType","orderLookupName","_validateOrderLookupForm","_Msdyn365$getUrlSync","actionContextValue","orderDetailsPath","baseUrl","URL","window","location","origin","redirectUrl","searchParameters","searchParams","set","fieldName","StringExtensions","isNullOrWhitespace","replace","toLocaleLowerCase","fieldValue","toString","_this$orderNumberInpu","_this$emailInputRef$c","orderNumberInputRef","current","emailInputRef","setState","additionalPropertyStates","isAdditionalFieldError","isKeyExistInAdditionalFieldArray","labelName","isValidFieldName","additionalfieldErrorMessage","items","ordernumber","isOrdNumberError","isReqError","isEmailError","isValidEmailError","isValidLookupField","isValidAdditionalLookupField","isDisabled","_renderAlert","orderLookupEmailValidationErrorMessage","orderLookupRequiredTextErrorMessage","requiredErrorMessage","isNullOrEmpty","emailValidationErrorMessage","isRequireError","isEmailValidError","isValidEmailInput","_renderOrderNumberAlert","orderLookupOrderNumberValidationErrorMessage","_renderOrderLookupInput","orderLookupEmailLabel","orderLookupEmailAriaLabel","_additionalFieldValidation","isFieldValid","RegExp","test","isValid","isDisable","trim","EmailRegex","defaultRegex","isEmailValid","orderLookupSearchAdditionalFields","_item$labelName","_item$ariaLabel","_item$validationMessa","validationMessage","_context$request$user","orderLookupDefaultHeadingText","orderLookupButtonLabel","orderLookupFormAriaLabel","orderLookupOrderNumberLabel","orderLookupOrderNumberAriaLabel","orderLookupSubmitAriaLabel","headingText","headingTag","moduleClassName","orderLookupContainerClassName","orderLookupFormClassName","orderLookupAdditionalFiledContainerClassName","orderLookupFormFieldsClassName","orderNumberLabelClassName","orderNumberInputErrorClassName","submitButtonClassName","signinLinkClassName","orderLookupHeading","viewProps","orderLookup","orderLookupContainer","orderLookupAdditionalFieldContainer","_createParagraph","renderOrderLookupInputField","orderLookupForm","autoComplete","onSubmit","orderNumberInput","submitButton","Button","disabled","submitButtonLabelText","errorMessage","fieldErrorMessage","registeredUserMessage","user","submit","_renderAdditionalFields","_getExtensibleEnumera","_getExtensibleEnumera2","isOrderLookupAdditionalFieldValid","isOrderLookupFieldValid","getExtensibleEnumerations","StoreOperationsDataActions","callerContext","find","TypeName","ExtensibleEnumerations","orderLookupAdditionalParameter","validateOrderLookupField","orderStatusLookUpParameter","isValidField","Name","validateOrderLookupAdditionalField","orderStatusLookUpAdditionalParameters","isValidAdditionalField","_item$fieldKey","fieldKey","validateAdditionalFieldWithProxy","some","setLookupFieldState","additionalFieldsInput","ProductSpecificationTableRow","_ref","productName","cellData","scope","dangerouslySetInnerHTML","getRichTextHtml","handleHeadingChange","_toggle","drawerListId","isDrawerOpen","isAdditionalMediaDrawerOpen","data","catalogId","validateCatalogId","reaction","product","result","RecordId","actionInput","AttributesForSelectedVariantInput","apiSettings","channelId","getAttributesForSelectedVariant","catch","debug","nextState","productSpecificationData","isAccrodion","displayStyle","handleText","_createDrawerBody","_createTableBody","content","_this$props$data$addi","tableRows","_renderProductCell","app","OmniChannelMedia","additionalMediaLocations","_createAdditionalMediaDrawer","_this$props$context$r2","_this$props$data$addi2","accordionItemContainer","drawers","_product$Name","Drawer","collapseProps","timeout","isOpen","openGlyph","closeGlyph","glyphPlacement","toggleButtonText","onToggle","additionalDownloadsText","prevState","mediaLocation","Uri","download","AltText","DataTypeValue","_renderCurrencyCell","_renderDateTimeCell","_renderDecimalCell","_renderIntegerCell","_renderTextCell","_renderTrueFalseCell","warning","CurrencyValue","CurrencyCode","_product$DateTimeOffs","DateTimeOffsetValue","toUTCString","IntegerValue","FloatValue","TextValue","BooleanValue","trueValueText","falseValueText","TileList","_telemetryContent","Heading","_this$props$config$cl","propsCarousel","SingleSlideCarousel","flipperPrevLabel","flipperPrevious","flipperNextLabel","flipperNext","parentId","vertical","_createHeading","singleSlideCarouselComponentProps","tileItemContainer","tileListContainer","tileListHeading","tiles","slots","AccountAttributeDataTypeValue","AccountProfileAttributes","isUpdatingAttributes","gotException","hasError","attributeClassName","maxIntegerLimit","minIntegerLimit","maxDecimalLimit","minDecimalLimit","maxStringLength","maxVATNumberLength","maxPhoneLength","editAsyncCustomerFeatureName","isEditAsyncCustomerFeatureEnabled","_renderAttributes","_data$featureState","_this$props$accountPr","accountProfileProps","attributeDefinitions","additionalInformationSectionHeading","elements","showAttributes","split","att","attributeDefinition","attribute","IsHidden","_renderAttribute","edit","editAttributes","attributesEditButtonText","attributesSaveButtonText","saveAttributes","attributesCancelButtonText","cancelAttributes","customerInformation","featureState","feature","IsEnabled","disableBtn","canRenderAsyncCustomerDataAsUnmodifiable","IsAsyncCustomer","attributesContainerRef","Text","showPhone","_renderPhone","showVatNumber","_renderVatNumber","attributesSaveExceptionMessage","_enableAttributes","innerRef","editRef","_saveAttributes","_disableAttributes","phoneSectionHeading","_onPhoneChange","phone","_renderError","vatNumberSectionHeading","_onVatNumberChange","vatNumber","customAttribute","ExtDataType","Value","Integer","Decimal","_renderIntegerDecimalInput","_renderTextInputOrSelect","TrueFalse","_renderBoolean","attributeProps","_getAttributeProps","displayName","_onAttributeChange","IsMandatory","isEnumeration","IsEnumeration","birthdayHeadingText","EnumerationDetails","hasNoValue","_onAttributeSelect","selected","option","EnumerationValue","source","_onUSBdayChange","maxLength","toggleState","arialabel","format","attributeToggleButtonAriaLabel","ariaPressed","toggleValue","TextComponent","toggleDisableText","_onAttributeCheck","toggleEnableText","attributeName","attributeError","attributePayloadData","isMandatory","MsDyn365","isBrowser","setTimeout","getElementsByClassName","_setFocus","initialAttributes","initialPhone","initialVatNumber","currentTarget","selectedOptions","selectedIndex","_getAttributes","showAttributesArray","customer","custmerAttributes","Attributes","showAttribute","defaultValue","AttributeValue","String","DecimalValue","StringValue","keys","_addOrUpdateAttribute","hasValue","entries","payloadData","dataTypeValue","decimalValue","isNaN","typeError","attributeInputTypeErrorText","lowerBoundValue","upperBoundValue","rangeError","attributeInputRangeErrorText","attributeInputValueExceedsMaximumErrorText","attributeInputValueExceedsMinimumErrorText","integerValue","includes","trimValue","attributeInputStringMaxLengthErrorText","textValue","booleanValue","attributeInputMandatoryErrorText","findIndex","splice","Attribute","recordId","Units","ExtensionProperties","NameTranslations","KeyName","Phone","VATNumber","VatNumber","async","_customer$Attributes","updateCustomerAttributesInput","AccountNumber","updateCustomerAttributes","initialCustomerAttributes","exception","element","focus","_buildPayloadData","defaultIntegerValue","DefaultValue","LowerBound","UpperBound","defaultDecimalValue","defaultStringValue","defaultBooleanValue","_getCustomerPhoneAndVatNumber","componentDidMount","observable","description","ConsentText","ConsentName","_props$accountProfile","_props$accountProfile2","initialChannelValue","consentChannel","initialConsents","SMS","smsConsents","emailConsents","consents","setConsents","useState","channelValue","setChannelValue","canEdit","setCanEdit","isUpdating","setIsUpdating","validationError","setValidationError","gotExceptionError","setGotExceptionError","consent","GEN_MARKETING","locale","toLowerCase","htmlGenericMarketing","privacyPolicyURL","textGenericMarketing","PROFILING","htmlProfiling","THIRD_PARTY","htmlThirdParty","__html","prevConsents","c","handleConsentToggle","handleEditButton","promises","then","isEqual","_consents$find","_consents$find2","_consents$find3","_props$consentChannel","_props$consentChannel2","_props$consentChannel3","_consents$find4","_consents$find5","_consents$find6","_props$consentChannel4","_props$consentChannel5","_props$consentChannel6","updatedConsents","GenMarketingSms","ProfilingSms","ThirdPartySms","GenMarketingEmail","ProfilingEmail","ThirdPartyEmail","updateAllConsentsAsync","Promise","all","handleCancelButton","AccountProfile","isUpdatingPreference","handleEmailHeadingChange","emailAddressSectionHeading","handleNameHeadingChange","nameSectionHeading","editButtonText","onClickEventHandler","_updateAccountPersonalization","_renderPreference","sectionHeading","enableAriaLabel","isOptOut","onClickHandler","accountPreference","buttonWrapper","buttonYesText","buttonNoText","button","DescriptionComponent","onUpdateAccountPreference","isOptOutPersonalization","preferenceType","OptOutWebActivityTracking","updateCustomerPersonalizationInput","OptOutPersonalization","updateCustomerPersonalization","_renderCustomerAttributes","_renderEmailConsents","_this$props$data$cust","profileConsents","emailConsentText","emailConsentTitle","EMAIL","Email","ProfileConsentSection","hideCountryCodeSelector","_renderPhoneConsents","_this$props$data$cust2","phoneConsentText","phoneConsentTitle","_renderModifyPhoneLabel","_this$props$data$cust3","validatePhoneNumberWithCountryCode","modifyInvalidPhoneText","modifyValidPhoneText","modifyEmptyPhoneText","_this$props$context$a","_this$props$data$cust4","editButtonAriaLabel","invalidAsyncCustomerState","shouldRenderAttributes","editLink","get","infoMessageBar","accountProcessingPendingInfoMessage","accountProfileWrapper","emailSection","_renderEmailSection","nameSection","_renderNameSection","getDescription","phoneSection","_renderPhoneSection","preferenceSection","_renderPreferenceSection","customerAttributesWrapper","customerAttributesSection","emailConsentsWrapper","emailConsentsSection","phoneConsentsWrapper","phoneConsentsSection","FirstName","LastName","AccountProfileItem","personalizationDescription","personalizationEnableButtonAriaLabel","webTrackingDescription","webTrackingEnableButtonAriaLabel","preferencesSectionHeading","personalizationSectionHeading","webTrackingSectionHeading","enableDataAnalytics","features","extraPreferences","accountPreferences","personalization","computed","StoreType","Map","pushpinMap","globalThis","selectedPushPin","clusterClickHandler","cachedOrgUnitFoundCount","mapRef","_initMap","channel","storeSelectorStateManager","isMapApiLoaded","Microsoft","Maps","credentials","BingMapsApiKey","pushpinAccessible","labelOverlay","LabelOverlay","hidden","showMapTypeSelector","showLocateMeButton","showTrafficButton","navigationBarMode","enableInertia","customMapStyle","countryRegion","labelVisible","version","_updateMapForOrgUnitChanges","_this$props$data$stor","_storeSelectorStateMa","pushpinOptions","orgUnitStoreInformation","selectedStoreLocationId","positionUser","lastInlineShownStoreInfo","positionUserChanged","firstOrgUnitsRender","cachedLastInlineShownStoreInfo","checkSameLocation","_this$map","currentLayer","layers","clear","storeLocationList","store","OrgUnitAvailability","firstThreeLocations","slice","reduce","acc","org","_org$OrgUnitAvailabil","storeLocation","OrgUnitLocation","Latitude","Longitude","Location","unitStoreInfo","_unitStoreInfo$OrgUni","OrgUnitNumber","isSelectedLocation","storeType","OrgUnitName","startsWith","Retailer","VenchiStore","options","_getPushpinOptions","pushpin","Pushpin","Events","addHandler","handleClickEventOnPushPinStore","currentLocation","boundLocations","setView","bounds","LocationRect","fromLocations","padding","pushpinObject","getZoom","center","getLocation","zoom","fromShapes","Array","from","values","pushpinData","loadModule","clusterLayer","removeHandler","size","pushpins","ClusterLayer","clusteredPinCallback","customizeClusteredPin","gridSize","clusteringEnabled","setOptions","clusterClicked","insert","_updateMapForSelectedStore","_this$props$data$stor2","_getPushpinColorAndIcon","currentPushpin","_this$map2","mapLayer","containedPushpins","getPrimitives","mapBounds","getBounds","contains","currentZoom","getZoomRange","max","nextZoom","cluster","e","locs","i","len","orgUnitNumber","setSelectedStoreLocationId","color","selectionColor_retailer","color_retailer","selectionColor_store","color_store","icon","mapResources","storeLabelRetailer","storeLabelVenchi","_this$props$data$stor3","BingMapsEnabled","when","_this$props$data$stor4","setMapModuleLoaded","_this$props$data$stor5","_this$props$data$stor6","loadMapApi","_this$props$data$stor7","_this$props$context","lang","market","ChannelCountryRegionISOCode","_this$props$data$stor8","_this$props$data$stor9","_this$props$data$stor10","shouldDisplayMap","listMapViewState","displayMap","ModuleProps","classname","show","Header","headerProps","MapProps","secondInput","AccountPreferencesSection","AccountPreferenceSection","preferenceSecton","_ref2","AccountProfileSection","_ref3","bd_input","document","canonicalDomain","addEventListener","setAttribute","showPhoneConsentSection","_props$data$customerI","MapHeader","AccountGenericTile","textField","BodyContainerProps","FooterContainerProps","HeaderContainerProps","HeaderProps","locationsMessage","search","spinner","locationsList","noLocationsMessage","terms","currentUrl","url","requestUrl","substring","lastIndexOf","titles","querySelectorAll","el","storeName","textContent","_el$closest","closest","classList","add","renderLinkToStorePage","_el$closest2","querySelector","_el$closest3","storeUrl","goToStore","createElement","innerHTML","goToStorePage","appendChild","isSearchInProgress","renderAdditionalContent","_additionalContent$ad","histogramItem","buttonProps","starLabel","bar","percentage","histogramItems","histogramProps","buildReviewCard","cardProps","rating","date","cardBodyProps","reviewProps","reviewTitle","reviewText","responseProps","responseName","responseDate","responseText","controlsProps","ratingHelpfulLabel","like","dislike","report","createReviewModal","modal","modalHeader","modalBody","form","inputRow","ratingLabel","titleLabel","titleInput","textLabel","textInput","privacyPolicyUrl","modalFooter","cancelButton","createReportModal","reported","headerSubmitted","header","reportSubmittedMessage","reportMessage","radioButtons","succesfulButton","averageRating","filterByDropdown","noReviewsMessage","noReviewsWithFilterMessage","pageControls","refineReviewsProps","reportReviewModal","reviewsListProps","reviewCards","reviewCount","reviewModal","sortByDropdown","userReview","isFilterApplied","review","OrderLookupViewComponent","_orderLookupForm$clas","_submitButton$classNa","tileListView","tileItem","keyIndex","SummaryForm","formProps","addPaymentButton","appliedLine","bottomBorder","paymentAmountInput","EditForm","inputLabel","inputAmount","customerName","customerAccountNumber","customerSince","accountCredit","alert","accountDetails","checkoutCustomerAccount","checkoutErrorRef","summaryView","editView","moduleState","isReady","renderCategorySuggestionsTitle","inCategoriesHeading","categoryAutoSuggestionHeading","CategorySuggestionsComponent","noResultText","isLoadingAutoSuggest","isLoadingNode","autosuggestCategory","CategorySuggest","UlCategory","MobileAutoSuggestEmptyComponent","noSearchResultImage","src","Image","altText","lazyload","viewports","xs","w","h","q","renderProductNotFoundResultsImage","emptyMobileSearchTextHeading","emptyMobileSearchText","FormComponent","searchForm","formWrapper","isMobile","clearSearchButtonText","isSearchText","clearSearch","cancelButtonNode","cancelBtnAriaLabel","cancelBtn","renderClearButton","submitBtn","renderKeywordSuggestionsTitle","keywordsHeading","KeywordSuggestionsComponent","keywordSuggest","ulKeyword","keywordSuggestions","renderProductSuggestionsTitle","productSuggestionsHeading","productAutoSuggestionHeading","renderProductNotFoundResults","noResultContentHeadingText","noResultContentParagraphText","ProductSuggestionsComponent","productSuggest","ulProduct","productSuggestions","productSuggestionHeading","_item$id","LiProduct","AProduct","thumbnail","price","renderTitle","searchSuggestionHeading","searchText","searchTextString","concat","searchAutoSuggestionHeading","Search","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","AutoSuggest","KeywordSuggest","ProductSuggest","UlKeyword","UlProduct","autosuggestKeyword","autosuggestProduct","SearchForm","FormWrapper","callbacks","handleCancelSearchFocused","categorySuggestionHeading","setSearchTextString","isMobilePort","setIsMobile","useEffect","propsFormInput","propsFormInputCurrent","action","isMobileViewport","useCallback","isMobileView","variant","VariantType","Browser","viewport","onBlur","isSearchFormExpanded","phoneNumber","countryCode","country","countryCodeOptions","dial_code","detectCountryCode","phoneNumberWithoutPrefix"],"sourceRoot":""}