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