{"version":3,"file":"static/js/21.334d6385ba0eb87ada43.chunk.js","mappings":"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","sources":["webpack://Citta2.0/./src/modules/citta-collapsible-recommendations/citta-collapsible-recommendations.tsx?71c0","webpack://Citta2.0/./src/modules/citta-collapsible-recommendations/citta-collapsible-recommendations.view.tsx?da8e","webpack://Citta2.0/./src/modules/citta-custom-navigation-menu/components/link.tsx?05ad","webpack://Citta2.0/./src/modules/citta-custom-navigation-menu/citta-custom-navigation-menu.tsx?4aa4","webpack://Citta2.0/./src/modules/citta-custom-navigation-menu/citta-custom-navigation-menu.view.tsx?2694","webpack://Citta2.0/./src/modules/citta-footer-item/citta-footer-item.tsx?6211","webpack://Citta2.0/./src/modules/citta-footer-item/citta-footer-item.view.tsx?d119","webpack://Citta2.0/./src/modules/citta-product-attribute-link/citta-product-attribute-link.tsx?6154","webpack://Citta2.0/./src/modules/citta-product-attribute-link/citta-product-attribute-link.view.tsx?ca50","webpack://Citta2.0/./src/modules/product-comparison-button/product-comparison-button.tsx?9384","webpack://Citta2.0/./src/modules/product-comparison-button/product-comparison-button.view.tsx?94a7"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\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\nimport { Drawer,IModuleProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { ICittaCollapsibleRecommendationsData } from './citta-collapsible-recommendations.data';\r\nimport { ICittaCollapsibleRecommendationsProps } from './citta-collapsible-recommendations.props.autogenerated';\r\n\r\nexport interface ICittaCollapsibleRecommendationsViewProps extends ICittaCollapsibleRecommendationsProps {\r\n cittaCollapsibleRecommendations:React.ReactNode;\r\n collapsibleRecommendationContainer:IModuleProps;\r\n}\r\n\r\n/**\r\n *\r\n * CittaCollapsibleRecommendations component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass CittaCollapsibleRecommendations extends React.PureComponent> {\r\n public constructor(props: ICittaCollapsibleRecommendationsProps) {\r\n super(props);\r\n }\r\n public render(): JSX.Element | null {\r\n const desktopClass = this.props.config.darkArrowDesktop ? 'dark-desktop' : '';\r\n const mobileClass = this.props.config.darkArrowMobile ? 'dark-mobile' : '';\r\n const displayPreview = this.props.config.displayPreviewText ? 'display-preview' : '';\r\n const wrapperClass = `citta-collapsible-recommendations ${desktopClass} ${mobileClass} ${displayPreview}`;\r\n const viewProps = {\r\n collapsibleRecommendationContainer: {\r\n moduleProps: this.props,\r\n className: classnames(wrapperClass)\r\n },\r\n ...this.props,\r\n cittaCollapsibleRecommendations: this. _cittaCollapsibleRecommendations()\r\n\r\n };\r\n return this.props.renderView(viewProps);\r\n }\r\n private _cittaCollapsibleRecommendations(): React.ReactNode {\r\n const { slots } = this.props;\r\n const recommendations = slots && slots.recommendations && slots.recommendations.length ? slots.recommendations : undefined;\r\n return(\r\n
\r\n {recommendations &&\r\n \r\n
\r\n {recommendations}\r\n
\r\n \r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default CittaCollapsibleRecommendations;\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\nimport { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ICittaCollapsibleRecommendationsViewProps } from './citta-collapsible-recommendations';\r\n\r\nexport default (props: ICittaCollapsibleRecommendationsViewProps) => {\r\n const { cittaCollapsibleRecommendations, collapsibleRecommendationContainer } = props;\r\n return (\r\n \r\n {cittaCollapsibleRecommendations}\r\n \r\n );\r\n};\r\n","import { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n// import { SubLink } from './subLink'\r\n\r\ninterface ILink {\r\n className?: string;\r\n text?: string;\r\n href?: string;\r\n ariaLabel?: string;\r\n index: string;\r\n noclick?: boolean;\r\n isActive: boolean;\r\n telemetryContent: ITelemetryContent;\r\n subLinks?: any;\r\n}\r\n\r\nexport const Link: React.FC = ({ text, className, href, ariaLabel, index, noclick, telemetryContent, isActive, subLinks }) => {\r\n const payLoad = getPayloadObject('click', telemetryContent, '', '');\r\n const linkText = text !== undefined ? text : '';\r\n payLoad.contentAction.etext = linkText;\r\n // Construct telemetry attribute to render\r\n const attribute = getTelemetryAttributes(telemetryContent, payLoad);\r\n return (\r\n \r\n );\r\n};","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport MsDyn365, { IGridSettings, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\r\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed, observable } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { IMenuItemData, ICittaCustomNavigationMenuData } from './citta-custom-navigation-menu.data';\r\nimport { ICittaCustomNavigationMenuProps } from './citta-custom-navigation-menu.props.autogenerated';\r\nimport { ICmsNavItemsData } from './citta-custom-navigation-menu.props.autogenerated';\r\nimport { Link } from './components/link';\r\n\r\n\r\nexport interface INavigationMenuViewProps extends ICittaCustomNavigationMenuProps {\r\n className: string;\r\n menuItemData: IMenuItemData[];\r\n Navigation: IModuleProps;\r\n MenuList: INodeProps;\r\n ListItem: INodeProps;\r\n Link: INodeProps;\r\n Button: INodeProps;\r\n Span: INodeProps;\r\n ImageContainer: INodeProps;\r\n MobileDescriptionContainer: INodeProps;\r\n MobileBackButton: INodeProps;\r\n MobileDescriptionLabel: INodeProps;\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n isMobileView: boolean;\r\n DivContainer?: INodeProps;\r\n ImageDivContainer?: INodeProps;\r\n showCategoryImage?: boolean;\r\n showPromotionalContent?: boolean;\r\n links?: React.ReactNode;\r\n\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\nexport interface INavigationMenuState {\r\n isMobile: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * NavigationMenu component.\r\n * @extends {React.PureComponent>}\r\n */\r\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\r\n\r\n private resizeThrottledEventHandler?: (event: Event) => void;\r\n\r\n @observable\r\n private viewport: GridSize;\r\n\r\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\r\n let nameTranslation: TextValueTranslation | undefined;\r\n if (locale && nameTranslations && nameTranslations.length > 0) {\r\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\r\n }\r\n\r\n return nameTranslation && nameTranslation.Text;\r\n }\r\n\r\n constructor(props: ICittaCustomNavigationMenuProps) {\r\n super(props);\r\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\r\n this.state = { \r\n isMobile: this.isMobile \r\n };\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this._getViewport = this._getViewport.bind(this);\r\n }\r\n\r\n @computed get isMobile(): boolean {\r\n return this.viewport === 'xs' || this.viewport === 'sm';\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.isBrowser) {\r\n this.resizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\r\n }\r\n this._updateViewport();\r\n\r\n let container = document.querySelector(\".ms-nav-custom\");\r\n if (container) {\r\n const middle = container.querySelector(\"a.active\") || container.children[Math.floor((container.children.length - 1) / 2)];\r\n \r\n container.scrollTo({\r\n top: 0,\r\n // @ts-ignore\r\n left: middle.offsetLeft + middle.offsetWidth / 2 - container.offsetWidth / 2,\r\n behavior: 'smooth'\r\n })\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\r\n }\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { cmsNavItems } = this.props.config;\r\n\r\n if (!cmsNavItems || !cmsNavItems.length) {\r\n return null;\r\n }\r\n const viewProps = {\r\n ...this.props,\r\n ...this.state,\r\n Navigation: {\r\n moduleProps: this.props,\r\n className: classnames('ms-nav-custom', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\r\n tag: 'nav'\r\n },\r\n isMobileView: this.state.isMobile,\r\n className: classnames('ms-nav', this.props.config.className),\r\n links: this._renderLinks()\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private _renderLinks(): React.ReactNode | null {\r\n const url = this.props.context.request.canonicalUrl!;\r\n const { cmsNavItems } = this.props.config;\r\n let currentNavItems;\r\n\r\n if (url) {\r\n const lastPartOfURL = url && url.substring(url.lastIndexOf('/') + 1)\r\n cmsNavItems!.forEach(navMenu => {\r\n let urls = navMenu.linkText!.split('|');\r\n if (urls.find(u => u === lastPartOfURL)) {\r\n currentNavItems = this._createLinks(navMenu, lastPartOfURL);\r\n }\r\n });\r\n }\r\n\r\n return currentNavItems;\r\n }\r\n\r\n private _createLinks(navMenu: ICmsNavItemsData, lastPartOfURL: string): React.ReactNode {\r\n let links = navMenu.subMenus?.map(menuItem => {\r\n return \r\n })\r\n\r\n return links;\r\n }\r\n\r\n public _getViewport(): GridSize {\r\n const { context } = this.props;\r\n\r\n // Always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (MsDyn365.isBrowser && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n }\r\n return 'xl';\r\n }\r\n }\r\n\r\n return 'xs';\r\n }\r\n\r\n private _updateViewport(): void {\r\n this.viewport = this._getViewport();\r\n this.setState({ isMobile: this.isMobile });\r\n }\r\n\r\n}\r\n\r\nexport default NavigationMenu;\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 {\r\n Module\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { INavigationMenuViewProps } from './citta-custom-navigation-menu';\r\n\r\nconst NavigationMenuView: React.FC = props => {\r\n const { Navigation, links } = props;\r\n if (!links) {\r\n return null;\r\n }\r\n return (\r\n \r\n {links}\r\n \r\n );\r\n };\r\n \r\n export default NavigationMenuView;\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/* eslint-disable no-duplicate-imports */\r\nimport { getPayloadObject, getTelemetryAttributes, getTelemetryObject, IModuleProps, INodeProps, IPayLoad, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { ICittaFooterItemConfig, ICittaFooterItemProps, IHeadingData, ILinkData } from './citta-footer-item.props.autogenerated';\r\n\r\nexport interface IFooterViewProps extends ICittaFooterItemProps {\r\n heading: React.ReactNode;\r\n image: React.ReactNode;\r\n text: React.ReactNode;\r\n linkText: React.ReactNode;\r\n className?:string;\r\n FooterItem: IModuleProps;\r\n HeadingContainer: INodeProps;\r\n ItemContainer: INodeProps;\r\n Link: INodeProps;\r\n EditableLink: React.ReactNode;\r\n}\r\n\r\n/**\r\n *\r\n * FooterItem component\r\n * @extends {React.PureComponent>}\r\n */\r\nexport class FooterItem extends React.PureComponent> {\r\n private telemetryContent: ITelemetryContent;\r\n private payLoad: IPayLoad;\r\n private attributes: Msdyn365.IDictionary | undefined;\r\n constructor(props: ICittaFooterItemProps) {\r\n super(props);\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry);\r\n // Construct telemetry attribute to render\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {heading, image, link, text} = this.props.config;\r\n const footerItemClassName = classnames('ms-footer__item', this.props.config.className);\r\n const linkText = link && link.linkText ? link.linkText : '';\r\n this.payLoad.contentAction.etext = linkText;\r\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n const viewProps: IFooterViewProps = {\r\n ... this.props,\r\n heading: this._createHeading(heading!),\r\n image: this._createImageMarkup(image!),\r\n text:this._createText(text!),\r\n linkText: this._createLinkText(link!),\r\n EditableLink: this._createLink(link!),\r\n // @ts-ignore\r\n FooterItem: {\r\n moduleProps: this.props,\r\n className: footerItemClassName\r\n },\r\n // @ts-ignore\r\n HeadingContainer: {\r\n className: 'ms-footer__heading'\r\n },\r\n // @ts-ignore\r\n ItemContainer: {\r\n className: 'ms-footer__link__container'\r\n },\r\n // @ts-ignore\r\n Link: link && link.linkUrl && link.linkUrl.destinationUrl && {\r\n tag: 'a',\r\n className: 'ms-footer__link',\r\n href: link.linkUrl.destinationUrl,\r\n title:linkText,\r\n target: link.openInNewTab ? '_blank' : undefined,\r\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText),\r\n ...this.attributes,\r\n rel: \"noopener\"\r\n },\r\n className:footerItemClassName\r\n };\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 handleTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.text = event.target.value;\r\n\r\n public handleLinkTextChange = (event: Msdyn365.ContentEditableEvent) => this.props.config.link!.linkText = event.target.value;\r\n\r\n private _createLink(link: ILinkData): React.ReactNode | null {\r\n if(link) {\r\n const linkText = link.linkText ? link.linkText : '';\r\n // TODO: Update the inner tag in the anchor link to span\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: 'ms-footer__link',\r\n linkText: linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: 'button',\r\n additionalProperties: this.attributes!,\r\n onClick: onTelemetryClick(this.telemetryContent, this.payLoad, linkText)\r\n };\r\n return(\r\n \r\n );\r\n\r\n }\r\n return null;\r\n }\r\n\r\n private _createLinkText(link: ILinkData): React.ReactNode | null {\r\n if(!link || !link.linkText) {\r\n return null;\r\n }\r\n\r\n return ({link.linkText});\r\n }\r\n\r\n private _createHeading(heading: IHeadingData): React.ReactNode | null {\r\n if(!heading || !heading.text || !heading.text.length) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _createText(text: string): React.ReactNode | null {\r\n if (!text) {\r\n return null;\r\n }\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _createImageMarkup(item: Msdyn365.IImageData, ariaHiddenAttr?: boolean): React.ReactNode | null {\r\n if(!item || !item.src || !item.src.length) {\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: Msdyn365.IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=24&h=24&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=24&h=24&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default FooterItem;\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/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IFooterViewProps } from './citta-footer-item';\r\n\r\n/**\r\n *\r\n * FooterItemView component\r\n * @extends {React.PureComponent}\r\n */\r\nexport class FooterItemView extends React.PureComponent {\r\n public render(): JSX.Element | null {\r\n const { FooterItem } = this.props;\r\n return(\r\n \r\n {this._renderElement(this.props)}\r\n \r\n );\r\n }\r\n\r\n private _renderElement(props: IFooterViewProps): React.ReactNode | null {\r\n const {heading, HeadingContainer,Link, linkText, image, text, EditableLink} = props;\r\n if(heading) {\r\n return ( {heading} );\r\n } else if(Link && image) {\r\n return (\r\n \r\n {linkText}\r\n {image}\r\n );\r\n } else if(Link) {\r\n return (EditableLink);\r\n }\r\n return(\r\n <>\r\n {text}\r\n {image}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default FooterItemView;","/*---------------------------------------------------------------------------------------------\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/* eslint-disable no-duplicate-imports */\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { ICittaProductAttributeLinkData } from './citta-product-attribute-link.data';\r\nimport { ICittaProductAttributeLinkProps } from './citta-product-attribute-link.props.autogenerated';\r\n\r\nexport interface ICitttaProductAttributeLinkViewProps extends ICittaProductAttributeLinkProps {\r\n linkItem?: INodeProps;\r\n className?: string;\r\n contentBlockContainer: IModuleProps;\r\n}\r\n/**\r\n *\r\n * ContentCard component\r\n * @extends {React.PureComponent>}\r\n */\r\n\r\nclass CittaProductAttributeLink extends React.PureComponent> {\r\n \r\n public render(): JSX.Element | null {\r\n const {\r\n className\r\n } = this.props.config;\r\n\r\n const content: ICittaProductAttributeLinkData = this.props.data;\r\n\r\n const attributes = content.attributes.result;\r\n const linkAttribute = attributes?.find(attribute => attribute.Name === this.props.resources.attributeName);\r\n\r\n if (!linkAttribute || !linkAttribute.TextValue) {\r\n return null;\r\n }\r\n \r\n const contentBlockviewProps = {\r\n ...this.props,\r\n linkItem: this._renderLink(linkAttribute.TextValue),\r\n contentBlockContainer: {\r\n moduleProps: this.props,\r\n className: classnames('product-attribute-link', className),\r\n }\r\n };\r\n return this.props.renderView(contentBlockviewProps) as React.ReactElement;\r\n }\r\n\r\n private _renderLink = (linkUrl: String) => {\r\n const {\r\n linkText\r\n } = this.props.config;\r\n return this._goToLink(linkUrl)}>{linkText || 'Discover more'}\r\n };\r\n\r\n private _goToLink = (linkUrl: String) => {\r\n if (MsDyn365.isBrowser && typeof window !== 'undefined') {\r\n const baseUrl = window.location.origin;\r\n if (baseUrl.length) {\r\n window.location.assign(`${baseUrl}${linkUrl}`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default CittaProductAttributeLink;\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/* eslint-disable no-duplicate-imports */\r\nimport { Module } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ICitttaProductAttributeLinkViewProps } from './citta-product-attribute-link';\r\n\r\nconst ContentBlockView: React.FC = (props) => {\r\n const {\r\n contentBlockContainer,\r\n linkItem\r\n } = props;\r\n\r\n if (linkItem) {\r\n return (\r\n \r\n { /* @ts-ignore */ }\r\n {linkItem}\r\n \r\n );\r\n } else {\r\n return (null);\r\n }\r\n};\r\n\r\nexport default ContentBlockView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AsyncResult, Customer, ProductSearchResult, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IModuleProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { getCatalogId } from '@msdyn365-commerce/core';\nimport { ProductComparisonItem, ProductComparisonState } from '../product-comparison-state';\nimport { IProductComparisonButtonProps } from './product-comparison-button.props.autogenerated';\n\n/**\n * Represents product comparison view props.\n */\nexport interface IProductComparisonButtonViewProps extends IProductComparisonButtonProps<{}> {\n moduleProps: IModuleProps;\n productComparisonButton?: React.ReactNode;\n productComparisonPreview?: React.ReactNode;\n}\n\n/**\n * Represents the data which is required for the product comparison button to be rendered.\n */\nexport interface IProductComparisonButtonData {\n accountInformation?: AsyncResult;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonButtonFullProps extends IProductComparisonButtonProps {\n product: ProductSearchResult | SimpleProduct;\n catalogId: number;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonButtonState {\n canProductBeAddedToProductComparison: boolean;\n currentProductsCount: number;\n comparisonItemId: string;\n}\n\n/**\n * Represents the component which renders product comparison table.\n */\nexport class ProductComparisonButton extends React.PureComponent {\n private static _productComparisonPreview?: React.ReactNode;\n\n private readonly _className: string;\n\n private readonly _instanceId: string;\n\n private readonly _shouldUsePreview: boolean;\n\n private static _renderProductComparisonPreview(props: IProductComparisonButtonFullProps): React.ReactNode {\n if (!ProductComparisonButton._productComparisonPreview && ArrayExtensions.hasElements(props.slots.productComparisonPreview)) {\n ProductComparisonButton._productComparisonPreview = props.slots.productComparisonPreview[0];\n }\n\n return ProductComparisonButton._productComparisonPreview;\n }\n\n private static _renderProductComparisonButton(\n className: string,\n buttonText: string | undefined,\n title: string,\n onClickHandler?: () => void\n ): React.ReactNode {\n const isDisabled = ObjectExtensions.isNullOrUndefined(onClickHandler);\n let content: React.ReactNode;\n if (buttonText) {\n content = (\n <>\n
\n
{buttonText}
\n \n );\n }\n return (\n \n );\n }\n\n public constructor(props: IProductComparisonButtonFullProps) {\n super(props);\n\n this._className = 'ms-product-comparison-button';\n this._instanceId = `${this._className}-${this.props.id}-${Random.Guid.generateGuid()}`;\n\n this.state = this._getNewState();\n\n this._shouldUsePreview = !ProductComparisonButton._productComparisonPreview;\n ProductComparisonButton._renderProductComparisonPreview(this.props);\n }\n\n public componentDidMount(): void {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).listModifiedEvent.subscribe(\n {\n instanceId: this._instanceId,\n\n /**\n * Updates the state in case the state for the particular product was changed.\n */\n handler: () => {\n this.setState(this._getNewState());\n }\n }\n );\n }\n\n public getSnapshotBeforeUpdate(previousProps: Readonly): void {\n if (previousProps.product.RecordId !== this.props.product.RecordId || previousProps.catalogId !== this.props.catalogId) {\n this.setState(this._getNewState());\n }\n }\n\n public componentWillUnmount(): void {\n ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).listModifiedEvent.unsubscribe(this._instanceId);\n }\n\n public render(): React.ReactNode | null {\n const isConsentGiven = this.props.context.request.cookies.isConsentGiven();\n if (!isConsentGiven) {\n return null;\n }\n\n const viewProps: IProductComparisonButtonViewProps = {\n ...this.props,\n moduleProps: {\n moduleProps: this.props,\n className: this._className\n }\n };\n\n if (this._shouldUsePreview) {\n viewProps.productComparisonPreview = ProductComparisonButton._productComparisonPreview;\n }\n\n const buttonClassName = this.props.config.shouldDisplayText ? `${this._className}__button` : `${this._className}__icon`;\n\n if (!this.state.canProductBeAddedToProductComparison) {\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.removeFromComparisonButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n classnames(`${buttonClassName}__removing`, buttonClassName),\n buttonText,\n this.props.resources.removeFromComparisonButtonText,\n this._removeFromProductComparison\n );\n return this.props.renderView(viewProps);\n }\n\n const productsLimit = this._getProductsLimit();\n if (!ObjectExtensions.isNullOrUndefined(productsLimit) && productsLimit <= this.state.currentProductsCount) {\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.addToComparisonLimitReachedButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n buttonClassName,\n buttonText,\n this.props.resources.addToComparisonLimitReachedButtonText\n );\n return this.props.renderView(viewProps);\n }\n\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.addToComparisonButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n buttonClassName,\n buttonText,\n this.props.resources.addToComparisonButtonText,\n this._addToProductComparison\n );\n return this.props.renderView(viewProps);\n }\n\n private _getProductsLimit(): number | undefined | null {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n if (viewport === 'xs' || viewport === 'sm') {\n return this.props.context.app.config.productComparisonMobileProductsLimit;\n }\n return this.props.context.app.config.productComparisonDesktopProductsLimit;\n }\n\n /**\n * Adds current product to a product comparison list.\n */\n private readonly _addToProductComparison: () => void = () => {\n const item = new ProductComparisonItem(this.props.product.RecordId, this.props.catalogId);\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).addItem(item);\n };\n\n /**\n * Removes current product from the product comparison list where it was added earlier.\n */\n private readonly _removeFromProductComparison: () => void = () => {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).removeItemById(\n this.state.comparisonItemId\n );\n };\n\n private _getProdutComparisonDataByCatalogId(): ProductComparisonItem[] {\n const items = ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).items;\n const catalogId = getCatalogId(this.props.context.request);\n const productByCatalogId = items?.filter(product => product.catalogId === catalogId) ?? [];\n return productByCatalogId;\n }\n\n /**\n * Retrieves the state of the component based on the comparison data.\n * @returns State object for the component.\n */\n private readonly _getNewState: () => IProductComparisonButtonState = () => {\n const comparisonItemId = ProductComparisonItem.getItemId(this.props.product.RecordId, this.props.catalogId);\n const products = this._getProdutComparisonDataByCatalogId();\n return {\n comparisonItemId,\n canProductBeAddedToProductComparison: !ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).hasItemById(comparisonItemId),\n currentProductsCount: products.length\n };\n };\n}\n\nexport default ProductComparisonButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductComparisonButtonViewProps } from './product-comparison-button';\n\n/**\n * Represents product comparison button view.\n * @param props - View props for product comparison button.\n * @returns Functional component of product comparison button.\n */\nexport const ProductComparisonButtonViewFunctionalComponent: React.FC = props => {\n const { productComparisonButton, productComparisonPreview } = props;\n\n return (\n \n {productComparisonButton}\n {productComparisonPreview}\n \n );\n};\n\nexport default ProductComparisonButtonViewFunctionalComponent;\n"],"names":["CittaCollapsibleRecommendations","React","constructor","props","super","render","wrapperClass","this","config","darkArrowDesktop","darkArrowMobile","displayPreviewText","viewProps","_objectSpread","collapsibleRecommendationContainer","moduleProps","className","classnames","cittaCollapsibleRecommendations","_cittaCollapsibleRecommendations","renderView","slots","recommendations","length","undefined","Drawer","collapseProps","timeout","toggleButtonText","openGlyph","closeGlyph","glyphPlacement","toggleButtonProps","color","tag","Module","Object","assign","Link","_ref","text","href","ariaLabel","index","noclick","telemetryContent","isActive","subLinks","payLoad","getPayloadObject","linkText","contentAction","etext","attribute","getTelemetryAttributes","onClick","onTelemetryClick","itemProp","content","NavigationMenu","viewport","context","request","device","Type","state","isMobile","_updateViewport","bind","_getViewport","static","locale","nameTranslations","nameTranslation","find","item","Language","toLowerCase","Text","componentDidMount","MsDyn365","isBrowser","resizeThrottledEventHandler","addThrottledEvent","window","container","document","querySelector","middle","children","Math","floor","scrollTo","top","left","offsetLeft","offsetWidth","behavior","componentWillUnmount","removeEventListener","cmsNavItems","Navigation","isMobileView","links","_renderLinks","url","canonicalUrl","currentNavItems","lastPartOfURL","substring","lastIndexOf","forEach","navMenu","split","u","_createLinks","_navMenu$subMenus","subMenus","map","menuItem","linkUrl","destinationUrl","pageName","moduleName","innerWidth","gridSettings","xs","w","sm","md","lg","setState","__decorate","observable","computed","FooterItem","handleHeadingChange","event","heading","target","value","handleTextChange","handleLinkTextChange","link","getTelemetryObject","telemetryPageName","friendlyName","telemetry","image","footerItemClassName","attributes","_createHeading","_createImageMarkup","_createText","_createLinkText","EditableLink","_createLink","HeadingContainer","ItemContainer","title","openInNewTab","rel","editableLink","role","additionalProperties","Msdyn365","editProps","onTextChange","requestContext","onEdit","ariaHiddenAttr","src","defaultImageSettings","viewports","q","h","lazyload","imageSettings","loadFailureBehavior","key","FooterItemView","_renderElement","Node","CittaProductAttributeLink","_renderLink","_goToLink","baseUrl","location","origin","data","result","linkAttribute","Name","resources","attributeName","TextValue","contentBlockviewProps","linkItem","contentBlockContainer","ProductComparisonButton","_addToProductComparison","_this$props$data$acco","ProductComparisonItem","product","RecordId","catalogId","ProductComparisonState","instance","accountInformation","addItem","_removeFromProductComparison","_this$props$data$acco2","removeItemById","comparisonItemId","_getNewState","_this$props$data$acco3","getItemId","products","_getProdutComparisonDataByCatalogId","canProductBeAddedToProductComparison","hasItemById","currentProductsCount","_className","_instanceId","id","Random","Guid","generateGuid","_shouldUsePreview","_productComparisonPreview","_renderProductComparisonPreview","ArrayExtensions","hasElements","productComparisonPreview","buttonText","onClickHandler","isDisabled","ObjectExtensions","isNullOrUndefined","Button","disabled","_this$props$data$acco4","listModifiedEvent","subscribe","instanceId","handler","getSnapshotBeforeUpdate","previousProps","_this$props$data$acco5","unsubscribe","cookies","isConsentGiven","buttonClassName","shouldDisplayText","removeFromComparisonButtonText","productComparisonButton","_renderProductComparisonButton","productsLimit","_getProductsLimit","addToComparisonLimitReachedButtonText","addToComparisonButtonText","variant","VariantType","Browser","app","productComparisonMobileProductsLimit","productComparisonDesktopProductsLimit","_this$props$data$acco6","_items$filter","items","getCatalogId","filter","ProductComparisonButtonViewFunctionalComponent"],"sourceRoot":""}