1import{u as k,j as s}from"./vendor-query-DJN3PFZQ.js";import{r as m}from"./vendor-react-Cbz8wLUo.js";import{C as v,a as f,b,aj as N,B as C,d as T,n as w,o as _,p,q as l,r as S,t as o,Y as y,s as D}from"./index-Bc7XsZxF.js";import{R as L,d as q,C as R,X as E,Y as z,T as A,L as B,e as F}from"./vendor-charts-v7auMdJ8.js";import"./vendor-supabase--MomjbBX.js";import"./vendor-radix-BZn62lW2.js";import"./vendor-classnames-CYC2HZ_g.js";import"./vendor-date-BT9_t8_S.js";const H=[{label:"30d",days:30},{label:"90d",days:90},{label:"365d",days:365}],j=["hsl(var(--primary))","hsl(var(--chart-2, 200 80% 55%))","hsl(var(--chart-3, 30 90% 55%))","hsl(var(--chart-4, 280 70% 60%))","hsl(var(--chart-5, 160 60% 45%))"],I=()=>{const[c,g]=m.useState(30),{data:a,isLoading:x,error:n}=k({queryKey:["admin-track-popularity",c],queryFn:async()=>{const{data:e,error:r}=await D.rpc("admin_track_popularity",{p_days:c});if(r)throw r;return e},staleTime:6e4}),d=m.useMemo(()=>((a==null?void 0:a.tracks)??[]).slice(0,5).map(e=>e.track_code),[a]),u=m.useMemo(()=>{var r;if(!((r=a==null?void 0:a.daily)!=null&&r.length))return[];const e=new Map;for(const t of a.daily){if(!d.includes(t.track_code))continue;const i=t.day.slice(0,10),h=e.get(i)??{day:i};h[t.track_code]=(h[t.track_code]??0)+t.views,e.set(i,h)}return Array.from(e.values()).sort((t,i)=>String(t.day).localeCompare(String(i.day)))},[a,d]);return s.jsxs(v,{children:[s.jsxs(f,{className:"flex flex-row items-start justify-between gap-4 space-y-0",children:[s.jsxs("div",{children:[s.jsx(b,{children:"Track Popularity"}),s.jsx(N,{children:"Track views across all users. Events start collecting now â no historical backfill."})]}),s.jsx("div",{className:"flex gap-1",children:H.map(e=>s.jsx(C,{size:"sm",variant:c===e.days?"default":"outline",onClick:()=>g(e.days),children:e.label},e.days))})]}),s.jsxs(T,{className:"space-y-6",children:[x&&s.jsx("div",{className:"text-sm text-muted-foreground",children:"Loadingâ¦"}),n&&s.jsxs("div",{className:"text-sm text-destructive",children:["Failed to load: ",n.message]}),!x&&!n&&(!(a!=null&&a.tracks)||a.tracks.length===0)&&s.jsx("div",{className:"text-sm text-muted-foreground py-8 text-center border rounded-md",children:"No track views recorded yet. Data starts populating as users browse tracks."}),(a==null?void 0:a.tracks)&&a.tracks.length>0&&s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"overflow-x-auto",children:s.jsxs(w,{children:[s.jsx(_,{children:s.jsxs(p,{children:[s.jsx(l,{children:"Track"}),s.jsx(l,{className:"text-right",children:"Views"}),s.jsx(l,{className:"text-right",children:"Unique sessions"}),s.jsx(l,{className:"text-right",children:"Unique users"})]})}),s.jsx(S,{children:a.tracks.map(e=>s.jsxs(p,{children:[s.jsxs(o,{children:[s.jsx("div",{className:"font-medium",children:y(e.track_code)}),s.jsx("div",{className:"text-xs text-muted-foreground",children:e.track_code})]}),s.jsx(o,{className:"text-right tabular-nums",children:e.views}),s.jsx(o,{className:"text-right tabular-nums",children:e.unique_sessions}),s.jsx(o,{className:"text-right tabular-nums",children:e.unique_users})]},e.track_code))})]})}),u.length>0&&s.jsx("div",{className:"h-72",children:s.jsx(L,{width:"100%",height:"100%",children:s.jsxs(q,{data:u,margin:{top:8,right:16,bottom:0,left:0},children:[s.jsx(R,{strokeDasharray:"3 3",stroke:"hsl(var(--border))"}),s.jsx(E,{dataKey:"day",tick:{fontSize:11},stroke:"hsl(var(--muted-foreground))"}),s.jsx(z,{allowDecimals:!1,tick:{fontSize:11},stroke:"hsl(var(--muted-foreground))"}),s.jsx(A,{contentStyle:{background:"hsl(var(--popover))",border:"1px solid hsl(var(--border))",color:"hsl(var(--popover-foreground))"}}),s.jsx(B,{wrapperStyle:{fontSize:12}}),d.map((e,r)=>s.jsx(F,{type:"monotone",dataKey:e,name:y(e),stroke:j[r%j.length],strokeWidth:2,dot:!1},e))]})})})]})]})]})};export{I as TrackPopularityPanel,I 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.