{"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":""}