{"version":3,"file":"static/js/f4844ce75b1846d50c61.bundle.js","mappings":"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","sources":["webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/wishlist-items/actions/get-items-in-wishlists.ts?8533","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/wishlist-items/actions/get-product-availabilities-wishlist-items.ts?eab4","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/wishlist-items/components/wishlist-items-dimensions.tsx?15c5","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/wishlist-items/components/wishlist-item.tsx?d2da","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/wishlist-items/components/wishlist-items-status-message.tsx?cdb3","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/wishlist-items/wishlist-items.tsx?df8b","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/wishlist-items/wishlist-items.view.tsx?4d80"],"sourcesContent":["/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { CommerceListLine } from '@msdyn365-commerce/retail-proxy';\nimport { getByCustomerAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CommerceListsDataActions.g';\nimport { FullProductInput, getFullProducts, getProductDetailsCriteriaFromActionInput } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for getActiveWishlistItems data action.\n */\nexport class ActiveWishlistInput implements IActionInput {\n public getCacheKey = () => 'ActiveWishlistItems';\n\n public getCacheObjectType = () => 'ActiveWishlistItems';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new ActiveWishlistInput();\n};\n\n/**\n * Calls the Retail API and returns a CommerceList object based on the passed GetCartInput.\n * @param input\n * @param ctx\n */\nexport async function getActiveWishlistItems(input: ActiveWishlistInput, ctx: IActionContext): Promise {\n // If no cart ID is provided in input, we need to create a cart object\n if (!input) {\n throw new Error('[getActiveWishlistItems]No valid Input was provided, failing');\n }\n\n if (ctx.requestContext.user.isAuthenticated) {\n const wishlists = await getByCustomerAsync({ callerContext: ctx, queryResultSettings: {} }, null);\n\n if (wishlists && wishlists.length > 0) {\n const productInputs: FullProductInput[] = [];\n wishlists.forEach((currWishlist) => {\n if (currWishlist.CommerceListLines) {\n currWishlist.CommerceListLines.forEach((commerceListLine: CommerceListLine) => {\n if (commerceListLine.ProductId) {\n productInputs.push(new FullProductInput(commerceListLine.ProductId, ctx.requestContext.apiSettings, getProductDetailsCriteriaFromActionInput(ctx)));\n }\n });\n }\n });\n\n if (productInputs.length > 0) {\n return getFullProducts(productInputs, ctx)\n .then(products => {\n if (products) {\n return products;\n }\n return [];\n\n })\n .catch(error => {\n ctx.trace(error);\n ctx.telemetry.error(error.message);\n ctx.telemetry.debug('[getActiveWishlistItems]Unable to hydrate cart with product information');\n throw new Error('[getActiveWishlistItems]Unable to hydrate cart with product information');\n });\n }\n ctx.trace('No productIds found for wishlist');\n\n } else {\n ctx.trace('[getActiveWishlistItems]Not able to get wishlists for the customer');\n return [];\n }\n }\n ctx.trace('[getActiveWishlistItems]User token not found for wishlists');\n return [];\n}\n\nexport const getActiveWishlistItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/wishlist/wishlist-items/get-items-in-wishlist',\n action: >getActiveWishlistItems,\n input: createInput\n});\n\nexport default getActiveWishlistItemsDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getEstimatedAvailabilityAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n ArrayExtensions,\n buildCacheKey,\n createInventoryAvailabilitySearchCriteria,\n IProductInventoryInformation,\n mapAggregatedProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { ActiveWishlistInput, getActiveWishlistItems } from './get-items-in-wishlists';\n\n/**\n * Input class for availabilities for items in wishlist.\n */\nexport class ProductAvailabilitiesForWishlistItems implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('ActiveWishlistItemsAvailability', this.apiSettings);\n\n public getCacheObjectType = () => 'ActiveWishlistItemsAvailability';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductAvailabilitiesForWishlistItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * Calls the Retail API to get wishlist which will be cached the then finds the quantities for each item.\n * @param input\n * @param ctx\n */\nexport async function getAvailabilitiesForWishlistItems(\n input: ProductAvailabilitiesForWishlistItems,\n ctx: IActionContext\n): Promise {\n // If no input is provided fail out\n if (!input) {\n throw new Error('[getAvailabilitiesForWishlistItems]No valid Input was provided, failing');\n }\n\n const products = await getActiveWishlistItems(new ActiveWishlistInput(), ctx);\n\n if (!products) {\n ctx.trace('[getAvailabilitiesForWishlistItems] Not able to get products in wishlist');\n return [];\n }\n\n let validProducts: number[] = [];\n\n for (const product of products) {\n if (product.ProductDetails && product.ProductDetails.RecordId && product.ProductDetails.ItemTypeValue !== ReleasedProductType.Service) {\n validProducts.push(product.ProductDetails.RecordId);\n }\n }\n\n if (validProducts.length === 0) {\n ctx.trace('[getAvailabilitiesForWishlistItems] No products in wishlist');\n return [];\n }\n\n validProducts = ArrayExtensions.unique(validProducts);\n const searchCriteria = createInventoryAvailabilitySearchCriteria(ctx, validProducts, true);\n const productAvailabilities = await getEstimatedAvailabilityAsync(\n { callerContext: ctx },\n searchCriteria\n );\n\n if (productAvailabilities && productAvailabilities) {\n return mapAggregatedProductInventoryInformation(ctx, productAvailabilities);\n }\n\n ctx.trace('[getAvailabilitiesForWishlistItems] unable to get availabilities for product');\n return [];\n}\n\nexport const getAvailabilitiesForWishlistItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/wishlist/wishlist-items/get-product-availabilities-wishlist-items',\n action: >getAvailabilitiesForWishlistItems,\n input: createInput\n});\n\nexport default getAvailabilitiesForWishlistItemsDataAction;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as React from 'react';\n\nexport interface IWishlistItemDimension {\n key: string;\n className?: string;\n dimensionType: string;\n dimensionValue: string;\n}\n\nexport const WishlistItemDimension: React.FC = ({ key, className, dimensionType, dimensionValue }) => (\n
\n \n {dimensionType}\n :\n \n \n {dimensionValue}\n \n
\n);\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { CommerceListLine, ProductPrice, ReleasedProductType, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getFallbackImageUrl, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IWishlistItemActionMessageState } from '../wishlist-items';\nimport { WishlistItemDimension } from './wishlist-items-dimensions';\n\nexport interface IWishlistItemProps extends CommerceListLine {\n product: SimpleProduct;\n wishlistState: IWishlistItemActionMessageState;\n price?: ProductPrice;\n context: ICoreContext>;\n productUrl: string;\n imageSettings?: IImageSettings;\n removeFromWishlistText: string;\n isInStock: boolean;\n addToCartText: string;\n outOfStockText: string;\n index: number;\n itemKey: string;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n enableImageProductLink?: boolean;\n inventoryInformationLabel?: string;\n inventoryLabelClassName?: string;\n telemetryContent?: ITelemetryContent;\n handlers: {\n onAddToCart(product: SimpleProduct, itemKey: string): void;\n onRemoveItem(productId: number): void | undefined;\n onDismiss(): void;\n };\n resources: {\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n };\n}\n\nexport interface IWishlistItemViewProps {\n key: string;\n productImage: React.ReactNode;\n productLink: React.ReactNode;\n productDimensions?: React.ReactNode[];\n productPrice?: React.ReactNode;\n addToCartButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n productStatusMessage?: React.ReactNode;\n productName?: React.ReactNode;\n productAriaLabel?: string;\n entireProductLink?: string;\n inventoryInformation?: React.ReactNode;\n productUnitOfMeasure?: React.ReactNode;\n}\n\nconst _addItemToCart = (props: IWishlistItemProps): void => {\n const { product, itemKey, handlers } = props;\n const { onAddToCart } = handlers;\n\n onAddToCart && product && itemKey && onAddToCart(product, itemKey);\n};\n\nconst _removeItemFromWishlist = (props: IWishlistItemProps): void => {\n const { onRemoveItem } = props.handlers;\n const { RecordId } = props.product;\n\n onRemoveItem && RecordId && onRemoveItem(RecordId);\n};\n\nconst WishListItemActions = {\n addToCart: _addItemToCart,\n removeItem: _removeItemFromWishlist\n};\n\nconst _renderAriaLabel = (props: IWishlistItemProps): string => {\n const { product, price, context, resources } = props;\n\n const { Name, Dimensions } = product;\n const { productDimensionTypeColor, productDimensionTypeSize, productDimensionTypeStyle } = resources;\n\n let formattedPrice = 'Free';\n let dimensions = null;\n\n if (price) {\n formattedPrice = price.BasePrice === 0 ? resources.freePriceText : context.cultureFormatter.formatCurrency(price.BasePrice!, price.CurrencyCode);\n }\n\n if (Dimensions) {\n dimensions = Dimensions.map(productDimension => {\n switch (productDimension.DimensionTypeValue) {\n case 1:\n return (`${productDimensionTypeColor}${productDimension.DimensionValue && productDimension.DimensionValue.Value}`);\n case 3:\n return (`${productDimensionTypeSize}${productDimension.DimensionValue && productDimension.DimensionValue.Value}`);\n case 4:\n return (`${productDimensionTypeStyle}${productDimension.DimensionValue && productDimension.DimensionValue.Value}`);\n default:\n return '';\n }\n });\n }\n\n return (`${Name} ${formattedPrice} ${dimensions && dimensions.join('') || ''}`);\n};\n\n/**\n * Renders a link to a product based on the given props.\n * @param input - Wishlist item props with the info about the product.\n * @returns React component with a link to a product.\n */\nconst renderProductLink = (input: IWishlistItemProps) => {\n const { productUrl, telemetryContent } = input;\n const { RecordId: recordId, Name: productName } = input.product;\n const payLoad = getPayloadObject('click', telemetryContent!, '', recordId.toString());\n const productAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return !StringExtensions.isNullOrWhitespace(productUrl) &&\n (\n \n {productName}\n \n );\n};\n\n/**\n * Renders a product name box.\n * @param productName - The text to display.\n * @returns React component with a name of a product.\n */\nconst renderProductName = (productName: string) => {\n return (\n
\n {productName}\n
\n );\n};\n\n/**\n * Renders inventory information.\n * @param inventoryInformationLabel - The text to display.\n * @param inventoryLabelClassName - The component class name.\n * @returns React component.\n */\nconst renderInventoryInformationLabel = (inventoryInformationLabel: string | undefined, inventoryLabelClassName: string | undefined) => {\n const inventoryCssName = inventoryLabelClassName ? `ms-wishlist-items__inventory-label ${inventoryLabelClassName}` : 'ms-wishlist-items__inventory-label';\n return !StringExtensions.isNullOrWhitespace(inventoryInformationLabel) && (\n \n {inventoryInformationLabel}\n \n );\n};\n\n/**\n * Renders add to cart button.\n * @param input - Wishlist item props with the configuration.\n * @returns React component.\n */\nconst WishlistItemAddToCartButtonComponent = (input: IWishlistItemProps) => {\n const { isInStock, addToCartText, outOfStockText } = input;\n\n // Check if the product is service or not by product type.\n const isServiceItem = input.product.ItemTypeValue === ReleasedProductType.Service;\n\n const addItemAction = React.useCallback(() => {\n WishListItemActions.addToCart(input);\n }, [input]);\n\n return (\n \n { (isServiceItem || isInStock) && addToCartText || outOfStockText }\n \n );\n};\n\n/**\n * Renders remove from wishlist button.\n * @param input - Wishlist item props with the configuration.\n * @returns React component.\n */\nconst WishlistItemRemoveFromWishlistButtonComponent = (input: IWishlistItemProps) => {\n const { removeFromWishlistText } = input;\n\n const removeItemAction = React.useCallback(() => {\n WishListItemActions.removeItem(input);\n }, [input]);\n\n return (\n \n );\n};\n\n/**\n * Gets the react node for product unit of measure display.\n * @param context - Module context.\n * @param unitOfMeasure - Product unit of measure.\n * @returns The node representing markup for unit of measure component.\n */\nconst renderUnitOfMeasure = (context: ICoreContext>, unitOfMeasure?: string) => {\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\n if (context.app.config && (!context.app.config.unitOfMeasureDisplayType || context.app.config.unitOfMeasureDisplayType === 'none')) {\n return undefined;\n }\n\n if (!unitOfMeasure) {\n return undefined;\n }\n\n return (\n
\n \n {unitOfMeasure}\n \n
\n );\n};\n\nexport const WishlistItem = (input: IWishlistItemProps): IWishlistItemViewProps | null => {\n const { product, productUrl, price, context, imageSettings,\n wishlistState, itemKey, handlers, inventoryInformationLabel, enableImageProductLink, inventoryLabelClassName } = input;\n\n if (!product) {\n return null;\n }\n\n const { RecordId, Name, PrimaryImageUrl, Dimensions } = product;\n\n const fallbackImage = getFallbackImageUrl(product.ItemId, context.actionContext.requestContext.apiSettings);\n\n return {\n key: `${RecordId}-item`,\n productImage: PrimaryImageUrl && Name && _renderProductImage(context, product.Name!, PrimaryImageUrl, fallbackImage, imageSettings),\n productLink: renderProductLink(input),\n productDimensions: Dimensions && _renderProductDimensions(input),\n productPrice: price && _renderPrice(input),\n productUnitOfMeasure: product.DefaultUnitOfMeasure && renderUnitOfMeasure(context, product.DefaultUnitOfMeasure),\n entireProductLink: enableImageProductLink ? productUrl : undefined,\n productAriaLabel: enableImageProductLink ? _renderAriaLabel(input) : undefined,\n productName: enableImageProductLink && Name && renderProductName(Name),\n\n addToCartButton: ,\n inventoryInformation: renderInventoryInformationLabel(inventoryInformationLabel, inventoryLabelClassName),\n removeButton: ,\n productStatusMessage: wishlistState && wishlistState.isOpen &&\n wishlistState.productId === RecordId && wishlistState.itemKey === itemKey &&\n (\n
\n \n \n {wishlistState.userMessage}\n \n \n
\n )\n };\n};\n\nconst _renderProductImage = (context: ICoreContext, heading: string, image?: string, fallbackImage?: string, imageSettings?: IImageSettings): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=315&h=315&m=6', w: 0, h: 0 },\n lg: { q: 'w=315&h=315&m=6', w: 0, h: 0 },\n xl: { q: 'w=315&h=315&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n\n if (image) {\n return (\n \n );\n }\n return null;\n};\n\nconst _renderPrice = (props: IWishlistItemProps): JSX.Element | null => {\n const { price, context, moduleId, moduleTypeName, resources } = props;\n\n if (price) {\n return (\n \n );\n }\n return null;\n};\n\nconst _renderProductDimensions = (props: IWishlistItemProps): (React.ReactNode | undefined)[] => {\n const { product, resources } = props;\n\n if (!product || !product.Dimensions) {\n return [];\n }\n\n return product.Dimensions.map((dimension, index) => {\n if (!dimension.DimensionValue || !dimension.DimensionValue.Value) {\n return undefined;\n }\n\n let type = '';\n\n switch (dimension.DimensionTypeValue) {\n case 1: {\n type = resources.productDimensionTypeColor;\n break;\n }\n case 3: {\n type = resources.productDimensionTypeSize;\n break;\n }\n case 4: {\n type = resources.productDimensionTypeStyle;\n break;\n }\n default:\n return undefined;\n }\n\n return (\n \n );\n });\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { wishlistStatus } from '../wishlist-items';\n\nexport interface IWishlistItemsStatusMessageProps {\n className?: string;\n errorType: wishlistStatus;\n text?: string;\n}\n\nexport const WishlistItemsStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return (\n

\n { text }\n

\n );\n case 'FAILED':\n return (\n

\n { text }\n

\n );\n case 'LOADING':\n default:\n return (\n

\n { text }\n

\n );\n }\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { AsyncResult, CommerceList, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { createGetByCustomerInput, removeLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CommerceListsDataActions.g';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ArrayExtensions, getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport getItemsInWishlists, { ActiveWishlistInput } from './actions/get-items-in-wishlists';\nimport { IWishlistItemViewProps, WishlistItem, WishlistItemsStatusMessage } from './components';\nimport { IWishlistItemsData } from './wishlist-items.data';\nimport { IHeadingData, IWishlistItemsProps } from './wishlist-items.props.autogenerated';\n\nexport interface IWishlistItemActionMessageState {\n productId: number;\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n}\n\nexport type wishlistStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\n\nexport interface IWishlistItemsViewProps extends IWishlistItemsProps {\n WishlistItems: IModuleProps;\n status?: wishlistStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n Products?: INodeProps;\n Product?: INodeProps;\n ProductDetails?: INodeProps;\n ProductDimensions?: INodeProps;\n products?: IWishlistItemViewProps[];\n telemetryContent?: ITelemetryContent;\n}\n\n/**\n *\n * WishlistItems component.\n * @extends {React.PureComponent, IWishlistItemActionMessageState>}\n */\n@observer\nclass WishlistItems extends React.Component, IWishlistItemActionMessageState> {\n\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: IWishlistItemsProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\n }\n\n public async componentDidMount(): Promise {\n this.setState({});\n }\n\n public shouldComponentUpdate(nextProps: IWishlistItemsProps,\n nextState: IWishlistItemActionMessageState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { heading, className } = this.props.config;\n const { emptyWishlistText, wishlistErrorGettingWishlist } = this.props.resources;\n const { cart, productAvailability, wishlists, products } = this.props.data;\n\n if (cart.status === 'LOADING' || productAvailability.status === 'LOADING' || wishlists.status === 'LOADING') {\n const errorProps: IWishlistItemsViewProps = {\n ...(this.props as IWishlistItemsProps),\n WishlistItems: {\n moduleProps: this.props,\n className: classnames('ms-wishlist-items', className)\n },\n status: 'LOADING',\n\n // StatusMessage: \n statusMessage: ,\n heading: this._renderHeading(heading)\n };\n return this.props.renderView(errorProps);\n }\n\n if (cart.status === 'FAILED' || productAvailability.status === 'FAILED' || wishlists.status === 'FAILED') {\n const errorProps: IWishlistItemsViewProps = {\n ...(this.props as IWishlistItemsProps),\n WishlistItems: {\n moduleProps: this.props,\n className: classnames('ms-wishlist-items', className)\n },\n status: 'FAILED',\n statusMessage: ,\n heading: this._renderHeading(heading)\n };\n\n return this.props.renderView(errorProps);\n }\n\n const productsList = products && (products as AsyncResult).result;\n\n if (productsList && productsList.length === 0) {\n const emptyViewProps: IWishlistItemsViewProps = {\n ...(this.props as IWishlistItemsProps),\n WishlistItems: {\n moduleProps: this.props,\n className: classnames('ms-wishlist-items', className)\n },\n status: 'EMPTY',\n statusMessage: ,\n heading: this._renderHeading(heading)\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IWishlistItemsViewProps = {\n ...(this.props as IWishlistItemsProps),\n WishlistItems: {\n moduleProps: this.props,\n className: classnames('ms-wishlist-items', className)\n },\n status: 'SUCCESS',\n heading: this._renderHeading(heading),\n Products: {\n className: 'ms-wishlist-items__products',\n tag: 'ul'\n },\n Product: {\n className: 'ms-wishlist-items__product',\n tag: 'li'\n },\n ProductDetails: {\n className: 'ms-wishlist-items__product-link',\n tag: 'a'\n },\n telemetryContent: this.telemetryContent,\n ProductDimensions: {\n className: 'ms-wishlist-items__product-dimensions'\n },\n products: productsList && this._renderProductList(productsList)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: MsDyn365.ContentEditableEvent) => this.props.config.heading!.text = event.target.value;\n\n private _renderProductList(products: FullProduct[]): IWishlistItemViewProps[] {\n\n const { priceFree, originalPriceText, currentPriceText, addToCartButtonText, outOfStockText, removeButtonText, productDimensionTypeColor, productDimensionTypeSize, productDimensionTypeStyle, productDimensionTypeAmount } = this.props.resources;\n const { context, telemetry } = this.props;\n const { imageSettings, enableImageProductLink } = this.props.config;\n\n return products.map((product: FullProduct, index) => {\n const currentProductProps = {\n product: product.ProductDetails,\n price: product.ProductPrice,\n context,\n wishlistState: this.state,\n productUrl: getProductUrlSync(product.ProductDetails, context.actionContext, undefined),\n imageSettings,\n removeFromWishlistText: removeButtonText,\n isInStock: this._isProductInStock(product),\n addToCartText: addToCartButtonText,\n outOfStockText,\n index,\n itemKey: `${product.ProductDetails.RecordId}-${product.ProductDetails.ItemId}-${index}`,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n enableImageProductLink,\n inventoryInformationLabel: this._inventoryLabel(product),\n inventoryLabelClassName: this._inventoryClassName(product),\n telemetryContent: this.telemetryContent,\n handlers: {\n onAddToCart: this._addItemToCart,\n onRemoveItem: this._removeItemFromWishlist,\n onDismiss: this._onDismiss\n },\n resources: {\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle: product.ProductDetails.IsGiftCard ? productDimensionTypeAmount : productDimensionTypeStyle,\n freePriceText: priceFree,\n originalPriceText,\n currentPriceText\n }\n };\n\n return (\n WishlistItem(currentProductProps)!\n );\n });\n }\n\n // Dismiss alert when addingToCart/removeItem\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _renderHeading = (heading?: IHeadingData): JSX.Element | undefined => {\n if (!heading) {\n return undefined;\n }\n return (\n \n );\n };\n\n private readonly _addItemToCart = async (product: SimpleProduct, itemKey: string): Promise => {\n const { context, data, resources, telemetry } = this.props;\n const { cart, productAvailability } = data;\n const { addedToCartSuccessMessage, addedToCartFailureMessage, invoiceInCartErrorMessage } = resources;\n\n const productInventoryInformation = this._getProductInventory({ ProductDetails: product }, productAvailability.result);\n\n if (context) {\n if (cart.result) {\n const isOrderQuantityLimitsFeatureEnabledInHq = this.props.data.featureState.result\n ?.find(featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature')?.IsEnabled || false;\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n const customerInfo = this.props.data.customerInformation.result;\n\n const isOrderQuantityLimitsFeatureEnabledInSiteSettings = defaultOrderQuantityLimitsFeatureConfig === 'all' ||\n (customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b)));\n\n // Check if the product delivery mode is electronic\n const emailDeliveryModeCode = this.props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode;\n\n const deliveryOptions = await getDeliveryOptionsAsync(\n { callerContext: this.props.context.actionContext, queryResultSettings: {} },\n [product.RecordId]);\n\n const isOrderQuantityLimitsFeatureEnabled = isOrderQuantityLimitsFeatureEnabledInHq && isOrderQuantityLimitsFeatureEnabledInSiteSettings;\n const addProductToCartInput = {\n product,\n quantity: 1,\n enableStockCheck: context.app.config.enableStockCheck,\n availableQuantity: productInventoryInformation ? productInventoryInformation.ProductAvailableQuantity.AvailableQuantity : 0,\n additionalProperties: { orderQuantityLimitsFeatureIsEnabled: isOrderQuantityLimitsFeatureEnabled },\n isAddEmailDeliveryItemToCart: ArrayExtensions.hasElements(deliveryOptions) && ArrayExtensions.hasElements(deliveryOptions[0].DeliveryOptions) && deliveryOptions[0].DeliveryOptions[0].Code === emailDeliveryModeCode\n };\n\n cart.result.addProductToCart(addProductToCartInput)\n .then(async result => {\n if (result.status === 'SUCCESS') {\n this.setState({\n productId: product.RecordId,\n itemKey,\n userMessage: addedToCartSuccessMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n } else if (result.substatus === 'MAXQUANTITY') {\n const curQuantity = (await cart).cart?.CartLines?.find(item => item.ProductId === product.RecordId)?.Quantity || 0;\n const maxQtyLimitReachedMessage = this._getInventoryValueMessage(productInventoryInformation, curQuantity);\n\n this.setState({\n productId: product.RecordId,\n itemKey,\n userMessage: maxQtyLimitReachedMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n } else if (result.substatus === 'QUANTITYLIMITS' && isOrderQuantityLimitsFeatureEnabled) {\n const maxQtyLimitReachedMessage = result.errorDetails?.LocalizedMessage!;\n\n this.setState({\n productId: product.RecordId,\n itemKey,\n userMessage: maxQtyLimitReachedMessage || addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n } else if (result.substatus === 'INVOICEINCART') {\n this.setState({\n productId: product.RecordId,\n itemKey,\n userMessage: result.errorDetails?.LocalizedMessage || invoiceInCartErrorMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n } else {\n this.props.telemetry.debug('[wishlist-items] Unable to Update Cart Line from the wishlist');\n this.setState({\n productId: product.RecordId,\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n }\n })\n .catch(error => {\n telemetry.warning(error);\n telemetry.debug('[wishlist-items] Error trying to Update Cart Line from the wishlist');\n this.setState({\n productId: product.RecordId,\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n }\n }\n };\n\n private readonly _removeItemFromWishlist = (productId: number): void => {\n const { context, data, telemetry } = this.props;\n const { wishlists } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n const wishlistLineId = this._getWishlistLineIdFromProductId(productId);\n if (userToken && wishlists.result && wishlists.result[0] && wishlistLineId) {\n removeLinesAsync({ callerContext: context.actionContext }, wishlists.result[0].Id, [{ LineId: wishlistLineId }])\n .then(commerceList => {\n const castCommerceList: CommerceList | null = commerceList as (CommerceList | null);\n\n if (castCommerceList && castCommerceList.Id && context.request.user.isAuthenticated) {\n context.actionContext.update(createGetByCustomerInput({}, null), [castCommerceList]);\n getItemsInWishlists(new ActiveWishlistInput(), context.actionContext)\n .then((products) => {\n const castSimpleProducts: FullProduct[] | null = products as (FullProduct[] | null);\n if (castSimpleProducts && castSimpleProducts.length > 0) {\n context.actionContext.update(new ActiveWishlistInput(), castSimpleProducts);\n }\n })\n .catch(error => {\n telemetry.warning('[wishlist-items] Unable to hyderate the wishlist with product information');\n telemetry.error(error);\n });\n }\n })\n .catch(error => {\n telemetry.warning('[wishlist-items] Unable remove items from the wishlist');\n telemetry.error(error);\n });\n } else {\n telemetry.warning('[wishlist-items] Unable remove items from the wishlist user token or lineItemID wasn\\'t found');\n }\n }\n };\n\n private _getInventoryValueMessage(product: IProductInventoryInformation | undefined, curQuantity: number): string {\n const { context, resources } = this.props;\n const { maxQuantityLimitText } = resources;\n\n const maxQuantityForLineItem = context.app.config.maxQuantityForCartLineItem || 10;\n\n if (!product || !product.ProductAvailableQuantity.AvailableQuantity || !context.app.config.enableStockCheck) {\n return maxQuantityLimitText.replace('{maxQuantity}', maxQuantityForLineItem.toString()).replace('{curQuantity}', curQuantity.toString());\n }\n\n const minInventory = Math.min(maxQuantityForLineItem, product.ProductAvailableQuantity.AvailableQuantity);\n\n return maxQuantityLimitText.replace('{maxQuantity}', minInventory.toString()).replace('{curQuantity}', curQuantity.toString());\n }\n\n private _getProductInventory(product: FullProduct, productInventoryCollection: IProductInventoryInformation[] | undefined): IProductInventoryInformation | undefined {\n if (productInventoryCollection && productInventoryCollection.length > 0) {\n for (const productResult of productInventoryCollection) {\n if (product.ProductDetails.RecordId === productResult.ProductAvailableQuantity.ProductId) {\n return productResult;\n }\n }\n }\n return undefined;\n }\n\n private readonly _inventoryLabel = (product: FullProduct): string | undefined => {\n const { productAvailability } = this.props.data;\n if (productAvailability && productAvailability.result) {\n const productInventoryInformation = this._getProductInventory(product, productAvailability.result);\n if (productInventoryInformation) {\n return productInventoryInformation.StockLevelLabel;\n }\n }\n\n return undefined;\n };\n\n private readonly _inventoryClassName = (product: FullProduct): string | undefined => {\n const { productAvailability } = this.props.data;\n if (productAvailability && productAvailability.result) {\n const productInventoryInformation = this._getProductInventory(product, productAvailability.result);\n if (productInventoryInformation && productInventoryInformation.StockLevelCode) {\n return `ms-wishlist-items__${productInventoryInformation.StockLevelCode.toLowerCase()}`;\n }\n }\n\n return undefined;\n };\n\n private readonly _isProductInStock = (product: FullProduct): boolean => {\n const { data, context } = this.props;\n const { productAvailability } = data;\n\n if (!context.app.config.enableStockCheck) {\n return true;\n }\n\n if (!productAvailability.result || !product.ProductDetails) {\n return false;\n }\n\n for (const productResult of productAvailability.result) {\n if (productResult.ProductAvailableQuantity &&\n productResult.ProductAvailableQuantity.ProductId &&\n productResult.ProductAvailableQuantity.ProductId === product.ProductDetails.RecordId) {\n return productResult.IsProductAvailable;\n }\n }\n\n return false;\n };\n\n private readonly _getWishlistLineIdFromProductId = (productId: number): number | null => {\n const { wishlists } = this.props.data;\n\n if (!wishlists.result || wishlists.result.length === 0 || !wishlists.result[0].CommerceListLines || wishlists.result[0].CommerceListLines.length === 0) {\n this.props.telemetry.error('Wishlist content is empty, module wont render.');\n return null;\n }\n\n const foundWishlistItem = wishlists.result[0].CommerceListLines.filter((commerceListLine) => {\n return commerceListLine.ProductId === productId;\n });\n\n if (foundWishlistItem && foundWishlistItem[0].LineId) {\n return foundWishlistItem[0].LineId;\n }\n return null;\n\n };\n}\n\nexport default WishlistItems;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { getPayloadObject, getTelemetryAttributes, INodeProps, ITelemetryContent, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IWishlistItemViewProps } from '../..';\nimport { IWishlistItemsViewProps } from './wishlist-items';\n\nconst WishlistItemsView: React.FC = props => {\n const { WishlistItems, status, statusMessage, heading, Products, products, Product, ProductDetails, ProductDimensions, telemetryContent } = props;\n\n return (\n \n {heading}\n {status !== 'SUCCESS' && statusMessage}\n { Products && products && products.length > 0 &&\n \n {products && products.map((product) => {\n return _renderItem(product, Product, ProductDimensions, ProductDetails, telemetryContent);\n })}\n }\n \n );\n};\n\nconst _renderItem = (product: IWishlistItemViewProps, Product?: INodeProps, ProductDimensions?: INodeProps, ProductDetails?: INodeProps, telemetryContent?: ITelemetryContent): JSX.Element | null => {\n\n const { key, productImage, productLink, productPrice, productDimensions, addToCartButton, removeButton,\n productStatusMessage, entireProductLink, productName, productAriaLabel, inventoryInformation, productUnitOfMeasure } = product;\n const payLoad = getPayloadObject('click', telemetryContent!, '', key);\n const productAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n if (entireProductLink) {\n return (\n \n \n {productImage}\n {productName}\n {productDimensions && ProductDimensions &&\n \n {\n productDimensions.map((dimension) => {\n return dimension;\n })\n }\n }\n {productPrice}\n {productUnitOfMeasure}\n \n {inventoryInformation}\n {addToCartButton}\n {removeButton}\n {productStatusMessage}\n \n );\n }\n return (\n \n { productImage }\n { productLink }\n { productDimensions && ProductDimensions &&\n \n {\n productDimensions.map((dimension) => {\n return dimension;\n })\n }\n }\n { productPrice }\n { addToCartButton }\n { removeButton }\n { productStatusMessage }\n \n );\n\n};\n\nexport default WishlistItemsView;\n"],"names":["ActiveWishlistInput","getCacheKey","getCacheObjectType","dataCacheType","async","getActiveWishlistItems","input","ctx","Error","requestContext","user","isAuthenticated","wishlists","callerContext","queryResultSettings","length","trace","productInputs","forEach","currWishlist","CommerceListLines","commerceListLine","ProductId","push","apiSettings","getProductDetailsCriteriaFromActionInput","then","products","catch","error","telemetry","message","debug","getActiveWishlistItemsDataAction","id","action","inputData","ProductAvailabilitiesForWishlistItems","buildCacheKey","this","getAvailabilitiesForWishlistItems","validProducts","product","ProductDetails","RecordId","ItemTypeValue","ArrayExtensions","searchCriteria","productAvailabilities","getEstimatedAvailabilityAsync","getAvailabilitiesForWishlistItemsDataAction","WishlistItemDimension","key","className","dimensionType","dimensionValue","WishListItemActions","props","itemKey","handlers","onAddToCart","onRemoveItem","_renderAriaLabel","price","context","resources","Name","Dimensions","productDimensionTypeColor","productDimensionTypeSize","productDimensionTypeStyle","formattedPrice","dimensions","BasePrice","freePriceText","cultureFormatter","formatCurrency","CurrencyCode","map","productDimension","DimensionTypeValue","DimensionValue","Value","join","renderProductLink","productUrl","telemetryContent","recordId","productName","payLoad","toString","productAttributes","StringExtensions","href","renderInventoryInformationLabel","inventoryInformationLabel","inventoryLabelClassName","inventoryCssName","WishlistItemAddToCartButtonComponent","isInStock","addToCartText","outOfStockText","isServiceItem","addItemAction","title","onClick","disabled","WishlistItemRemoveFromWishlistButtonComponent","removeFromWishlistText","removeItemAction","renderUnitOfMeasure","unitOfMeasure","app","config","unitOfMeasureDisplayType","_renderProductImage","heading","image","fallbackImage","imageSettings","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","cropFocalRegion","actionContext","altText","src","fallBackSrc","gridSettings","request","loadFailureBehavior","_renderPrice","moduleId","moduleTypeName","PriceComponent","typeName","data","originalPriceText","currentPriceText","_renderProductDimensions","dimension","index","type","WishlistItemsStatusMessage","errorType","text","WishlistItems","super","handleHeadingChange","event","target","value","_onDismiss","setState","isOpen","_renderHeading","tag","editProps","onEdit","_addItemToCart","cart","productAvailability","addedToCartSuccessMessage","addedToCartFailureMessage","invoiceInCartErrorMessage","productInventoryInformation","_getProductInventory","result","isOrderQuantityLimitsFeatureEnabledInHq","featureState","find","IsEnabled","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","customerInfo","customerInformation","isOrderQuantityLimitsFeatureEnabledInSiteSettings","IsB2b","emailDeliveryModeCode","channel","EmailDeliveryModeCode","deliveryOptions","getDeliveryOptionsAsync","isOrderQuantityLimitsFeatureEnabled","addProductToCartInput","quantity","enableStockCheck","availableQuantity","ProductAvailableQuantity","AvailableQuantity","additionalProperties","orderQuantityLimitsFeatureIsEnabled","isAddEmailDeliveryItemToCart","DeliveryOptions","Code","addProductToCart","status","productId","userMessage","statusCssString","messageGlyph","substatus","curQuantity","CartLines","item","Quantity","maxQtyLimitReachedMessage","_getInventoryValueMessage","errorDetails","LocalizedMessage","warning","_removeItemFromWishlist","userToken","token","wishlistLineId","_getWishlistLineIdFromProductId","Id","LineId","commerceList","castCommerceList","update","castSimpleProducts","_inventoryLabel","StockLevelLabel","_inventoryClassName","StockLevelCode","toLowerCase","_isProductInStock","productResult","IsProductAvailable","foundWishlistItem","filter","telemetryPageName","friendlyName","nextProps","nextState","state","emptyWishlistText","wishlistErrorGettingWishlist","errorProps","moduleProps","statusMessage","renderView","productsList","emptyViewProps","viewProps","Products","Product","ProductDimensions","_renderProductList","priceFree","addToCartButtonText","removeButtonText","productDimensionTypeAmount","enableImageProductLink","wishlistState","PrimaryImageUrl","getFallbackImageUrl","ItemId","productImage","productLink","productDimensions","productPrice","productUnitOfMeasure","DefaultUnitOfMeasure","entireProductLink","undefined","productAriaLabel","addToCartButton","inventoryInformation","removeButton","productStatusMessage","color","toggle","onDismiss","WishlistItem","ProductPrice","getProductUrlSync","IsGiftCard","maxQuantityLimitText","maxQuantityForLineItem","maxQuantityForCartLineItem","replace","minInventory","Math","min","productInventoryCollection","_renderItem","Node","Module"],"sourceRoot":""}