{"version":3,"sources":["estore/cart/cart-service.ts"],"names":["cartEventPublisher","ImageMode","EventActionResult","Notify","CartService","constructor","this","_isPrivateAction","_includeVat","window","globalSettings","displayPricesIncludingVat","_notify","instance","_detailedCartData","couponCodes","products","summary","freeShippingInfo","_siteCartData","_showErrorMessage","errorMessage","error","emptyCart","clearCartEventData","await","PublicEStore","then","data","status","Ok","cartEmptied","result","detailedCartInfo","imageWidth","_getDetailedCartInfo","Promise","resolve","reject","getDetailedCartInfo","Pad","getSiteCartInfo","_getSiteCartInfo","removeFromCart","tempOrderLineID","removeFromCartContract","removeFromCartEventData","cartItemsRemoved","addToCart","productId","quantity","updateCartQuantity","productID","updateCartEventData","cartQuantityUpdated","resetDetailedCartInfoCache","resetSiteCartInfoCache","createOffer","response","fetch","method","mode","cache","credentials","headers","Content-Type","json","ok","success","offerId","location","href","message","Message"],"mappings":"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","file":"cart-service.js","sourcesContent":["import { CartItemsAddedResultEventData, CartItemsRemovedResultEventData, CartItemsResultEventData } from \"../../common/pubsub/models/cart-items-result-event-data.js\";\nimport { IDetailedCartInfo } from \"./interfaces/detailed-cart-info.js\";\nimport { cartEventPublisher } from \"../../common/pubsub/cart-event-pub-sub.js\";\nimport { ImageMode } from \"../../common/interfaces/image-mode.js\";\nimport { EventActionResult } from \"../../common/pubsub/models/event-data-base.js\";\nimport { RemoveFromCartItemContract } from \"../../common/public-estore/remove-from-cart-contract.js\";\nimport { UpdateCartQuantityItemContract } from \"../../common/public-estore/update-cart-quantity-contract.js\";\nimport { Notify } from \"../../../components-shared/utils/notify.js\";\n\nexport class CartService {\n private static instance: CartService | null = null;\n\n constructor() {\n if (!CartService.instance) {\n CartService.instance = this;\n } \n\n this._detailedCartData = {\n couponCodes: [],\n products: [],\n summary: null,\n freeShippingInfo: null,\n }\n\n this._siteCartData = {\n couponCodes: [],\n products: [],\n summary: null,\n freeShippingInfo: null,\n }\n return CartService.instance as CartService;\n }\n\n private _getDetailedCartInfo: Promise;\n private _getSiteCartInfo: Promise;\n private _isPrivateAction:boolean = true; // What is it? Developers told that it requried to be checked, could be useless.\n private _includeVat:boolean = window.globalSettings.displayPricesIncludingVat;\n private _detailedCartData: IDetailedCartInfo;\n private _siteCartData: IDetailedCartInfo;\n private _notify = new Notify(); \n\n private _showErrorMessage(errorMessage: string){\n this._notify.error(errorMessage);\n } \n \n /* #region Public */\n public async emptyCart() : Promise{\n const clearCartEventData = await window.PublicEStore.emptyCart(this._isPrivateAction).then((data) => data);\n\n if (clearCartEventData.status === EventActionResult.Ok) {\n cartEventPublisher.cartEmptied(clearCartEventData);\n }\n\n return clearCartEventData.result.detailedCartInfo;\n }\n\n public async detailedCartInfo(_includeVat:boolean = true, _isPrivateAction:boolean = true, imageWidth:number = 64) : Promise{\n if (!this._getDetailedCartInfo) {\n this._getDetailedCartInfo = new Promise((resolve, reject)=>{\n // The line below returns cache result is one more request fired. \n // Resolves the issue when webcomponent based on CartController included in the component based on CartController, ex: free-shipping-progress-bar in cart-sidebar-v1\n // Creates an issue if timed out request needs to be fired again, then resetDetailedCartInfoCache() should be called before forced request.\n // Probably can be done better.\n this._detailedCartData.summary ? resolve(this._detailedCartData) : \n window.PublicEStore\n .getDetailedCartInfo(_includeVat, _isPrivateAction, imageWidth, ImageMode.Pad)\n .then((data) => {\n if(data.status === EventActionResult.Ok){\n this._detailedCartData = data.result.detailedCartInfo;\n resolve(this._detailedCartData);\n } else {\n reject(data);\n }\n this._getDetailedCartInfo = null;\n }, (error) => {\n reject(error)\n this._getDetailedCartInfo = null;\n })\n });\n }\n return this._getDetailedCartInfo;\n }\n\n public async getSiteCartInfo(_includeVat:boolean = true, _isPrivateAction:boolean = true, imageWidth:number = 60) : Promise{\n if (!this._getSiteCartInfo) {\n this._getSiteCartInfo = new Promise((resolve, reject)=>{\n // The line below returns cache result is one more request fired. \n // Resolves the issue when webcomponent based on CartController included in the component based on CartController, ex: free-shipping-progress-bar in cart-sidebar-v1\n // Creates an issue if timed out request needs to be fired again, then resetDetailedCartInfoCache() should be called before forced request.\n // Probably can be done better.\n this._siteCartData.summary ? resolve(this._siteCartData) : \n window.PublicEStore\n .getSiteCartInfo(_includeVat, _isPrivateAction, imageWidth, ImageMode.Pad)\n .then((data) => {\n if(data.status === EventActionResult.Ok){\n this._siteCartData = data.result.detailedCartInfo;\n resolve(this._siteCartData);\n } else {\n reject(data);\n }\n this._getSiteCartInfo = null;\n }, (error) => {\n reject(error)\n this._getSiteCartInfo = null;\n })\n });\n }\n return this._getSiteCartInfo;\n }\n\n public async removeFromCart(tempOrderLineID: number) : Promise {\n try{\n const removeFromCartContract = {\n tempOrderLineID: tempOrderLineID,\n } as RemoveFromCartItemContract;\n\n const removeFromCartEventData = await window.PublicEStore.removeFromCart(removeFromCartContract, this._isPrivateAction).then((data) => data);\n\n if (removeFromCartEventData.result) {\n cartEventPublisher.cartItemsRemoved(removeFromCartEventData);\n }\n\n return removeFromCartEventData;\n\n } catch (error){\n throw error;\n }\n }\n\n public async addToCart(productId: number, quantity: number) : Promise{\n const addToCartContract = {\n productId: productId,\n //imageId: $prodContainer.data(dataNames.imageId),\n quantity: quantity,\n //fraction: $prodContainer.find('.' + classes.fractionInput).val(),\n //customFields: customFields\n };\n\n const addToCartEventData = await window.PublicEStore.addToCart(addToCartContract, this._includeVat, this._isPrivateAction);\n\n return addToCartEventData;\n }\n\n public async updateCartQuantity(productId: number, quantity: number, productID: number) : Promise{\n const udpateCartQuantityContract = {\n tempOrderLineID: productId,\n quantity: quantity,\n productID: productID,\n } as UpdateCartQuantityItemContract;\n\n const updateCartEventData = await window.PublicEStore.updateCartQuantity(udpateCartQuantityContract, this._isPrivateAction);\n\n if (updateCartEventData.result) {\n cartEventPublisher.cartQuantityUpdated(updateCartEventData);\n }\n\n return updateCartEventData;\n }\n\n public resetDetailedCartInfoCache() {\n this._getDetailedCartInfo = null;\n this._detailedCartData.summary = null;\n }\n\n public resetSiteCartInfoCache() {\n this._getSiteCartInfo = null;\n this._siteCartData.summary = null;\n }\n\n public async createOffer() {\n const requestInit = {\n method: \"POST\",\n mode: \"cors\",\n cache: \"no-cache\",\n credentials: \"same-origin\",\n headers: {\n \"Content-Type\": \"application/json\"\n }\n } as RequestInit;\n\n const response = await fetch(`/api/shopping-cart/create-offer`, requestInit);\n const result = await response.json();\n\n if (!response.ok) {\n const errorMessage = result.message ? result.message : result.Message ? result.Message : \"An error occurred while creating the offer\";\n this._showErrorMessage(errorMessage);\n return;\n }\n\n if (result.success && result.offerId) {\n window.location.href = \"/Startup/Common/Default.aspx?offerId=\"+result.offerId;\n }\n }\n\n /* #endregion */\n}"]}