{"version":3,"file":"static/js/977e0e9b22af2e77044c.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/only/views/components/addtowishlist.component.tsx?da14","webpack://Msdyn365.Commerce.Online/./src/themes/only/views/components/product.component.tsx?467e","webpack://Msdyn365.Commerce.Online/./src/utils/helper.tsx?0d7b","webpack://Msdyn365.Commerce.Online/./node_modules/moment/locale/ sync ^\\.\\/.*$?b2df"],"sourcesContent":["/*--------------------------------------------------------------\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 { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport {\r\n AsyncResult,\r\n CartLine,\r\n CommerceList,\r\n Customer,\r\n ProductDimension,\r\n SimpleProduct,\r\n CommerceListsDataActions\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { buildWishlistLine, getCustomer, GetCustomerInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Alert, UncontrolledTooltip } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as Popper from 'popper.js';\r\nimport React, { useState } from 'react';\r\nimport { ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport interface IAddToWishlistComponentProps extends IComponentProps {\r\n className?: string;\r\n addToWishlistButtonText: string;\r\n removeFromWishlistButtonText: string;\r\n nameOfWishlist: string;\r\n\r\n addToWishlistMessage?: string;\r\n removedFromWishlistMessage?: string;\r\n addItemToWishlistError?: string;\r\n removeItemFromWishlistError?: string;\r\n\r\n showButtonText?: boolean;\r\n showButtonTooltip?: boolean;\r\n tooltipPosition?: Popper.Placement;\r\n showStatusMessage?: boolean;\r\n showRemoveButton?: boolean;\r\n disabled?: boolean;\r\n cartline?: CartLine;\r\n canAddMasterProduct?: boolean;\r\n ariaRole?: string;\r\n variantColor?: string;\r\n\r\n getSelectedProduct?: Promise;\r\n\r\n onSuccess?(result: IWishlistActionSuccessResult, cartline?: CartLine): void;\r\n onError?(result: IWishlistActionErrorResult): void;\r\n}\r\n\r\nexport interface IWishlistActionSuccessResult {\r\n status: 'ADDED' | 'REMOVED';\r\n}\r\n\r\nexport interface IWishlistActionErrorResult {\r\n status: 'FAILED' | 'MISSINGDIMENSION';\r\n\r\n missingDimensions?: ProductDimension[];\r\n}\r\n\r\ninterface IAddToWishlistStateManager {\r\n waiting: boolean;\r\n canRemove: boolean;\r\n content: IAddtoWishlistContentState;\r\n vareintProduct: SimpleProduct;\r\n\r\n setWaiting(newWaiting: boolean): void;\r\n setContent(newContent: IAddtoWishlistContentState): void;\r\n setCanRemove(newCanRemove: boolean): void;\r\n setVareintProduct(product: SimpleProduct): void;\r\n}\r\n\r\ninterface IAddtoWishlistContentState {\r\n showAlert?: boolean;\r\n wishlistTextMessage?: string;\r\n color?: string;\r\n}\r\n\r\ninterface IAddtoWishlistData {\r\n wishlists?: CommerceList[];\r\n product: SimpleProduct;\r\n}\r\n\r\nexport interface IAddtoWishlistComponent extends IComponent {\r\n onClick(): (event: React.MouseEvent, props: IAddToWishlistComponentProps, state: IAddToWishlistStateManager) => void;\r\n}\r\n\r\nconst onClick = async (\r\n _event: React.MouseEvent,\r\n props: IAddToWishlistComponentProps,\r\n state: IAddToWishlistStateManager\r\n): Promise => {\r\n const { user } = props.context.request;\r\n // let { product } = state;\r\n let product = state.vareintProduct;\r\n\r\n if (state.waiting) {\r\n return;\r\n }\r\n\r\n if (!user.isAuthenticated && user.signInUrl && window) {\r\n window.location.assign(user.signInUrl);\r\n\r\n return;\r\n }\r\n\r\n state.setWaiting(true);\r\n if (!(props.getSelectedProduct === undefined)) {\r\n product = (await props.getSelectedProduct) || product;\r\n }\r\n\r\n await (doesProductExistInWishlist(product, props) ? removeFromWishlist(product, props, state) : addToWishlist(product, props, state));\r\n state.setWaiting(false);\r\n};\r\n\r\nconst onDismiss = (state: IAddToWishlistStateManager): void => {\r\n state.setContent({ color: 'success', showAlert: false });\r\n};\r\n\r\nconst AddToWishlistComponentActions = {\r\n onClick,\r\n onDismiss\r\n};\r\n\r\nconst _getProductVarient = async (\r\n props: IAddToWishlistComponentProps,\r\n setVareintProduct: React.Dispatch>\r\n) => {\r\n const variant = await ProductsDataActions.getVariantsByDimensionValuesAsync(\r\n { callerContext: props.context.actionContext, queryResultSettings: {} },\r\n props.data.product.RecordId,\r\n props.context.actionContext.requestContext.apiSettings.channelId,\r\n []\r\n );\r\n const matchedVairent = variant?.find((item: SimpleProduct) => {\r\n return item.Dimensions?.find((data: ProductDimension) => {\r\n return data.DimensionTypeValue === 1 && data?.DimensionValue?.Value === props.variantColor;\r\n });\r\n });\r\n matchedVairent && setVareintProduct(matchedVairent);\r\n};\r\nconst AddToWishlist: React.FC = (props: IAddToWishlistComponentProps) => {\r\n // VSI Customization - To fetch vairent Record Id\r\n const pageName = props.context.request.urlTokens.pageType;\r\n const [vareintProduct, setVareintProduct] = useState(props.data.product);\r\n // to display PDP wish list\r\n React.useEffect(() => {\r\n if (props.context.request.user.isAuthenticated && pageName === 'Product') {\r\n setVareintProduct(props.data.product);\r\n }\r\n }, [props.data.product]);\r\n\r\n React.useEffect(() => {\r\n if (props.context.request.user.isAuthenticated && pageName !== 'Product') {\r\n _getProductVarient(props, setVareintProduct);\r\n }\r\n }, []);\r\n\r\n const [waiting, setWaiting] = useState(false);\r\n const [canRemove, setCanRemove] = useState(doesProductExistInWishlist(vareintProduct, props));\r\n const [content, setContent] = useState({});\r\n\r\n const state: IAddToWishlistStateManager = {\r\n waiting,\r\n canRemove,\r\n content,\r\n vareintProduct,\r\n\r\n setWaiting,\r\n setCanRemove,\r\n setContent,\r\n setVareintProduct\r\n };\r\n\r\n React.useEffect(() => {\r\n setCanRemove(doesProductExistInWishlist(vareintProduct, props));\r\n }, [props]);\r\n\r\n const {\r\n removeFromWishlistButtonText,\r\n addToWishlistButtonText,\r\n ariaRole,\r\n showStatusMessage,\r\n showRemoveButton,\r\n showButtonText,\r\n className,\r\n disabled,\r\n showButtonTooltip,\r\n tooltipPosition\r\n } = props;\r\n\r\n const onClickHandler = (event: React.MouseEvent) => {\r\n return AddToWishlistComponentActions.onClick(event, props, state);\r\n };\r\n const onDismissHandler = () => {\r\n AddToWishlistComponentActions.onDismiss(state);\r\n };\r\n const ariaLabel = state.canRemove ? removeFromWishlistButtonText : addToWishlistButtonText;\r\n const addToWishlistRef: React.RefObject = React.createRef();\r\n const removeFromWishlistRef: React.RefObject = React.createRef();\r\n const showMessage = showStatusMessage !== undefined ? showStatusMessage : true;\r\n const showButton = showRemoveButton !== undefined ? showRemoveButton : true;\r\n const showTooltip = showButtonTooltip !== undefined ? showButtonTooltip : true;\r\n const tooltipPos = showButtonTooltip !== undefined ? tooltipPosition : 'right';\r\n const linkAriaRole = ariaRole !== undefined ? ariaRole : 'link';\r\n\r\n if (state.canRemove && !showButton) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n {showButtonText ? (\r\n <>\r\n \r\n {ariaLabel}\r\n \r\n {showTooltip && (\r\n \r\n {ariaLabel}\r\n \r\n )}\r\n \r\n ) : (\r\n <>\r\n \r\n {showTooltip && (\r\n \r\n {ariaLabel}\r\n \r\n )}\r\n \r\n )}\r\n {state.content.showAlert && showMessage ? (\r\n
\r\n \r\n {state.content.wishlistTextMessage}\r\n \r\n
\r\n ) : (\r\n ''\r\n )}\r\n \r\n );\r\n};\r\n\r\nconst doesProductExistInWishlist = (product: SimpleProduct, props: IAddToWishlistComponentProps): boolean => {\r\n const { wishlists } = props.data;\r\n\r\n if (!wishlists || !wishlists[0]) {\r\n return false;\r\n }\r\n\r\n const { CommerceListLines } = wishlists[0];\r\n\r\n if (!CommerceListLines || CommerceListLines.length === 0) {\r\n return false;\r\n }\r\n\r\n for (const wishlistItem of CommerceListLines) {\r\n if (wishlistItem.ProductId === product.RecordId) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\nconst propagateSuccess = (props: IAddToWishlistComponentProps, result: IWishlistActionSuccessResult): void => {\r\n const { onSuccess, cartline } = props;\r\n\r\n if (onSuccess) {\r\n cartline ? onSuccess(result, props.cartline) : onSuccess(result);\r\n }\r\n};\r\n\r\nconst propagateError = (props: IAddToWishlistComponentProps, result: IWishlistActionErrorResult): void => {\r\n const { onError } = props;\r\n\r\n if (onError) {\r\n onError(result);\r\n }\r\n};\r\n\r\nconst addToWishlist = async (\r\n product: SimpleProduct,\r\n props: IAddToWishlistComponentProps,\r\n state: IAddToWishlistStateManager\r\n): Promise => {\r\n const { canAddMasterProduct, context } = props;\r\n\r\n if (product.Dimensions && !canAddMasterProduct) {\r\n const missingDimensions = product.Dimensions.filter(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value));\r\n\r\n if (missingDimensions.length > 0) {\r\n // At least one dimension with no value exists on the product, won't be able to add to cart\r\n propagateError(props, { status: 'MISSINGDIMENSION', missingDimensions });\r\n\r\n return AsyncResult.resolve();\r\n }\r\n }\r\n\r\n if (context.request.user.isAuthenticated) {\r\n if (!props.data.wishlists || props.data.wishlists.length === 0) {\r\n const wishlistName = props.nameOfWishlist;\r\n const customer = await getCustomerAccount(props);\r\n if (customer && customer.AccountNumber) {\r\n const listData: CommerceList = {\r\n CustomerId: customer.AccountNumber,\r\n Name: wishlistName,\r\n\r\n // This is the type value specifically for a wishlist\r\n CommerceListTypeValue: 1,\r\n Id: 0\r\n };\r\n\r\n try {\r\n const commerceList = await CommerceListsDataActions.createCommerceListAsync(\r\n { callerContext: context.actionContext },\r\n listData\r\n );\r\n return callAddWishlistLine(props, state, commerceList.Id, product.RecordId);\r\n } catch (error) {\r\n if (context.telemetry) {\r\n // context.telemetry.warning(error);\r\n context.telemetry.debug('Unable to create a wishlist');\r\n }\r\n propagateError(props, { status: 'FAILED' });\r\n }\r\n } else {\r\n context.telemetry.debug('Customer account number missing');\r\n }\r\n } else {\r\n return callAddWishlistLine(props, state, props.data.wishlists[0].Id, product.RecordId);\r\n }\r\n }\r\n\r\n return AsyncResult.resolve();\r\n};\r\n\r\nconst callAddWishlistLine = async (\r\n props: IAddToWishlistComponentProps,\r\n state: IAddToWishlistStateManager,\r\n wishlistId: number,\r\n productId: number\r\n): Promise => {\r\n const { context } = props;\r\n\r\n try {\r\n const customer = await getCustomerAccount(props);\r\n if (customer && customer.AccountNumber) {\r\n const createdCommerceList = await CommerceListsDataActions.addLinesAsync({ callerContext: context.actionContext }, wishlistId, [\r\n buildWishlistLine(productId, customer.AccountNumber, wishlistId)\r\n ]);\r\n context.actionContext.update(CommerceListsDataActions.createGetByCustomerInput({}, null), [createdCommerceList]);\r\n if (context.telemetry) {\r\n context.telemetry.debug(`Added item to the wishlist ${createdCommerceList}`);\r\n }\r\n state.setCanRemove(true);\r\n state.setContent({\r\n color: 'success',\r\n showAlert: true,\r\n wishlistTextMessage: props.addToWishlistMessage ? props.addToWishlistMessage : 'Added to your wishlist'\r\n });\r\n propagateSuccess(props, { status: 'ADDED' });\r\n } else {\r\n context.telemetry.debug('Customer Account number missing');\r\n }\r\n } catch (error) {\r\n if (context.telemetry) {\r\n // context.telemetry.warning(error);\r\n context.telemetry.debug(`Unable to add item to wishlist ${error}`);\r\n }\r\n\r\n state.setContent({\r\n color: 'danger',\r\n showAlert: true,\r\n wishlistTextMessage: props.addItemToWishlistError\r\n });\r\n propagateError(props, { status: 'FAILED' });\r\n }\r\n};\r\n\r\nconst removeFromWishlist = async (\r\n product: SimpleProduct,\r\n props: IAddToWishlistComponentProps,\r\n state: IAddToWishlistStateManager\r\n): Promise => {\r\n const { context, data, removedFromWishlistMessage, removeItemFromWishlistError } = props;\r\n const { wishlists } = data;\r\n const { actionContext, telemetry } = context;\r\n\r\n // TODO Please fix customeraccount number null once Bug https://msdyneng.visualstudio.com/FinOps/_workitems/edit/481375 gets fixed.\r\n if (context.request.user.isAuthenticated) {\r\n if (wishlists && wishlists[0]) {\r\n const wishlistLine = wishlists[0].CommerceListLines!.find(line => line.ProductId === product.RecordId);\r\n\r\n if (wishlistLine) {\r\n try {\r\n const customer = await getCustomerAccount(props);\r\n const commerceList = await CommerceListsDataActions.removeLinesAsync(\r\n { callerContext: actionContext },\r\n wishlists[0].Id,\r\n [wishlistLine]\r\n );\r\n if (customer) {\r\n context.actionContext.update(CommerceListsDataActions.createGetByCustomerInput({}, null), [commerceList]);\r\n } else {\r\n telemetry.debug('Customer Account Number missing');\r\n }\r\n\r\n if (telemetry) {\r\n telemetry.debug(`[WishlistButton] ${product.RecordId} removed from Wishlist ${commerceList.Id}`);\r\n }\r\n state.setCanRemove(false);\r\n state.setContent({\r\n color: 'success',\r\n showAlert: true,\r\n wishlistTextMessage: removedFromWishlistMessage ? removedFromWishlistMessage : 'Removed item from the wishlist'\r\n });\r\n propagateSuccess(props, { status: 'REMOVED' });\r\n } catch (error) {\r\n if (telemetry) {\r\n // telemetry.warning(error);\r\n telemetry.debug('[WishlistButton] Error removing item from the wishlist');\r\n }\r\n\r\n state.setContent({\r\n color: 'danger',\r\n wishlistTextMessage: removeItemFromWishlistError\r\n });\r\n propagateError(props, { status: 'FAILED' });\r\n }\r\n }\r\n } else if (telemetry) {\r\n telemetry.debug(\"[WishlistButton] Can't remove from wishlist since no wishlist exisits OR there is no product data\");\r\n }\r\n }\r\n\r\n return AsyncResult.resolve();\r\n};\r\n\r\nconst getCustomerAccount = (props: IAddToWishlistComponentProps): AsyncResult => {\r\n const { context } = props;\r\n const customerInput = new GetCustomerInput(context.actionContext.requestContext.apiSettings);\r\n return getCustomer(customerInput, context.actionContext);\r\n};\r\n\r\nexport const AddToWishlistComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\r\n // @ts-expect-error\r\n IAddtoWishlistComponent\r\n>('AddToWishlist', { component: AddToWishlist, ...AddToWishlistComponentActions });\r\n\r\nexport default AddToWishlistComponent;\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 { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n IComponent,\r\n IComponentProps,\r\n ICoreContext,\r\n IGridSettings,\r\n IImageData,\r\n IImageProps,\r\n IImageSettings,\r\n Image,\r\n IRequestContext,\r\n msdyn365Commerce\r\n} from '@msdyn365-commerce/core';\r\nimport {\r\n AttributeSwatch,\r\n ProductDimension,\r\n ProductPrice,\r\n ProductSearchResult,\r\n CommerceList,\r\n AttributeValue\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport Card from 'reactstrap/lib/Card';\r\n\r\nimport {\r\n ArrayExtensions,\r\n checkIfShouldDisplayAsSwatch,\r\n convertDimensionTypeToProductDimensionType,\r\n Dictionary,\r\n DimensionSwatchDisplayTypes,\r\n DimensionTypes,\r\n generateImageUrl,\r\n getProductPageUrlSync,\r\n IDimensionsApp,\r\n StringExtensions\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n format,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n ITelemetryContent,\r\n onTelemetryClick\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport React, { useState } from 'react';\r\n\r\nimport { IPriceComponentResources, PriceComponent } from '@msdyn365-commerce/components/';\r\nimport { ISwatchItem } from '@msdyn365-commerce/components/src/product-dimension/index';\r\nimport { ProductComponentSwatchComponent, RatingComponent } from '@msdyn365-commerce/components';\r\nimport { ProductSearchResultExtended } from '../../../../modules/only-c-search-result-container/actions/get-full-products-by-collection';\r\nimport { IWishListLinkData } from '../../../../modules/only-c-search-result-container/only-c-search-result-container.props.autogenerated';\r\nimport AddToWishlistComponent from './addtowishlist.component';\r\nimport { _getDiscountPercentage } from '../../../../utils/helper';\r\n\r\nexport interface IProductComponentProps extends IComponentProps<{ product?: ProductSearchResultExtended }> {\r\n className?: string;\r\n imageSettings?: IImageSettings;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n ratingAriaLabel?: string;\r\n ratingCountAriaLabel?: string;\r\n allowBack?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n quickViewButton?: React.ReactNode;\r\n inventoryLabel?: string;\r\n isPriceMinMaxEnabled?: boolean;\r\n priceResources?: IPriceComponentResources;\r\n dimensionAvailabilities?: IProductsDimensionsAvailabilities[];\r\n swatchItemAriaLabel?: string;\r\n favouritesHeading?: string;\r\n favouritesContent?: string;\r\n wishListLink?: IWishListLinkData;\r\n wishlist?: CommerceList[];\r\n browseNow?: string;\r\n sizesHeading?: string;\r\n newArrivalMsg?: string;\r\n productLifeTag?: string;\r\n maxSizeDisplay: number;\r\n splitSizeText?: string;\r\n colorText?: string;\r\n}\r\n\r\nexport interface IProductComponent extends IComponent {}\r\n\r\nconst PriceComponentActions = {};\r\n\r\nconst ProductCard: React.FC = ({\r\n data,\r\n context,\r\n imageSettings,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText,\r\n ratingAriaLabel,\r\n ratingCountAriaLabel,\r\n allowBack,\r\n typeName,\r\n id,\r\n telemetryContent,\r\n favouritesContent,\r\n favouritesHeading,\r\n wishListLink,\r\n sizesHeading,\r\n quickViewButton,\r\n wishlist,\r\n dimensionAvailabilities,\r\n inventoryLabel,\r\n isPriceMinMaxEnabled,\r\n priceResources,\r\n newArrivalMsg,\r\n productLifeTag,\r\n maxSizeDisplay,\r\n splitSizeText,\r\n colorText\r\n}) => {\r\n const product = data.product;\r\n function sizeMapper(): JSX.Element | null {\r\n const color: string = encodeURIComponent(product?.variantColor || '');\r\n\r\n const generateProductUrl = (item: string) => {\r\n return productUrl.includes('?') ? `${productUrl}&size=${item}&color=${color}` : `${productUrl}?size=${item}&color=${color}`;\r\n };\r\n\r\n try {\r\n const varientSizes: string[] = product?.variantsizes || [];\r\n\r\n if (varientSizes.length === 0) {\r\n return null;\r\n }\r\n return (\r\n
\r\n

{sizesHeading}

\r\n \r\n
\r\n );\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n /* VSI Customization - Combined changes from product color and New Product to fix slash issue */\r\n function productAvailableColorAndNewMessage() {\r\n let newProduct = product?.AttributeValues?.filter((attribute: AttributeValue) => {\r\n return attribute.Name == 'NEW';\r\n });\r\n const availableColors =\r\n product && product.AttributeValues?.find((item: AttributeValue) => item.Name?.toLowerCase() === 'color')?.TextValue;\r\n const splittedColors: string[] = availableColors?.split('|') || [];\r\n if (newProduct?.length) {\r\n if (splittedColors.length > 1) {\r\n return (\r\n <>\r\n {newArrivalMsg} / +{splittedColors.length - 1} {colorText}\r\n \r\n );\r\n } else {\r\n return {newArrivalMsg} ;\r\n }\r\n } else if (!newProduct?.length && splittedColors.length > 1) {\r\n return `+${splittedColors.length - 1} ${colorText}`;\r\n }\r\n return;\r\n }\r\n\r\n function productDiscount() {\r\n if (product?.BasePrice !== product?.Price) {\r\n return (\r\n
\r\n

-{_getDiscountPercentage(product?.Price, product?.BasePrice)}%

\r\n
\r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n function newProduct() {\r\n const productAttr = product?.AttributeValues?.find((attribute: AttributeValue) => {\r\n return attribute.Name === 'NEW';\r\n });\r\n if (productAttr) {\r\n return {newArrivalMsg} ;\r\n }\r\n return;\r\n }\r\n function productLife() {\r\n const productAttr = product?.AttributeValues?.find((attribute: AttributeValue) => {\r\n return attribute.Name === 'LIFE';\r\n });\r\n if (productAttr && product?.BasePrice === product?.Price) {\r\n return (\r\n
\r\n

{productLifeTag}

\r\n
\r\n );\r\n }\r\n return;\r\n }\r\n\r\n /**\r\n * Updates the product url link to product details page.\r\n * @param productDetailsPageUrl - Product page url.\r\n * @param coreContext - Context of the module using the component.\r\n * @param queryString - Querystring to be added to the URL.\r\n * @returns The update product page url.\r\n */\r\n function updateProductUrl(productDetailsPageUrl: string, coreContext: ICoreContext, queryString: string): string {\r\n const sourceUrl = new URL(productDetailsPageUrl, coreContext.request.apiSettings.baseUrl);\r\n if (sourceUrl.search) {\r\n sourceUrl.search += `&${queryString}`;\r\n } else {\r\n sourceUrl.search += queryString;\r\n }\r\n\r\n const updatedUrl = new URL(sourceUrl.href);\r\n return updatedUrl.pathname + sourceUrl.search;\r\n }\r\n\r\n /**\r\n * Gets the product page url from the default swatch selected.\r\n * @param productData - Product card to be rendered.\r\n * @returns The default color swatch selected if any.\r\n */\r\n function getDefaultColorSwatchSelected(productData?: ProductSearchResult): AttributeSwatch | null {\r\n if (!productData || !productData.AttributeValues) {\r\n return null;\r\n }\r\n\r\n const colorAttribute = productData.AttributeValues.find(\r\n attributeValue => attributeValue.KeyName?.toLocaleLowerCase() === DimensionTypes.color\r\n );\r\n if (!ArrayExtensions.hasElements(colorAttribute?.Swatches)) {\r\n return null;\r\n }\r\n\r\n const defaultSwatch = colorAttribute!.Swatches.find(item => item.IsDefault === true) ?? colorAttribute!.Swatches[0];\r\n return defaultSwatch;\r\n }\r\n\r\n /**\r\n * Gets the product image from the default swatch selected.\r\n * @param coreContext - Context of the module using the component.\r\n * @param productData - Product card to be rendered.\r\n * @returns The product card image url.\r\n */\r\n function getProductImageUrlFromDefaultColorSwatch(coreContext: ICoreContext, productData?: ProductSearchResult): string | undefined {\r\n const siteContext = coreContext as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n if (dimensionToPreSelectInProductCard === DimensionTypes.none) {\r\n return productData?.PrimaryImageUrl;\r\n }\r\n const defaultSwatch = getDefaultColorSwatchSelected(productData);\r\n return defaultSwatch && ArrayExtensions.hasElements(defaultSwatch.ProductImageUrls)\r\n ? generateImageUrl(defaultSwatch.ProductImageUrls[0], coreContext.request.apiSettings)\r\n : productData?.PrimaryImageUrl;\r\n }\r\n\r\n /**\r\n * Gets the product page url from the default swatch selected.\r\n * @param coreContext - Context of the module using the component.\r\n * @param productUrl - Product page url for the product card.\r\n * @param productData - Product card to be rendered.\r\n * @returns The product card image url.\r\n */\r\n function getProductPageUrlFromDefaultSwatch(\r\n coreContext: ICoreContext,\r\n productUrl: string,\r\n productData?: ProductSearchResult\r\n ): string | undefined {\r\n const siteContext = coreContext as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n if (dimensionToPreSelectInProductCard === DimensionTypes.none) {\r\n return productUrl;\r\n }\r\n const defaultSwatch = getDefaultColorSwatchSelected(productData);\r\n if (!defaultSwatch || !defaultSwatch.SwatchValue) {\r\n return productUrl;\r\n }\r\n\r\n const queryString = `color=${defaultSwatch.SwatchValue}`;\r\n return updateProductUrl(productUrl, coreContext, queryString);\r\n }\r\n\r\n let productUrl = product ? getProductPageUrlSync(product.Name ?? '', product.RecordId, context.actionContext, undefined) : '';\r\n if (allowBack && productUrl) {\r\n productUrl = updateProductUrl(productUrl, context, 'back=true');\r\n }\r\n const productImageUrlFromSwatch = getProductImageUrlFromDefaultColorSwatch(context, product) ?? product?.PrimaryImageUrl;\r\n const productPageUrlFromSwatch = getProductPageUrlFromDefaultSwatch(context, productUrl, product) ?? productUrl;\r\n const [productPageUrl, setProductPageUrl] = useState(productPageUrlFromSwatch);\r\n const [productImageUrl, setProductImageUrl] = useState(productImageUrlFromSwatch);\r\n const [selectedSwatchItems] = useState(new Dictionary());\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access -- app context is generic\r\n const enableStockCheck = context.app.config.enableStockCheck;\r\n\r\n /**\r\n * Updates the product page and Image url based on swatch selected.\r\n * @param coreContext - Context of the caller.\r\n * @param swatchItem - Dimension swatch selected.\r\n */\r\n const updatePageAndImageUrl = React.useCallback(\r\n (coreContext: ICoreContext, swatchItem: ISwatchItem) => {\r\n const dimensionType = swatchItem.dimensionType;\r\n selectedSwatchItems.setValue(dimensionType, swatchItem);\r\n if (StringExtensions.isNullOrWhitespace(swatchItem.value)) {\r\n return;\r\n }\r\n const queryString = `${dimensionType}=${swatchItem.value}`;\r\n let productPageUrlWithSwatch = '';\r\n if (productPageUrl.includes(dimensionType)) {\r\n const newUrl = new URL(productPageUrl, coreContext.request.apiSettings.baseUrl);\r\n newUrl.searchParams.delete(dimensionType);\r\n productPageUrlWithSwatch = updateProductUrl(newUrl.toString(), context, queryString);\r\n } else {\r\n productPageUrlWithSwatch = updateProductUrl(productPageUrl, context, queryString);\r\n }\r\n setProductPageUrl(productPageUrlWithSwatch);\r\n if (dimensionType === DimensionTypes.color) {\r\n const swatchProductImageUrl = ArrayExtensions.hasElements(swatchItem.productImageUrls)\r\n ? swatchItem.productImageUrls[0]\r\n : undefined;\r\n const newImageUrl = generateImageUrl(swatchProductImageUrl, coreContext.request.apiSettings);\r\n setProductImageUrl(newImageUrl);\r\n }\r\n },\r\n [selectedSwatchItems, context, productPageUrl]\r\n );\r\n\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n const swatchItems = ArrayExtensions.validValues(\r\n product.AttributeValues?.map(item => {\r\n const dimensionTypeValue = item.KeyName?.toLocaleLowerCase() ?? '';\r\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(\r\n dimensionTypeValue as DimensionTypes,\r\n context as ICoreContext,\r\n DimensionSwatchDisplayTypes.productCard\r\n );\r\n if (!shouldDisplayAsSwatch) {\r\n return null;\r\n }\r\n\r\n const siteContext = context as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n const dimensionType = dimensionTypeValue as DimensionTypes;\r\n const swatches =\r\n item.Swatches?.map(swatchItem => {\r\n return {\r\n itemId: `${item.RecordId ?? ''}-${dimensionTypeValue}-${swatchItem.SwatchValue ?? ''}`,\r\n value: swatchItem.SwatchValue ?? '',\r\n dimensionType,\r\n colorHexCode: swatchItem.SwatchColorHexCode,\r\n imageUrl: swatchItem.SwatchImageUrl,\r\n productImageUrls: swatchItem.ProductImageUrls,\r\n isDefault: swatchItem.IsDefault,\r\n // swatchItemAriaLabel: swatchItemAriaLabel ? format(swatchItemAriaLabel, dimensionType) : '',\r\n isDisabled:\r\n enableStockCheck &&\r\n dimensionAvailabilities?.find(\r\n dimensionAvailability => dimensionAvailability.value === (swatchItem.SwatchValue ?? '')\r\n )?.isDisabled\r\n };\r\n }) ?? [];\r\n if (\r\n dimensionToPreSelectInProductCard !== DimensionTypes.none &&\r\n ArrayExtensions.hasElements(swatches) &&\r\n !swatches.some(swatch => swatch.isDefault) &&\r\n dimensionType === DimensionTypes.color\r\n ) {\r\n swatches[0].isDefault = true;\r\n }\r\n return { recordId: item.RecordId, swatches };\r\n })\r\n );\r\n\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', telemetryContent!, '', product.RecordId.toString());\r\n\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- -- Do not need type check for appsettings\r\n const isUnitOfMeasureEnabled = context.app.config && context.app.config.unitOfMeasureDisplayType === 'buyboxAndBrowse';\r\n\r\n /**\r\n * Gets the react node for product unit of measure display.\r\n * @param unitOfMeasure - DefaultUnitOfMeasure property from product.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n function renderProductUnitOfMeasure(unitOfMeasure?: string): JSX.Element | null {\r\n if (!unitOfMeasure) {\r\n return null;\r\n }\r\n return (\r\n
\r\n {unitOfMeasure}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product availability.\r\n * @param inventoryAvailabilityLabel - The product information.\r\n * @returns The node representing markup for product availability.\r\n */\r\n function renderProductAvailability(inventoryAvailabilityLabel: string | undefined): JSX.Element | null {\r\n if (!inventoryAvailabilityLabel || inventoryAvailabilityLabel === '') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {inventoryAvailabilityLabel}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product dimension as swatch.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n function renderProductDimensions(): JSX.Element | null {\r\n if (!ArrayExtensions.hasElements(swatchItems)) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {swatchItems.map(item => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product description.\r\n * @param quickview - Quick view node.\r\n * @param item - Product id to de displayed in quickview.\r\n * @returns The product quickview component.\r\n */\r\n function renderQuickView(quickview: React.ReactNode, item?: number): JSX.Element | undefined {\r\n if (quickview === null) {\r\n return undefined;\r\n }\r\n const selectedDimensions: ProductDimension[] = selectedSwatchItems.getValues().map(swatches => {\r\n return {\r\n DimensionTypeValue: convertDimensionTypeToProductDimensionType(swatches.dimensionType),\r\n DimensionValue: {\r\n RecordId: 0,\r\n Value: swatches.value\r\n }\r\n };\r\n });\r\n return React.cloneElement(quickview as React.ReactElement, { selectedProductId: item, selectedDimensions });\r\n }\r\n\r\n /**\r\n * Gets the aria label for rating.\r\n * @param rating - Product rating.\r\n * @param ratingAriaLabelText - Aria label format for rating.\r\n * @returns The product rating aria label string.\r\n */\r\n function getRatingAriaLabel(rating?: number, ratingAriaLabelText?: string): string {\r\n if (rating && ratingAriaLabelText) {\r\n const roundedRating = rating.toFixed(2);\r\n return format(ratingAriaLabelText || '', roundedRating, '5');\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Gets the aria label for review count.\r\n * @param reviewCount - Product review count.\r\n * @param ratingCountAriaLabelText - Aria label format for review.\r\n * @returns The product review count aria label string.\r\n */\r\n function getReviewAriaLabel(reviewCount?: number, ratingCountAriaLabelText?: string): string {\r\n if (reviewCount && ratingCountAriaLabelText) {\r\n return format(ratingCountAriaLabelText || '', reviewCount);\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Gets the aria label string for product that includes product name with its price and rating.\r\n * @param name - Product name.\r\n * @param price - Product price.\r\n * @param rating - Product rating.\r\n * @param ratingAriaLabelText - Rating aria label text.\r\n * @param reviewCount - Product review count.\r\n * @param ratingCountAriaLabelText - Number of ratings.\r\n * @returns The aria label string for the product card.\r\n */\r\n function renderLabel(\r\n name?: string,\r\n price?: string,\r\n rating?: number,\r\n ratingAriaLabelText?: string,\r\n reviewCount?: number,\r\n ratingCountAriaLabelText?: string\r\n ): string {\r\n const reviewCountArialableText = getReviewAriaLabel(reviewCount, ratingCountAriaLabelText ?? '');\r\n return `${name ?? ''} ${price ?? ''} ${getRatingAriaLabel(rating, ratingAriaLabelText)}${\r\n reviewCountArialableText ? ` ${reviewCountArialableText}` : ''\r\n }`;\r\n }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param productCardimageSettings - Module image settings for product card.\r\n * @param gridSettings - Grid settings defined in theme.\r\n * @param imageUrl - Image url.\r\n * @param fallbackImageUrl - Fallback url for imge.\r\n * @param altText - Image Alt text.\r\n * @param requestContext - Request context using the component.\r\n * @returns React component for product image.\r\n */\r\n function renderProductPlacementImage(\r\n productCardimageSettings?: IImageSettings,\r\n gridSettings?: IGridSettings,\r\n imageUrl?: string,\r\n fallbackImageUrl?: string,\r\n altText?: string,\r\n requestContext?: IRequestContext\r\n ): JSX.Element | null {\r\n if (!imageUrl || !gridSettings || !productCardimageSettings) {\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\r\n // const emptyPlaceHolderImage = context.app.config.placeholderImageName as string;\r\n // let fallbackImageSource = fallbackImageUrl;\r\n // if (emptyPlaceHolderImage && fallbackImageUrl) {\r\n // fallbackImageSource = `${fallbackImageUrl},${emptyPlaceHolderImage}`;\r\n // }\r\n const image: IImageData = {\r\n src: imageUrl,\r\n altText: altText ? altText : ''\r\n // ,\r\n // fallBackSrc: fallbackImageSource\r\n };\r\n const imageProps: IImageProps = { gridSettings };\r\n\r\n imageProps.gridSettings = gridSettings;\r\n imageProps.imageSettings = productCardimageSettings;\r\n imageProps.imageSettings.cropFocalRegion = true;\r\n return (\r\n <>\r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param coreContext - Context of the module using the component.\r\n * @param moduleTypeName - Module type name.\r\n * @param moduleId - Module id using the component.\r\n * @param basePrice - Product base price.\r\n * @param adjustedPrice - Product adjusted price.\r\n * @param maxVariantPrice - Product variant max price.\r\n * @param minVariantPrice - Product variant min price.\r\n * @param savingsPriceResourceText - Product price saving text.\r\n * @param freePriceResourceText - Product price free text.\r\n * @param originalPriceResourceText - Product price original text.\r\n * @param currentPriceResourceText - Product price current text.\r\n * @returns React component for Product price.\r\n */\r\n function renderPrice(\r\n coreContext: ICoreContext,\r\n moduleTypeName: string,\r\n moduleId: string,\r\n basePrice?: number,\r\n adjustedPrice?: number,\r\n maxVariantPrice?: number,\r\n minVariantPrice?: number,\r\n savingsPriceResourceText?: string,\r\n freePriceResourceText?: string,\r\n originalPriceResourceText?: string,\r\n currentPriceResourceText?: string\r\n ): JSX.Element | null {\r\n const price: ProductPrice = {\r\n BasePrice: basePrice,\r\n AdjustedPrice: adjustedPrice,\r\n CustomerContextualPrice: adjustedPrice,\r\n MaxVariantPrice: maxVariantPrice ? maxVariantPrice : adjustedPrice,\r\n MinVariantPrice: minVariantPrice ? minVariantPrice : adjustedPrice\r\n };\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product description.\r\n * @param description - Product description.\r\n * @returns The product description component.\r\n */\r\n function renderDescription(description?: string): JSX.Element | null {\r\n return

{description}

;\r\n }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param coreContext - Context of the module using the component.\r\n * @param moduleTypeName - Module type name.\r\n * @param moduleId - Module id using the component.\r\n * @param avgRating - Average rating.\r\n * @param totalRatings - Total rating.\r\n * @param ariaLabel - Aria label for rating.\r\n * @returns React component for Product rating.\r\n */\r\n function renderRating(\r\n coreContext: ICoreContext,\r\n moduleTypeName: string,\r\n moduleId: string,\r\n avgRating?: number,\r\n totalRatings?: number,\r\n ariaLabel?: string\r\n ): JSX.Element | null {\r\n if (!avgRating) {\r\n return null;\r\n }\r\n\r\n const numberRatings = totalRatings?.toString() || undefined;\r\n const ratingAriaLabelText = getRatingAriaLabel(avgRating, ariaLabel);\r\n const ratingCountAriaLabelText = getReviewAriaLabel(Number(numberRatings), ratingCountAriaLabel);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n product.PrimaryImageUrl,\r\n productImageUrl, // VSI Customization for vairent display\r\n product.Name,\r\n context.actionContext.requestContext\r\n )}\r\n
\r\n \r\n {sizeMapper()}\r\n
\r\n\r\n {renderProductDimensions()}\r\n\r\n
\r\n {renderPrice(\r\n context,\r\n typeName,\r\n id,\r\n product.BasePrice,\r\n product.Price,\r\n product.MaxVariantPrice,\r\n product.MinVariantPrice,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText\r\n )}\r\n \r\n

{product.Name}

\r\n \r\n\r\n
\r\n \r\n\r\n \r\n

{favouritesHeading}

\r\n

{favouritesContent}

\r\n\r\n {wishListLink && (\r\n \r\n {wishListLink?.linkText}\r\n \r\n )}\r\n
\r\n
\r\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\r\n {renderDescription(product.Description)}\r\n {context.request.telemetryPageName !== 'Home' ? productAvailableColorAndNewMessage() : newProduct()}\r\n {false &&\r\n !context.app.config.hideRating &&\r\n renderRating(context, typeName, id, product?.AverageRating, product?.TotalRatings, ratingAriaLabel)}\r\n {productDiscount()}\r\n {productLife()}\r\n {renderProductAvailability(inventoryLabel)}\r\n
\r\n {quickViewButton && renderQuickView(quickViewButton, product.RecordId)}\r\n \r\n );\r\n};\r\n\r\nexport const ProductComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\r\n // @ts-ignore\r\n IProductComponent\r\n>('Product', { component: ProductCard, ...PriceComponentActions });\r\n\r\nexport default ProductComponent;\r\n","import { AttributeValueBase, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport MsDyn365, { IActionContext, ICoreContext, IGeneric, IAny } from '@msdyn365-commerce/core';\r\nimport Moment from 'moment';\r\nimport { getProductUrlSync, convertProductDimensionTypeToDimensionTypes } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { isNumber } from 'lodash';\r\nimport { toast } from 'react-toastify';\r\n\r\nexport const _addAttribute = (AttributeName: string, attributeValue: string | undefined) => {\r\n const attributeObj = {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.AttributeTextValue',\r\n Name: AttributeName,\r\n TextValue: attributeValue,\r\n TextValueTranslations: []\r\n };\r\n attributeObj.Name = AttributeName;\r\n return attributeObj;\r\n};\r\n\r\nexport const getQueryParameterByName = (name: string) => {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n return urlParams.get(name);\r\n};\r\n\r\n// Remove Duplicate attributes\r\nexport const mergeAttributes = (\r\n prevAttributes: AttributeValueBase[],\r\n newAttributes: AttributeValueBase[],\r\n prop: string\r\n): AttributeValueBase[] => {\r\n const reduced = prevAttributes.filter(aitem => !newAttributes.find(bitem => aitem[prop].toLowerCase() === bitem[prop].toLowerCase()));\r\n return reduced.concat(newAttributes);\r\n};\r\n// Find attribute id exist update it other wise push\r\nexport const findAttribute = async (\r\n currentAttributes: AttributeValueBase[],\r\n attributeObj: AttributeValueBase\r\n): Promise => {\r\n const attrIndex = currentAttributes.findIndex(\r\n (attr: AttributeValueBase) => attr.Name?.toLowerCase() === attributeObj.Name?.toLowerCase()\r\n );\r\n if (attrIndex > -1) {\r\n currentAttributes[attrIndex] = attributeObj;\r\n } else {\r\n currentAttributes.push(attributeObj);\r\n }\r\n return currentAttributes;\r\n};\r\n\r\n// Set Order and Cart Attribues\r\nexport const setNameAttribute = (attrName: string, value: string): AttributeValueBase => {\r\n const privIdAttribute = {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.AttributeTextValue',\r\n Name: attrName,\r\n ExtensionProperties: [],\r\n TextValue: value,\r\n TextValueTranslations: []\r\n };\r\n return privIdAttribute as AttributeValueBase;\r\n};\r\n\r\nexport const checkImageExists = (path: string): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n img.onload = () => resolve('ok');\r\n img.onerror = () => reject('error');\r\n img.src = path;\r\n });\r\n};\r\n\r\nexport function formatPrice(amount: string | undefined, currency: string | undefined, locale: string | undefined): string {\r\n if (!amount || !currency) {\r\n return amount || '';\r\n }\r\n const priceAmount = (amount && Number(amount)) || 0;\r\n let result: string;\r\n\r\n try {\r\n result = new Intl.NumberFormat(locale, {\r\n style: 'currency',\r\n currencyDisplay: 'symbol',\r\n currency: currency,\r\n minimumFractionDigits: 0\r\n }).format(priceAmount);\r\n } catch (e) {\r\n result = `${priceAmount} ${currency}`;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport const _writeToStorage = (key: string, value: string | undefined): void => {\r\n if (!key || !value) {\r\n return;\r\n }\r\n if (MsDyn365.isBrowser) {\r\n const storage = window.localStorage;\r\n storage.setItem(key, value);\r\n }\r\n};\r\nexport const _readFromStorage = (key: string): string | undefined => {\r\n if (!key) {\r\n return undefined;\r\n }\r\n if (MsDyn365.isBrowser) {\r\n const storage = window.localStorage;\r\n const cookieValue = storage.getItem(key);\r\n if (cookieValue) {\r\n return cookieValue;\r\n }\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nexport const _removeFromStorage = (key: string): void => {\r\n if (!key) {\r\n return;\r\n }\r\n if (MsDyn365.isBrowser) {\r\n const storage = window.localStorage;\r\n storage.removeItem(key);\r\n }\r\n};\r\nexport const _writeToSessionStorage = (key: string, context: ICoreContext>, value?: string): void => {\r\n if (!key || !context || !value) {\r\n return;\r\n }\r\n if (MsDyn365.isBrowser) {\r\n const storage = context.request.sessionStorage;\r\n _isValidJson(value) ? storage.setDataInStorage(key, JSON.parse(value)) : undefined;\r\n }\r\n};\r\nexport const _readFromSessionStorage = (key: string, context: ICoreContext>): string | undefined => {\r\n if (!key || !context) {\r\n return undefined;\r\n }\r\n if (MsDyn365.isBrowser) {\r\n const storage = context.request.sessionStorage;\r\n const sessionValue = storage.getDataFromStorage(key);\r\n if (isNumber(sessionValue) || Object.entries(sessionValue).length !== 0) {\r\n _removeFromSessionStorage(key, context);\r\n return JSON.stringify(sessionValue);\r\n }\r\n }\r\n return undefined;\r\n};\r\n\r\nexport const _removeFromSessionStorage = (key: string, context: ICoreContext>): void => {\r\n if (!key || !context) {\r\n return;\r\n }\r\n if (MsDyn365.isBrowser) {\r\n const storage = context.request.sessionStorage;\r\n storage.removeDataFromStorage(key);\r\n }\r\n};\r\n\r\n// VSI Customization for Defult selction on PDP\r\nexport const _generateProductUrl = (product: SimpleProduct, actionContext: IActionContext): string => {\r\n if (product.Dimensions && MsDyn365.isBrowser) {\r\n const productUrl = getProductUrlSync(product, actionContext, undefined);\r\n const url = new URL(productUrl, window.location.href);\r\n\r\n for (const dimension of product.Dimensions) {\r\n url.searchParams.set(\r\n convertProductDimensionTypeToDimensionTypes(dimension.DimensionTypeValue),\r\n dimension.DimensionValue?.Value ?? ''\r\n );\r\n }\r\n return url.href;\r\n }\r\n return '#';\r\n};\r\n\r\n// VSI Customization for Date Time Conversion\r\nexport const _dateTimeFormat = (date: string): string => {\r\n if (!date.length) {\r\n return '';\r\n }\r\n const reqFormat = 'YYYY-MM-DD HH:mm:ss';\r\n var dateObj = new Date(date);\r\n return Moment(dateObj).format(reqFormat);\r\n};\r\n\r\n// Will be used to check image existance in media libray\r\nexport async function hasImage(swatchImageUrl?: string): Promise {\r\n if (!swatchImageUrl) {\r\n return false;\r\n }\r\n return new Promise(resolve => {\r\n try {\r\n const http = new XMLHttpRequest();\r\n http.open('HEAD', swatchImageUrl, true);\r\n\r\n http.addEventListener('load', () => {\r\n resolve(http.status === 200 || http.status === 201);\r\n });\r\n\r\n http.addEventListener('error', () => {\r\n resolve(false);\r\n });\r\n\r\n http.send();\r\n } catch {\r\n resolve(false);\r\n }\r\n });\r\n}\r\n\r\n/* VSI Customization - To validate json */\r\nexport const _isValidJson = (json: string): boolean => {\r\n try {\r\n JSON.parse(json);\r\n } catch (e) {\r\n return false;\r\n }\r\n return true;\r\n};\r\n\r\n/* VSI Customization - To to get discount in percentage */\r\nexport const _getDiscountPercentage = (price?: number, basePrice?: number): string | null => {\r\n if (!price || !basePrice) {\r\n return null;\r\n }\r\n return (100 - (price / basePrice) * 100).toFixed(0);\r\n};\r\n\r\n/* VSI Customization - To to trigger toast notifications */\r\nexport const _triggerToast = (message?: string): void => {\r\n if (!message) {\r\n return;\r\n }\r\n toast.dark(message, {\r\n position: 'top-right',\r\n autoClose: 3000,\r\n hideProgressBar: true,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n progress: undefined\r\n });\r\n};\r\n","var map = {\n\t\"./af\": 124,\n\t\"./af.js\": 124,\n\t\"./ar\": 125,\n\t\"./ar-dz\": 126,\n\t\"./ar-dz.js\": 126,\n\t\"./ar-kw\": 127,\n\t\"./ar-kw.js\": 127,\n\t\"./ar-ly\": 128,\n\t\"./ar-ly.js\": 128,\n\t\"./ar-ma\": 129,\n\t\"./ar-ma.js\": 129,\n\t\"./ar-ps\": 130,\n\t\"./ar-ps.js\": 130,\n\t\"./ar-sa\": 131,\n\t\"./ar-sa.js\": 131,\n\t\"./ar-tn\": 132,\n\t\"./ar-tn.js\": 132,\n\t\"./ar.js\": 125,\n\t\"./az\": 133,\n\t\"./az.js\": 133,\n\t\"./be\": 134,\n\t\"./be.js\": 134,\n\t\"./bg\": 135,\n\t\"./bg.js\": 135,\n\t\"./bm\": 136,\n\t\"./bm.js\": 136,\n\t\"./bn\": 137,\n\t\"./bn-bd\": 138,\n\t\"./bn-bd.js\": 138,\n\t\"./bn.js\": 137,\n\t\"./bo\": 139,\n\t\"./bo.js\": 139,\n\t\"./br\": 140,\n\t\"./br.js\": 140,\n\t\"./bs\": 141,\n\t\"./bs.js\": 141,\n\t\"./ca\": 142,\n\t\"./ca.js\": 142,\n\t\"./cs\": 143,\n\t\"./cs.js\": 143,\n\t\"./cv\": 144,\n\t\"./cv.js\": 144,\n\t\"./cy\": 145,\n\t\"./cy.js\": 145,\n\t\"./da\": 146,\n\t\"./da.js\": 146,\n\t\"./de\": 147,\n\t\"./de-at\": 148,\n\t\"./de-at.js\": 148,\n\t\"./de-ch\": 149,\n\t\"./de-ch.js\": 149,\n\t\"./de.js\": 147,\n\t\"./dv\": 150,\n\t\"./dv.js\": 150,\n\t\"./el\": 151,\n\t\"./el.js\": 151,\n\t\"./en-au\": 152,\n\t\"./en-au.js\": 152,\n\t\"./en-ca\": 153,\n\t\"./en-ca.js\": 153,\n\t\"./en-gb\": 154,\n\t\"./en-gb.js\": 154,\n\t\"./en-ie\": 155,\n\t\"./en-ie.js\": 155,\n\t\"./en-il\": 156,\n\t\"./en-il.js\": 156,\n\t\"./en-in\": 157,\n\t\"./en-in.js\": 157,\n\t\"./en-nz\": 158,\n\t\"./en-nz.js\": 158,\n\t\"./en-sg\": 159,\n\t\"./en-sg.js\": 159,\n\t\"./eo\": 160,\n\t\"./eo.js\": 160,\n\t\"./es\": 161,\n\t\"./es-do\": 162,\n\t\"./es-do.js\": 162,\n\t\"./es-mx\": 163,\n\t\"./es-mx.js\": 163,\n\t\"./es-us\": 164,\n\t\"./es-us.js\": 164,\n\t\"./es.js\": 161,\n\t\"./et\": 165,\n\t\"./et.js\": 165,\n\t\"./eu\": 166,\n\t\"./eu.js\": 166,\n\t\"./fa\": 167,\n\t\"./fa.js\": 167,\n\t\"./fi\": 168,\n\t\"./fi.js\": 168,\n\t\"./fil\": 169,\n\t\"./fil.js\": 169,\n\t\"./fo\": 170,\n\t\"./fo.js\": 170,\n\t\"./fr\": 171,\n\t\"./fr-ca\": 172,\n\t\"./fr-ca.js\": 172,\n\t\"./fr-ch\": 173,\n\t\"./fr-ch.js\": 173,\n\t\"./fr.js\": 171,\n\t\"./fy\": 174,\n\t\"./fy.js\": 174,\n\t\"./ga\": 175,\n\t\"./ga.js\": 175,\n\t\"./gd\": 176,\n\t\"./gd.js\": 176,\n\t\"./gl\": 177,\n\t\"./gl.js\": 177,\n\t\"./gom-deva\": 178,\n\t\"./gom-deva.js\": 178,\n\t\"./gom-latn\": 179,\n\t\"./gom-latn.js\": 179,\n\t\"./gu\": 180,\n\t\"./gu.js\": 180,\n\t\"./he\": 181,\n\t\"./he.js\": 181,\n\t\"./hi\": 182,\n\t\"./hi.js\": 182,\n\t\"./hr\": 183,\n\t\"./hr.js\": 183,\n\t\"./hu\": 184,\n\t\"./hu.js\": 184,\n\t\"./hy-am\": 185,\n\t\"./hy-am.js\": 185,\n\t\"./id\": 186,\n\t\"./id.js\": 186,\n\t\"./is\": 187,\n\t\"./is.js\": 187,\n\t\"./it\": 188,\n\t\"./it-ch\": 189,\n\t\"./it-ch.js\": 189,\n\t\"./it.js\": 188,\n\t\"./ja\": 190,\n\t\"./ja.js\": 190,\n\t\"./jv\": 191,\n\t\"./jv.js\": 191,\n\t\"./ka\": 192,\n\t\"./ka.js\": 192,\n\t\"./kk\": 193,\n\t\"./kk.js\": 193,\n\t\"./km\": 194,\n\t\"./km.js\": 194,\n\t\"./kn\": 195,\n\t\"./kn.js\": 195,\n\t\"./ko\": 196,\n\t\"./ko.js\": 196,\n\t\"./ku\": 197,\n\t\"./ku-kmr\": 198,\n\t\"./ku-kmr.js\": 198,\n\t\"./ku.js\": 197,\n\t\"./ky\": 199,\n\t\"./ky.js\": 199,\n\t\"./lb\": 200,\n\t\"./lb.js\": 200,\n\t\"./lo\": 201,\n\t\"./lo.js\": 201,\n\t\"./lt\": 202,\n\t\"./lt.js\": 202,\n\t\"./lv\": 203,\n\t\"./lv.js\": 203,\n\t\"./me\": 204,\n\t\"./me.js\": 204,\n\t\"./mi\": 205,\n\t\"./mi.js\": 205,\n\t\"./mk\": 206,\n\t\"./mk.js\": 206,\n\t\"./ml\": 207,\n\t\"./ml.js\": 207,\n\t\"./mn\": 208,\n\t\"./mn.js\": 208,\n\t\"./mr\": 209,\n\t\"./mr.js\": 209,\n\t\"./ms\": 210,\n\t\"./ms-my\": 211,\n\t\"./ms-my.js\": 211,\n\t\"./ms.js\": 210,\n\t\"./mt\": 212,\n\t\"./mt.js\": 212,\n\t\"./my\": 213,\n\t\"./my.js\": 213,\n\t\"./nb\": 214,\n\t\"./nb.js\": 214,\n\t\"./ne\": 215,\n\t\"./ne.js\": 215,\n\t\"./nl\": 216,\n\t\"./nl-be\": 217,\n\t\"./nl-be.js\": 217,\n\t\"./nl.js\": 216,\n\t\"./nn\": 218,\n\t\"./nn.js\": 218,\n\t\"./oc-lnc\": 219,\n\t\"./oc-lnc.js\": 219,\n\t\"./pa-in\": 220,\n\t\"./pa-in.js\": 220,\n\t\"./pl\": 221,\n\t\"./pl.js\": 221,\n\t\"./pt\": 222,\n\t\"./pt-br\": 223,\n\t\"./pt-br.js\": 223,\n\t\"./pt.js\": 222,\n\t\"./ro\": 224,\n\t\"./ro.js\": 224,\n\t\"./ru\": 225,\n\t\"./ru.js\": 225,\n\t\"./sd\": 226,\n\t\"./sd.js\": 226,\n\t\"./se\": 227,\n\t\"./se.js\": 227,\n\t\"./si\": 228,\n\t\"./si.js\": 228,\n\t\"./sk\": 229,\n\t\"./sk.js\": 229,\n\t\"./sl\": 230,\n\t\"./sl.js\": 230,\n\t\"./sq\": 231,\n\t\"./sq.js\": 231,\n\t\"./sr\": 232,\n\t\"./sr-cyrl\": 233,\n\t\"./sr-cyrl.js\": 233,\n\t\"./sr.js\": 232,\n\t\"./ss\": 234,\n\t\"./ss.js\": 234,\n\t\"./sv\": 235,\n\t\"./sv.js\": 235,\n\t\"./sw\": 236,\n\t\"./sw.js\": 236,\n\t\"./ta\": 237,\n\t\"./ta.js\": 237,\n\t\"./te\": 238,\n\t\"./te.js\": 238,\n\t\"./tet\": 239,\n\t\"./tet.js\": 239,\n\t\"./tg\": 240,\n\t\"./tg.js\": 240,\n\t\"./th\": 241,\n\t\"./th.js\": 241,\n\t\"./tk\": 242,\n\t\"./tk.js\": 242,\n\t\"./tl-ph\": 243,\n\t\"./tl-ph.js\": 243,\n\t\"./tlh\": 244,\n\t\"./tlh.js\": 244,\n\t\"./tr\": 245,\n\t\"./tr.js\": 245,\n\t\"./tzl\": 246,\n\t\"./tzl.js\": 246,\n\t\"./tzm\": 247,\n\t\"./tzm-latn\": 248,\n\t\"./tzm-latn.js\": 248,\n\t\"./tzm.js\": 247,\n\t\"./ug-cn\": 249,\n\t\"./ug-cn.js\": 249,\n\t\"./uk\": 250,\n\t\"./uk.js\": 250,\n\t\"./ur\": 251,\n\t\"./ur.js\": 251,\n\t\"./uz\": 252,\n\t\"./uz-latn\": 253,\n\t\"./uz-latn.js\": 253,\n\t\"./uz.js\": 252,\n\t\"./vi\": 254,\n\t\"./vi.js\": 254,\n\t\"./x-pseudo\": 255,\n\t\"./x-pseudo.js\": 255,\n\t\"./yo\": 256,\n\t\"./yo.js\": 256,\n\t\"./zh-cn\": 257,\n\t\"./zh-cn.js\": 257,\n\t\"./zh-hk\": 258,\n\t\"./zh-hk.js\": 258,\n\t\"./zh-mo\": 259,\n\t\"./zh-mo.js\": 259,\n\t\"./zh-tw\": 260,\n\t\"./zh-tw.js\": 260\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 290;"],"names":["AddToWishlistComponentActions","onClick","async","_event","props","state","user","context","request","product","vareintProduct","waiting","isAuthenticated","signInUrl","window","location","assign","setWaiting","undefined","getSelectedProduct","doesProductExistInWishlist","removeFromWishlist","addToWishlist","onDismiss","setContent","color","showAlert","wishlists","data","CommerceListLines","length","wishlistItem","ProductId","RecordId","propagateSuccess","result","onSuccess","cartline","propagateError","onError","canAddMasterProduct","Dimensions","missingDimensions","filter","dimension","DimensionValue","Value","status","AsyncResult","resolve","callAddWishlistLine","Id","wishlistName","nameOfWishlist","customer","getCustomerAccount","AccountNumber","listData","CustomerId","Name","CommerceListTypeValue","commerceList","CommerceListsDataActions","callerContext","actionContext","error","telemetry","debug","wishlistId","productId","createdCommerceList","buildWishlistLine","update","setCanRemove","wishlistTextMessage","addToWishlistMessage","addItemToWishlistError","removedFromWishlistMessage","removeItemFromWishlistError","wishlistLine","find","line","customerInput","GetCustomerInput","requestContext","apiSettings","getCustomer","AddToWishlistComponent","msdyn365Commerce","createComponentOverride","_objectSpread","component","pageName","urlTokens","pageType","setVareintProduct","useState","React","variant","ProductsDataActions","queryResultSettings","channelId","matchedVairent","item","_item$Dimensions","_data$DimensionValue","DimensionTypeValue","variantColor","_getProductVarient","canRemove","content","removeFromWishlistButtonText","addToWishlistButtonText","ariaRole","showStatusMessage","showRemoveButton","showButtonText","className","disabled","showButtonTooltip","tooltipPosition","onClickHandler","event","ariaLabel","addToWishlistRef","removeFromWishlistRef","showMessage","showTooltip","tooltipPos","linkAriaRole","classnames","ref","role","UncontrolledTooltip","placement","trigger","target","Alert","isOpen","toggle","onDismissHandler","ProductComponent","_ref","_product$Name","_getProductImageUrlFr","_getProductPageUrlFro","_product$AttributeVal5","imageSettings","savingsText","freePriceText","originalPriceText","currentPriceText","ratingAriaLabel","ratingCountAriaLabel","allowBack","typeName","id","telemetryContent","favouritesContent","favouritesHeading","wishListLink","sizesHeading","quickViewButton","wishlist","dimensionAvailabilities","inventoryLabel","isPriceMinMaxEnabled","priceResources","newArrivalMsg","productLifeTag","maxSizeDisplay","splitSizeText","colorText","updateProductUrl","productDetailsPageUrl","coreContext","queryString","sourceUrl","URL","baseUrl","search","href","pathname","getDefaultColorSwatchSelected","productData","_colorAttribute$Swatc","AttributeValues","colorAttribute","attributeValue","_attributeValue$KeyNa","KeyName","toLocaleLowerCase","DimensionTypes","ArrayExtensions","hasElements","Swatches","IsDefault","productUrl","getProductPageUrlSync","productImageUrlFromSwatch","app","config","dimensionToPreSelectInProductCard","none","PrimaryImageUrl","defaultSwatch","ProductImageUrls","generateImageUrl","getProductImageUrlFromDefaultColorSwatch","productPageUrlFromSwatch","SwatchValue","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","enableStockCheck","updatePageAndImageUrl","swatchItem","dimensionType","setValue","StringExtensions","isNullOrWhitespace","value","productPageUrlWithSwatch","includes","newUrl","searchParams","delete","toString","swatchProductImageUrl","productImageUrls","newImageUrl","swatchItems","validValues","map","_item$KeyName$toLocal","_item$KeyName","_item$Swatches$map","_item$Swatches","dimensionTypeValue","checkIfShouldDisplayAsSwatch","DimensionSwatchDisplayTypes","productCard","swatches","_item$RecordId","_swatchItem$SwatchVal","_swatchItem$SwatchVal2","_dimensionAvailabilit","itemId","colorHexCode","SwatchColorHexCode","imageUrl","SwatchImageUrl","isDefault","isDisabled","dimensionAvailability","_swatchItem$SwatchVal3","some","swatch","recordId","payLoad","getPayloadObject","attribute","getTelemetryAttributes","isUnitOfMeasureEnabled","unitOfMeasureDisplayType","getRatingAriaLabel","rating","ratingAriaLabelText","roundedRating","toFixed","format","getReviewAriaLabel","reviewCount","ratingCountAriaLabelText","renderLabel","name","price","reviewCountArialableText","Object","encodeURIComponent","onTelemetryClick","cultureFormatter","formatCurrency","Price","AverageRating","TotalRatings","productCardimageSettings","gridSettings","fallbackImageUrl","altText","image","src","imageProps","cropFocalRegion","Image","loadFailureBehavior","bypassHideOnFailure","renderProductPlacementImage","varientSizes","variantsizes","size","index","key","e","sizeMapper","ProductComponentSwatchComponent","onSelectDimension","moduleTypeName","moduleId","basePrice","adjustedPrice","maxVariantPrice","minVariantPrice","savingsPriceResourceText","freePriceResourceText","originalPriceResourceText","currentPriceResourceText","BasePrice","AdjustedPrice","CustomerContextualPrice","MaxVariantPrice","MinVariantPrice","PriceComponent","renderPrice","Number","ProductTypeValue","variantId","Card","linkUrl","destinationUrl","linkText","unitOfMeasure","DefaultUnitOfMeasure","description","Description","telemetryPageName","_product$AttributeVal","_product$AttributeVal2","newProduct","availableColors","_item$Name","toLowerCase","TextValue","splittedColors","split","productAvailableColorAndNewMessage","_product$AttributeVal3","_getDiscountPercentage","_product$AttributeVal4","productLife","inventoryAvailabilityLabel","quickview","selectedDimensions","getValues","convertDimensionTypeToProductDimensionType","selectedProductId","renderQuickView","findAttribute","currentAttributes","attributeObj","attrIndex","findIndex","attr","_attr$Name","_attributeObj$Name","push","setNameAttribute","attrName","ExtensionProperties","TextValueTranslations","_writeToStorage","MsDyn365","isBrowser","localStorage","setItem","_readFromStorage","cookieValue","getItem","_removeFromStorage","removeItem","_writeToSessionStorage","storage","sessionStorage","_isValidJson","setDataInStorage","JSON","parse","_readFromSessionStorage","sessionValue","getDataFromStorage","_isNumber","entries","_removeFromSessionStorage","stringify","removeDataFromStorage","_generateProductUrl","getProductUrlSync","url","_dimension$DimensionV","_dimension$DimensionV2","set","convertProductDimensionTypeToDimensionTypes","_dateTimeFormat","date","dateObj","Date","Moment","hasImage","swatchImageUrl","Promise","http","XMLHttpRequest","open","addEventListener","send","_unused","json","_triggerToast","message","toast","dark","position","autoClose","hideProgressBar","closeOnClick","pauseOnHover","draggable","progress","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","code","keys","module","exports"],"sourceRoot":""}