PageSourceSearch

https://luxuryleasing.de/assets/TrackingAnalytics-BF0LbT8R.js

js luxuryleasing.de collected 2026-10-08 07:13:00 UTC 7,076 bytes, 1 lines download raw bytes

1import{u as D,j as e}from"./query-vendor-DVmmQ-ki.js";import{r as B,L as P}from"./react-vendor-BURXZ51T.js";import{B as I,T as M}from"./index-DpP3iEYK.js";import{C as u,b as p,c as g,a as h}from"./card-DwBoygcx.js";import{T as R,a as L,b as K}from"./tabs-CH4KCsyR.js";import{S as f}from"./skeleton-CbBeDtzP.js";import{P as O}from"./progress-CqQ0pW9r.js";import{supabase as z}from"./client-BXzYhP5O.js";import{s as N,m as Q,n as F,f as q}from"./date-vendor-sl2uXp01.js";import{d as H}from"./de-C5AT29KS.js";import{A as V}from"./arrow-left-DrlG9OEE.js";import{A as X}from"./activity-DCJtbnml.js";import{C as b}from"./chart-column-BDYqO4Le.js";import{C as Y}from"./circle-check-big-CqabgHRZ.js";import{R as Z,X as $,Y as G,T as U,B as J}from"./generateCategoricalChart-DjK0Wxmp.js";import{B as W}from"./BarChart-DjWzF9Lz.js";import{S as ee}from"./shield-B6mnUanT.js";import"./radix-slot-BTvEbTmE.js";import"./ui-radix-LBOF5AHa.js";import"./supabase-DxfZiqN5.js";function E(r){return r==="7d"?7:r==="30d"?30:90}function se(r,i){const s=new Date,l=E(i),c=N(s,l),a={};r.forEach(t=>{a[t.event_name]=(a[t.event_name]||0)+1});const n=r.filter(t=>t.platform==="capi"),_=n.filter(t=>t.status==="success").length,A=n.length>0?Math.round(_/n.length*100):100,C=Q({start:c,end:s}).map(t=>{const o=F(t),m=new Date(o.getTime()+24*60*60*1e3),k=r.filter(S=>{const y=new Date(S.created_at);return y>=o&&y<m}).length;return{day:q(t,"dd.MM",{locale:H}),count:k}}),d={},j=["client_ip_address","client_user_agent","em","fn","ln","fbc","fbp"];j.forEach(t=>{d[t]=0}),n.forEach(t=>{const o=t.user_data_params;Array.isArray(o)&&o.forEach(m=>{d[m]=(d[m]||0)+1})});const v={},w=n.length||1;j.forEach(t=>{v[t]=Math.round(d[t]/w*100)});const T=r.filter(t=>t.status==="error").slice(0,10);return{totalEvents:r.length,capiEvents:n.length,capiSuccessRate:A,eventsByType:a,eventsByDay:C,paramCoverage:v,recentErrors:T}}function ae(r){return D({queryKey:["tracking-analytics",r],queryFn:async()=>{const i=N(new Date,E(r)),{data:s,error:l}=await z.from("tracking_events").select("id, event_name, event_id, platform, user_data_params, status, created_at").gte("created_at",i.toISOString()).order("created_at",{ascending:!1});if(l)throw l;const c=(s||[]).map(a=>({...a,user_data_params:Array.isArray(a.user_data_params)?a.user_data_params:null}));return se(c,r)}})}const te=[{value:"7d",label:"7 Tage"},{value:"30d",label:"30 Tage"},{value:"90d",label:"90 Tage"}],re={client_ip_address:"IP-Adresse",client_user_agent:"User Agent",em:"E-Mail (gehasht)",fn:"Vorname (gehasht)",ln:"Nachname (gehasht)",fbc:"Click-ID (fbc)",fbp:"Browser-ID (fbp)"};function Ce(){const[r,i]=B.useState("30d"),{data:s,isLoading:l}=ae(r),c=s?Object.entries(s.eventsByType).map(([a,n])=>({name:a,value:n})).sort((a,n)=>n.value-a.value):[];return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"mb-8",children:[e.jsx(P,{to:"/admin/analytics",children:e.jsxs(I,{variant:"ghost",size:"sm",className:"mb-4 -ml-2",children:[e.jsx(V,{className:"h-4 w-4 mr-2"}),"Zurück zu Analytics"]})}),e.jsxs("div",{className:"flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold text-foreground mb-2",children:"Tracking Events"}),e.jsx("p",{className:"text-muted-foreground",children:"CAPI-Events, Erfolgsrate und Parameter-Abdeckung für Meta Event Match Quality."})]}),e.jsx(R,{value:r,onValueChange:a=>i(a),children:e.jsx(L,{children:te.map(a=>e.jsx(K,{value:a.value,children:a.label},a.value))})})]})]}),e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4",children:[e.jsx(x,{icon:X,label:"Gesamt-Events",value:s==null?void 0:s.totalEvents,loading:l}),e.jsx(x,{icon:b,label:"CAPI-Events",value:s==null?void 0:s.capiEvents,loading:l}),e.jsx(x,{icon:Y,label:"CAPI Erfolgsrate",value:s==null?void 0:s.capiSuccessRate,suffix:"%",loading:l,color:s&&s.capiSuccessRate<90?"text-destructive":"text-emerald-500"}),e.jsx(x,{icon:M,label:"Fehler",value:s==null?void 0:s.recentErrors.length,loading:l,color:s&&s.recentErrors.length>0?"text-destructive":void 0})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6",children:[e.jsxs(u,{className:"lg:col-span-2",children:[e.jsx(p,{children:e.jsxs(g,{className:"text-base flex items-center gap-2",children:[e.jsx(b,{className:"h-4 w-4"}),"Events pro Tag"]})}),e.jsx(h,{children:l?e.jsx(f,{className:"h-[250px] w-full"}):e.jsx(Z,{width:"100%",height:250,children:e.jsxs(W,{data:(s==null?void 0:s.eventsByDay)||[],children:[e.jsx($,{dataKey:"day",tick:{fontSize:11}
1,stroke:"hsl(var(--muted-foreground))",interval:"preserveStartEnd"}),e.jsx(G,{allowDecimals:!1,tick:{fontSize:12},stroke:"hsl(var(--muted-foreground))"}),e.jsx(U,{contentStyle:{backgroundColor:"hsl(var(--card))",border:"1px solid hsl(var(--border))",borderRadius:"8px",color:"hsl(var(--foreground))"}}),e.jsx(J,{dataKey:"count",name:"Events",fill:"hsl(var(--primary))",radius:[4,4,0,0]})]})})})]}),e.jsxs(u,{children:[e.jsx(p,{children:e.jsx(g,{className:"text-base",children:"Event-Typen"})}),e.jsx(h,{children:l?e.jsx(f,{className:"h-[250px] w-full"}):c.length===0?e.jsx("p",{className:"text-sm text-muted-foreground text-center py-12",children:"Keine Daten"}):e.jsx("div",{className:"space-y-3",children:c.map(a=>e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-sm font-medium text-foreground",children:a.name}),e.jsx("span",{className:"text-sm text-muted-foreground",children:a.value})]},a.name))})})]})]}),e.jsxs(u,{children:[e.jsx(p,{children:e.jsxs(g,{className:"text-base flex items-center gap-2",children:[e.jsx(ee,{className:"h-4 w-4"}),"Parameter-Abdeckung (Event Match Quality)"]})}),e.jsx(h,{children:l?e.jsx(f,{className:"h-32 w-full"}):s?e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:"Zeigt wie oft jeder Parameter in CAPI-Events enthalten ist. Höhere Abdeckung = besserer Event Match Quality Score in Meta."}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:Object.entries(s.paramCoverage).map(([a,n])=>e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-sm font-medium",children:re[a]||a}),e.jsxs("span",{className:`text-sm font-bold ${n>=80?"text-emerald-500":n>=50?"text-amber-500":"text-destructive"}`,children:[n,"%"]})]}),e.jsx(O,{value:n,className:"h-2"})]},a))})]}):e.jsx("p",{className:"text-sm text-muted-foreground",children:"Keine Daten"})})]})]})}function x({icon:r,label:i,value:s,suffix:l,loading:c,color:a}){return e.jsx(u,{children:e.jsxs(h,{className:"flex items-center gap-4 pt-6",children:[e.jsx("div",{className:"p-2 rounded-lg bg-primary/10",children:e.jsx(r,{className:"h-5 w-5 text-primary"})}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:i}),c?e.jsx(f,{className:"h-7 w-12 mt-1"}):e.jsxs("p",{className:`text-2xl font-bold ${a||"text-foreground"}`,children:[s??0,l]})]})]})})}export{Ce as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.