1 line
7.6 KiB
JavaScript
1 line
7.6 KiB
JavaScript
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6129],{34955:(e,t,r)=>{async function a(e){try{let t=await fetch("/api/checkout",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok){let e=await t.json();throw Error(e.message||"Failed to create checkout session")}return await t.json()}catch(e){throw console.error("Error creating checkout session:",e),e}}async function n(e,t){try{let r=await fetch("/api/tax/calculate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({items:e,customerLocation:t})});if(!r.ok){let e=await r.json();throw Error(e.message||"Failed to calculate tax")}return await r.json()}catch(e){throw console.error("Error calculating tax:",e),e}}r.d(t,{fw:()=>a,qu:()=>n})},36515:(e,t,r)=>{r.d(t,{CartProvider:()=>s,_:()=>c});var a=r(95155),n=r(12115),o=r(51457),i=r(34955);let l=(0,n.createContext)({items:[],isLoading:!0,isTaxLoading:!1,addItem:async()=>{},updateItem:async()=>{},removeItem:async()=>{},clearCart:async()=>{},itemCount:0,subtotal:{amount:0,currency:"USD"},tax:{amount:0,currency:"USD"},total:{amount:0,currency:"USD"}}),c=()=>(0,n.useContext)(l);function s(e){var t,r;let{children:c}=e,[s,u]=(0,n.useState)([]),[d,f]=(0,n.useState)(!0),[g,p]=(0,n.useState)(!1),[y,v]=(0,n.useState)(0),{user:h}=(0,o.A)(),m=((null===(r=s[0])||void 0===r?void 0:null===(t=r.price)||void 0===t?void 0:t.currency)||"USD").toUpperCase(),S=s.reduce((e,t)=>e+t.quantity,0),w=s.reduce((e,t)=>{var r,a,n;return e+(null!==(n=null!==(a=t.overridePrice)&&void 0!==a?a:null===(r=t.price)||void 0===r?void 0:r.amount)&&void 0!==n?n:0)*t.quantity},0);(0,n.useEffect)(()=>{f(!0);let e=localStorage.getItem("cart");if(e)try{u(JSON.parse(e)),console.log("Cart loaded from local storage.")}catch(e){console.error("Error parsing stored cart:",e),localStorage.removeItem("cart")}else u([]);f(!1)},[]),(0,n.useEffect)(()=>{d||(localStorage.setItem("cart",JSON.stringify(s)),console.log("Cart saved to local storage."))},[s,d]);let _=(0,n.useCallback)(async()=>{if(0===s.length){v(0);return}try{p(!0);let e=s.map((e,t)=>({reference:e.id||"".concat(e.product_id,"-").concat(e.price_id)||"item-".concat(t),product_id:e.product_id,price_id:e.price_id,quantity:e.quantity,overridePrice:e.overridePrice,metadata:e.metadata})),t=await (0,i.qu)(e,{country:"DE",postal_code:"10117",state:"Berlin"});v(t.tax_amount)}catch(e){console.error("Error calculating tax:",e),v(0)}finally{p(!1)}},[s]);(0,n.useEffect)(()=>{_()},[_]);let b=async e=>{u(t=>{var r,a,n,o;let i=t.findIndex(t=>t.product_id===e.product_id&&t.price_id===e.price_id);if(i>=0){let o=t[i];if((null===(r=e.product)||void 0===r?void 0:r.type)!=="physical")return console.log("Service/Digital item already in cart, not adding again."),t;{let r=[...t];return r[i]={...o,quantity:o.quantity+e.quantity,metadata:null!==(a=e.metadata)&&void 0!==a?a:o.metadata,overridePrice:null!==(n=e.overridePrice)&&void 0!==n?n:o.overridePrice},r}}{let r=(null===(o=e.product)||void 0===o?void 0:o.type)==="physical"?e.quantity:1;return[...t,{...e,quantity:r,id:crypto.randomUUID()}]}})},E=async(e,t,r)=>{u(a=>{var n;let o=a.findIndex(r=>r.product_id===e&&r.price_id===t);if(-1===o)return a;let i=a[o];if((null===(n=i.product)||void 0===n?void 0:n.type)!=="physical")return console.log("Cannot update quantity for digital/service items."),a;if(r<=0){let e=[...a];return e.splice(o,1),e}{let e=[...a];return e[o]={...i,quantity:r},e}})},C=async(e,t)=>{u(r=>r.filter(r=>r.product_id!==e||r.price_id!==t))},k=async()=>{u([]),v(0),localStorage.removeItem("cart")};return(0,a.jsx)(l.Provider,{value:{items:s,isLoading:d,isTaxLoading:g,addItem:b,updateItem:E,removeItem:C,clearCart:k,itemCount:S,subtotal:{amount:w,currency:m},tax:{amount:y,currency:m},total:{amount:w+y,currency:m}},children:c})}},51457:(e,t,r)=>{r.d(t,{A:()=>c,AuthProvider:()=>l});var a=r(95155),n=r(12115),o=r(46414);let i=(0,n.createContext)(void 0);function l(e){let{children:t}=e,[r,l]=(0,n.useState)(null),[c,s]=(0,n.useState)(null),[u,d]=(0,n.useState)(null),[f,g]=(0,n.useState)(!0),p=(0,o.u)();(0,n.useEffect)(()=>{(async()=>{g(!0);let{data:{session:e},error:t}=await p.auth.getSession();if(t)console.error("Error getting session:",t);else if(e){s(e),l(e.user);let{data:t}=await p.from("profiles").select("role").eq("id",e.user.id).single();d((null==t?void 0:t.role)||null)}else d(null);g(!1)})();let{data:{subscription:e}}=p.auth.onAuthStateChange(async(e,t)=>{var r;if(s(t),l(null!==(r=null==t?void 0:t.user)&&void 0!==r?r:null),null==t?void 0:t.user){let{data:e}=await p.from("profiles").select("role").eq("id",t.user.id).single();d((null==e?void 0:e.role)||null)}else d(null);g(!1)});return()=>e.unsubscribe()},[p.auth]);let y=async(e,t)=>{g(!0);let{data:r,error:a}=await p.auth.signInWithPassword({email:e,password:t});return g(!1),{data:r.session,error:a}},v=async(e,t)=>{g(!0);let{data:r,error:a}=await p.auth.signUp({email:e,password:t});return!a&&r.user&&await p.from("profiles").insert({id:r.user.id,full_name:null,avatar_url:null,stripe_customer_id:null}),g(!1),{data:r.session,error:a}},h=async()=>{await p.auth.signOut()};return(0,a.jsx)(i.Provider,{value:{user:r,session:c,role:u,isLoading:f,signIn:y,signUp:v,signOut:h},children:t})}function c(){let e=(0,n.useContext)(i);if(void 0===e)throw Error("useAuth must be used within an AuthProvider");return e}},53363:(e,t,r)=>{r.d(t,{ei:()=>o,IB:()=>c,py:()=>l.useClientLocale,fM:()=>l.useClientTranslations}),r(86696),r(36893),r(52014),r(12115);var a=r(34477);let n=(0,a.createServerReference)("40b0567df25c73a752ad81f27a9175e88aeac487c9",a.callServer,void 0,a.findSourceMapURL,"getTranslationsAction");async function o(e,t){let a="string"==typeof t?t:t.locale,o={};try{o=await n({locale:a,namespace:e}),Object.keys(o).length}catch(t){console.error("[i18n] Error getting translations for namespace '".concat(e,"' in locale '").concat(a,"':"),t instanceof Error?t.message:String(t)),console.info("[i18n] Recovering with empty translations for namespace '".concat(e,"' in locale '").concat(a,"'"))}let i=(t,n)=>{var i,l;let c="".concat(e,".").concat(t),{TranslationAccessService:s}=r(86696),u=s.findTranslation(o,e,t,!1);if(void 0===u){if(n&&"defaultValue"in n)return String(n.defaultValue);let r=Object.keys(o).length>0?"".concat(Object.keys(o).slice(0,5).join(", ")).concat(Object.keys(o).length>5?"...":""):"none";return console.warn("[i18n] Translation not found: ".concat(c),{namespace:e,key:t,locale:a,availableKeys:r,translationsCount:Object.keys(o).length}),console.error("[i18n] Missing translation in production:",{fullKey:c,namespace:e,key:t,locale:a,timestamp:new Date().toISOString()}),t}return"string"!=typeof u?String(u):n?(i=u,l=n,i.replace(/{(\w+)}/g,(e,t)=>void 0!==l[t]?String(l[t]):"{".concat(t,"}"))):u};return i.rich=(e,t)=>{let r=i(e);return r===e?e:function(e,t){let r=Object.keys(t);if(0===r.length)return e;let a=[e];return r.forEach(e=>{let r="<".concat(e,">"),n="</".concat(e,">");a=a.flatMap(a=>{let o;if("string"!=typeof a)return a;let i=[],l=0;for(;-1!==(o=a.indexOf(r,l));){o>l&&i.push(a.substring(l,o));let c=o+r.length,s=a.indexOf(n,c);if(-1===s){i.push(a.substring(l)),l=a.length;break}let u=a.substring(c,s);i.push(t[e](u)),l=s+n.length}return l<a.length&&i.push(a.substring(l)),i})}),a}(r,t)},i}async function i(e){let t="string"==typeof e?e:e.locale;try{return await getTranslationsAction({locale:t,namespace:""})||{}}catch(r){let t=r instanceof Error?r.message:String(r);return r instanceof Error&&r.stack,console.error("[i18n] Error loading all translations for locale '".concat(e,"':"),t),console.info("[i18n] Recovering with empty translations object for locale '".concat(e,"'")),{}}}var l=r(76703);r(15484),r(5138);let c=["en","de"]}}]); |