{"version":3,"file":"static/js/42d626dac49dda560199.bundle.js","mappings":"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","sources":["webpack://sheikh-zayed-festival/./src/utilities/popup.tsx?6b57","webpack://sheikh-zayed-festival/./src/themes/sheikhzayedfestival/views/components/addtocart.component.tsx?9d55","webpack://sheikh-zayed-festival/./src/utilities/szf-utils.ts?aa0e"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IComponentProps, IGridSettings, IImageSettings, getUrlSync } from '@msdyn365-commerce/core';\r\nimport { ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n// import { getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport * as React from 'react';\r\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nexport interface IPopupProps extends IComponentProps<{ product: SimpleProduct | undefined; price: ProductPrice | undefined }> {\r\n dialogStrings?: {\r\n goToCartText: string;\r\n continueShoppingText: string;\r\n headerItemOneText: string;\r\n headerItemFormatText: string;\r\n headerMessageText: string;\r\n freePriceText: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n miniCartTotalAmountLabel?: string;\r\n festivalEntryText? : string;\r\n aedText? : string;\r\n };\r\n\r\n className: string;\r\n imageSettings?: IImageSettings;\r\n gridSettings: IGridSettings | undefined;\r\n productQuantity: number;\r\n priceComponent: React.ReactNode;\r\n navigationUrl?: string;\r\n modalOpen: boolean | undefined;\r\n telemetryContent?: ITelemetryContent;\r\n setModalOpen(newValue: boolean): void;\r\n products: {\r\n product: SimpleProduct;\r\n count: number;\r\n }[],\r\n counts?: {[key: number]: number};\r\n setCounts?: React.Dispatch>;\r\n buyboxCallbacks?(newQuantity: number): boolean;\r\n setButtonLoadingState?(value : boolean): void;\r\n}\r\n\r\nexport const Popup = (popupProps: IPopupProps) => {\r\n const {\r\n dialogStrings,\r\n className,\r\n imageSettings,\r\n // gridSettings,\r\n data: { product },\r\n // productQuantity,\r\n // priceComponent,\r\n // navigationUrl,\r\n modalOpen,\r\n telemetryContent,\r\n setModalOpen,\r\n context,\r\n products,\r\n counts,\r\n setCounts,\r\n buyboxCallbacks,\r\n setButtonLoadingState\r\n } = popupProps;\r\n const resetQuantityInput = (counts: {[key: number]: number}, setCounts: React.Dispatch> )=>{\r\n let resetCount: { [key: number]: number} = {...counts};\r\n for (const count in counts) {\r\n if (counts.hasOwnProperty(count)) {\r\n resetCount = {\r\n ...resetCount,\r\n [count]: 0\r\n }\r\n }\r\n }\r\n setCounts && setCounts(resetCount)\r\n }\r\n const closeModal = React.useCallback(() => {\r\n if(setButtonLoadingState) {\r\n setButtonLoadingState(false)\r\n }\r\n if(buyboxCallbacks){\r\n buyboxCallbacks(0)\r\n }\r\n if(counts && setCounts){\r\n resetQuantityInput(counts,setCounts)\r\n }\r\n setModalOpen(false);\r\n }, [setModalOpen]);\r\n if (!dialogStrings || !product) {\r\n return null;\r\n }\r\n const [totalAmount, setTotalAmount] = React.useState(0);\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.ContinueShopping);\r\n const continueShoppingAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n payLoad.contentAction.etext = TelemetryConstant.ViewBagAndCheckout;\r\n const viewBagAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n // const fallbackImageUrl = getFallbackImageUrl(product.ItemId, context.actionContext.requestContext.apiSettings);\r\n if (imageSettings) {\r\n imageSettings.cropFocalRegion = true;\r\n }\r\n // const quantity = productQuantity !== undefined ? productQuantity : 1;\r\n // const itemsString =\r\n // quantity === 1 ? dialogStrings.headerItemOneText : dialogStrings.headerItemFormatText.replace('{0}', quantity.toString());\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\r\n // const shouldDisplayUnitOfMeasure =\r\n // context.app.config?.unitOfMeasureDisplayType && context.app.config.unitOfMeasureDisplayType !== 'none';\r\n\r\n // const reducedDimensions: string = product.Dimensions\r\n // ? product.Dimensions.reduce((str, productDimension) => {\r\n // if (productDimension.DimensionValue && productDimension.DimensionValue.Value) {\r\n // if (str) {\r\n // return `${str}, ${productDimension.DimensionValue.Value}`;\r\n // }\r\n\r\n // return `${productDimension.DimensionValue.Value}`;\r\n // }\r\n\r\n // return str;\r\n // }, '')\r\n // : '';\r\n\r\n React.useEffect(() => {\r\n let total = 0;\r\n products.length && products.map((item) => {\r\n total += item.count * item.product.Price;\r\n });\r\n setTotalAmount(total);\r\n },[products])\r\n /* ZOHAIB | VSI | Customization | Start */\r\n\r\n const getCheckoutPageUrl = (): string => {\r\n const mycheckoutURL = getUrlSync('checkout', context.actionContext) ?? '';\r\n return mycheckoutURL\r\n };\r\n\r\n /* ZOHAIB | VSI | Customization | End */\r\n return (\r\n \r\n \r\n {dialogStrings.headerMessageText}\r\n \r\n \r\n {

\r\n {dialogStrings.festivalEntryText}\r\n

}\r\n {/* */}\r\n {\r\n products.map((item) => (\r\n <>\r\n
\r\n

{product.Name}

\r\n
\r\n
\r\n {item.product.Name} : {item.count}\r\n
\r\n \r\n ))\r\n }\r\n {/* {reducedDimensions !== '' ?
{reducedDimensions}
: ''} */}\r\n {/* {price ?
{priceComponent}
: ''} */}\r\n {/* {product.DefaultUnitOfMeasure && shouldDisplayUnitOfMeasure ? (\r\n
\r\n {product.DefaultUnitOfMeasure}\r\n
\r\n ) : (\r\n ''\r\n )} */}\r\n \r\n
\r\n {
{`${dialogStrings.miniCartTotalAmountLabel}: ${dialogStrings.aedText} ${totalAmount.toFixed(2)}`}
}\r\n \r\n \r\n {dialogStrings.goToCartText}\r\n \r\n \r\n {dialogStrings.continueShoppingText}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default Popup;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport MsDyn365, {\r\n // getCatalogId,\r\n IComponent,\r\n IComponentProps,\r\n IGridSettings,\r\n IImageSettings,\r\n msdyn365Commerce,\r\n TelemetryEvent\r\n} from '@msdyn365-commerce/core';\r\nimport { getCartState, ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n CartLineValidationResults,\r\n CartsDataActions,\r\n format,\r\n ProductAvailableQuantity,\r\n ProductDimension,\r\n ProductPrice,\r\n ProductsDataActions,\r\n // ProductSearchCriteria,\r\n ProductType,\r\n SimpleProduct,\r\n CartLine\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { ErrorNotification, NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\r\nimport { ArrayExtensions, generateProductImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\n// import { getPayloadObject, getTelemetryAttributes, ITelemetryContent,Popup, IPopupProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React, { useState } from 'react';\r\nimport { Popup, IPopupProps } from '../../../../utilities/popup';\r\n\r\nimport { \r\n PriceComponent, \r\n IItemsAddedToCartResources, \r\n ItemsAddedToCartDialogComponent, \r\n ItemSuccessfullyAddedToCartNotification, \r\n MultiItemsSuccessfullyAddedToCartNotification, \r\n OrderDetailsProduct \r\n} from '@msdyn365-commerce/components';\r\n// import { v4 as uuidv4 } from 'uuid';\r\nimport shortUUID from 'short-uuid';\r\nimport { makeCustomAttributeUtil } from './../../../../utilities/szf-utils';\r\nimport { updateCartLinesAsync, updateAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\n/**\r\n * Interface for add to cart resources.\r\n */\r\nexport interface IAddToCartResources {\r\n goToCartText: string;\r\n continueShoppingText: string;\r\n closeNotificationLabel: string;\r\n headerItemOneText: string;\r\n headerItemFormatText: string;\r\n headerLinesFormatText?: string;\r\n headerMessageText: string;\r\n freePriceText: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n addedQuantityText: string;\r\n buyAgainNotificationTitle?: string;\r\n buyAgainNotificationCloseAriaLabel?: string;\r\n validationErrorMessage?: string;\r\n oneErrorText?: string;\r\n multiErrorsText?: string;\r\n miniCartTotalAmountLabel?: string\r\n festivalEntryText? : string;\r\n aedText? : string;\r\n pdpBlockErrorMessage?: string;\r\n}\r\n\r\nexport interface IItemsAddedToCartResourcesExtends extends IItemsAddedToCartResources{\r\n festivalEntryText? : string;\r\n aedText? : string;\r\n}\r\n\r\n/**\r\n * Interface for add to cart components props.\r\n */\r\nexport interface IAddToCartComponentProps extends IComponentProps<{ product: SimpleProduct; price?: ProductPrice } | undefined> {\r\n className?: string;\r\n addToCartText: string;\r\n addToCartErrorText : string;\r\n outOfStockText?: string;\r\n disabled?: boolean;\r\n quantity?: number;\r\n navigationUrl?: string;\r\n productAvailability?: ProductAvailableQuantity;\r\n getSelectedProduct?: Promise;\r\n isNavigationToCartPageDisabled?: boolean;\r\n shouldSkipSiteSettings?: boolean;\r\n addToCartArialLabel?: string;\r\n products?: {\r\n productId: number;\r\n quantity: number;\r\n catalogId?: number;\r\n }[];\r\n orderDetailsProducts?: OrderDetailsProduct[];\r\n hasAvailableProducts?: boolean;\r\n imageSettings?: IImageSettings;\r\n gridSettings?: IGridSettings;\r\n\r\n isLoading?: boolean;\r\n isUpdatingDimension?: boolean;\r\n isLoadingDeliveryOptions?: boolean;\r\n isUpdatingDeliveryOptions?: boolean;\r\n isAddServiceItemToCart?: boolean;\r\n isAddEmailDeliveryItemToCart?: boolean;\r\n isPriceKeyedIn?: boolean;\r\n customPriceAmount?: number;\r\n isOrderQuantityLimitsFeatureEnabled?: boolean;\r\n\r\n dialogStrings?: IAddToCartResources;\r\n\r\n telemetryContent?: ITelemetryContent;\r\n\r\n catalogId?: number;\r\n\r\n isCustomPriceSelected?: boolean;\r\n maximumKeyInPrice?: number;\r\n minimumKeyInPrice?: number;\r\n defaultMaximumKeyInPrice?: number;\r\n defaultMinimumKeyInPrice?: number;\r\n isProductQuantityLoading?: boolean;\r\n\r\n /* ZOHAIB | VSI | CUSTOMIZATION | START */\r\n counts?: {[key: number]: number};\r\n setCounts?: React.Dispatch>;\r\n buyboxCallbacks?(newQuantity: number): boolean;\r\n // setCounts?(counts: {[key: number]: number}):void;\r\n /* ZOHAIB | VSI | CUSTOMIZATION | END */\r\n\r\n onAdd?(result: ICartActionResult): void;\r\n onError?(result: IAddToCartFailureResult): void;\r\n changeUpdatingDimension?(isUpdatingDimension: boolean): void;\r\n changeUpdatingDeliveryOptions?(isUpdatingDeliveryOptions: boolean): void;\r\n isButtonLoading: boolean;\r\n setButtonLoadingState(value : boolean) : void;\r\n disableAddToCartButton?: boolean;\r\n}\r\n\r\n/**\r\n * Cart action Failure reason type.\r\n */\r\nexport declare type ICartActionFailureReason =\r\n | 'EMPTYINPUT'\r\n | 'MISSINGDIMENSION'\r\n | 'OUTOFSTOCK'\r\n | 'CARTACTIONFAILED'\r\n | 'INVALIDCUSTOMAMOUNT';\r\n\r\n/**\r\n * Interface for add to cart failure result.\r\n */\r\nexport interface IAddToCartFailureResult {\r\n failureReason: ICartActionFailureReason;\r\n\r\n stockLeft?: number;\r\n cartActionResult?: ICartActionResult;\r\n missingDimensions?: ProductDimension[];\r\n}\r\n\r\n/**\r\n * This setting defines the experience when a product is added to cart. Corresponds to the configuration in Fabrikam.\r\n */\r\nexport enum AddToCartBehavior {\r\n /**\r\n * Navigate to cart page.\r\n */\r\n goToCart = 'goToCart',\r\n\r\n /**\r\n * Show item added to cart popup.\r\n */\r\n showModal = 'showModal',\r\n\r\n /**\r\n * Show mini cart popup.\r\n */\r\n showMiniCart = 'showMiniCart',\r\n\r\n /**\r\n * Show item added to cart notification.\r\n */\r\n showNotification = 'showNotification',\r\n\r\n /**\r\n * Do nothing and stay on the page.\r\n */\r\n nothing = 'nothing'\r\n}\r\n\r\nconst zero = 0;\r\nconst defaultQuantity = 0;\r\n\r\n/**\r\n * The propagate result.\r\n * @param props -- The add to cart component props.\r\n * @param result -- The cart action result.\r\n */\r\nconst propagateResult = (props: IAddToCartComponentProps, result: ICartActionResult): void => {\r\n if (props.onAdd) {\r\n props.onAdd(result);\r\n }\r\n};\r\n\r\n/**\r\n * The propagate error.\r\n * @param props -- The add to cart component props.\r\n * @param result -- The add to cart failure result.\r\n */\r\nconst propagateError = (props: IAddToCartComponentProps, result: IAddToCartFailureResult): void => {\r\n if (props.onError) {\r\n props.onError(result);\r\n }\r\n};\r\n\r\n/**\r\n * Retrieves add to cart input from the component props.\r\n * @param props - Add to cart component props.\r\n * @returns Add to cart input.\r\n */\r\nconst getAddToCartInputFromProps = async (props: IAddToCartComponentProps) => {\r\n const products = props.orderDetailsProducts?.filter(product => !ObjectExtensions.isNullOrUndefined(product.simpleProduct));\r\n const emailDeliveryModeCode = props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode; // upgrade-v40\r\n const input = products?.map(product => {\r\n const deliveryOption = product.salesLine.DeliveryMode;// upgrade-v40\r\n return {\r\n product: product.simpleProduct!,\r\n count: ObjectExtensions.isNullOrUndefined(product.salesLine.Quantity) ? defaultQuantity : product.salesLine.Quantity,\r\n catalogId: product.salesLine.CatalogId,\r\n isAddEmailDeliveryItemToCart: deliveryOption && deliveryOption === emailDeliveryModeCode// upgrade-v40\r\n };\r\n });\r\n\r\n if (ArrayExtensions.hasElements(input)) {\r\n return input;\r\n }\r\n\r\n if (ArrayExtensions.hasElements(props.products)) {\r\n const actionContext = props.context.actionContext;\r\n const apiSettings = actionContext.requestContext.apiSettings;\r\n\r\n // const searchCriteriaInput: ProductSearchCriteria = {\r\n // Context: {\r\n // ChannelId: apiSettings.channelId,\r\n // CatalogId: props.catalogId ?? getCatalogId(props.context.actionContext.requestContext)\r\n // },\r\n // IncludeAttributes: false,\r\n // Ids: props.products.map(product => product.productId)\r\n // };\r\n\r\n const searchResult = await ProductsDataActions.getByIdsAsync({ callerContext: actionContext }, apiSettings.channelId, props.products.map(product => product.productId));\r\n const productSearchResultsWithImages = searchResult.map(productSearchResult => {\r\n const newProductSearchResult = { ...productSearchResult };\r\n const newImageUrl = generateProductImageUrl(newProductSearchResult, apiSettings);\r\n\r\n if (newImageUrl) {\r\n newProductSearchResult.PrimaryImageUrl = newImageUrl;\r\n }\r\n\r\n return newProductSearchResult;\r\n });\r\n\r\n return props.products.map(item => {\r\n const productData = productSearchResultsWithImages.find(product => product.RecordId === item.productId);\r\n let simpleProduct: SimpleProduct;\r\n if (productData) {\r\n simpleProduct = {\r\n ...productData,\r\n ProductTypeValue: ProductType.Variant,\r\n AdjustedPrice: productData.Price,\r\n BasePrice: productData.BasePrice ?? productData.Price\r\n };\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Cast to simple product since only record id is available.\r\n simpleProduct = {\r\n RecordId: item.productId\r\n } as SimpleProduct;\r\n }\r\n\r\n return {\r\n product: simpleProduct,\r\n count: item.quantity,\r\n catalogId: item.catalogId\r\n };\r\n });\r\n }\r\n if (props.data?.product) {\r\n return [\r\n {\r\n product: props.data.product,\r\n count: props.quantity ?? defaultQuantity,\r\n catalogId: props.catalogId\r\n }\r\n ];\r\n }\r\n\r\n return [];\r\n};\r\n\r\n\r\n/**\r\n * Add one item to cart when it is not buy again.\r\n * @param props -- The props.\r\n * @param setDisabled -- The set disable call back.\r\n * @param openModal -- The open modal call back.\r\n */\r\nconst addOneItemToCart = async (\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n openModal: (opened: boolean) => void\r\n): Promise => {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n const addToCartBehavior = props.context.app.config.addToCartBehavior;\r\n const data = props.data;\r\n\r\n const addToCartInput = await getAddToCartInputFromProps(props);\r\n const product = addToCartInput[0].product;\r\n const quantity = addToCartInput[0].count;\r\n\r\n const cartState = await getCartState(props.context.actionContext);\r\n const addToCartResult = await cartState.addProductToCart({\r\n product,\r\n count: quantity,\r\n availableQuantity: props.productAvailability?.AvailableQuantity,\r\n additionalProperties: { validateQuantity: props.isOrderQuantityLimitsFeatureEnabled },\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n enableStockCheck: props.context.app.config.enableStockCheck,\r\n isPriceKeyedIn: props.isPriceKeyedIn,\r\n customPrice: props.isPriceKeyedIn ? props.customPriceAmount : undefined,\r\n isAddEmailDeliveryItemToCart: props.isAddEmailDeliveryItemToCart,\r\n shouldSkipSiteSettings: props.shouldSkipSiteSettings,\r\n catalogId: addToCartInput[0].catalogId\r\n });\r\n\r\n if (addToCartResult.status === 'SUCCESS') {\r\n await setTicketExtensionProperty(props,cartState)\r\n if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showModal) {\r\n setDisabled(false);\r\n openModal(true);\r\n } else if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showNotification) {\r\n setDisabled(false);\r\n // resetQuantityInput(props)\r\n const notification = new ItemSuccessfullyAddedToCartNotification(\r\n props.context,\r\n props.dialogStrings,\r\n props.imageSettings,\r\n props.gridSettings,\r\n product,\r\n data?.price,\r\n quantity,\r\n props.navigationUrl,\r\n props.telemetryContent!,\r\n props.id,\r\n props.typeName\r\n );\r\n NotificationsManager.instance().addNotification(notification);\r\n } else if (\r\n MsDyn365.isBrowser &&\r\n props.navigationUrl &&\r\n !props.isNavigationToCartPageDisabled &&\r\n (addToCartBehavior === undefined || addToCartBehavior === AddToCartBehavior.goToCart)\r\n ) {\r\n window.location.assign(props.navigationUrl);\r\n } else {\r\n setDisabled(false);\r\n }\r\n propagateResult(props, addToCartResult);\r\n } else {\r\n NotificationsManager.instance().addNotification(\r\n new ErrorNotification(\r\n addToCartResult.errorDetails?.LocalizedMessage ?? 'Add to cart failed',\r\n props.dialogStrings?.closeNotificationLabel ?? ''\r\n )\r\n );\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n setDisabled(false);\r\n }\r\n};\r\n\r\n/**\r\n * Callback to handle success of adding to cart.\r\n * @param props - Add to cart component props.\r\n * @param setDisabled - Callback to update disabled state of the component.\r\n * @param setItemsAddedToCartDialogOpen - Callback to update disabled state of the component.\r\n * @param setErrorMessage - Callback to update error message state of the component.\r\n * @param cartState - Current cart state.\r\n * @param addToCartInput - Input used for adding to cart.\r\n * @param addToCartResult - Result of adding to cart.\r\n */\r\nconst handleAddItemsToCartSuccess = async (\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n setItemsAddedToCartDialogOpen: (opened: boolean) => void,\r\n setErrorMessage: (message: string) => void,\r\n cartState: ICartState,\r\n addToCartInput: {\r\n product: SimpleProduct;\r\n count: number;\r\n }[],\r\n addToCartResult: ICartActionResult\r\n) => {\r\n // Validate cart for line errors.\r\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\r\n { callerContext: props.context.actionContext, bypassCache: 'none' },\r\n cartState.cart.Id,\r\n cartState.cart.Version\r\n );\r\n const errorCount = (validationResult.ValidationFailuresByCartLines ?? []).length;\r\n const singleErrorCount = 1;\r\n const errorText = errorCount === singleErrorCount ? props.dialogStrings?.oneErrorText : props.dialogStrings?.multiErrorsText;\r\n const errorMessage =\r\n errorCount > zero ? format(props.dialogStrings?.validationErrorMessage ?? '', errorCount.toString(), errorText) : '';\r\n setErrorMessage(errorMessage);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n const addToCartBehavior = props.context.app.config.addToCartBehavior;\r\n\r\n if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showModal) {\r\n setDisabled(false);\r\n setItemsAddedToCartDialogOpen(true);\r\n } else if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showNotification) {\r\n setDisabled(false);\r\n const itemsAddedResource: IItemsAddedToCartResourcesExtends = {\r\n viewCartButtonText: props.dialogStrings.goToCartText,\r\n festivalEntryText : props.dialogStrings.festivalEntryText,\r\n aedText: props.dialogStrings.aedText,\r\n closeButtonLabel: props.dialogStrings.closeNotificationLabel,\r\n itemsAddedToCartHeaderText: props.dialogStrings.headerMessageText,\r\n itemsAddedToCartFormatText: props.dialogStrings.headerItemFormatText,\r\n linesAddedToCartFormatText: props.dialogStrings.headerLinesFormatText ?? '{0}',\r\n itemsAddedValidationErrorMessage: errorMessage\r\n };\r\n\r\n const notification = new MultiItemsSuccessfullyAddedToCartNotification(\r\n props.context,\r\n itemsAddedResource,\r\n props.imageSettings,\r\n props.gridSettings,\r\n addToCartInput,\r\n props.navigationUrl,\r\n props.telemetryContent!,\r\n props.id,\r\n props.typeName\r\n );\r\n NotificationsManager.instance().addNotification(notification);\r\n } else if (\r\n MsDyn365.isBrowser &&\r\n props.navigationUrl &&\r\n !props.isNavigationToCartPageDisabled &&\r\n (addToCartBehavior === undefined || addToCartBehavior === AddToCartBehavior.goToCart)\r\n ) {\r\n window.location.assign(props.navigationUrl);\r\n } else {\r\n setDisabled(false);\r\n }\r\n propagateResult(props, addToCartResult);\r\n};\r\n\r\n/**\r\n * Add one or multi item to cart from buy again.\r\n * @param props -- The props.\r\n * @param setDisabled -- The set disable call back.\r\n * @param setItemsAddedToCartDialogOpen -- The open modal call back.\r\n * @param setErrorMessage -- The set error message call back.\r\n */\r\n\r\nconst setTicketExtensionProperty = async (props:IAddToCartComponentProps, cartState: ICartState) =>{\r\n const szfCartState = cartState.cart;\r\n const szfCartLines = szfCartState.CartLines\r\n const ticketCustomAttributeName: string = props.context.app.config.ticketCustomAttributeName || 'Ticket Number';\r\n const szfSaleOrderTypeAttributeName: string = props.context.app.config.szfSaleOrderTypeAttributeName || 'Sale Order Type';\r\n // const ticketExtensionPropertyName: string = props.context.app.config.ticketExtensionPropertyName || 'szf-ticket';\r\n const ticketExtensionPropertyValuePrefix: string = props.context.app.config.ticketExtensionPropertyValuePrefix || 'szf-/-';\r\n const newCartlines: CartLine[] = [];\r\n if(szfCartLines){\r\n for (const cartLine of szfCartLines) {\r\n // const isTicketExtensionExist = cartLine.ExtensionProperties?.find((carlineExtension) => {\r\n // return carlineExtension.Key === ticketExtensionPropertyName;\r\n // });\r\n const cartLineAttributes = cartLine.AttributeValues && [...cartLine.AttributeValues] || [];\r\n const isTicketCustomAttributeExist = cartLine.AttributeValues?.find((carlineAttribute) => {\r\n return carlineAttribute.Name === ticketCustomAttributeName;\r\n });\r\n\r\n if(!isTicketCustomAttributeExist){\r\n // const UID = uuidv4();\r\n const UID = shortUUID.generate();\r\n const ticketValue:string = ticketExtensionPropertyValuePrefix.concat(UID);\r\n const ticketCustomAttributeObj = makeCustomAttributeUtil(ticketCustomAttributeName, ticketValue);\r\n const szfSaleOrderTypeAttributeObj = makeCustomAttributeUtil(szfSaleOrderTypeAttributeName, 'Ecom');\r\n cartLineAttributes.push(ticketCustomAttributeObj,szfSaleOrderTypeAttributeObj)\r\n // const ticketExtensionProperty = _makeExtensionProperty(ticketExtensionPropertyName, JSON.stringify(ticketValue));\r\n newCartlines.push({\r\n LineId: cartLine.LineId,\r\n Quantity: cartLine.Quantity,\r\n AttributeValues:cartLineAttributes\r\n // ExtensionProperties: ticketExtensionProperty\r\n });\r\n }\r\n }\r\n const updateCartlineresult = await updateCartLinesAsync({ callerContext: props.context.actionContext }, szfCartState.Id, newCartlines);\r\n await updateAsync({ callerContext: props.context.actionContext }, updateCartlineresult);\r\n }\r\n}\r\n\r\nconst addItemsToCart = async (\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n setItemsAddedToCartDialogOpen: (opened: boolean) => void,\r\n setErrorMessage: (message: string) => void\r\n): Promise => {\r\n const addToCartInput = await getAddToCartInputFromProps(props);\r\n if (!ArrayExtensions.hasElements(addToCartInput)) {\r\n return;\r\n }\r\n const cartState = await getCartState(props.context.actionContext);\r\n const addToCartResult = await cartState.addProductsToCart(addToCartInput);\r\n if (addToCartResult.status === 'SUCCESS') {\r\n /* ZOHAIB | VSI | CUSTOMIZATION | START */\r\n await setTicketExtensionProperty(props,cartState);\r\n const newCartState = await getCartState(props.context.actionContext);\r\n await newCartState.refreshCart({});\r\n // resetQuantityInput(props)\r\n /* ZOHAIB | VSI | CUSTOMIZATION | END */\r\n await handleAddItemsToCartSuccess(\r\n props,\r\n setDisabled,\r\n setItemsAddedToCartDialogOpen,\r\n setErrorMessage,\r\n cartState,\r\n addToCartInput,\r\n addToCartResult\r\n );\r\n } else {\r\n if (props.dialogStrings?.buyAgainNotificationTitle) {\r\n // For buy again show simple error notification.\r\n NotificationsManager.instance().addNotification(\r\n new ErrorNotification(\r\n props.dialogStrings.buyAgainNotificationTitle,\r\n props.dialogStrings.buyAgainNotificationCloseAriaLabel ?? ''\r\n )\r\n );\r\n } else {\r\n NotificationsManager.instance().addNotification(\r\n new ErrorNotification(\r\n addToCartResult.errorDetails?.LocalizedMessage ?? 'Add to cart failed',\r\n props.dialogStrings?.closeNotificationLabel ?? ''\r\n )\r\n );\r\n }\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n setDisabled(false);\r\n }\r\n};\r\n\r\n/**\r\n * Interface for add to cart component.\r\n */\r\nexport interface IAddtoCartComponent extends IComponent {\r\n onClick(): (event: React.MouseEvent, props: IAddToCartComponentProps) => void;\r\n}\r\n\r\n/**\r\n * On click function.\r\n * @param _event - The mouse event.\r\n * @param props - The props.\r\n * @param setDisabled - Flag to define whether the element is disabled.\r\n * @param openModal - Flag to specify if it should open in a modal window.\r\n * @param setItemsAddedToCartDialogOpen - Sets items added to cart while dialog is open.\r\n * @param setErrorMessage - Error message.\r\n */\r\nconst onClick = async (\r\n _event: React.MouseEvent,\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n openModal: (opened: boolean) => void,\r\n setErrorMessage: (message: string) => void\r\n): Promise => {\r\n if (!ArrayExtensions.hasElements(props.products)) {\r\n const cartError = addToCartError(props);\r\n\r\n if (cartError) {\r\n propagateError(props, cartError);\r\n return;\r\n }\r\n\r\n setDisabled(true);\r\n }\r\n\r\n const hasOrderDetailsProducts =\r\n ArrayExtensions.hasElements(props.orderDetailsProducts) && props.orderDetailsProducts.length > defaultQuantity;\r\n const hasProducts = ArrayExtensions.hasElements(props.products) && props.products.length > defaultQuantity;\r\n const hasMultipleProducts = hasOrderDetailsProducts || hasProducts;\r\n\r\n if (hasMultipleProducts) {\r\n await addItemsToCart(props, setDisabled, openModal, setErrorMessage);\r\n } else {\r\n await addOneItemToCart(\r\n props, \r\n setDisabled, \r\n openModal\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * Add to cart component action constant.\r\n */\r\nconst AddToCartComponentActions = {\r\n onClick\r\n};\r\n\r\n/**\r\n * Add to cart component.\r\n * @param props - The props.\r\n * @returns - The add to cart component.\r\n */\r\nexport const AddToCartFunctionalComponent: React.FC = (props: IAddToCartComponentProps) => {\r\n const {quantity , addToCartErrorText} = props\r\n const [disabled, setDisabled] = useState(false);\r\n const [modalOpen, setModalOpen] = useState(false);\r\n const [isItemsAddedToCartDialogOpen, setItemsAddedToCartDialogOpen] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState('');\r\n const [addToCartInput, setAddToCartInput] = useState<\r\n {\r\n product: SimpleProduct;\r\n count: number;\r\n }[]\r\n >([]);\r\n \r\n const filterCount = addToCartInput.filter((input) => input.count)\r\n const onClickHandler = async (event: React.MouseEvent) => {\r\n props.setButtonLoadingState(true);\r\n if(quantity === 0 && filterCount.length === 0 ){\r\n setErrorMessage(addToCartErrorText)\r\n }else if(props.disableAddToCartButton){\r\n setErrorMessage(props.dialogStrings?.pdpBlockErrorMessage!)\r\n return;\r\n }else setErrorMessage('')\r\n await AddToCartComponentActions.onClick(event, props, setDisabled, setModalOpen, setErrorMessage); \r\n };\r\n\r\n /**\r\n * Close dialog.\r\n */\r\n const closeItemsAddedToCartDialog = React.useCallback(() => {\r\n // resetQuantityInput(props);\r\n setItemsAddedToCartDialogOpen(false);\r\n }, []);\r\n\r\n const priceComponent = props.data?.price ? (\r\n \r\n ) : (\r\n ''\r\n );\r\n const popupProps: IPopupProps = {\r\n context: props.context,\r\n className: 'msc-add-to-cart',\r\n id: props.id,\r\n typeName: props.typeName,\r\n data: { product: props.data?.product, price: props.data?.price },\r\n dialogStrings: props.dialogStrings,\r\n imageSettings: props.imageSettings,\r\n gridSettings: props.context.request.gridSettings,\r\n productQuantity: props.quantity !== undefined ? props.quantity : defaultQuantity,\r\n priceComponent,\r\n navigationUrl: props.navigationUrl,\r\n modalOpen,\r\n setModalOpen,\r\n telemetryContent: props.telemetryContent,\r\n products: addToCartInput,\r\n counts: props?.counts!,\r\n setCounts: props?.setCounts!,\r\n buyboxCallbacks: props?.buyboxCallbacks!,\r\n setButtonLoadingState: props.setButtonLoadingState\r\n };\r\n\r\n const itemsAddedResource: IItemsAddedToCartResourcesExtends = {\r\n viewCartButtonText: props.dialogStrings?.goToCartText ?? '',\r\n festivalEntryText : props.dialogStrings?.festivalEntryText ?? '',\r\n aedText : props.dialogStrings?.aedText,\r\n closeButtonLabel: props.dialogStrings?.closeNotificationLabel ?? 'Close',\r\n itemsAddedToCartHeaderText: props.dialogStrings?.headerMessageText ?? '',\r\n itemsAddedToCartFormatText: props.dialogStrings?.headerItemFormatText ?? '',\r\n linesAddedToCartFormatText: props.dialogStrings?.headerLinesFormatText ?? '{0}',\r\n itemsAddedValidationErrorMessage: errorMessage\r\n };\r\n\r\n const renderModalPopup = ;\r\n const label = getLinkText(props);\r\n const payload = getPayloadObject(TelemetryEvent.AddToCart, props.telemetryContent!, label, '');\r\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\r\n const buttonClassName = props.shouldSkipSiteSettings ? '' : 'msc-add-to-cart ';\r\n\r\n React.useEffect(() => {\r\n /**\r\n * Retrieves add to cart input and updates the state.\r\n */\r\n const retrieveAddToCartInput = async () => {\r\n const retrievedInput = await getAddToCartInputFromProps(props);\r\n setAddToCartInput(retrievedInput);\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call async method as per the documentation of react useEffect.\r\n retrieveAddToCartInput();\r\n }, [props, setAddToCartInput]);\r\n return (\r\n <>\r\n {renderModalPopup}\r\n

{errorMessage}

\r\n \r\n {label}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\n// Set default props\r\nAddToCartFunctionalComponent.defaultProps = {\r\n quantity: defaultQuantity\r\n};\r\n\r\n/**\r\n * Resolves whether product is in stock.\r\n * @param props - The add to cart component props.\r\n * @returns Gets the link text.\r\n */\r\nconst getLinkText = (props: IAddToCartComponentProps): string => {\r\n return shouldShowOutOfStock(props, false) && props.outOfStockText ? props.outOfStockText : props.addToCartText;\r\n};\r\n\r\n/**\r\n * Resolves whether product is in stock.\r\n * @param props - The add to cart component props.\r\n * @returns The add to cart failure result.\r\n */\r\nconst addToCartError = (props: IAddToCartComponentProps): IAddToCartFailureResult | undefined => {\r\n const {\r\n data,\r\n productAvailability,\r\n isCustomPriceSelected,\r\n customPriceAmount,\r\n maximumKeyInPrice,\r\n minimumKeyInPrice,\r\n defaultMaximumKeyInPrice = 100,\r\n defaultMinimumKeyInPrice = 10\r\n } = props;\r\n\r\n if (!data || !data.product.RecordId) {\r\n // No product exists, won't be able to add to cart\r\n return { failureReason: 'EMPTYINPUT' };\r\n }\r\n\r\n if (data.product.Dimensions) {\r\n const missingDimensions = data.product.Dimensions.filter(\r\n dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value)\r\n );\r\n\r\n if (ArrayExtensions.hasElements(missingDimensions)) {\r\n // At least one dimension with no value exists on the product, won't be able to add to cart\r\n return { failureReason: 'MISSINGDIMENSION', missingDimensions };\r\n }\r\n }\r\n\r\n if (shouldShowOutOfStock(props, true)) {\r\n const defaultAvailableQuantity = 0; // Showing as out of stock if no available products found.\r\n const availableQuantity = productAvailability?.AvailableQuantity ?? defaultAvailableQuantity;\r\n const stockLeft = Math.max(availableQuantity, defaultAvailableQuantity);\r\n\r\n return { failureReason: 'OUTOFSTOCK', stockLeft };\r\n }\r\n\r\n // When Custom price is selected, if there is no keyed-in price or keyed-in price is out of limit, should return error.\r\n if (\r\n isCustomPriceSelected &&\r\n (!customPriceAmount ||\r\n customPriceAmount > (maximumKeyInPrice || defaultMaximumKeyInPrice) ||\r\n customPriceAmount < (minimumKeyInPrice || defaultMinimumKeyInPrice))\r\n ) {\r\n return { failureReason: 'INVALIDCUSTOMAMOUNT' };\r\n }\r\n\r\n // Only allow adding to cart if not showing out of stock\r\n return undefined;\r\n};\r\n\r\n/**\r\n * Resolves whether product is in stock.\r\n * @param props - The add to cart component props.\r\n * @param includeCurrentQuantity - Flag to specify whether current quantity should be included.\r\n * @returns The dialog element.\r\n */\r\nconst shouldShowOutOfStock = (props: IAddToCartComponentProps, includeCurrentQuantity: boolean): boolean => {\r\n if (props.context.app.config.enableStockCheck === undefined || props.context.app.config.enableStockCheck === false) {\r\n return false;\r\n }\r\n\r\n // When skip site settings do not need show out of stock on adding to cart\r\n if (props.shouldSkipSiteSettings) {\r\n return false;\r\n }\r\n\r\n if (\r\n props.isLoading ||\r\n props.isProductQuantityLoading ||\r\n props.isUpdatingDimension ||\r\n props.isLoadingDeliveryOptions ||\r\n props.isUpdatingDeliveryOptions ||\r\n props.isAddServiceItemToCart\r\n ) {\r\n // Out of stock turn off, don't bother showing out of stock\r\n return false;\r\n }\r\n\r\n if (!props.data || !props.data.product.RecordId) {\r\n // No product exists, don't bother showing out of stock\r\n return false;\r\n }\r\n\r\n const hasAvailableProducts = props.hasAvailableProducts ?? true;\r\n if (!hasAvailableProducts) {\r\n return true;\r\n }\r\n\r\n if (props.data.product.Dimensions) {\r\n if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also don't show out of stock\r\n return false;\r\n }\r\n }\r\n\r\n const includedQuantityNumber = includeCurrentQuantity && props.quantity ? props.quantity : defaultQuantity;\r\n\r\n return !(\r\n props.productAvailability &&\r\n props.productAvailability.AvailableQuantity !== undefined &&\r\n props.productAvailability.AvailableQuantity >= includedQuantityNumber\r\n );\r\n};\r\n\r\nconst isIntermediateState = (props: IAddToCartComponentProps): boolean => {\r\n if (props.data?.product.Dimensions) {\r\n if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also not in intermediate state\r\n return false;\r\n }\r\n }\r\n\r\n if (!props.isLoading && !props.isUpdatingDimension && !props.isLoadingDeliveryOptions && !props.isUpdatingDeliveryOptions) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\n// @ts-expect-error\r\nexport const AddToCartComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride(\r\n 'AddToCart',\r\n { component: AddToCartFunctionalComponent, ...AddToCartComponentActions }\r\n);\r\n\r\n\r\nexport default AddToCartComponent;","/* eslint-disable security/detect-object-injection */\r\nimport axios from 'axios';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nimport { IActionContext, getUrlSync, IRequestContext } from '@msdyn365-commerce/core';\r\n\r\nexport const handleUpload = async (file: File | null,token: string,domain?:string,siteName?:string,path?:string, folder?:string) => {\r\n try {\r\n const fileName = file?.name;\r\n \r\n // const sharePointSiteName = siteName || 'SZF';\r\n const sharePointSiteName = siteName || 'SZF-Ecommerce';\r\n const sharePointFilePath = path || 'Documents';\r\n const sharePointdomain = domain || 'zayedfestival';\r\n // const sharePointdomain = domain || 'visionetsys';\r\n \r\n const endpointUrl = `https://${sharePointdomain}.sharepoint.com/sites/${sharePointSiteName}/_api/web/lists/getbytitle('${sharePointFilePath}')/RootFolder/Files/Add(url='${fileName}', overwrite=true)`;\r\n // const endpointUrl = `https://${sharePointdomain}.sharepoint.com/${sharePointFilePath}${folder ? folder: ''}/', overwrite=true)`;\r\n // Set up the headers\r\n const headers = {\r\n 'Content-Type': 'application/json',\r\n Authorization: `Bearer ${token}`\r\n };\r\n\r\n // Upload the file\r\n\r\n const response = await axios.post(endpointUrl, file, {\r\n headers: {\r\n ...headers\r\n }\r\n });\r\n if(response && response.data){\r\n return {\r\n url: `https://visionetsys.sharepoint.com${response.data.ServerRelativeUrl}`,\r\n }\r\n }else{\r\n return {\r\n url: '',\r\n }\r\n }\r\n } catch (error) {\r\n console.error('Error uploading file:', error);\r\n return {\r\n url:''\r\n }\r\n }\r\n};\r\n\r\n\r\nexport const _makeExtensionProperty = (key:string,value:string) => {\r\n const extensionPropertyObj = [{\r\n Key: key,\r\n Value: { StringValue: value} \r\n }];\r\n return extensionPropertyObj;\r\n};\r\n\r\n// Function to create attribute object\r\nexport const makeCustomAttributeUtil = (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 return attributeObj;\r\n};\r\nexport const addAttributeUtil = (currentAttributes: AttributeValue[], attributeObj: AttributeValue): AttributeValue[] => {\r\n const attrIndex = currentAttributes.findIndex((attr: AttributeValue) => attr.Name?.toLowerCase() === attributeObj.Name?.toLowerCase());\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// upgrade-v40\r\nexport const GetCheckoutReturnUrl = (actionContext: IActionContext): string => {\r\n let returnUrl = getUrlSync('checkout', actionContext) || '';\r\n const absoluteUrlRegExp = new RegExp('^(?:[a-z]+:)?//', 'i');\r\n const isAbsoluteUrl = absoluteUrlRegExp.test(returnUrl);\r\n if (window && !isAbsoluteUrl) {\r\n returnUrl = `${window.location.origin}${returnUrl}`;\r\n }\r\n\r\n return `${returnUrl}${!returnUrl.includes('?') ? '?' : '&'}pv=1`;\r\n};\r\n// get cookie\r\nexport const getCookie = (cookieName: string) => {\r\n const name = `${cookieName}=`;\r\n const decodedCookie = decodeURIComponent(document.cookie);\r\n return decodedCookie\r\n .split(';')\r\n .map(c => c.trim())\r\n .find(c => c.startsWith(name))\r\n ?.substring(name.length) || \"\";\r\n};\r\n// set cookie\r\nexport const setCookie = (cookieName: string, value: string, expireDays: number, props: IRequestContext) => {\r\n const { cookies } = props;\r\n const expirationDate = new Date(Date.now());\r\n expirationDate.setTime(expirationDate.getTime() + expireDays * 24 * 60 * 60 * 1000);\r\n cookies.set(cookieName, value, {\r\n expires: expireDays ? expirationDate : null,\r\n isEssential: true\r\n } as {});\r\n}\r\n"],"names":["Popup","popupProps","dialogStrings","className","imageSettings","data","product","modalOpen","telemetryContent","setModalOpen","context","products","counts","setCounts","buyboxCallbacks","setButtonLoadingState","closeModal","React","resetQuantityInput","resetCount","_objectSpread","count","hasOwnProperty","totalAmount","setTotalAmount","payLoad","getPayloadObject","TelemetryConstant","ContinueShopping","continueShoppingAttribute","getTelemetryAttributes","contentAction","etext","ViewBagAndCheckout","viewBagAttribute","cropFocalRegion","total","length","map","item","Price","Modal","isOpen","onClosed","toggle","ModalHeader","headerMessageText","ModalBody","festivalEntryText","Name","miniCartTotalAmountLabel","aedText","toFixed","ModalFooter","Button","Object","assign","href","_getUrlSync","getUrlSync","actionContext","goToCartText","onClick","continueShoppingText","getCheckoutPageUrl","AddToCartBehavior","propagateResult","props","result","onAdd","propagateError","onError","getAddToCartInputFromProps","async","_props$orderDetailsPr","_props$context$action","_props$data","orderDetailsProducts","filter","ObjectExtensions","isNullOrUndefined","simpleProduct","emailDeliveryModeCode","requestContext","channel","EmailDeliveryModeCode","input","deliveryOption","salesLine","DeliveryMode","Quantity","catalogId","CatalogId","isAddEmailDeliveryItemToCart","ArrayExtensions","hasElements","apiSettings","productSearchResultsWithImages","ProductsDataActions","callerContext","channelId","productId","productSearchResult","newProductSearchResult","newImageUrl","generateProductImageUrl","PrimaryImageUrl","productData","find","RecordId","_productData$BasePric","ProductTypeValue","ProductType","Variant","AdjustedPrice","BasePrice","quantity","_props$quantity","setTicketExtensionProperty","cartState","szfCartState","cart","szfCartLines","CartLines","ticketCustomAttributeName","app","config","szfSaleOrderTypeAttributeName","ticketExtensionPropertyValuePrefix","newCartlines","cartLine","_cartLine$AttributeVa","cartLineAttributes","AttributeValues","carlineAttribute","UID","shortUUID","ticketValue","concat","ticketCustomAttributeObj","makeCustomAttributeUtil","szfSaleOrderTypeAttributeObj","push","LineId","updateCartlineresult","updateCartLinesAsync","Id","updateAsync","addItemsToCart","setDisabled","setItemsAddedToCartDialogOpen","setErrorMessage","addToCartInput","getCartState","addToCartResult","addProductsToCart","status","newCartState","refreshCart","_validationResult$Val","_props$dialogStrings2","_props$dialogStrings3","_props$dialogStrings$2","_props$dialogStrings4","errorCount","CartsDataActions","bypassCache","Version","ValidationFailuresByCartLines","errorText","oneErrorText","multiErrorsText","errorMessage","format","validationErrorMessage","toString","addToCartBehavior","showModal","showNotification","_props$dialogStrings$3","itemsAddedResource","viewCartButtonText","closeButtonLabel","closeNotificationLabel","itemsAddedToCartHeaderText","itemsAddedToCartFormatText","headerItemFormatText","linesAddedToCartFormatText","headerLinesFormatText","itemsAddedValidationErrorMessage","notification","MultiItemsSuccessfullyAddedToCartNotification","gridSettings","navigationUrl","id","typeName","NotificationsManager","instance","addNotification","MsDyn365","isBrowser","isNavigationToCartPageDisabled","undefined","goToCart","window","location","handleAddItemsToCartSuccess","_props$dialogStrings5","_props$dialogStrings$4","_addToCartResult$erro3","_addToCartResult$erro4","_props$dialogStrings$5","_props$dialogStrings6","buyAgainNotificationTitle","ErrorNotification","buyAgainNotificationCloseAriaLabel","errorDetails","LocalizedMessage","failureReason","cartActionResult","AddToCartComponentActions","_event","openModal","cartError","addToCartError","hasOrderDetailsProducts","hasProducts","_props$productAvailab","addProductToCart","availableQuantity","productAvailability","AvailableQuantity","additionalProperties","validateQuantity","isOrderQuantityLimitsFeatureEnabled","enableStockCheck","isPriceKeyedIn","customPrice","customPriceAmount","shouldSkipSiteSettings","ItemSuccessfullyAddedToCartNotification","price","_addToCartResult$erro","_addToCartResult$erro2","_props$dialogStrings$","_props$dialogStrings","addOneItemToCart","AddToCartFunctionalComponent","_props$data2","_props$dialogStrings8","_props$dialogStrings9","_props$dialogStrings10","_props$data3","_props$data4","_props$dialogStrings$6","_props$dialogStrings11","_props$dialogStrings$7","_props$dialogStrings12","_props$dialogStrings13","_props$dialogStrings$8","_props$dialogStrings14","_props$dialogStrings$9","_props$dialogStrings15","_props$dialogStrings$10","_props$dialogStrings16","_props$dialogStrings$11","_props$dialogStrings17","_props$addToCartArial","_props$addToCartArial2","addToCartErrorText","disabled","useState","isItemsAddedToCartDialogOpen","setAddToCartInput","filterCount","closeItemsAddedToCartDialog","priceComponent","PriceComponent","freePriceText","originalPriceText","currentPriceText","request","productQuantity","renderModalPopup","label","getLinkText","payload","TelemetryEvent","AddToCart","attributes","buttonClassName","retrievedInput","retrieveAddToCartInput","classnames","addToCartArialLabel","title","_props$dialogStrings7","disableAddToCartButton","pdpBlockErrorMessage","event","isButtonLoading","isIntermediateState","shouldShowOutOfStock","ItemsAddedToCartDialogComponent","isModalOpen","onClose","defaultProps","outOfStockText","addToCartText","isCustomPriceSelected","maximumKeyInPrice","minimumKeyInPrice","defaultMaximumKeyInPrice","defaultMinimumKeyInPrice","Dimensions","missingDimensions","dimension","DimensionValue","Value","_productAvailability$","defaultAvailableQuantity","stockLeft","Math","max","includeCurrentQuantity","_props$hasAvailablePr","isLoading","isProductQuantityLoading","isUpdatingDimension","isLoadingDeliveryOptions","isUpdatingDeliveryOptions","isAddServiceItemToCart","hasAvailableProducts","includedQuantityNumber","_props$data5","AddToCartComponent","msdyn365Commerce","createComponentOverride","component","AttributeName","attributeValue","TextValue","TextValueTranslations","addAttributeUtil","currentAttributes","attributeObj","attrIndex","findIndex","attr","_attr$Name","_attributeObj$Name","toLowerCase","getCookie","cookieName","_decodedCookie$split$","name","decodeURIComponent","document","cookie","split","c","trim","startsWith","substring","setCookie","value","expireDays","cookies","expirationDate","Date","now","setTime","getTime","set","expires","isEssential"],"sourceRoot":""}