1import{a as g,j as Z,b as w,B as $,d as ee}from"./index-DcYtce52.js";import{M as oe,r as m,j as ie,o as r,e as u,f as e,v as D,d as c,w as C,q as E,x as _,F as z,s as U,t as d,g as te}from"./vendor-C6V2Yy0r.js";const A=m([]),R=m([]),L=m(!1),k=m(!1);function re(){const f=oe("$swal"),h=()=>localStorage.getItem("schoolId"),V=async()=>{L.value=!0;try{const s=await g.get(`schools/${h()}/offered-subjects/`);A.value=Z(s)}catch{A.value=[]}finally{L.value=!1}};return{offeredSubjects:A,alevelCombinations:R,isLoading:L,isSubmitting:k,getOfferedSubjects:V,addOfferedSubjects:async(s,i=null)=>{var b,a,n;k.value=!0;try{return await g.post(`schools/${h()}/offered-subjects/`,{curriculum_subject_ids:s,level_id:i}),f.fire({icon:"success",title:"Success",text:"Subjects added to offering."}),await V(),!0}catch(o){return f.fire({icon:"error",title:"Error",text:((n=(a=(b=o.response)==null?void 0:b.data)==null?void 0:a.details)==null?void 0:n.detail)||"Failed to add offered subjects."}),!1}finally{k.value=!1}},removeOfferedSubject:async s=>{try{return await g.delete(`schools/${h()}/offered-subjects/${s}/`),A.value=A.value.filter(i=>i.id!==s),!0}catch{return f.fire({icon:"error",title:"Error",text:"Failed to remove offered subject."}),!1}},getALevelCombinations:async()=>{L.value=!0;try{const s=await g.get(`schools/${h()}/alevel-combinations/`);R.value=Z(s)}catch{R.value=[]}finally{L.value=!1}},getEnrollmentSubjects:async s=>{try{return(await g.get(`class-enrollments/${s}/subjects/`)).data}catch{return null}},getAvailableElectives:async s=>{try{return(await g.get(`class-enrollments/${s}/subjects/available/`)).data}catch{return null}},selectElectives:async(s,i,b=!1)=>{var a,n,o;k.value=!0;try{const v=await g.post(`class-enrollments/${s}/subjects/select/`,{subject_ids:i,allow_invalid:b});return f.fire({icon:"success",title:"Success",text:"Elective selection applied."}),v.data}catch(v){return f.fire({icon:"error",title:"Error",text:((o=(n=(a=v.response)==null?void 0:a.data)==null?void 0:n.details)==null?void 0:o.detail)||"Failed to apply elective selection."}),null}finally{k.value=!1}},selectALevelCombination:async(s,i,b=[])=>{var a,n,o;k.value=!0;try{const v=await g.post(`class-enrollments/${s}/subjects/alevel/`,{principal_subject_ids:i,...b.length?{subsidiary_subject_ids:b}:{}});return f.fire({icon:"success",title:"Success",text:"A-Level combination applied."}),v.data}catch(v){return f.fire({icon:"error",title:"Error",text:((o=(n=(a=v.response)==null?void 0:a.data)==null?void 0:n.details)==null?void 0:o.detail)||"Failed to apply A-Level combination."}),null}finally{k.value=!1}},dropEnrollmentSubject:async(s,i,b="")=>{try{return await g.post(`class-enrollments/${s}/subjects/${i}/drop/`,{reason:b}),!0}catch{return f.fire({icon:"error",title:"Error",text:"Failed to drop subject."}),!1}},changeStream:async(s,i,b="")=>{var a,n,o;try{const v=await g.post(`class-enrollments/${s}/stream/`,{stream_id:i,reason:b});return f.fire({icon:"success",title:"Success",text:"Stream changed."}),v.data}catch(v){return f.fire({icon:"error",title:"Error",text:((o=(n=(a=v.response)==null?void 0:a.data)==null?void 0:n.details)==null?void 0:o.detail)||"Failed to change stream."}),null}}}}const ue={class:"d-flex gap-2 mb-3"},ce={key:0},de={class:"row g-2 align-items-end mb-3"},me={class:"col-md-5"},be={class:"col-md-3"},ve={class:"col-md-3"},fe={class:"lrn-table"},pe={class:"lrn-table__actions-col"},ye=["onClick"],ge={key:1},_e={class:"lrn-table"},je={key:2},he={class:"row g-2 align-items-end mb-3"},Se={class:"col-md-4"},we={class:"col-md-3"},Ce={key:0},Ee={class:"list-group mb-3"},ke={class:"lrn-badge lrn-badge--muted ms-1"},xe=["onClick"],Ve={key:1,class:"mb-3"},$e={class:"small text-muted"},Ae={class:"text-capitalize"},Le={class:"row g-2 align-items-end mb-3"},Ne={class:"col-md-6"},Ie={class:"col-md-3"},Fe={class:"row g-2 align-items-end mb-3"},Oe={class:"col-md-4"},De={class:"col-md-4"},ze={class:"col-md-3"},Ue={class:"row g-2 align-items-end"},Be={class:"col-md-4"},Me={class:"col-md-3"},qe={__name:"ElectivesPanel",setup(f){const{offeredSubjects:h,alevelCombinations:V,isLoading:B,isSubmitting:N,getOfferedSubjects:G,addOfferedSubjects:H,removeOfferedSubject:J,getALevelCombinations:K,getEnrollmentSubjects:Q,getAvailableElectives:W,selectElectives:X,selectALevelCombination:s,dropEnrollmentSubject:i,changeStream:b}=re(),a=m("offered"),n=m(""),o=m(""),v=async()=>{const p=n.value.split(",").map(t=>Number(t.trim())).filter(t=>Number.isFinite(t));p.length&&await H(p,o.value?Number(o.value):null)&&(n.value="",o.value="")},j=m(""),M=m(null),x=m(null),P=m(""),T=m(""),q=m(""),I=m(""),F=async()=>{j.value&&(M.value=await Q(j.value),x.value=await W(j.value))},le=async()=>{const p=P.value.split(",").map(S=>Number(S.trim())).filter(S=>Number.isFinite(S));await X(j.value,p)&&await F()},se=async()=>{const p=T.value.split(",").map(y=>Number(y.trim())).filter(y=>Number.isFinite(y)),t=q.value.split(",").map(y=>Number(y.trim())).filter(y=>Number.isFinite(y));if(p.length!==3)return;await s(j.value,p,t)&&await F()},ae=async p=>{await i(j.value,p)&&await F()},ne=async()=>{I.value&&await b(j.value,Number(I.value))};return ie(()=>{G(),K()}),(p,t)=>{var S,y;return r(),u("div",null,[e("div",ue,[e("button",{type:"button",class:D(["btn btn-sm",a.value==="offered"?"btn-primary":"btn-outline-secondary"]),onClick:t[0]||(t[0]=l=>a.value="offered")}," Offered subjects ",2),e("button",{type:"button",class:D(["btn btn-sm",a.value==="alevel"?"btn-primary":"btn-outline-secondary"]),onClick:t[1]||(t[1]=l=>a.value="alevel")}," A-Level combinations ",2),e("button",{type:"button",class:D(["btn btn-sm",a.value==="selection"?"btn-primary":"btn-outline-secondary"]),onClick:t[2]||(t[2]=l=>a.value="selection")}," Elective selection ",2)]),a.value==="offered"?(r(),u("div",ce,[e("div",de,[e("div",me,[c(w,{label:"Curriculum subject IDs (comma-separated)",modelValue:n.value,"onUpdate:modelValue":t[3]||(t[3]=l=>n.value=l),placeholder:"e.g. 12,13,14"},null,8,["modelValue"])]),e("div",be,[c(w,{label:"Level ID (optional)",kind:"number",modelValue:o.value,"onUpdate:modelValue":t[4]||(t[4]=l=>o.value=l)},null,8,["modelValue"])]),e("div",ve,[c($,{color:"primary",size:"medium",loading:_(N),onClick:v},{default:C(()=>[...t[10]||(t[10]=[E(" Add to offering ",-1)])]),_:1},8,["loading"])])]),c(ee,{loading:_(B),empty:!_(h).length,"empty-title":"No offered subjects configured","empty-icon":"bi bi-journal-text"},{default:C(()=>[e("table",fe,[t[12]||(t[12]=e("thead",null,[e("tr",null,[e("th",
1null,"Subject"),e("th",null,"Code"),e("th",null,"Level"),e("th",{class:"lrn-table__actions-col"},"Actions")])],-1)),e("tbody",null,[(r(!0),u(z,null,U(_(h),l=>(r(),u("tr",{key:l.id,class:"lrn-table__row"},[e("td",null,d(l.curriculum_subject_name),1),e("td",null,d(l.short_code||"â"),1),e("td",null,d(l.level_name||"â"),1),e("td",pe,[e("button",{type:"button",class:"lrn-action-btn lrn-action-btn--danger",title:"Remove",onClick:O=>_(J)(l.id)},[...t[11]||(t[11]=[e("i",{class:"bi bi-trash"},null,-1)])],8,ye)])]))),128))])])]),_:1},8,["loading","empty"])])):a.value==="alevel"?(r(),u("div",ge,[c(ee,{loading:_(B),empty:!_(V).length,"empty-title":"No A-Level combinations available","empty-icon":"bi bi-diagram-3"},{default:C(()=>[e("table",_e,[t[13]||(t[13]=e("thead",null,[e("tr",null,[e("th",null,"Code"),e("th",null,"Name"),e("th",null,"Principals"),e("th",null,"Scope")])],-1)),e("tbody",null,[(r(!0),u(z,null,U(_(V),l=>(r(),u("tr",{key:l.id,class:"lrn-table__row"},[e("td",null,d(l.code),1),e("td",null,d(l.display_name),1),e("td",null,d((l.principals||[]).join(" / ")),1),e("td",null,[e("span",{class:D(["lrn-badge",l.is_canonical?"lrn-badge--muted":"lrn-badge--info"])},d(l.is_canonical?"Canonical":"School-specific"),3)])]))),128))])])]),_:1},8,["loading","empty"])])):(r(),u("div",je,[e("div",he,[e("div",Se,[c(w,{label:"Class enrollment ID",kind:"number",modelValue:j.value,"onUpdate:modelValue":t[5]||(t[5]=l=>j.value=l)},null,8,["modelValue"])]),e("div",we,[c($,{color:"secondary",size:"medium",onClick:F},{default:C(()=>[...t[14]||(t[14]=[E("Load",-1)])]),_:1})])]),M.value?(r(),u("div",Ce,[t[15]||(t[15]=e("h6",{class:"small text-muted"},"Current subjects",-1)),e("ul",Ee,[(r(!0),u(z,null,U(M.value.subjects,l=>(r(),u("li",{key:l.id,class:"list-group-item d-flex justify-content-between align-items-center"},[e("span",null,[E(d(l.name)+" ",1),e("span",ke,d(l.role),1)]),e("button",{class:"btn btn-sm btn-outline-danger",onClick:O=>ae(l.id)},"Drop",8,xe)]))),128))])])):te("",!0),x.value?(r(),u("div",Ve,[e("h6",$e," Available electives â stage: "+d(x.value.stage)+" (pick "+d((S=x.value.policy)==null?void 0:S.elective_min)+"â"+d((y=x.value.policy)==null?void 0:y.elective_max)+") ",1),(r(!0),u(z,null,U(x.value.electives_by_category,(l,O)=>(r(),u("div",{key:O,class:"mb-1 small"},[e("strong",Ae,d(O)+":",1),E(" "+d(l.map(Y=>`${Y.name} (#${Y.id})`).join(", ")),1)]))),128))])):te("",!0),e("div",Le,[e("div",Ne,[c(w,{label:"Elective subject IDs to select (comma-separated)",modelValue:P.value,"onUpdate:modelValue":t[6]||(t[6]=l=>P.value=l)},null,8,["modelValue"])]),e("div",Ie,[c($,{color:"primary",size:"medium",loading:_(N),onClick:le},{default:C(()=>[...t[16]||(t[16]=[E(" Apply selection ",-1)])]),_:1},8,["loading"])])]),e("div",Fe,[e("div",Oe,[c(w,{label:"A-Level principal subject IDs (exactly 3)",modelValue:T.value,"onUpdate:modelValue":t[7]||(t[7]=l=>T.value=l)},null,8,["modelValue"])]),e("div",De,[c(w,{label:"Subsidiary subject IDs (optional override)",modelValue:q.value,"onUpdate:modelValue":t[8]||(t[8]=l=>q.value=l)},null,8,["modelValue"])]),e("div",ze,[c($,{color:"primary",size:"medium",loading:_(N),onClick:se},{default:C(()=>[...t[17]||(t[17]=[E(" Apply A-Level combo ",-1)])]),_:1},8,["loading"])])]),e("div",Ue,[e("div",Be,[c(w,{label:"New stream ID",kind:"number",modelValue:I.value,"onUpdate:modelValue":t[9]||(t[9]=l=>I.value=l)},null,8,["modelValue"])]),e("div",Me,[c($,{color:"secondary",size:"medium",onClick:ne},{default:C(()=>[...t[18]||(t[18]=[E("Change stream",-1)])]),_:1})])])]))])}}};export{qe 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.