{"version":3,"file":"Price_Calculation_Handler.DLfMx-Na.mjs","names":["p","useState"],"sources":["https:/framerusercontent.com/modules/s0m0FbMnpgzOF47NAmtf/GXVVP0bsLe2mE6oiJWG9/Price_Calculation_Handler.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useState,useEffect}from\"react\";import{createStore}from\"https://framer.com/m/framer/store.js@^1.0.0\";/**\n * By FRAMAX - Enhanced with REAL Discount Price Updates and VAT-Inclusive Pricing\n * This version includes 15% VAT in all product prices and displays VAT separately\n */const useStore=createStore({products:[],subtotal:0,shipping:0,tax:0,total:0,discount:0});// Pricing structure for bulk discounts (now VAT-inclusive at 15%)\nconst PRICING_TIERS={\"purified water 330ml\":{single:8.05,twelve:96.6,twentyfour:193.2},\"purified water 500ml\":{single:10.35,twelve:121.9,twentyfour:212.75},\"purified water 1l\":{single:17.83,twelve:202.4,twentyfour:379.5},\"purified water 5l\":{single:32.2,four:113.85,eight:227.7},\"purified water 20l\":{single:230},\"purified water 25l\":{single:287.5},\"sparkling water 330ml\":{single:11.5,twelve:138,twentyfour:276},\"sparkling water 500ml\":{single:15.53,twelve:182.28,twentyfour:303.6},\"sparkling water 1.5l\":{single:21.85,twelve:253,twentyfour:493.35},\"alkaline water 330ml\":{single:11.5,twelve:138,twentyfour:276},\"alkaline water 500ml\":{single:15.53,twelve:182.28,twentyfour:303.6},\"alkaline water 1l\":{single:21.85,twelve:253,twentyfour:493.35},\"alkaline water 5l\":{single:70.15,four:240.35,eight:468.05},\"alkaline water 20l\":{single:460},\"alkaline water 25l\":{single:460},\"water dispenser\":{single:1150},dispenser:{single:1150}};// Helper function to determine if an item is sold by units\nfunction isUnitBasedItem(product){return!product.size||product.size===\"\"||product.size===null||product.size===undefined||product.size===\"1\"||// Pack size of 1 = unit-based\nproduct.size===1||product.sellBy===\"unit\"||product.isUnitBased===true||product.additionalData&&product.additionalData[0]?.Size===\"1\";}// Function to extract product type and size from productName\nfunction parseProductTitle(productName){if(!productName)return null;const nameLower=productName.toLowerCase();// Extract water type or dispenser\nlet waterType=\"\";if(nameLower.includes(\"dispenser\"))waterType=\"dispenser\";else if(nameLower.includes(\"purified\"))waterType=\"purified water\";else if(nameLower.includes(\"sparkling\"))waterType=\"sparkling water\";else if(nameLower.includes(\"alkaline\"))waterType=\"alkaline water\";// For dispensers, return early\nif(waterType===\"dispenser\"){return\"water dispenser\";}// Extract bottle size (not pack size)\nlet size=\"\";if(nameLower.includes(\"330ml\"))size=\"330ml\";else if(nameLower.includes(\"500ml\"))size=\"500ml\";else if(nameLower.includes(\"1.5l\"))size=\"1.5l\";else if(nameLower.includes(\"1l\")&&!nameLower.includes(\"1.5l\"))size=\"1l\";else if(nameLower.includes(\"5l\"))size=\"5l\";else if(nameLower.includes(\"20l\"))size=\"20l\";else if(nameLower.includes(\"25l\"))size=\"25l\";if(waterType&&size){return`${waterType} ${size}`;}return null;}// Function to get the best price per unit for a given quantity\nfunction getBestPricePerUnit(productKey,quantity){const pricing=PRICING_TIERS[productKey];if(!pricing)return null;// 20L bottles, 25L bottles, and dispensers have no bulk pricing - always use single price\nif(productKey.includes(\"20l\")||productKey.includes(\"25l\")||productKey.includes(\"dispenser\")){return pricing.single;}if(productKey.includes(\"5l\")){if(quantity>=8&&pricing.eight){return pricing.eight/8;}else if(quantity>=4&&pricing.four){return pricing.four/4;}else{return pricing.single;}}else{if(quantity>=24&&pricing.twentyfour){return pricing.twentyfour/24;}else if(quantity>=12&&pricing.twelve){return pricing.twelve/12;}else{return pricing.single;}}}// Function to apply bulk discounts by actually updating cart item prices\nfunction applyBulkDiscountsToCart(){const savedData=JSON.parse(localStorage.getItem(\"cart-items\"))||[];if(savedData.length===0)return{updatedCart:savedData,totalDiscount:0};// Group products by type and size (only for pack-based items)\nconst groupedProducts={};const unitBasedProducts=[];savedData.forEach((product,index)=>{// Handle backwards compatibility - extract size from additionalData if needed\nconst productWithSize={...product,size:product.size||product.additionalData?.[0]?.Size||\"\"};// Handle unit-based items separately (no bulk pricing)\nif(isUnitBasedItem(productWithSize)){unitBasedProducts.push({...productWithSize,originalIndex:index});return;}const productKey=parseProductTitle(product.productName);if(!productKey)return;if(!groupedProducts[productKey]){groupedProducts[productKey]=[];}groupedProducts[productKey].push({...productWithSize,originalIndex:index});});let totalDiscount=0;let updatedCart=[...savedData];// Apply bulk pricing to pack-based products only\nObject.entries(groupedProducts).forEach(([productKey,products])=>{const totalQuantity=products.reduce((sum,p)=>sum+parseInt(p.quantity),0);const bestPricePerUnit=getBestPricePerUnit(productKey,totalQuantity);if(bestPricePerUnit){products.forEach(product=>{const originalTotalPrice=parseFloat(product.totalPrice);const newTotalPrice=bestPricePerUnit*parseInt(product.quantity);const newPrice=bestPricePerUnit;// Calculate discount for this item\nconst itemDiscount=originalTotalPrice-newTotalPrice;totalDiscount+=itemDiscount;// Update the cart item with new prices\nupdatedCart[product.originalIndex]={...product,price:parseFloat(newPrice.toFixed(2)),totalPrice:newTotalPrice.toFixed(2)};});}});// Unit-based products keep their original pricing (no bulk discounts)\nunitBasedProducts.forEach(product=>{const unitPrice=parseFloat(product.price)||0;const quantity=parseInt(product.quantity)||1;const totalPrice=(unitPrice*quantity).toFixed(2);updatedCart[product.originalIndex]={...product,price:unitPrice,totalPrice:totalPrice,isUnitBased:true};});return{updatedCart,totalDiscount};}// For display subtotal on cart (now with bulk pricing applied)\nexport function forSubtotalAmountDisplay(Component){return props=>{const[store,setStore]=useStore();const[price,setPrice]=useState(0);const[currencyPosition,setCurrencyPosition]=useState(null);const[currencySymbol,setCurrencySymbol]=useState(\"\");useEffect(()=>{const updateSubtotalFromStorage=()=>{// Apply bulk discounts and get updated cart\nconst{updatedCart,totalDiscount}=applyBulkDiscountsToCart();// Update localStorage with new prices if there are discounts\nif(totalDiscount>0){localStorage.setItem(\"cart-items\",JSON.stringify(updatedCart));}// Calculate subtotal with updated prices\nconst subtotal=updatedCart.reduce((acc,item)=>{const value=parseFloat(item.totalPrice);return acc+(isNaN(value)?0:value);},0);setPrice(subtotal);setStore({products:updatedCart,subtotal,discount:totalDiscount});};updateSubtotalFromStorage();setCurrencyPosition(JSON.parse(localStorage.getItem(\"currency-position\")));setCurrencySymbol(localStorage.getItem(\"currency-symbol\")||\"R\");const pollingInterval=setInterval(()=>{updateSubtotalFromStorage();},200)// Reduced interval for more responsive updates\n;// Listen for storage events to update immediately\nconst handleStorageChange=e=>{if(e.key===\"cart-items\"){updateSubtotalFromStorage();}};window.addEventListener(\"storage\",handleStorageChange);return()=>{clearInterval(pollingInterval);window.removeEventListener(\"storage\",handleStorageChange);};},[]);return /*#__PURE__*/_jsx(Component,{...props,text:currencyPosition?`${currencySymbol||\"R\"}${price.toFixed(2)}`:`${price.toFixed(2)}${currencySymbol||\"R\"}`});};}// For display discount amount\nexport function forDiscountAmountDisplay(Component){return props=>{const[store,setStore]=useStore();const[price,setPrice]=useState(0);const[currencyPosition,setCurrencyPosition]=useState(null);const[currencySymbol,setCurrencySymbol]=useState(\"\");useEffect(()=>{setCurrencyPosition(JSON.parse(localStorage.getItem(\"currency-position\")));setCurrencySymbol(localStorage.getItem(\"currency-symbol\")||\"R\");// Get discount amount from store (calculated in subtotal function)\nconst discount=parseFloat(store.discount)||0;setPrice(discount);},[store.discount]);return /*#__PURE__*/_jsx(Component,{...props,text:currencyPosition?`${currencySymbol||\"R\"}${price.toFixed(2)}`:`${price.toFixed(2)}${currencySymbol||\"R\"}`});};}// For display shipping fee\nexport function forShippingFeeDisplay(Component){return props=>{const[store,setStore]=useStore();const[price,setPrice]=useState(0);const[currencyPosition,setCurrencyPosition]=useState(null);const[currencySymbol,setCurrencySymbol]=useState(\"\");useEffect(()=>{setCurrencyPosition(JSON.parse(localStorage.getItem(\"currency-position\")));setCurrencySymbol(localStorage.getItem(\"currency-symbol\")||\"R\");const subtotal=parseFloat(store.subtotal)||0;const shippingCost=subtotal*3/100;setPrice(shippingCost);setStore({shipping:shippingCost});},[store.subtotal]);return /*#__PURE__*/_jsx(Component,{...props,text:currencyPosition?`${currencySymbol||\"R\"}${price.toFixed(2)}`:`${price.toFixed(2)}${currencySymbol||\"R\"}`});};}// For display VAT (15% of subtotal for display purposes only)\nexport function forDisplayTax(Component){return props=>{const[store,setStore]=useStore();const[price,setPrice]=useState(0);const[currencyPosition,setCurrencyPosition]=useState(null);const[currencySymbol,setCurrencySymbol]=useState(\"\");useEffect(()=>{setCurrencyPosition(JSON.parse(localStorage.getItem(\"currency-position\")));setCurrencySymbol(localStorage.getItem(\"currency-symbol\")||\"R\");const subtotal=parseFloat(store.subtotal)||0;// VAT display: 15% of the VAT-inclusive subtotal for transparency\nconst vatDisplay=subtotal*.15;setPrice(vatDisplay);setStore({tax:vatDisplay});},[store.subtotal]);return /*#__PURE__*/_jsx(Component,{...props,text:currencyPosition?`${currencySymbol||\"R\"}${price.toFixed(2)}`:`${price.toFixed(2)}${currencySymbol||\"R\"}`});};}// For display total (same as subtotal since prices are VAT-inclusive)\nexport function forDisplayTotal(Component){return props=>{const[store,setStore]=useStore();const[price,setPrice]=useState(0);const[currencyPosition,setCurrencyPosition]=useState(null);const[currencySymbol,setCurrencySymbol]=useState(\"\");useEffect(()=>{setCurrencyPosition(JSON.parse(localStorage.getItem(\"currency-position\")));setCurrencySymbol(localStorage.getItem(\"currency-symbol\")||\"R\");const subtotal=parseFloat(store.subtotal)||0;const shipping=parseFloat(store.shipping)||0;// Total = VAT-inclusive subtotal + shipping (no additional tax)\nconst total=subtotal+shipping;setPrice(total);setStore({total});},[store.subtotal,store.shipping]);return /*#__PURE__*/_jsx(Component,{...props,text:currencyPosition?`${currencySymbol||\"R\"}${price.toFixed(2)}`:`${price.toFixed(2)}${currencySymbol||\"R\"}`});};}// For sending form data - UPDATED TO STORE ORDER DATA FOR YOCO CHECKOUT\nexport function forSettingDataToFormField(Component){return props=>{const[store]=useStore();useEffect(()=>{if(store.products.length>0){const data={products:store.products,subtotal:store.subtotal,discount:store.discount,shipping:store.shipping,tax:store.tax,total:store.total};// Store in localStorage for the Yoco checkout handler to access\nlocalStorage.setItem(\"order-data\",JSON.stringify(data));// Also set as form field value\nprops.defaultValue=JSON.stringify(data);}},[store]);return /*#__PURE__*/_jsx(Component,{...props});};}\nexport const __FramerMetadata__ = {\"exports\":{\"forDisplayTotal\":{\"type\":\"reactHoc\",\"name\":\"forDisplayTotal\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"forDiscountAmountDisplay\":{\"type\":\"reactHoc\",\"name\":\"forDiscountAmountDisplay\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"forShippingFeeDisplay\":{\"type\":\"reactHoc\",\"name\":\"forShippingFeeDisplay\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"forDisplayTax\":{\"type\":\"reactHoc\",\"name\":\"forDisplayTax\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"forSettingDataToFormField\":{\"type\":\"reactHoc\",\"name\":\"forSettingDataToFormField\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"forSubtotalAmountDisplay\":{\"type\":\"reactHoc\",\"name\":\"forSubtotalAmountDisplay\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Price_Calculation_Handler.map"],"mappings":"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"}