1import{c5 as Z,c7 as q,bJ as l,bG as o,bD as K,bz as a,bB as h,aI as T,aD as Q}from"./index-4bCrtBdz.js";import{t as B,A as V}from"./AttendanceRosterModal-C3Isahui.js";import{P as R}from"./PortalPanelHeader-De1zSuzW.js";import{u as W}from"./useSessionAuth-BZfK-4jN.js";import{p as $}from"./layout-DaEe1fwH.js";import{a as j}from"./classAdminPaths-Ct-aONGr.js";import{a as X}from"./classInstances-BN18q3_m.js";import{s as ee,m as te,f as L}from"./classSlots-BWOAWv9-.js";import"./density-CDDqF8v-.js";function ae(i,_){const[k,r,c]=i.split("-").map(Number);return new Date(Date.UTC(k,r-1,c+_)).toISOString().slice(0,10)}function me(){const i=Z(),[_,k]=q(),r=_.get("instance")??"",c=_.get("slot")??"",{loading:x,session:t,isAdmin:I,adminCheckComplete:v}=W(),[E,Y]=l.useState([]),[w,z]=l.useState([]),[d,f]=l.useState(null),[g,m]=l.useState(null),[O,b]=l.useState(null),[C,P]=l.useState(!1),[U,A]=l.useState(null),y=l.useMemo(()=>ee(E),[E]),G=l.useMemo(()=>new Map(y.map(e=>[e.id,e])),[y]),D=l.useMemo(()=>{const e=B();return w.filter(s=>s.sessionDate<e&&s.attendanceCount===0).sort((s,n)=>n.sessionDate.localeCompare(s.sessionDate))},[w]),M=l.useCallback(async()=>{if(t!=null&&t.access_token)try{const e=await fetch("/api/admin/class-slots",{headers:{Authorization:`Bearer ${t.access_token}`}});if(!e.ok){const n=await e.json().catch(()=>null);throw new Error((n==null?void 0:n.error)??o("auto.could_not_load_class_slots_e0820822"))}const s=await e.json();Y(te(s.slots))}catch(e){m(e instanceof Error?e.message:o("auto.could_not_load_class_slots_e0820822"))}},[t==null?void 0:t.access_token]),S=l.useCallback(async()=>{if(!(t!=null&&t.access_token))return;P(!0),m(null);const e=B(),s=ae(e,-7);try{const n=await fetch(`/api/admin/class-attendance?fromYmd=${encodeURIComponent(s)}&toYmd=${encodeURIComponent(e)}`,{headers:{Authorization:`Bearer ${t.access_token}`}});if(!n.ok){const N=await n.json().catch(()=>null);throw new Error((N==null?void 0:N.error)??o("auto.could_not_load_class_sessions_94688c2c"))}const u=await n.json();z(u.instances)}catch(n){m(n instanceof Error?n.message:o("auto.could_not_load_class_sessions_94688c2c"))}finally{P(!1)}},[t==null?void 0:t.access_token]),p=l.useCallback(async e=>{if(!(t!=null&&t.access_token)||!e)return f(null),null;m(null);try{const s=await fetch(`/api/admin/class-attendance?instanceId=${encodeURIComponent(e)}`,{headers:{Authorization:`Bearer ${t.access_token}`}});if(!s.ok){const u=await s.json().catch(()=>null);throw new Error((u==null?void 0:u.error)??o("auto.could_not_load_session_detail_79b56922"))}const n=await s.json();return f(n),n}catch(s){return m(s instanceof Error?s.message:o("auto.could_not_load_session_detail_79b56922")),f(null),null}},[t==null?void 0:t.access_token]);l.useEffect(()=>{if(!(x||!v)){if(!t||!I){i(K({intent:"admin",next:"/admin/attendance"}),{replace:!0});return}M(),S()}},[v,I,S,M,x,i,t]),l.useEffect(()=>{c&&i(j(c,{tab:"attendance",instance:r||void 0}),{replace:!0})},[i,r,c]),l.useEffect(()=>{if(c||!r||!(t!=null&&t.access_token))return;let e=!1;return(async()=>{const s=await p(r);e||!(s!=null&&s.instance.classSlotId)||i(j(s.instance.classSlotId,{tab:"attendance",instance:s.instance.id}),{replace:!0})})(),()=>{e=!0}},[p,i,r,c,t==null?void 0:t.access_token]),l.useEffect(()=>{if(!r||c){r||(f(null),b(null));return}p(r)},[p,r,c]);function J(e){b(null),i(j(e.classSlotId,{tab:"attendance",instance:e.id}))}function F(){b(null),k({})}async function H(e,s){if(!(!(t!=null&&t.access_token)||!r)){A(e),b(null),m(null);try{const n=await fetch("/api/admin/class-attendance",{method:s?"POST":"DELETE",headers:{Authorization:`Bearer ${t.access_token}`,"Content-Type":"application/json"},body:JSON.stringify({instanceId:r,studentEmail:e})});if(!n.ok){const u=await n.json().catch(()=>null);throw new Error((u==null?void 0:u.error)??o("auto.could_not_update_attendance_3aed41d3"))}b(s?o("auto.marked_present_value0_a4de0798",{value0:e}):o("auto.marked_not_present_value0_b98a905c",{value0:e})),await Promise.all([S(),p(r)])}catch(n){m(n instanceof Error?n.message:o("auto.could_not_update_attendance_3aed41d3"))}finally{A(null)}}}return c||r&&!d&&!g?a.jsx("main",{id:"main-content",tabIndex:-1,
1className:h.portalMain,"aria-labelledby":"admin-attendance-heading",children:a.jsxs("div",{className:$("dashboard"),children:[a.jsx(R,{headingId:"admin-attendance-heading",title:T.attendance}),a.jsx("p",{className:h.statusText,children:o("auto.loading_sessions_31640fe9")})]})}):a.jsxs("main",{id:"main-content",tabIndex:-1,className:h.portalMain,"aria-labelledby":"admin-attendance-heading",children:[a.jsxs("div",{className:$("dashboard"),children:[a.jsx(R,{headingId:"admin-attendance-heading",title:T.attendance,intro:o("auto.record_check_ins_for_past_sessions_or_op_dda5b495")}),C&&w.length===0?a.jsx("p",{className:`mb-4 ${h.statusText}`,children:o("auto.loading_sessions_31640fe9")}):null,g&&!r?a.jsx("p",{className:"mb-4 font-body text-[length:var(--text-body-sm)] text-sienna",children:g}):null,a.jsxs("section",{className:"border border-border-gold bg-bg","aria-labelledby":"missing-attendance-heading",children:[a.jsx("header",{className:"flex min-h-14 flex-wrap items-center justify-between gap-3 border-b border-border-gold px-4 py-3 sm:px-5",children:a.jsx("h2",{id:"missing-attendance-heading",className:h.sectionLabelMuted,children:o("auto.sessions_that_need_attendance_b518e537")})}),D.length===0&&!C?a.jsx("p",{className:"px-4 py-5 font-body text-[length:var(--text-body-sm)] text-text-muted sm:px-5",children:o("auto.no_sessions_missing_attendance_data_30d836ce")}):a.jsx("ul",{className:"m-0 list-none p-0",children:D.map(e=>{const s=G.get(e.classSlotId);return a.jsx("li",{className:"border-b border-border-gold last:border-b-0",children:a.jsxs("button",{type:"button",onClick:()=>J(e),className:"flex min-h-16 w-full items-center justify-between gap-4 px-4 py-3 text-start transition-colors hover:bg-bg-alt sm:px-5",children:[a.jsxs("span",{children:[a.jsx("span",{className:"block font-body text-[length:var(--text-body)] font-medium text-text",children:X(e.sessionDate)}),a.jsx("span",{className:"mt-0.5 block font-body text-[length:var(--text-body-sm)] text-text-muted",children:s?L(s):e.classSlotId})]}),a.jsx("span",{className:"shrink-0 font-ui text-[11px] font-semibold uppercase tracking-[0.1em] text-sienna",children:o("auto.mark_31e9697d")})]})},e.id)})})]}),a.jsxs("section",{className:"mt-6 border border-border-gold bg-bg","aria-labelledby":"browse-by-class-heading",children:[a.jsx("header",{className:"flex min-h-14 items-center border-b border-border-gold px-4 py-3 sm:px-5",children:a.jsx("h2",{id:"browse-by-class-heading",className:h.sectionLabelMuted,children:o("auto.browse_by_class_60db91e3")})}),y.length===0&&!x?a.jsx("p",{className:"px-4 py-5 font-body text-[length:var(--text-body-sm)] text-text-muted sm:px-5",children:o("auto.no_classes_yet_4367c3c0")}):a.jsx("ul",{className:"m-0 list-none p-0",children:y.map(e=>a.jsx("li",{className:"border-b border-border-gold last:border-b-0",children:a.jsxs(Q,{to:j(e.id,{tab:"attendance"}),className:"flex min-h-14 w-full items-center justify-between gap-4 px-4 py-3 text-start transition-colors hover:bg-bg-alt sm:px-5",children:[a.jsx("span",{className:"font-body text-[length:var(--text-body)] font-medium text-text",children:L(e)}),a.jsx("span",{className:"shrink-0 font-ui text-[11px] font-semibold uppercase tracking-[0.1em] text-sienna",children:o("auto.open_class_16c040f9")})]})},e.id))})]})]}),a.jsx(V,{isOpen:!!(r&&d&&!c),instance:(d==null?void 0:d.instance)??null,students:(d==null?void 0:d.students)??[],attendance:(d==null?void 0:d.attendance)??[],savingEmail:U,error:r?g:null,statusMessage:O,onClose:F,onTogglePresent:(e,s)=>void H(e,s)})]})}export{me 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.