PageSourceSearch

https://soulpreneuros.lovable.app/assets/TeacherCourseOverview-CeExPrGN.js

js soulpreneuros.lovable.app collected 2026-10-03 03:48:44 UTC 7,533 bytes, 1 lines download raw bytes

1import{r as N,l as f,v as z,j as e,t as b,g as v,J as i,K as d,a2 as F,ax as R,cr as O,cs as K,_ as y,ab as D,C as Q,p as o,$ as w,z as U,cu as G,bx as H,s as C}from"./index-DGmFoSsk.js";const J=["orientation","white","yellow","orange","purple","green","blue","brown","black","red"],Y=()=>{const[r,k]=N.useState("orientation"),[A,m]=N.useState(new Set),{data:l=[],isLoading:B}=f({queryKey:["teacher-milestones",r],queryFn:async()=>{const{data:s,error:t}=await C.from("milestones").select("*").eq("belt_color",r).order("display_order",{ascending:!0});if(t)throw t;return s}}),{data:c=[],isLoading:M}=f({queryKey:["teacher-assets",r],queryFn:async()=>{const{data:s,error:t}=await C.from("assets").select("*").eq("belt_color",r).order("display_order",{ascending:!0});if(t)throw t;return s}}),E=s=>{m(t=>{const a=new Set(t);return a.has(s)?a.delete(s):a.add(s),a})},L=()=>{m(new Set(l.map(s=>s.id)))},T=()=>{m(new Set)},j=c.reduce((s,t)=>{const a=t.milestone_id||"unlinked";return s[a]||(s[a]=[]),s[a].push(t),s},{}),n=j.unlinked||[],S=c.length-n.length,x=z[r],_=(x==null?void 0:x.assets)||[],u=s=>{const t=_.find(a=>a.name.toLowerCase()===s.toLowerCase());return(t==null?void 0:t.emoji)||"📦"},g=B||M;return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex flex-wrap gap-2",children:J.map(s=>e.jsxs("button",{onClick:()=>k(s),className:b("flex items-center gap-2 px-3 py-2 rounded-lg border transition-all",r===s?"border-primary bg-primary/10 ring-2 ring-primary/20":"border-border hover:border-primary/50 hover:bg-muted/50"),children:[e.jsx("img",{src:v(s),alt:s,className:"w-6 h-6",loading:"lazy"}),e.jsx("span",{className:"capitalize text-sm font-medium",children:s})]},s))}),e.jsx(i,{className:"border-primary/20 bg-gradient-to-r from-primary/5 to-transparent",children:e.jsx(d,{className:"py-4",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("img",{src:v(r),alt:r,className:"w-16 h-16",loading:"lazy"}),e.jsxs("div",{children:[e.jsxs("h2",{className:"text-2xl font-medium capitalize",children:[r," Belt"]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:F(r)})]})]}),e.jsxs("div",{className:"flex items-center gap-6",children:[e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-2xl font-bold text-primary",children:l.length}),e.jsx("div",{className:"text-xs text-muted-foreground",children:"Milestones"})]}),e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-2xl font-bold text-primary",children:c.length}),e.jsx("div",{className:"text-xs text-muted-foreground",children:"Assets"})]}),e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-2xl font-bold text-green-600",children:S}),e.jsx("div",{className:"text-xs text-muted-foreground",children:"Linked"})]}),n.length>0&&e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-2xl font-bold text-amber-600",children:n.length}),e.jsx("div",{className:"text-xs text-muted-foreground",children:"Unlinked"})]})]})]})})}),l.length>0&&e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{onClick:L,className:"text-xs text-primary hover:underline",children:"Expand All"}),e.jsx("span",{className:"text-muted-foreground",children:"|"}),e.jsx("button",{onClick:T,className:"text-xs text-primary hover:underline",children:"Collapse All"})]}),g&&e.jsx("div",{className:"text-center py-8 text-muted-foreground",children:"Loading course structure..."}),!g&&e.jsxs("div",{className:"space-y-3",children:[l.length===0?e.jsx(i,{className:"border-dashed",children:e.jsxs(d,{className:"py-8 text-center text-muted-foreground",children:[e.jsx(R,{className:"w-10 h-10 mx-auto mb-3 opacity-50"}),e.jsxs("p",{children:["No milestones defined for ",r," belt yet."]}),e.jsx("p",{className:"text-sm mt-1",children:"Add milestones in Admin → Milestone Manager"})]})}):l.map((s,t)=>{const a=j[s.id]||[],h=A.has(s.id);return e.jsx(O,{open:h,onOpenChange:()=>E(s.id),children:e.jsxs(i,{className:b("transition-all",h&&"ring-1 ring-primary/30"),children:[e.jsx(K,{asChild:!0,children:e.jsxs(y,{className:"py-3 cursor-pointer hover:bg-muted/30 transition-colors",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[h?e.jsx(D,{className:"w-5 h-5 text-muted-foreground"}):e.jsx(Q,{className:"w-5 h-5 text-muted-foreground"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(o,{variant:"outline",className:"font-mono",children:["M",t+1]}),e.jsx(w,{className:"text-base",children:s.title})]})]}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs(o,{variant:a.length>0?"default":"secondary",className:"gap-1",children:[e.jsx(U,{className:"w-3 h-3"}),a.length," assets"]})})]}),s.description&&e.jsx("p",{className:"text-sm text-muted-foreground ml-8 mt-1",children:s.description})]})}),e.jsx(G,{children:e.jsx(d,{className:"pt-0 pb-4",children:a.length===0?e.jsx("div",{className:"ml-8 py-3 text-sm text-muted-foreground italic",children:"No assets linked to this milestone"}):e.jsx("div",{className:"ml-8 space-y-2",children:a.map((p,q)=>e.jsxs("div",{className:"flex items-center gap-3 p-2 rounded-md bg-muted/30 border border-border/50",children:[e.jsx("span",{className:"text-base",children:u(p.title)}),e.jsx("div",{className:"flex-1",children:e.jsx("span",{className:"font-medium text-sm",children:p.title})}),e.jsxs(o,{variant:"secondary",className:"text-xs font-mono",children:["A",q+1]})]}
1,p.id))})})})]})},s.id)}),n.length>0&&e.jsxs(i,{className:"border-amber-500/30 bg-amber-500/5",children:[e.jsxs(y,{className:"py-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(H,{className:"w-5 h-5 text-amber-600"}),e.jsx(w,{className:"text-base text-amber-700",children:"Unlinked Assets"})]}),e.jsxs(o,{variant:"outline",className:"border-amber-500/50",children:[n.length," assets"]})]}),e.jsx("p",{className:"text-sm text-amber-600/80",children:"These assets haven't been linked to a milestone yet"})]}),e.jsx(d,{className:"pt-0 pb-4",children:e.jsx("div",{className:"space-y-2",children:n.map(s=>e.jsxs("div",{className:"flex items-center gap-3 p-2 rounded-md bg-amber-100/50 border border-amber-200",children:[e.jsx("span",{className:"text-base",children:u(s.title)}),e.jsx("span",{className:"font-medium text-sm flex-1",children:s.title})]},s.id))})})]})]}),e.jsx(i,{className:"bg-muted/30",children:e.jsxs(d,{className:"py-4",children:[e.jsx("h3",{className:"font-semibold mb-2 text-sm",children:"📋 Quick Reference for Marketing"}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 text-sm",children:[e.jsxs("div",{children:[e.jsx("span",{className:"text-muted-foreground",children:"Belt:"})," ",e.jsx("span",{className:"font-medium capitalize",children:r})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-muted-foreground",children:"Milestones:"})," ",e.jsx("span",{className:"font-medium",children:l.length})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-muted-foreground",children:"Total Assets:"})," ",e.jsx("span",{className:"font-medium",children:c.length})]}),e.jsxs("div",{children:[e.jsx("span",{className:"text-muted-foreground",children:"Fully Linked:"})," ",e.jsx("span",{className:"font-medium",children:n.length===0?"✅ Yes":"⚠️ No"})]})]})]})})]})};export{Y as TeacherCourseOverview};

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.