{"version":3,"file":"static/js/1dd110c713ff773cf609.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./lib/product-comparison-button/module-registration.js?0a45","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison-button/product-comparison-button.tsx?9384","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison-button/product-comparison-button.view.tsx?94a7","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison-state/base/product-comparison-item.ts?940e","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison-state/base/comparison-item.ts?d1df","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison-state/product-comparison-state.ts?6916","webpack://Msdyn365.Commerce.Online/./src/modules/product-comparison-state/comparison-manager.ts?49d5","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['product-comparison-button'] = {\n c: () => require('@msdyn365-commerce-modules/product-comparison/dist/lib/modules/product-comparison-button/product-comparison-button'),\n $type: 'containerModule',\n da: [{name:'accountInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'product-comparison-button',\n p: 'product-comparison',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/product-comparison/dist/lib/modules/product-comparison-button'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['@msdyn365-commerce-modules|product-comparison|modules|product-comparison-button|product-comparison-button'] = {\n c: () => require('@msdyn365-commerce-modules/product-comparison/dist/lib/modules/product-comparison-button/product-comparison-button.view.js'),\n cn: '@msdyn365-commerce-modules-product-comparison-product-comparison-button'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\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 { ComparisonItem } from './comparison-item';\n\n/**\n * Represents a product for comparison.\n */\nexport class ProductComparisonItem extends ComparisonItem {\n public readonly productId: number;\n\n public readonly catalogId: number;\n\n public static getItemId(productId: number, catalogId: number): string {\n return `${productId}-${catalogId}`;\n }\n\n public constructor(productId: number, catalogId: number) {\n const itemId = ProductComparisonItem.getItemId(productId, catalogId);\n super(itemId);\n\n this.productId = productId;\n this.catalogId = catalogId;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/**\n * Represents an item for comparison.\n */\nexport abstract class ComparisonItem {\n public readonly addedDate: Date;\n\n public readonly itemId: ItemId;\n\n public constructor(itemId: ItemId) {\n this.itemId = itemId;\n this.addedDate = new Date();\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICookieContext, IRequestContext } from '@msdyn365-commerce/core';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { ProductComparisonItem } from './base';\nimport { ComparisonManager } from './comparison-manager';\n\n/**\n * Represents a product comparison manager which operates a list of products and cookies to store the list.\n */\nexport class ProductComparisonState extends ComparisonManager {\n private static readonly _productComparisonItemsLocalStorageKey: string = '_msdyn365__productComparisonItems_';\n\n private static _instance?: ProductComparisonState;\n\n private readonly _requestContext: IRequestContext;\n\n public static instance(requestContext: IRequestContext, user?: Customer): ProductComparisonState {\n const items = ProductComparisonState._retrieveItemsFromCookies(requestContext, user);\n\n if (!ProductComparisonState._instance) {\n ProductComparisonState._instance = new ProductComparisonState(requestContext, items, user);\n } else if (!ArrayExtensions.equals(ProductComparisonState._instance.items, items)) {\n ProductComparisonState._instance.setItems(items);\n }\n\n return ProductComparisonState._instance;\n }\n\n private static _getCookieStorageKey(requestContext: IRequestContext, user?: Customer) {\n const userId = user?.RecordId ?? requestContext.user.customerAccountNumber ?? '';\n return `${ProductComparisonState._productComparisonItemsLocalStorageKey}__${requestContext.sitePath ?? ''}__${userId}`;\n }\n\n private static _retrieveItemsFromCookies(requestContext: IRequestContext, user?: Customer): ProductComparisonItem[] {\n const items = ProductComparisonState._readFromCookie(\n requestContext.cookies,\n ProductComparisonState._getCookieStorageKey(requestContext, user)\n );\n if (!ArrayExtensions.hasElements(items)) {\n return [];\n }\n return items;\n }\n\n private static _readFromCookie(cookieContext: ICookieContext, cookieKey: string): ProductComparisonItem[] | undefined | null {\n if (!cookieKey) {\n return undefined;\n }\n\n if (!cookieContext.isConsentGiven()) {\n return undefined;\n }\n\n const cookieValue = cookieContext.get(cookieKey);\n\n return cookieValue.value;\n }\n\n private static _writeToCookie(cookieContext: ICookieContext, cookieKey: string, value: ProductComparisonItem[]): void {\n if (!cookieKey) {\n return;\n }\n\n cookieContext.set(cookieKey, value, { secure: true, maxAge: 5_184_000 });\n }\n\n private constructor(requestContext: IRequestContext, items: ProductComparisonItem[], user?: Customer) {\n super(...items);\n\n this._requestContext = requestContext;\n\n this.listModifiedEvent.subscribe({\n /**\n * Unique identifier of the subscriber. Used to identify the subscriber among the other subscribers for the same event.\n */\n instanceId: 'ProductComparisonState instance',\n\n /**\n * Method which should be called once the event is triggered.\n */\n handler: () => {\n ProductComparisonState._writeToCookie(\n this._requestContext.cookies,\n ProductComparisonState._getCookieStorageKey(requestContext, user),\n this.items\n );\n }\n });\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Event } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { ComparisonItem } from './base';\n\n/**\n * Represents base functionality of a comparison manager which operates a list of items for comparison.\n */\nexport class ComparisonManager = ComparisonItem> {\n public readonly listModifiedEvent: Event;\n\n public get lastUpdateDate(): Date {\n return this._lastUpdateDate;\n }\n\n private _lastUpdateDate: Date;\n\n private _comparisonItems: Item[];\n\n public get items(): Item[] {\n return this._comparisonItems;\n }\n\n public constructor(...items: Item[]) {\n this._comparisonItems = items;\n this.listModifiedEvent = new Event();\n this._lastUpdateDate = new Date(Date.now());\n }\n\n public setItems(items: Item[]): void {\n this._comparisonItems = items;\n this._update();\n }\n\n public addItem(item: Item): void {\n this._comparisonItems.push(item);\n this._update();\n }\n\n public clearAll(): void {\n this.setItems([]);\n }\n\n public removeItem(item: Item): void {\n this._comparisonItems = this._comparisonItems.filter(currentItem => currentItem !== item);\n this._update();\n }\n\n public removeItemById(itemId: ItemId): void {\n this._comparisonItems = this._comparisonItems.filter(currentItem => currentItem.itemId !== itemId);\n this._update();\n }\n\n public hasItem(item: Item): boolean {\n return this.items.includes(item);\n }\n\n public hasItemById(itemId: ItemId): boolean {\n return this.items.some(item => item.itemId === itemId);\n }\n\n private _update(): void {\n this._lastUpdateDate = new Date(Date.now());\n this.listModifiedEvent.trigger();\n }\n}\n","module.exports = React;","module.exports = ReactDOM;"],"names":["binding","modules","dataActions","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","window","__bindings__","_objectSpread","viewDictionary","cn","ProductComparisonButton","React","constructor","props","super","_addToProductComparison","_this$props$data$acco","item","ProductComparisonItem","this","product","RecordId","catalogId","ProductComparisonState","instance","context","request","data","accountInformation","result","addItem","_removeFromProductComparison","_this$props$data$acco2","removeItemById","state","comparisonItemId","_getNewState","_this$props$data$acco3","getItemId","products","_getProdutComparisonDataByCatalogId","canProductBeAddedToProductComparison","hasItemById","currentProductsCount","length","_className","_instanceId","Random","Guid","generateGuid","_shouldUsePreview","_productComparisonPreview","_renderProductComparisonPreview","ArrayExtensions","hasElements","slots","productComparisonPreview","className","buttonText","title","onClickHandler","isDisabled","ObjectExtensions","isNullOrUndefined","content","Button","onClick","disabled","componentDidMount","_this$props$data$acco4","listModifiedEvent","subscribe","instanceId","handler","setState","getSnapshotBeforeUpdate","previousProps","componentWillUnmount","_this$props$data$acco5","unsubscribe","render","cookies","isConsentGiven","viewProps","moduleProps","buttonClassName","config","shouldDisplayText","resources","removeFromComparisonButtonText","undefined","productComparisonButton","_renderProductComparisonButton","classnames","renderView","productsLimit","_getProductsLimit","addToComparisonLimitReachedButtonText","addToComparisonButtonText","viewport","isMobile","variant","VariantType","Browser","app","productComparisonMobileProductsLimit","productComparisonDesktopProductsLimit","_this$props$data$acco6","_items$filter","items","getCatalogId","filter","ProductComparisonButtonViewFunctionalComponent","Module","Object","assign","itemId","addedDate","Date","productId","_len","arguments","Array","_key","_comparisonItems","Event","_lastUpdateDate","now","setItems","_update","push","clearAll","removeItem","currentItem","hasItem","includes","some","trigger","requestContext","user","_requestContext","_writeToCookie","_getCookieStorageKey","_retrieveItemsFromCookies","_instance","equals","_ref","_user$RecordId","_requestContext$siteP","userId","customerAccountNumber","_productComparisonItemsLocalStorageKey","sitePath","_readFromCookie","cookieContext","cookieKey","get","value","set","secure","maxAge","module","exports","ReactDOM"],"sourceRoot":""}