{"version":3,"file":"static/js/11.0c047d1509f2346c88d9.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-checkout-payment-instrument/citta-checkout-payment-instrument.view.tsx?91b1","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/themes/citta/citta.tsx?4a09","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/place-holder-for-container-preview/place-holder-for-container-preview.tsx?605e","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/starter/starter.tsx?aade"],"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\nimport * as React from 'react';\r\nimport { ICheckoutPaymentInstrumentViewProps } from './citta-checkout-payment-instrument';\r\n\r\nconst CheckoutPaymentInstrumentView: React.FC = ({\r\n paymentTabs,\r\n paymentTabContent,\r\n paymentMethod,\r\n processingModal\r\n}) => (\r\n
\r\n
\r\n
{paymentMethod}
\r\n
\r\n {paymentTabs}\r\n {paymentTabContent}\r\n
\r\n {processingModal}\r\n
\r\n);\r\n\r\nexport default CheckoutPaymentInstrumentView;\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 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","/*---------------------------------------------------------------------------------------------\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 * as React from 'react';\r\n\r\n// TODO: Current build require at least one tsx file\r\nexport default () =>
;\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 { PlaceholderForContainerPreviewComponent } from '@msdyn365-commerce/core';\n\nexport default PlaceholderForContainerPreviewComponent;\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 * as React from 'react';\n\n// TODO: Current build require at least one tsx file\nexport default () =>
;\n"],"names":["CittaAnchor","React","render","config","this","props","anchorId","anchorName","replace","viewProps","_objectSpread","Anchor","id","className","renderView","Node","Object","assign","_ref","paymentTabs","paymentTabContent","paymentMethod","processingModal","CittaProductAttributeLink","constructor","_renderLink","linkUrl","linkText","role","onClick","_goToLink","MsDyn365","isBrowser","window","baseUrl","location","origin","length","attributes","data","result","linkAttribute","find","attribute","Name","resources","attributeName","TextValue","contentBlockviewProps","linkItem","contentBlockContainer","moduleProps","classnames","Module","renderThumbnailItem","thumbnail","ThumbnailItemContainerProps","Picture","GetThumbnailItemComponent","image","imageSettings","imageId","modifiedActiveIndex","_props$config$thumbna","tag","key","Button","altText","onKeyDown","event","_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","acceptCookiesButtonText","acceptCookiesButtonAriaLabel","telemetryContent","onClose","payLoad","getPayloadObject","getTelemetryAttributes","type","CookieComplianceLinks","_mapEditableLinks","linkdata","editableLinks","forEach","link","index","contentAction","etext","editableLink","ariaLabel","destinationUrl","openInNewTab","additionalProperties","onTelemetryClick","push","links","Msdyn365","editProps","onTextChange","CookieCompliance","super","getTelemetryObject","telemetryPageName","friendlyName","telemetry","handleLinkTextChange","linkIndex","_this$props$config$ac","actionLinks","target","value","handleContentChange","content","visible","cookieRef","_onDismiss","bind","componentDidMount","cookies","isConsentGiven","setState","acceptCookiesAriaLabel","moduleConfig","error","onDismiss","CookieComplianceBanner","ref","AlertProps","color","fade","Content","text","onEdit","acceptButton","setConsentCookie","reload","Alert","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","Random","Guid","generateGuid","_shouldUsePreview","_productComparisonPreview","_renderProductComparisonPreview","static","slots","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","undefined","productComparisonButton","_renderProductComparisonButton","productsLimit","_getProductsLimit","addToComparisonLimitReachedButtonText","addToComparisonButtonText","viewport","isMobile","variant","VariantType","Browser","app","productComparisonMobileProductsLimit","productComparisonDesktopProductsLimit","_this$props$data$acco6","_items$filter","getCatalogId","filter","ProductComparisonButtonViewFunctionalComponent"],"sourceRoot":""}