PageSourceSearch

https://foreningenspelfriheten.se/assets/admin.statistik-CdoZPTcn.js

js foreningenspelfriheten.se collected 2026-10-07 15:29:44 UTC 3,404 bytes, 1 lines download raw bytes

1import{r as p,j as e,s as u}from"./index-BPBIbIIB.js";import{u as b}from"./useQuery-B-XUpTv0.js";const n=r=>r.toISOString().slice(0,10),j=[{key:"low",label:"Låg"},{key:"moderate",label:"Måttlig"},{key:"high",label:"Hög"}];function y(){const r=new Date,[l,o]=p.useState(n(new Date(r.getTime()-29*864e5))),[c,i]=p.useState(n(r)),{data:m=[],isLoading:g}=b({queryKey:["admin","selftest-stats",l,c],queryFn:async()=>{const s=new Date(c);s.setDate(s.getDate()+1);const{data:a,error:t}=await u.from("self_test_completions").select("test, level, created_at").gte("created_at",new Date(l).toISOString()).lt("created_at",s.toISOString()).order("created_at").limit(1e4);if(t)throw t;return a}}),x=(s,a)=>m.filter(t=>t.test===s&&(!a||t.level===a)).length,d=new Map;for(const s of m){const a=s.created_at.slice(0,10),t=d.get(a)??{s:0,m:0};s.test==="spelberoende"?t.s++:t.m++,d.set(a,t)}const h=s=>{o(n(new Date(Date.now()-(s-1)*864e5))),i(n(new Date))};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-end gap-3",children:[e.jsxs("label",{className:"text-sm",children:["Från",e.jsx("input",{type:"date",value:l,onChange:s=>o(s.target.value),className:"block mt-1 rounded-md border bg-background px-3 py-2"})]}),e.jsxs("label",{className:"text-sm",children:["Till",e.jsx("input",{type:"date",value:c,onChange:s=>i(s.target.value),className:"block mt-1 rounded-md border bg-background px-3 py-2"})]}),[7,30,90,365].map(s=>e.jsxs("button",{onClick:()=>h(s),className:"rounded-full border px-3 py-2 text-sm hover:bg-secondary",children:[s," dagar"]},s))]}),g?e.jsx("p",{children:"Laddar..."}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"grid md:grid-cols-2 gap-4",children:[["spelberoende","Spelberoendetestet"],["medberoende","Medberoendetestet"]].map(([s,a])=>e.jsxs("div",{className:"rounded-2xl border bg-card p-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:a}),e.jsx("p",{className:"font-display text-4xl font-bold mt-1",children:x(s)}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"genomförda test"}),e.jsx("div",{className:"mt-4 grid grid-cols-3 gap-2 text-sm",children:j.map(t=>e.jsxs("div",{className:"rounded-lg bg-secondary p-2 text-center",children:[e.jsx("div",{className:"font-semibold",children:x(s,t.key)}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:[t.label," risk"]})]},t.key))})]},s))}),e.jsx("div",{className:"rounded-2xl border bg-card overflow-hidden",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{className:"bg-secondary text-left",children:e.jsxs("tr",{children:[e.jsx("th",{className:"p-3",children:"Datum"}),e.jsx("th",{className:"p-3",children:"Spelberoende"}),e.jsx("th",{className:"p-3",children:"Medberoende"})]})}),e.jsxs("tbody",{className:"divide-y",children:[[...d.entries()].reverse().map(([s,a])=>e.jsxs("tr",{children:[e.jsx("td",{className:"p-3",children:s}),e.jsx("td",{className:"p-3",children:a.s}),e.jsx("td",{className:"p-3",children:a.m})]},s)),d.size===0&&e.jsx("tr",{children:e.jsx("td",{colSpan:3,className:"p-6 text-muted-foreground",children:"Inga genomförda test under perioden."})})]})]})}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Endast antal och resultatnivå sparas – inga svar eller personuppgifter. Räkningen startade 29 september 2026."})]})]})}export{y as component};

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.