1import{r as l,R as e}from"./index-D9-iKIl3.js";import{C as V,Q}from"./QuestionMatcherLink-gQIvGEiw.js";/* empty css *//* empty css */const ne=()=>{var L,S,A,D,R,T,P,$,B,F,M,j,q,U;const[a,G]=l.useState(null),[f,y]=l.useState(!0),[n,_]=l.useState("program"),[c,x]=l.useState(""),[u,O]=l.useState("all"),[E,W]=l.useState([]),[m,b]=l.useState(null),[Y,J]=l.useState("director");l.useEffect(()=>{K(),Z()},[n,c,u]);const K=async()=>{try{const r=await(await fetch("/api/program-director/my-role")).json();J(r.role)}catch(t){console.error("Error fetching role:",t)}};l.useEffect(()=>{X()},[]);const X=async()=>{try{await fetch("/api/program-director/fetch-names"),w()}catch(t){console.error("Error fetching names:",t),w()}},w=async()=>{try{const t=await fetch("/api/program-director/learners?days=all");if(!t.ok){if(t.status===401||t.status===403){window.location.href="/";return}throw new Error(`HTTP error! status: ${t.status}`)}const r=await t.json();W(r.learners||[])}catch(t){console.error("Error fetching learners:",t)}},Z=async()=>{y(!0);try{let t=null;if(n==="learner"&&c){const i=E.find(d=>d.external_user_id===c);t=(i==null?void 0:i.lti_user_id)||c}const r=new URLSearchParams({days:u,view:n,...t&&{learnerId:t}}),o=await fetch(`/api/program-director/overview?${r}`);if(!o.ok){if(o.status===401||o.status===403){window.location.href="/";return}throw new Error(`HTTP error! status: ${o.status}`)}const h=await o.json();if(G(h),n==="learner"&&c){const i=E.find(d=>d.external_user_id===c);if(i&&i.lti_user_id){const N=await(await fetch(`/api/program-director/learner/${i.lti_user_id}?days=${u}`)).json();b(N)}else b({cases:[]})}}catch(t){console.error("Error loading dashboard:",t)}y(!1)},C=async t=>{const r=new URLSearchParams({format:"csv",report:t,days:u});window.open(`/api/program-director/export?${r}`,"_blank")},g=t=>{window.open(`/transcript/${t}`,"_blank")},v=()=>{if(!c||!E.length)return!1;const t=E.find(r=>r.external_user_id===c);return t&&t.has_accessed};if(f)return e.createElement("div",{className:"pd-loading"},"Loading program data...");const k=({showLinks:t=!0})=>{const[r,o]=l.useState([]),[h,i]=l.useState(!0);l.useEffect(()=>{d()},[]);const d=async()=>{try{const p=await(await fetch("/api/assignments/my-assignments")).json();o(p.assignments||[])}catch(s){console.error("Error fetching assignments:",s)}i(!1)},N=s=>{g(s)},I=async(s,p)=>{if(confirm("Are you sure you want to delete this assignment?"))try{(await fetch(`/api/assignments/delete/${s}/${p}`,{method:"DELETE"})).ok?o(r.filter(H=>!(H.type===s&&H.id===p))):alert("Failed to delete assignment")}catch(z){console.error("Error deleting assignment:",z),alert("Failed to delete assignment")}},ee=s=>{const p={not_started:{background:"#f0f0f0",color:"#666"},in_progress:{background:"#fff3cd",color:"#856404"},completed:{background:"#d4edda",color:"#155724"}};return e.createElement("span",{style:{padding:"4px 8px",borderRadius:"4px",fontSize:"0.85rem",fontWeight:"500",...p[s]}},s.replace("_"," ").toUpperCase())};return h?e.createElement("div",{className:"pd-loading"},"Loading assignments..."):e.createElement("div",{className:"faculty-view"},t&&e.createElement(e.Fragment,null,e.createElement(V,{userRole:"faculty"}),e.createElement(Q,{userRole:"faculty"})),e.createElement("div",{className:"pd-header"},e.createElement("h1",null,"Assignments Given"),e.createElement("p",null,"Track assignments you've given to learners")),e.createElement("div",{className:"assignments-list"},r.length>0?r.map(s=>e.createElement("div",{key:`${s.type}-${s.id}`,className:"assignment-card",style:{padding:"20px",marginBottom:"15px",background:"#fff",borderRadius:"8px",boxShadow:"0 2px 4px rgba(0,0,0,0.1)"}},e.createElement("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"start"}},e.createElement("div",null,e.createElement("h3",{style:{margin:"0 0 10px 0"}},s.title),e.createElement("p",{style:{margin:"5px 0",color:"#666"}},e.createElement("strong",null,"Assigned to:")," ",s.learner_name),s.reason&&e.createElement("p",{style:{margin:"5px 0",color:"#666"}}
1,e.createElement("strong",null,"Instructions:")," ",s.reason),e.createElement("p",{style:{margin:"5px 0",color:"#999",fontSize:"0.9rem"}},new Date(s.created_at).toLocaleDateString())),e.createElement("div",{style:{textAlign:"right"}},ee(s.status),s.session_id&&e.createElement("button",{onClick:()=>N(s.session_id),style:{padding:"6px 12px",background:"#007bff",color:"white",border:"none",borderRadius:"4px",cursor:"pointer",marginLeft:"8px",marginTop:"8px"}},"View Transcript"),e.createElement("button",{onClick:()=>I(s.type,s.id),style:{padding:"6px 12px",background:"#dc3545",color:"white",border:"none",borderRadius:"4px",cursor:"pointer",marginLeft:"8px",marginTop:"8px"}},"Delete Assignment"))))):e.createElement("div",{style:{textAlign:"center",padding:"40px",color:"#666"}},e.createElement("p",null,"You haven't assigned any cases or questions yet."),e.createElement("p",null,"Use the Case Matcher or Question Matcher to create assignments."))))};return f?e.createElement("div",{className:"pd-loading"},"Loading program data..."):e.createElement("div",{className:"pd-container"},e.createElement("div",{className:"pd-header"},e.createElement("h1",null,"Program Director Dashboard")),Y==="director"?e.createElement(e.Fragment,null,e.createElement("div",{className:"pd-controls"},e.createElement("div",{className:"view-selector"},e.createElement("label",null,"View:"),e.createElement("select",{value:n,onChange:t=>{_(t.target.value),x("")}},e.createElement("option",{value:"program"},"Entire Program"),e.createElement("option",{value:"learner"},"Individual Learner")),n==="learner"&&e.createElement(e.Fragment,null,e.createElement("label",null,"Learner:"),e.createElement("select",{value:c,onChange:t=>x(t.target.value)},e.createElement("option",{value:""},"Select Learner"),E.sort((t,r)=>t.display_name.localeCompare(r.display_name)).map(t=>e.createElement("option",{key:t.external_user_id,value:t.external_user_id},t.display_name,t.has_accessed?` (${t.completed_cases} cases)`:" (Not yet accessed)"))))),e.createElement("div",{className:"time-selector"},e.createElement("label",null,"Period:"),e.createElement("select",{value:u,onChange:t=>O(t.target.value)},e.createElement("option",{value:"7"},"Last 7 Days"),e.createElement("option",{value:"30"},"Last 30 Days"),e.createElement("option",{value:"90"},"Last 90 Days"),e.createElement("option",{value:"365"},"Last Year"),e.createElement("option",{value:"all"},"All Time"))),e.createElement("div",{className:"export-controls"},e.createElement("button",{onClick:()=>C("learner_progress"),className:"export-btn"},"ð Export Progress Report"),e.createElement("button",{onClick:()=>C("epa_coverage"),className:"export-btn"},"ð Export EPA Report"))),e.createElement("div",{style:{display:"flex",justifyContent:"center",margin:"20px 0"}},e.createElement("button",{onClick:()=>_(n==="my-assignments"?"program":"my-assignments"),style:{padding:"12px 30px",background:n==="my-assignments"?"#28a745":"#007bff",color:"white",border:"none",borderRadius:"6px",cursor:"pointer",fontSize:"16px",fontWeight:"500",boxShadow:"0 2px 4px rgba(0,0,0,0.1)",transition:"all 0.3s ease"},onMouseOver:t=>t.target.style.opacity="0.9",onMouseOut:t=>t.target.style.opacity="1"},n==="my-assignments"?"â Back to Dashboard":"View Assignments Given â")),n==="my-assignments"?e.createElement(k,{showLinks:!1}):e.createElement(e.Fragment,null,e.createElement(V,{userRole:"director"}),e.createElement(Q,{userRole:"director"}),n==="program"?e.createElement("div",{className:"pd-stats"},e.createElement("div",{className:"stat-card"},e.createElement("div",{className:"stat-value"},((L=a==null?void 0:a.stats)==null?void 0:L.total_learners)||0),e.createElement("div",{className:"stat-label"},"Total Enrolled")),e.createElement("div",{className:"stat-card"},e.createElement("div",{className:"stat-value"},((S=a==null?void 0:a.stats)==null?void 0:S.active_learners)||0),e.createElement("div",{className:"stat-label"},"Active Learners")),e.createElement("div",{className:"stat-card"},e.createElement("div",{className:"stat-value"},((A=a==null?void 0:a.stats)==null?void 0:A.total_sessions)||0),e.createElement("div",{className:"stat-label"},"Total Sessions")),e.createElement("div",{className:"stat-card"},e.createElement("div",{className:"stat-value"},((D=a==null?void 0:a.stats)==null?void 0:D.completion_rate)||0,"%"),e.createElement("div",{className:"stat-label"}
1,"Completion Rate"))):c&&v()?e.createElement("div",{className:"pd-stats"},e.createElement("div",{className:"stat-card"},e.createElement("div",{className:"stat-value"},((R=a==null?void 0:a.stats)==null?void 0:R.completed_sessions)||0),e.createElement("div",{className:"stat-label"},"Cases Completed")),e.createElement("div",{className:"stat-card"},e.createElement("div",{className:"stat-value"},((T=a==null?void 0:a.stats)==null?void 0:T.unique_cases_attempted)||0),e.createElement("div",{className:"stat-label"},"Unique Cases")),e.createElement("div",{className:"stat-card"},e.createElement("div",{className:"stat-value"},((P=a==null?void 0:a.stats)==null?void 0:P.completion_rate)||0,"%"),e.createElement("div",{className:"stat-label"},"Completion Rate")),e.createElement("div",{className:"stat-card"},e.createElement("div",{className:"stat-value"},($=a==null?void 0:a.stats)!=null&&$.avg_duration_minutes?`${Math.round(a.stats.avg_duration_minutes)}m`:"N/A"),e.createElement("div",{className:"stat-label"},"Avg Duration"))):null,n==="learner"&&c&&!v()&&e.createElement("div",{className:"pd-section"},e.createElement("div",{className:"no-data",style:{padding:"40px",textAlign:"center",background:"#f5f5f5",borderRadius:"8px"}},e.createElement("h3",null,"No Activity Yet"),e.createElement("p",null,"This learner has not accessed ConsultCraft yet."),e.createElement("p",null,"They will appear here once they complete their first case."))),(n==="program"||v())&&e.createElement(e.Fragment,null,n==="learner"&&m&&e.createElement(e.Fragment,null,e.createElement("div",{className:"pd-section"},e.createElement("div",{className:"section-header"},e.createElement("h2",null,"Case History")),e.createElement("div",{className:"cases-gri
1d"},((B=m.cases)==null?void 0:B.length)>0?m.cases.map(t=>e.createElement("div",{key:t.session_id,className:`case-card ${t.completion_status}`,onClick:()=>g(t.session_id)},e.createElement("div",{className:"case-title"},t.title),e.createElement("div",{className:"case-meta"},e.createElement("span",{className:`status ${t.completion_status}`},t.completion_status),e.createElement("span",null,Math.round(t.duration_minutes)," min")),e.createElement("div",{className:"case-date"},new Date(t.start_time).toLocaleDateString()))):e.createElement("p",{className:"no-data"},"No cases completed in this time period"))),e.createElement("div",{className:"pd-section"},e.createElement("div",{className:"section-header"},e.createElement("h2",null,"Question Practice History")),((F=m.grabBagSummary)==null?void 0:F.length)>0&&e.createElement("div",{className:"grab-bag-summary",style:{marginBottom:"20px"}},e.createElement("h3",{style:{fontSize:"1.1rem",marginBottom:"10px"}},"Specialties Practiced"),e.createElement("div",{style:{display:"flex",gap:"10px",flexWrap:"wrap"}},m.grabBagSummary.map(t=>e.createElement("div",{key:t.specialty,style:{padding:"8px 15px",background:"#f5f5f5",borderRadius:"5px",border:"1px solid #ddd"}},e.createElement("strong",null,t.specialty),e.createElement("span",{style:{marginLeft:"10px",color:"#666"}},t.total_questions," questions ⢠",t.total_sessions," sessions"))))),e.createElement("div",{className:"cases-gri
1d"},((M=m.grabBagSessions)==null?void 0:M.length)>0?m.grabBagSessions.map(t=>{var r;return e.createElement("div",{key:t.session_id,className:"case-card completed",onClick:()=>g(t.session_id)},e.createElement("div",{className:"case-title"},"Grab Bag Practice"),e.createElement("div",{style:{fontSize:"0.9rem",color:"#666",marginTop:"5px"}},t.questions_completed," questions",((r=t.specialties)==null?void 0:r.length)>0&&e.createElement("span",null," ⢠",t.specialties.filter(o=>o).join(", "))),e.createElement("div",{className:"case-meta"},e.createElement("span",{className:"status completed"},"completed"),e.createElement("span",null,Math.round(t.duration_minutes)," min")),e.createElement("div",{className:"case-date"},new Date(t.start_time).toLocaleDateString()))}):e.createElement("p",{className:"no-data"},"No question practice sessions in this time period")))),n==="program"&&e.createElement(e.Fragment,null,e.createElement("div",{className:"pd-section"},e.createElement("div",{className:"section-header"},e.createElement("h2",null,"EPA Coverage")),((j=a==null?void 0:a.epaCoverage)==null?void 0:j.length)>0?e.createElement("div",{className:"epa-grid"},a.epaCoverage.map(t=>e.createElement("div",{key:t.epa_code,className:"epa-card"},e.createElement("div",{className:"epa-header"},e.createElement("span",{className:"epa-code"},t.epa_code),e.createElement("span",{className:"epa-percentage"},t.coverage_percentage,"%")),e.createElement("div",{className:"epa-description"},t.epa_description),e.createElement("div",{className:"epa-stats"},e.createElement("span",null,"ð¥ ",t.learners_completed," learners"),e.createElement("span",null,"ð ",t.total_encounters," encounters"))))):e.createElement("p",{className:"no-data"},"No EPA data available for this selection")),e.createElement("div",{className:"pd-section"},e.createElement("div",{className:"section-header"},e.createElement("h2",null,"ABA Content Outline Coverage")),((q=a==null?void 0:a.abaCoverage)==null?void 0:q.length)>0?e.createElement("div",{className:"epa-grid"},a.abaCoverage.map(t=>e.createElement("div",{key:t.aba_code,className:"epa-card"},e.createElement("div",{className:"epa-header"},e.createElement("span",{className:"epa-code"},t.aba_code),e.createElement("span",{className:"epa-percentage"},t.coverage_percentage,"%")),e.createElement("div",{className:"epa-description"},t.aba_description),e.createElement("div",{className:"epa-stats"},e.createElement("span",null,"ð¥ ",t.learners_completed," learners"),e.createElement("span",null,"ð ",t.total_encounters," encounters"))))):e.createElement("p",{className:"no-data"},"No ABA content data available for this selection")),e.createElement("div",{className:"pd-section"},e.createElement("div",{className:"section-header"},e.createElement("h2",null,"Diagnosis Exposure")),((U=a==null?void 0:a.diagnosisCoverage)==null?void 0:U.length)>0?e.createElement("div",{className:"epa-grid"},a.diagnosisCoverage.map(t=>e.createElement("div",{key:t.diagnosis_code,className:"epa-card"},e.createElement("div",{className:"epa-header"},e.createElement("span",{className:"epa-code"},t.diagnosis_code),e.createElement("span",{className:"epa-percentage"},t.coverage_percentage,"%")),e.createElement("div",{className:"epa-description"},t.diagnosis_description),e.createElement("div",{className:"epa-stats"},e.createElement("span",null,"ð¥ ",t.learners_exposed," learners"),e.createElement("span",null,"ð ",t.total_encounters," encounters"))))):e.createElement("p",{className:"no-data"},"No diagnosis data available for this selection")))))):e.createElement(k,null))};export{ne 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.