{"version":3,"file":"static/js/21.5850c7353fe9b54439e1.chunk.js","mappings":"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","sources":["webpack://Citta2.0/./src/modules/citta-anchor/citta-anchor.tsx?89f0","webpack://Citta2.0/./src/modules/citta-anchor/citta-anchor.view.tsx?b8ff","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/themes/citta/views/media-gallery.view.tsx?99ca","webpack://Citta2.0/./src/modules/cookie-compliance/components/accept-button.tsx?8e73","webpack://Citta2.0/./src/modules/cookie-compliance/components/links.tsx?97b8","webpack://Citta2.0/./src/modules/cookie-compliance/cookie-compliance.tsx?02ac","webpack://Citta2.0/./src/modules/cookie-compliance/cookie-compliance.view.tsx?a33f","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","webpack://Citta2.0/./src/modules/spacer/spacer.tsx?7565","webpack://Citta2.0/./src/modules/spacer/spacer.view.tsx?1f15"],"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\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICittaAnchorConfig, ICittaAnchorProps } from './citta-anchor.props.autogenerated';\r\n\r\nexport interface ICittaAnchorViewProps extends ICittaAnchorProps {\r\n Anchor: INodeProps;\r\n}\r\n\r\n/**\r\n *\r\n * CittaAnchor component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass CittaAnchor extends React.PureComponent> {\r\n public render(): JSX.Element | null {\r\n const { config } = this.props;\r\n\r\n const anchorId = config && config.anchorName && config.anchorName.replace(/\\s/g, '');\r\n\r\n const viewProps: ICittaAnchorViewProps = {\r\n ...(this.props as ICittaAnchorProps),\r\n\r\n Anchor: {\r\n id: anchorId,\r\n className: ''\r\n }\r\n };\r\n return this.props.renderView(viewProps);\r\n }\r\n}\r\n\r\nexport default CittaAnchor;\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 { Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ICittaAnchorViewProps } from './citta-anchor';\r\n\r\nexport default (props: ICittaAnchorViewProps) => {\r\n const { Anchor } = props;\r\n return (\r\n \r\n );\r\n};\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\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","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { IMediaGalleryThumbnailItemViewProps,\r\n IMediaGalleryThumbnailsViewProps,\r\n IMediaGalleryViewProps\r\n} from '@msdyn365-commerce-modules/media-gallery';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, KeyCodes, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\n/**\r\n * Render the thumbnail item images.\r\n * @param thumbnail - The carousel thumbnail line props.\r\n * @returns Return HTML having thumnailcontainer props with image.\r\n */\r\nconst renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\r\n\r\n return (\r\n \r\n {Picture}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Gets the thumbnail item to display media gallery images.\r\n * @param image - The media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param imageId - Image id.\r\n * @param modifiedActiveIndex - Modified Index of the images when selection changes.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render images.\r\n */\r\nconst GetThumbnailItemComponent = (\r\n image: IImageData,\r\n imageSettings: IImageSettings,\r\n imageId: number,\r\n modifiedActiveIndex: number,\r\n props: IMediaGalleryViewProps\r\n): IMediaGalleryThumbnailItemViewProps => {\r\n\r\n /**\r\n * OnClick method of media gallery item.\r\n * */\r\n const onClick = () => {\r\n // @ts-ignore\r\n props.callbackToggle?.();\r\n // @ts-ignore\r\n props.callbackThumbnailClick?.(imageId);\r\n props.state.activeIndex = imageId;\r\n };\r\n\r\n const classes = classnames(\r\n 'ms-media-gallery__thumbnail-item',\r\n modifiedActiveIndex === imageId ? 'ms-media-gallery__thumbnail-item-active' : ''\r\n );\r\n\r\n /**\r\n * Keydown event of media gallery item.\r\n * @param event - React.KeyboardEvent.\r\n * */\r\n const handleKeyDown = (event: React.KeyboardEvent) => {\r\n if (event.keyCode === KeyCodes.Enter) {\r\n event.preventDefault();\r\n onClick();\r\n }\r\n };\r\n\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: classes,\r\n role: 'presentation',\r\n key: imageId\r\n },\r\n Picture: (\r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n */}\r\n \r\n )\r\n };\r\n};\r\n\r\n/**\r\n * Gets the empty thumbnail item to display media gallery images.\r\n * @param imageSettings - Image settings for the image gallery items.\r\n * @param props - The Media gallery view props from business layer.\r\n * @returns Return thumbnail view props which will be used to render empty images.\r\n */\r\nconst GetEmptyThumbnailItemComponent = (imageSettings: IImageSettings, props: IMediaGalleryViewProps): IMediaGalleryThumbnailItemViewProps => {\r\n return {\r\n ThumbnailItemContainerProps: {\r\n tag: 'li' as NodeTag,\r\n className: 'ms-media-gallery__thumbnail-item',\r\n role: 'tab',\r\n tabIndex: 0,\r\n key: 0,\r\n 'aria-label': '',\r\n 'aria-selected': true\r\n },\r\n Picture: (\r\n \r\n )\r\n };\r\n};\r\n\r\n/**\r\n * Update media gallery items method.\r\n * @param items - The media gallery thumbnail item view props.\r\n * @returns The IImageData array.\r\n */\r\nconst getMediaGalleryItems = (items?: IMediaGalleryThumbnailItemViewProps[]): IImageData[] | undefined => {\r\n return items?.map(item => {\r\n return {\r\n altText: item.Picture.props.altText,\r\n src: item.Picture.props.src\r\n };\r\n });\r\n};\r\n\r\nconst defaultThumbnailImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 },\r\n xl: { q: 'w=295&h=295&q=80&m=6&f=jpg', w: 295, h: 295 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n};\r\n\r\n/**\r\n * Render the Media gallery thumbnails to represent images in grid view.\r\n * @param thumbnails - The thumbnail view props.\r\n * @param props - The media gallery view props.\r\n * @returns - The single slide carousel component to render as media gallery image.\r\n */\r\nconst renderThumbnails = (\r\n thumbnails: IMediaGalleryThumbnailsViewProps,\r\n props: IMediaGalleryViewProps\r\n): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps } = thumbnails;\r\n const { state, Thumbnails } = props;\r\n const mediaGalleryItems = getMediaGalleryItems(Thumbnails.items);\r\n\r\n const items: IMediaGalleryThumbnailItemViewProps[] | undefined =\r\n // eslint-disable-next-line multiline-ternary -- need multiline for easy code reading\r\n state.lastUpdate && !ArrayExtensions.hasElements(mediaGalleryItems) ? [GetEmptyThumbnailItemComponent(defaultThumbnailImageSettings, props)] :\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery\r\n mediaGalleryItems?.map((item: IImageData, id: number) => GetThumbnailItemComponent(item,\r\n defaultThumbnailImageSettings, id, state.activeIndex, props));\r\n\r\n return (\r\n \r\n \r\n {items?.map(renderThumbnailItem)}\r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render the Media gallery items using viewprops.\r\n * @param props - The media gallery view props.\r\n * @returns The media gallery module wrapping up images node.\r\n */\r\nconst mediaGalleryView: React.FC = props => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from media-gallery.tsx file\r\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\r\n return (\r\n \r\n \r\n {Modal}\r\n {renderThumbnails(Thumbnails, props)}\r\n \r\n );\r\n};\r\n\r\nexport default mediaGalleryView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICookieComplianceAcceptButton {\n acceptCookiesButtonText?: string;\n acceptCookiesButtonAriaLabel?: string;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onClose(): void;\n}\n\nexport const CookieComplianceAcceptButton: React.FC = ({\n acceptCookiesButtonText,\n acceptCookiesButtonAriaLabel,\n telemetryContent,\n onClose\n}) => {\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, 'accept cookies');\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n {acceptCookiesButtonText}\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 { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IActionLinksData } from '../cookie-compliance.props.autogenerated';\n\nexport interface ICookieComplianceLinks {\n links: IActionLinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\n/**\n *\n * ContentCardLinks component.\n * @extends {React.PureComponent}\n */\nexport class CookieComplianceLinks extends React.PureComponent {\n public render(): JSX.Element {\n const editableLinks = this._mapEditableLinks(this.props.links);\n return (\n \n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n \n );\n }\n\n private readonly _mapEditableLinks = (linkdata: IActionLinksData[]): 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 editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes,\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n };\n}\n\nexport default CookieComplianceLinks;\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, IAlertProps, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { CookieComplianceAcceptButton, CookieComplianceLinks } from './components';\nimport { ICookieComplianceConfig, ICookieComplianceProps } from './cookie-compliance.props.autogenerated';\n\n/**\n * Alert state interface.\n */\nexport interface IAlertState {\n visible: boolean;\n}\n\n/**\n * Cookie compliance view props interface.\n */\nexport interface ICookieComplianceViewProps extends ICookieComplianceProps<{}> {\n CookieComplianceBanner: IModuleProps;\n AlertProps: IAlertProps;\n Content: INodeProps;\n text?: React.ReactNode;\n links?: React.ReactNode;\n acceptButton?: React.ReactNode;\n className: string;\n onDismiss(): void;\n}\n\n/**\n *\n * CookieCompliance component.\n * @extends {React.PureComponent>}\n */\nclass CookieCompliance extends React.PureComponent, IAlertState> {\n private readonly cookieRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public constructor(props: ICookieComplianceProps) {\n super(props);\n this.state = { visible: false };\n this.cookieRef = React.createRef();\n this._onDismiss = this._onDismiss.bind(this);\n }\n\n public componentDidMount(): void {\n const { context } = this.props;\n\n if (context && context.request && context.request.cookies && !context.request.cookies.isConsentGiven()) {\n this.setState({ visible: true });\n }\n }\n\n public render(): JSX.Element | null {\n const { config, context, resources, telemetry } = this.props;\n const { acceptCookiesButtonText, acceptCookiesAriaLabel } = resources;\n const { visible } = this.state;\n\n const isConsentGiven = context && context.request && context.request.cookies && context.request.cookies.isConsentGiven();\n let moduleConfig: ICookieComplianceConfig;\n\n try {\n moduleConfig = config;\n } catch (error) {\n telemetry.error(`Something went wrong while rendering the alert module ------${error}`);\n return
{error}
;\n }\n\n if (isConsentGiven && !visible) {\n this.props.context.telemetry.error('Cookie Compliance content is empty, module wont render.');\n return null;\n }\n\n if (!MsDyn365.msdyn365Commerce.isBrowser) {\n return <>;\n }\n\n const viewProps = {\n ...this.props,\n onDismiss: this._onDismiss,\n CookieComplianceBanner: {\n moduleProps: this.props,\n className: classnames('ms-cookie-compliance', moduleConfig.className),\n ref: this.cookieRef\n },\n AlertProps: {\n className: 'ms-cookie-compliance__container',\n color: 'white',\n fade: false\n },\n Content: {\n className: 'ms-cookie-compliance__content'\n },\n text: moduleConfig.content && (\n \n ),\n links: ArrayExtensions.hasElements(moduleConfig.actionLinks) && (\n \n ),\n acceptButton: (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handles Link content change event.\n * @param linkIndex - Index of link in linkarray.\n * @returns Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.actionLinks?.[linkIndex]) {\n this.props.config.actionLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Handles content change event.\n * @param event - Event.\n */\n public handleContentChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.content = event.target.value;\n };\n\n private _onDismiss(): void {\n const { context } = this.props;\n\n if (context && context.request && context.request.cookies) {\n context.request.cookies.setConsentCookie();\n location.reload();\n }\n this.setState({ visible: false });\n }\n}\n\nexport default CookieCompliance;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICookieComplianceViewProps } from './cookie-compliance';\n\nconst CookieComplianceView: React.FC = props => {\n const { CookieComplianceBanner, AlertProps, Content, acceptButton, text, links } = props;\n\n return (\n \n \n \n {text}\n {links}\n \n {acceptButton}\n \n \n );\n};\nexport default CookieComplianceView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AsyncResult, Customer, ProductSearchResult, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IModuleProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { getCatalogId } from '@msdyn365-commerce/core';\nimport { ProductComparisonItem, ProductComparisonState } from '../product-comparison-state';\nimport { IProductComparisonButtonProps } from './product-comparison-button.props.autogenerated';\n\n/**\n * Represents product comparison view props.\n */\nexport interface IProductComparisonButtonViewProps extends IProductComparisonButtonProps<{}> {\n moduleProps: IModuleProps;\n productComparisonButton?: React.ReactNode;\n productComparisonPreview?: React.ReactNode;\n}\n\n/**\n * Represents the data which is required for the product comparison button to be rendered.\n */\nexport interface IProductComparisonButtonData {\n accountInformation?: AsyncResult;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonButtonFullProps extends IProductComparisonButtonProps {\n product: ProductSearchResult | SimpleProduct;\n catalogId: number;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonButtonState {\n canProductBeAddedToProductComparison: boolean;\n currentProductsCount: number;\n comparisonItemId: string;\n}\n\n/**\n * Represents the component which renders product comparison table.\n */\nexport class ProductComparisonButton extends React.PureComponent {\n private static _productComparisonPreview?: React.ReactNode;\n\n private readonly _className: string;\n\n private readonly _instanceId: string;\n\n private readonly _shouldUsePreview: boolean;\n\n private static _renderProductComparisonPreview(props: IProductComparisonButtonFullProps): React.ReactNode {\n if (!ProductComparisonButton._productComparisonPreview && ArrayExtensions.hasElements(props.slots.productComparisonPreview)) {\n ProductComparisonButton._productComparisonPreview = props.slots.productComparisonPreview[0];\n }\n\n return ProductComparisonButton._productComparisonPreview;\n }\n\n private static _renderProductComparisonButton(\n className: string,\n buttonText: string | undefined,\n title: string,\n onClickHandler?: () => void\n ): React.ReactNode {\n const isDisabled = ObjectExtensions.isNullOrUndefined(onClickHandler);\n let content: React.ReactNode;\n if (buttonText) {\n content = (\n <>\n
\n
{buttonText}
\n \n );\n }\n return (\n \n );\n }\n\n public constructor(props: IProductComparisonButtonFullProps) {\n super(props);\n\n this._className = 'ms-product-comparison-button';\n this._instanceId = `${this._className}-${this.props.id}-${Random.Guid.generateGuid()}`;\n\n this.state = this._getNewState();\n\n this._shouldUsePreview = !ProductComparisonButton._productComparisonPreview;\n ProductComparisonButton._renderProductComparisonPreview(this.props);\n }\n\n public componentDidMount(): void {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).listModifiedEvent.subscribe(\n {\n instanceId: this._instanceId,\n\n /**\n * Updates the state in case the state for the particular product was changed.\n */\n handler: () => {\n this.setState(this._getNewState());\n }\n }\n );\n }\n\n public getSnapshotBeforeUpdate(previousProps: Readonly): void {\n if (previousProps.product.RecordId !== this.props.product.RecordId || previousProps.catalogId !== this.props.catalogId) {\n this.setState(this._getNewState());\n }\n }\n\n public componentWillUnmount(): void {\n ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).listModifiedEvent.unsubscribe(this._instanceId);\n }\n\n public render(): React.ReactNode | null {\n const isConsentGiven = this.props.context.request.cookies.isConsentGiven();\n if (!isConsentGiven) {\n return null;\n }\n\n const viewProps: IProductComparisonButtonViewProps = {\n ...this.props,\n moduleProps: {\n moduleProps: this.props,\n className: this._className\n }\n };\n\n if (this._shouldUsePreview) {\n viewProps.productComparisonPreview = ProductComparisonButton._productComparisonPreview;\n }\n\n const buttonClassName = this.props.config.shouldDisplayText ? `${this._className}__button` : `${this._className}__icon`;\n\n if (!this.state.canProductBeAddedToProductComparison) {\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.removeFromComparisonButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n classnames(`${buttonClassName}__removing`, buttonClassName),\n buttonText,\n this.props.resources.removeFromComparisonButtonText,\n this._removeFromProductComparison\n );\n return this.props.renderView(viewProps);\n }\n\n const productsLimit = this._getProductsLimit();\n if (!ObjectExtensions.isNullOrUndefined(productsLimit) && productsLimit <= this.state.currentProductsCount) {\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.addToComparisonLimitReachedButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n buttonClassName,\n buttonText,\n this.props.resources.addToComparisonLimitReachedButtonText\n );\n return this.props.renderView(viewProps);\n }\n\n const buttonText = this.props.config.shouldDisplayText ? this.props.resources.addToComparisonButtonText : undefined;\n viewProps.productComparisonButton = ProductComparisonButton._renderProductComparisonButton(\n buttonClassName,\n buttonText,\n this.props.resources.addToComparisonButtonText,\n this._addToProductComparison\n );\n return this.props.renderView(viewProps);\n }\n\n private _getProductsLimit(): number | undefined | null {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n if (viewport === 'xs' || viewport === 'sm') {\n return this.props.context.app.config.productComparisonMobileProductsLimit;\n }\n return this.props.context.app.config.productComparisonDesktopProductsLimit;\n }\n\n /**\n * Adds current product to a product comparison list.\n */\n private readonly _addToProductComparison: () => void = () => {\n const item = new ProductComparisonItem(this.props.product.RecordId, this.props.catalogId);\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).addItem(item);\n };\n\n /**\n * Removes current product from the product comparison list where it was added earlier.\n */\n private readonly _removeFromProductComparison: () => void = () => {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).removeItemById(\n this.state.comparisonItemId\n );\n };\n\n private _getProdutComparisonDataByCatalogId(): ProductComparisonItem[] {\n const items = ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).items;\n const catalogId = getCatalogId(this.props.context.request);\n const productByCatalogId = items?.filter(product => product.catalogId === catalogId) ?? [];\n return productByCatalogId;\n }\n\n /**\n * Retrieves the state of the component based on the comparison data.\n * @returns State object for the component.\n */\n private readonly _getNewState: () => IProductComparisonButtonState = () => {\n const comparisonItemId = ProductComparisonItem.getItemId(this.props.product.RecordId, this.props.catalogId);\n const products = this._getProdutComparisonDataByCatalogId();\n return {\n comparisonItemId,\n canProductBeAddedToProductComparison: !ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).hasItemById(comparisonItemId),\n currentProductsCount: products.length\n };\n };\n}\n\nexport default ProductComparisonButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IProductComparisonButtonViewProps } from './product-comparison-button';\n\n/**\n * Represents product comparison button view.\n * @param props - View props for product comparison button.\n * @returns Functional component of product comparison button.\n */\nexport const ProductComparisonButtonViewFunctionalComponent: React.FC = props => {\n const { productComparisonButton, productComparisonPreview } = props;\n\n return (\n \n {productComparisonButton}\n {productComparisonPreview}\n \n );\n};\n\nexport default ProductComparisonButtonViewFunctionalComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ISpacerProps } from './spacer.props.autogenerated';\n\nexport interface ISpacerViewProps extends ISpacerProps<{}> {\n className?: string;\n}\n\n/**\n *\n * SpacerModule component.\n * @extends {React.PureComponent}\n */\nclass Spacer extends React.PureComponent> {\n public render(): JSX.Element | null {\n const { className } = this.props.config;\n const spacerClass = this.props.config.spacerHeight ? `ms-${this.props.config.spacerHeight}` : 'ms-spacer';\n const viewProps = {\n // Context for telemetry and raw data for C1 to do customization\n // Including computed data, state data and methods\n ...this.props,\n className: (className && classnames(spacerClass, className)) || spacerClass\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n}\n\nexport default Spacer;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nimport { ISpacerViewProps } from './spacer';\n\nconst SpacerView: React.FC = props => {\n const child = props.config.divider &&
;\n\n return (\n
\n {child}\n
\n );\n};\n\nexport default SpacerView;\n"],"names":["CittaAnchor","React","render","config","this","props","anchorId","anchorName","replace","viewProps","_objectSpread","Anchor","id","className","renderView","Node","Object","assign","CittaCollapsibleRecommendations","constructor","super","wrapperClass","darkArrowDesktop","darkArrowMobile","displayPreviewText","collapsibleRecommendationContainer","moduleProps","classnames","cittaCollapsibleRecommendations","_cittaCollapsibleRecommendations","slots","recommendations","length","undefined","Drawer","collapseProps","timeout","toggleButtonText","openGlyph","closeGlyph","glyphPlacement","toggleButtonProps","color","tag","Module","renderThumbnailItem","thumbnail","ThumbnailItemContainerProps","Picture","GetThumbnailItemComponent","image","imageSettings","imageId","modifiedActiveIndex","_props$config$thumbna","role","key","Button","altText","onKeyDown","event","onClick","_props$callbackToggle","_props$callbackThumbn","keyCode","KeyCodes","Enter","preventDefault","callbackToggle","call","callbackThumbnailClick","state","activeIndex","Image","requestContext","context","actionContext","gridSettings","request","thumbnailImageSettings","loadFailureBehavior","GetEmptyThumbnailItemComponent","_props$config$thumbna2","tabIndex","src","defaultThumbnailImageSettings","viewports","xs","q","w","h","xl","lazyload","cropFocalRegion","CarouselProps","Thumbnails","MediaGallery","Modal","renderThumbnails","thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","mediaGalleryItems","items","map","item","getMediaGalleryItems","lastUpdate","ArrayExtensions","hasElements","CookieComplianceAcceptButton","_ref","acceptCookiesButtonText","acceptCookiesButtonAriaLabel","telemetryContent","onClose","payLoad","getPayloadObject","attributes","getTelemetryAttributes","type","CookieComplianceLinks","_mapEditableLinks","linkdata","editableLinks","forEach","link","index","linkText","contentAction","etext","editableLink","ariaLabel","linkUrl","destinationUrl","openInNewTab","additionalProperties","onTelemetryClick","push","links","Msdyn365","editProps","onTextChange","CookieCompliance","getTelemetryObject","telemetryPageName","friendlyName","telemetry","handleLinkTextChange","linkIndex","_this$props$config$ac","actionLinks","target","value","handleContentChange","content","visible","cookieRef","_onDismiss","bind","componentDidMount","cookies","isConsentGiven","setState","resources","acceptCookiesAriaLabel","moduleConfig","error","MsDyn365","isBrowser","onDismiss","CookieComplianceBanner","ref","AlertProps","fade","Content","text","onEdit","acceptButton","setConsentCookie","location","reload","Alert","ProductComparisonButton","_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","Random","Guid","generateGuid","_shouldUsePreview","_productComparisonPreview","_renderProductComparisonPreview","static","productComparisonPreview","buttonText","title","onClickHandler","isDisabled","ObjectExtensions","isNullOrUndefined","disabled","_this$props$data$acco4","listModifiedEvent","subscribe","instanceId","handler","getSnapshotBeforeUpdate","previousProps","componentWillUnmount","_this$props$data$acco5","unsubscribe","buttonClassName","shouldDisplayText","removeFromComparisonButtonText","productComparisonButton","_renderProductComparisonButton","productsLimit","_getProductsLimit","addToComparisonLimitReachedButtonText","addToComparisonButtonText","viewport","isMobile","variant","VariantType","Browser","app","productComparisonMobileProductsLimit","productComparisonDesktopProductsLimit","_this$props$data$acco6","_items$filter","getCatalogId","filter","ProductComparisonButtonViewFunctionalComponent","Spacer","spacerClass","spacerHeight","child","divider","renderModuleAttributes"],"sourceRoot":""}