{"version":3,"sources":["webpack:///./src/modules/citta-collapsible-recommendations/citta-collapsible-recommendations.tsx?9e9f","webpack:///./src/modules/citta-footer-item/citta-footer-item.tsx?e8a0","webpack:///./src/modules/citta-product-attribute-link/citta-product-attribute-link.view.tsx?f1a5","webpack:///./src/modules/citta-collapsible-recommendations/citta-collapsible-recommendations.view.tsx?ee1d","webpack:///./src/modules/citta-custom-navigation-menu/components/link.tsx?6385","webpack:///./src/modules/citta-custom-navigation-menu/citta-custom-navigation-menu.tsx?6aa7","webpack:///src/modules/product-comparison-button/product-comparison-button.tsx?934c","webpack:///./src/modules/citta-footer-item/citta-footer-item.view.tsx?b96c","webpack:///./src/modules/citta-product-attribute-link/citta-product-attribute-link.tsx?daf4","webpack:///./src/modules/citta-custom-navigation-menu/citta-custom-navigation-menu.view.tsx?09ef","webpack:///src/modules/product-comparison-button/product-comparison-button.view.tsx?68cc"],"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","FooterItem","handleHeadingChange","event","heading","text","target","value","handleTextChange","handleLinkTextChange","link","linkText","telemetryContent","getTelemetryObject","context","request","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","image","footerItemClassName","contentAction","etext","attributes","getTelemetryAttributes","_createHeading","_createImageMarkup","_createText","_createLinkText","EditableLink","_createLink","HeadingContainer","ItemContainer","Link","linkUrl","destinationUrl","href","title","openInNewTab","onClick","onTelemetryClick","rel","editableLink","ariaLabel","role","additionalProperties","Msdyn365","editProps","onTextChange","requestContext","onEdit","item","ariaHiddenAttr","src","defaultImageSettings","viewports","xs","q","w","h","lg","lazyload","Object","assign","gridSettings","imageSettings","loadFailureBehavior","key","ContentBlockView","contentBlockContainer","linkItem","Module","_ref","index","noclick","isActive","subLinks","attribute","itemProp","content","NavigationMenu","viewport","device","Type","state","isMobile","_updateViewport","bind","_getViewport","locale","nameTranslations","nameTranslation","find","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","pageName","moduleName","innerWidth","sm","md","setState","__decorate","observable","computed","ProductComparisonButton","PureComponent","_addToProductComparison","_this$props$data$acco","ProductComparisonItem","product","RecordId","catalogId","ProductComparisonState","instance","data","accountInformation","result","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","createElement","Fragment","Button","disabled","_this$props$data$acco4","listModifiedEvent","subscribe","instanceId","handler","getSnapshotBeforeUpdate","previousProps","_this$props$data$acco5","unsubscribe","cookies","isConsentGiven","buttonClassName","shouldDisplayText","resources","removeFromComparisonButtonText","productComparisonButton","_renderProductComparisonButton","productsLimit","_getProductsLimit","addToComparisonLimitReachedButtonText","addToComparisonButtonText","variant","VariantType","Browser","app","productComparisonMobileProductsLimit","productComparisonDesktopProductsLimit","_this$props$data$acco6","_items$filter","items","getCatalogId","filter","FooterItemView","_renderElement","Node","CittaProductAttributeLink","_renderLink","_goToLink","baseUrl","location","origin","linkAttribute","Name","attributeName","TextValue","contentBlockviewProps","NavigationMenuView","ProductComparisonButtonViewFunctionalComponent"],"mappings":"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","file":"static/js/20.26a7b4751d819d93eea3.chunk.js","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. 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 } 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","/*!\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","/*!\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","/*---------------------------------------------------------------------------------------------\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.\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","/*!\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"],"sourceRoot":""}