PageSourceSearch

https://clipo.ai/assets/CourseHomeworkSubmissionsPage-D099l_4W.js

js clipo.ai collected 2026-10-05 11:56:36 UTC 21,959 bytes, 7 lines download raw bytes

1import{j as e,aP as je,an as be,y as he,a as Te,r as w,i2 as ve,hJ as Ie,c as Y,hL as xe,t as T,D as ee,x as F,ag as _e,k as ke,O as Me,P as H,B as we,e as f,T as m,a9 as ge,b as Z,n as U,i3 as ze,i4 as Fe,cJ as Ae,ep as Be,ff as de,ah as fe,b2 as Ce,C as Ue,em as He,a8 as De,i5 as We,bi as Le,w as me,fn as Ke,z as Re,dn as Ee,m as p,eu as Oe,i6 as Q,aj as ye,aE as Pe,h1 as $e,gZ as Ne,g$ as Ge,i as qe,S as Ve,eA as Qe,R as Xe,i7 as Je,bm as Ze,X as Ye,cK as et,gB as tt}from"./index-aREvobyF.js";import{B as ue}from"./ButtonWithTooltip-mLqxUQDU.js";import{C as st}from"./CourseLoadingPage-Byivnx3I.js";import{I as ot}from"./IconButtonWithTooltip-BidBKNAt.js";import{P as nt}from"./PageMetaHeader-6lUw-EYb.js";import{u as it}from"./useBlockerModal-DJZBYWEu.js";import{S as rt}from"./SimpleTable-DF7EMZw0.js";import{W as lt}from"./WritingTraceDetailModal-CnNua_me.js";import{W as at}from"./WritingTraceHelpModalButton-BC-7DY4P.js";import{g as pe}from"./teacherSubmissionModalUtils-CV-6YIl8.js";import{f as ct,e as dt,c as mt}from"./homeworkAnswers-CojudGdO.js";import{S as ut}from"./SubmissionFileDownloadButton-DsKHhuP_.js";import{s as pt,M as bt,u as ht}from"./file-CYbLPrGl.js";import{u as xt,j as gt,a as ft,i as yt}from"./file-upload-B3DoXrnC.js";import{A as St,a as jt,b as _t,c as kt}from"./alert-Brzb1jZD.js";import"./link-box-DcUyRFYn.js";import"./table-BqH1TAsn.js";import"./WritingTraceOverview-BaQKqclB.js";import"./react-apexcharts.min-fYSCb3wM.js";import"./index-Dz2fSXDx.js";import"./grid-DsfbS9aq.js";import"./writingTraceBufferCodec-CSWFflWm.js";import"./text-BZlRU9-h.js";import"./mathLatex-CP574j0c.js";try{let o=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},n=new o.Error().stack;
1n&&(o._sentryDebugIds=o._sentryDebugIds||{},o._sentryDebugIds[n]="60dc1236-9f2b-4dc0-963b-378b31dbf947",o._sentryDebugIdIdentifier="sentry-dbid-60dc1236-9f2b-4dc0-963b-378b31dbf947")}catch{}const wt=({onConfirm:o,loading:n,trigger:d})=>e.jsx(je,{trigger:d,modalType:"negative",title:`기존에 등록된 과제를 모두 삭제하고
2새로운 과제를 등록할까요?`,description:`이미 등록된 과제와 채점 결과가 지워져요.
3일부 학생만 올리려면 목록에서 학생별로 업로드해 주세요.`,cancelButton:{label:"아니오"},confirmButton:{label:"네, 삭제합니다.",onConfirm:o,buttonProps:{loading:n}}}),Se=[{icon:ve,title:"PDF 분할 업로드",description:"학급 전체의 과제를 스캔한 1개의 PDF 파일을 학생별로 분할하여 등록",path:"batch-pdf-upload"},{icon:Ie,title:"여러 파일 일괄 업로드",description:"학생마다 나뉜 PDF 이미지 여러 파일을 학생과 자동으로 매칭하여 등록",path:"auto-matching-upload"}],Ct=({icon:o,title:n,description:d,onClick:l})=>e.jsx(Me.button,{type:"button",width:"full",borderWidth:"1px",borderColor:"border",borderRadius:"lg",p:4,cursor:"pointer",textAlign:"left",transition:"all 0.15s",_hover:{borderColor:"blue.600",bg:"rgba(204, 223, 255, 0.2)",boxShadow:"0 0 0 1px {colors.blue.600}"},_focusVisible:{outline:"none",borderColor:"blue.600",bg:"rgba(204, 223, 255, 0.2)",boxShadow:"0 0 0 1px {colors.blue.600}"},onClick:l,children:e.jsxs(H,{gap:3,children:[e.jsx(we,{bg:"blue.subtle",borderRadius:"md",boxSize:10,flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",children:e.jsx(f,{as:o,boxSize:5,color:"blue.600"})}),e.jsxs(ke,{gap:2,minWidth:0,children:[e.jsx(m,{textStyle:"b1-semibold-compact",children:n}),e.jsx(m,{textStyle:"c-medium-compact",color:"fg.muted",children:d})]})]})}),Dt=({requiresInitialization:o,isGroupMode:n,...d})=>{const{groupKey:l,homeworkKey:i}=be(),h=he(),b=Te(),[c,t]=w.useState(null),{trigger:x,onProceed:j}=it(({currentLocation:u,nextLocation:C})=>o&&u.pathname!==C.pathname&&Se.some(({path:A})=>C.pathname.endsWith(`/${A}`))),y=Y({onSuccess:()=>{h.invalidateQueries({queryKey:F.teacherHomeworks.detail({homeworkKey:i})._ctx.submissions({groupKey:l,isGroupMode:n}).queryKey}),T.create({title:"학급 과제물이 모두 삭제되었습니다.",type:"success"}),t(null),j()},onError:u=>{T.create({title:ee(u),type:"error"})},mutationFn:u=>xe.appsHomeworksApiHomeworkInitialization({homeworkKey:i,groupKey:l})}),W=u=>{t(u),d.onClose(),b(u)};return e.jsxs(e.Fragment,{children:[e.jsx(_e,{title:"업로드 유형 선택",trigger:d,footer:{isHidden:!0},size:"md",children:e.jsx(ke,{gap:3,children:Se.map(u=>e.jsx(Ct,{...u,onClick:()=>W(u.path)},u.title))})}),e.jsx(wt,{trigger:x,loading:y.isPending,onConfirm:()=>{c&&y.mutate(c)}})]})},Pt=o=>{const n={fontSize:{base:"xs",md:"sm"},borderRadius:"md",py:1,px:2,display:"flex",alignItems:"center",justifyContent:"center"};return o!=="UN_SUBMITTED"?e.jsx(ge,{colorPalette:"green",...n,children:"제출 완료"}):e.jsx(ge,{colorPalette:"red",...n,children:"미제출"})},Tt=({homeworkKey:o,status:n})=>{var l,i;const d=Z();return e.jsxs(e.Fragment,{children:[e.jsxs(U,{variant:"ghost",size:"md",colorPalette:"orange",color:"fg.warning","aria-label":`${n.member.student.name} 작성 기록 보기`,onClick:d.onOpen,children:["이탈 ",((l=n.writing_trace)==null?void 0:l.away_count)??0,"회",e.jsx(f,{as:ze,boxSize:5})]}),e.jsx(lt,{answers:(i=n.submission)==null?void 0:i.answers,homeworkKey:o,memberKey:n.member.key,studentIdentity:n.member.student.identity,studentName:n.member.student.name,trigger:d})]})},vt=({submission:o})=>{if(ct(o==null?void 0:o.answers))return e.jsxs(H,{gap:2,justifyContent:"center",children:[e.jsx(f,{as:Fe,boxSize:"18px",flexShrink:0,color:"fg.muted"}),e.jsxs(m,{color:"fg",textStyle:"b1-medium-compact",children:[dt(o==null?void 0:o.answers).toLocaleString(),"자"]})]});const n=(o==null?void 0:o.files)??[];if(n.length>0){const d=n.map(h=>pe(h).name),l=d[0],i=n.length>1?`${l} 외 ${n.length-1}`:l;return e.jsx(Ae,{content:d.join(`
4`),contentProps:{whiteSpace:"pre-line"},children:e.jsxs(H,{gap:2,justifyContent:"center",minW:0,children:[e.jsx(f,{as:Be,boxSize:"18px",flexShrink:0,color:"fg.muted"}),e.jsx(we,{minW:0,children:e.jsx(m,{truncate:!0,minW:0,color:"fg",textStyle:"b1-medium-compact",children:i})})]})})}return"-"},X={display:{base:"none",md:"table-cell"}},J={display:{base:"none",lg:"table-cell"}},It=({homeworkKey:o,statuses:n,selection:d,onUploadSubmission:l})=>e.jsx(rt,{width:"100%",cellProps:{py:2,textStyle:"b1-medium-compact"},rows:n.map(i=>{const h=i.member.key,b=i.status!=="UN_SUBMITTED";return{key:h,cells:[{key:"선택",children:e.jsx(fe,{checked:d.selectedMemberKeys.has(h),disabled:!b,inputProps:{"aria-label":`${i.member.student.name} 선택`},onCheckedChange:c=>d.onSelectMember(h,c.checked===!0)})},{key:"학번",children:i.member.student.identity},{key:"이름",children:i.member.student.name},{key:"제출 상태",children:e.jsx(Ue,{children:Pt(i.status)}),...X},{key:"최근 제출 일시",children:i.submission?Ce(i.submission.created_at,He):"-",...J},{key:"제출 상세",children:e.jsx(vt,{submission:i.submission}),...X}
4,{key:"작성 기록",children:i.writing_trace?e.jsx(Tt,{homeworkKey:o,status:i}):"-",...J},{key:"과제물 관리","data-testid":de.SUBMISSIONS_ACTION_COL,children:e.jsxs(U,{variant:"ghost",onClick:()=>l(i),children:[e.jsx(f,{as:b?De:We,boxSize:5}),b?"변경/삭제":"업로드"]})}]}}),header:{columns:[{key:"선택",children:e.jsx(fe,{checked:d.isAllSelected,inputProps:{"aria-label":"전체 선택"},onCheckedChange:i=>d.onSelectAll(i.checked===!0)})},{key:"학번",children:"학번"},{key:"이름",children:"이름"},{key:"제출 상태",children:"제출 상태",...X},{key:"최근 제출 일시",children:"최근 제출 일시",...J},{key:"제출 상세",children:"제출 상세",...X},{key:"작성 기록",children:e.jsxs(H,{w:"full",justify:"center",gap:1,children:["작성 기록",e.jsx(at,{})]}),...J},{key:"과제물 관리","data-testid":de.SUBMISSIONS_ACTION_COL,children:"과제물 관리"}]}}),Mt=o=>{const{submittedStatuses:n,unsubmittedStatuses:d}=w.useMemo(()=>o.reduce((t,x)=>(x.status==="UN_SUBMITTED"?t.unsubmittedStatuses.push(x):t.submittedStatuses.push(x),t),{submittedStatuses:[],unsubmittedStatuses:[]}),[o]),l=w.useMemo(()=>n.map(t=>t.member.key).filter(t=>!!t),[n]),[i,h]=w.useState(new Set),b=w.useMemo(()=>n.filter(t=>{const x=t.member.key;return x?i.has(x):!1}),[i,n]);w.useEffect(()=>{h(t=>{const x=new Set(l),j=new Set(Array.from(t).filter(y=>x.has(y)));return j.size===t.size?t:j})},[l]);const c={selectedMemberKeys:i,isAllSelected:l.length>0&&l.every(t=>i.has(t)),onSelectAll:t=>{h(t?new Set(l):new Set)},onSelectMember:(t,x)=>{h(j=>{const y=new Set(j);return x?y.add(t):y.delete(t),y})}};return{submittedStatuses:n,unsubmittedStatuses:d,selectedSubmittedStatuses:b,selectedMemberKeys:i,selection:c}},zt=(o,n)=>o.name===n.name&&o.size===n.size&&o.type===n.type,Ft=({open:o,onClose:n,onOpen:d,status:l})=>{var G,K,R,E,O,B,q,V;const{homeworkKey:i}=be(),{fetchRequestGetBlob:h}=Le(),b=Y({mutationFn:()=>h(`teacher-homeworks/${i}/members/${l.member.key}/submission-pdf`),onSuccess:r=>{if(!r)return;const a=l.member.student,g=`${a.identity}_${a.name}_${j}`.replace(/[\\/:*?"<>|\u0000-\u001f]/g,"_").slice(0,180);pt(r,`${g}.pdf`)},onError:r=>T.create({title:ee(r),type:"error"})}),{data:c}=Ke(),{data:t,isPending:x}=me(F.teacherHomeworks.detail({homeworkKey:i??""})),j=(t==null?void 0:t.title.replace(/의 과제$/,""))??"과제",{formState:{isValid:y},handleSubmit:W,setValue:u,watch:C,getValues:A}=Re({mode:"onChange",defaultValues:{files:[],delete_file_keys:[],is_delete_content:!1}}),te=he(),L=C("is_delete_content"),s=Y({mutationFn:({homeworkKey:r,memberKey:a,formData:g})=>xe.appsHomeworksApiProcessHomeworkSubmissionByTeacher({homeworkKey:r,memberKey:a,formData:g}),onSuccess:()=>{T.create({title:"과제 파일 변경 사항이 저장되었습니다.",type:"success"}),te.invalidateQueries({queryKey:F.teacherHomeworks.detail({homeworkKey:i}).queryKey}),n()},onError:r=>{T.create({title:ee(r),type:"error"})}}),_=C("files"),S=C("delete_file_keys"),se=_&&_.length>0||S&&S.length>0||L,D=((_==null?void 0:_.length)??0)-((S==null?void 0:S.length)??0)+(((K=(G=l.submission)==null?void 0:G.files)==null?void 0:K.length)??0),$=D<=((t==null?void 0:t.max_file_count)??0),v=!!(t!=null&&t.project.is_done_review)||D>=((t==null?void 0:t.max_file_count)??0),N=xt({accept:ht,maxFiles:1/0,maxFileSize:bt,disabled:v,validate:(r,{acceptedFiles:a})=>a.some(g=>zt(r,g))?["FILE_EXISTS"]:null,onFileChange:({acceptedFiles:r})=>{u("files",r,{shouldDirty:!0,shouldValidate:!0})},onFileReject:({files:r})=>{var a;((a=r[0])==null?void 0:a.errors[0])==="FILE_TOO_LARGE"&&T.create({title:"200mb 이하의 파일로 업로드해 주세요.",type:"error"})}}),P=y&&se&&$&&!(t!=null&&t.project.is_done_review),I=(E=(R=l.submission)==null?void 0:R.files)==null?void 0:E.filter(r=>r.username!==(c==null?void 0:c.username)),M=I&&I.length>0,z=(B=(O=l.submission)==null?void 0:O.files)==null?void 0:B.filter(r=>r.username===(c==null?void 0:c.username)),ie=z&&z.length>0,re=mt((q=l.submission)==null?void 0:q.answers);if(x)return e.jsx(Ee,{});const le=(t==null?void 0:t.submit_types.includes("FI"))||((V=t==null?void 0:t.submit_types)==null?void 0:V.includes("PR"));return e.jsx(_e,{title:`${l.member.student.name} 학생 파일 관리`,trigger:{open:o,onOpen:d,onClose:n},modalContentProps:{as:"form",onSubmit:W(r=>{s.mutate({formData:{...r},homeworkKey:i,memberKey:l.member.key})})},footer:{saveButton:e.jsx(ue,{loading:s.isPending,type:"submit",disabled:!P,tooltipProps:{content:"마감된 수행평가입니다.",disabled:!(t!=null&&t.project.is_done_review)},children:"저장"})},children:e.jsxs(p,{flexDirection:"column",fontWeight:500,gap:5,children:[e.jsxs(p,{flexDirection:"column",gap:3,children:[e.jsx(p,{flexDirection:"column",children:e.jsx(m,{textStyle:"b2-medium-compact",children:"최근 업로드된 파일ì
4„ 기준으로 AI 채점이 진행됩니다."})}),e.jsxs(p,{p:3,flexDirection:"column",bg:"bg.info",borderColor:"blue.muted",borderWidth:"1px",borderStyle:"solid",borderRadius:"lg",children:[e.jsxs(m,{textStyle:"b2-medium",children:["- 학생 제출 최대 파일 수 : ",t==null?void 0:t.max_file_count]}),e.jsx(m,{textStyle:"b2-medium",children:`- 학생 제출 파일 형식 : ${(t==null?void 0:t.submit_types)&&Oe(t.submit_types)}`})]})]}),l.submission&&re&&e.jsxs(p,{flexDirection:"column",gap:2,children:[e.jsx(m,{fontWeight:600,children:"학생이 제출한 과제(클리포 입력)"}),e.jsxs(m,{fontSize:"sm",fontWeight:500,children:["X를 클릭하면 삭제됩니다. 학생이 제출한 과제를 삭제하실 경우, ",e.jsx("br",{}),"학생용 클리포에서도 삭제되며 복구가 불가능합니다."]}),e.jsxs(U,{width:"fit-content",variant:"outline",disabled:L||!i,loading:b.isPending,loadingText:"PDF 생성 중...",onClick:()=>b.mutate(),children:[l.member.student.identity,"_",l.member.student.name,"_",j,".pdf",e.jsx(f,{_hover:{opacity:.8},as:Q,boxSize:4,onClick:r=>{r.stopPropagation(),u("is_delete_content",!0)}})]})]}),M&&e.jsxs(p,{flexDirection:"column",gap:2,children:[e.jsx(m,{fontWeight:600,children:"학생이 제출한 파일"}),e.jsxs(m,{fontSize:"sm",fontWeight:500,children:["X를 클릭하면 삭제됩니다. 학생이 제출한 과제를 삭제하실 경우, ",e.jsx("br",{}),"학생용 클리포에서도 삭제되며 복구가 불가능합니다."]}),e.jsx(p,{flexDirection:"column",gap:3,children:I==null?void 0:I.map(r=>{const{name:a,path:g}=pe(r),k=S==null?void 0:S.includes(r.key);return e.jsx(U,{asChild:!0,width:"fit-content",variant:"outline",disabled:k,children:e.jsxs(ye,{href:k?"#":g,...!k&&{target:"_blank"},children:[a,e.jsx(f,{_hover:{opacity:.8},as:Q,boxSize:4,onClick:ae=>{ae.preventDefault();const ce=new Set([...A("delete_file_keys")||[],r.key]);u("delete_file_keys",Array.from(ce))}})]})},r.key)})})]}),ie&&e.jsxs(p,{flexDirection:"column",gap:2,children:[e.jsx(m,{fontWeight:600,children:"선생님 업로드(파일)"}),e.jsx(m,{fontSize:"sm",fontWeight:500,children:"X를 클릭하면 삭제되며 복구가 불가능합니다."}),e.jsx(p,{flexDirection:"column",gap:3,children:z==null?void 0:z.map(r=>{const{name:a,path:g}=pe(r),k=S==null?void 0:S.includes(r.key);return e.jsx(U,{asChild:!0,width:"fit-content",variant:"outline",maxW:"full",disabled:k,...!k&&{target:"_blank"},children:e.jsxs(ye,{href:k?"#":g,children:[e.jsx(m,{lineClamp:1,maxW:"full",children:a}),e.jsx(f,{_hover:{opacity:.8},as:Q,boxSize:4,onClick:ae=>{ae.preventDefault();const ce=new Set([...A("delete_file_keys")||[],r.key]);u("delete_file_keys",Array.from(ce))}})]})},r.key)})})]}),le&&e.jsxs(p,{flexDirection:"column",gap:3,children:[e.jsx(m,{textStyle:"b1-semibold-compact",children:"파일 추가"}),e.jsxs(gt,{value:N,children:[e.jsx(ft,{}),e.jsx(yt,{w:"full",minH:"9rem",bg:"white",border:"2px dashed",borderColor:"blue.muted",borderRadius:"md",cursor:v?"not-allowed":"pointer",opacity:v?.5:1,px:"14px",py:"9px",_hover:v?void 0:{bg:"bg.info"},_dragging:{bg:"bg.info"},children:e.jsxs(p,{w:"full",minH:"7.5rem",alignItems:"center",justifyContent:"center",flexDirection:"column",gap:3,textAlign:"center",pointerEvents:"none",children:[e.jsx(f,{as:Pe,boxSize:5,color:"fg.muted"}),e.jsx(m,{color:"fg.muted",textStyle:"b2-medium-compact",children:"클릭 혹은 파일을 이곳에 끌어다 놓으세요."})]})})]}),!$&&e.jsxs(St,{borderRadius:"lg",status:"error",bg:"bg.error",borderColor:"red.muted",borderWidth:"1px",borderStyle:"solid",children:[e.jsx(jt,{boxSize:4.5}),e.jsx(_t,{children:e.jsx(kt,{textStyle:"b2-medium",children:"제출 가능한 최대 파일 수에 맞춰 파일을 업로드해 주세요."})})]}),(_??[]).length>0&&e.jsx(p,{flexDirection:"column",gap:3,children:_==null?void 0:_.map(r=>e.jsxs(U,{variant:"outline",w:"fit-content",maxW:"full",children:[e.jsx(m,{lineClamp:1,children:r.name}),e.jsx(f,{_hover:{opacity:.8},as:Q,boxSize:4,onClick:a=>{a.preventDefault(),N.deleteFile(r)}})]},r.name))})]})]})})},At=[],is=()=>{var r;const{course:o,getGroupName:n}=$e(),d=Ne(),{homeworkKey:l,groupKey:i}=be(),{activeTour:h,tourData:b}=Ge(),c=h==="ai-scoring",t=n(i,{detail:!0}),j=((r=qe().state)==null?void 0:r.from)||`/teachers/courses/${d}/homeworks`,y=he(),[W,u]=w.useState(!1),{data:C,isPending:A,dataUpdatedAt:te,isRefetching:L}=me({...F.teacherHomeworks.detail({homeworkKey:l})._ctx.submissions({groupKey:i,isGroupMode:o.is_group_mode}),refetchInterval:W?10*1e3:!1,enabled:!c}),s=c?{title:b.homework.title,is_bulk_uploaded_by_teacher:!0,project:{key:b.projectKey,name:b.project.name,is_done_review:!1},statuses:b.submissions}:C,_=c?!1:A,{data:S,isPending:se}=me({...F.projects.detail({projectKey:(s==null?void 0:s.project.key)??""}),enabled:!c&&!!(s!=null&&s.project.key)}),D=c?b.project:S,$=c?!1:se,[v,oe]=w.useState(null),ne=Z({onClose:()=>{oe(null)}}),{submittedStatuses:N,unsubmittedStatuses:P,selectedSubmittedStatuses:I,selectedMemberKeys:M,selection:z}=Mt((s==null?void 0:s.statuses)??At),ie=()=>{y.invalidateQueries(F.teacherHomeworks.detail({homeworkKey:l})._ctx.submissions({groupKey:i,isGroupMode:o.is_group_mode}))},re=s==null?void 0:s.statuses.some(a=>{var g,k;return(k=(g=a.submission)==null?void 0:g.files)==null?void 0:k.length}),le=s==null?void 0:s.statuses.some(a=>a.has_scorings),G=(s==null?void 0:s.project.is_done_review)??!1,K=I.length>
40,R=M.size===0?"파일을 다운로드할 학생을 선택해 주세요.":K?null:"제출된 파일이 없습니다.",E=M.size===0?"파일을 삭제할 학생을 선택해 주세요.":K?G?"이미 마감된 과제입니다.":null:"제출된 파일이 없습니다.",O=Z(),B=Z(),q=Y({mutationFn:({homeworkKey:a,requestBody:g})=>c?Promise.resolve(void 0):xe.appsHomeworksApiDeleteHomeworkSubmissions({homeworkKey:a,requestBody:g}),onSuccess:()=>{y.invalidateQueries(F.teacherHomeworks.detail({homeworkKey:l})._ctx.submissions({groupKey:i,isGroupMode:o.is_group_mode})),T.create({title:"과제물이 삭제되었습니다.",type:"success"}),B.onClose()},onError:a=>{T.create({title:ee(a),type:"error"})}}),V=a=>{oe(a),ne.onOpen()};return w.useEffect(()=>{if(c){u(!1);return}const a=D&&D.homework&&!D.is_done_review&&D.homework.submit_types.includes("TE")&&P.length>0;u(a??!1)},[c,D,P.length]),_||$?e.jsx(st,{}):e.jsxs(p,{flexDirection:"column",gap:{base:5,md:0},children:[e.jsx(nt,{backLink:j,title:`${t} 과제 제출 현황`,description:`${s==null?void 0:s.project.name} 과제 제출 현황을 확인하고 파일을 직접 업로드 할 수 있습니다.`,rightSection:{components:[e.jsxs(ue,{"data-testid":de.BATCH_PDF_UPLOAD,rounded:"full",tooltipProps:{content:s!=null&&s.is_bulk_uploaded_by_teacher?"마감된 수행평가입니다.":"학생이 직접 제출하는 과제는 개별 파일 업로드만 가능합니다.",disabled:(s==null?void 0:s.is_bulk_uploaded_by_teacher)&&!s.project.is_done_review},disabled:!c&&(!(s!=null&&s.is_bulk_uploaded_by_teacher)||s.project.is_done_review),onClick:()=>{c||O.onOpen()},children:[e.jsx(f,{as:Pe,boxSize:5}),"학급 일괄 업로드"]},"upload")]}}),P&&P.length>0&&e.jsxs(p,{flexDir:"column",alignItems:"flex-start",mb:5,mt:{base:5,md:0},bg:"bg.error",p:5,gap:3,borderRadius:"lg",border:"1px solid",borderColor:"red.emphasized",boxShadow:"sm",children:[e.jsxs(H,{w:"full",gap:2,textStyle:"b1-semibold-compact",color:"red.fg",children:[L?e.jsx(Ve,{color:"red.solid",boxSize:5}):e.jsx(f,{as:Qe,color:"red.solid",boxSize:5}),e.jsx(m,{children:"미제출 학생"}),e.jsx(Xe,{}),e.jsx(m,{textStyle:"b3-regular-compact",color:"fg.fg",children:Ce(te,Je)+" 기준"}),e.jsx(ot,{tooltipProps:{content:"제출 현황을 업데이트 중입니다"},disabled:L,minW:4.5,boxSize:4.5,colorPalette:"gray",variant:"link","aria-label":"제출 현황 새로고침",onClick:ie,children:e.jsx(f,{as:De,boxSize:4.5})})]}),e.jsx(m,{textStyle:"b2-regular",color:"fg.fg",children:P.map(a=>`${a.member.student.identity} ${a.member.student.name}`).join(", ")})]}),N.length>0&&P.length===0&&e.jsx(p,{flexDir:"column",alignItems:"flex-start",mb:5,mt:{base:5,md:0},bg:"bg.success",p:5,borderRadius:"lg",border:"1px solid",borderColor:"green.emphasized",boxShadow:"sm",children:e.jsxs(H,{gap:2,alignItems:"center",children:[e.jsx(f,{as:Ze,color:"green.fg",boxSize:4.5}),e.jsx(m,{textStyle:"b1-semibold-compact",color:"green.fg",children:"모든 학생이 과제를 제출했어요!"})]})}),e.jsxs(p,{gap:{base:5,md:4},bg:"white",borderRadius:"lg",flexDirection:"column",px:{base:4,md:6},py:6,boxShadow:"sm",children:[e.jsxs(p,{w:"full",columnGap:3,rowGap:3,justifyContent:"space-between",alignItems:{base:"flex-start",md:"flex-end"},flexDirection:{base:"column",md:"row"},children:[e.jsxs(Ye,{gap:1.5,alignItems:"flex-start",children:[e.jsx(m,{textStyle:"t4-semibold-compact",children:s==null?void 0:s.project.name}),e.jsx(m,{textStyle:"b3-medium-compact",children:"업로드된 과제를 다운받거나 변경 또는 삭제할 수 있습니다."})]}),e.jsxs(p,{columnGap:2,children:[e.jsxs(ut,{size:"sm",fileName:`${s==null?void 0:s.title}_${t}`,homeworkKey:l,isGroupMode:o.is_group_mode,groupKey:i,colorPalette:"gray",variant:"outline",memberKeys:Array.from(M),disabled:!!R,tooltipProps:{content:R||""},children:[e.jsx(et,{})," 과제물 다운로드"]}),e.jsxs(ue,{colorPalette:"red",size:"sm",variant:"outline",disabled:!!E,tooltipProps:{content:E||""},onClick:B.onOpen,children:[e.jsx(tt,{})," 과제물 삭제"]})]})]}),e.jsx(It,{homeworkKey:l,statuses:(s==null?void 0:s.statuses)??[],selection:z,onUploadSubmission:V})]}),v&&e.jsx(Ft,{...ne,status:v}),e.jsx(Dt,{requiresInitialization:!!(re||le),isGroupMode:o.is_group_mode??!1,...O}),e.jsx(je,{trigger:B,modalType:"negative",title:`선택한 학생 ${M.size}명의 과제물을
5모두 삭제하고 미제출 처리할까요?`,description:`삭제된 파일은 복구 불가하며,
6제출 내역이 초기화됩니다.`,cancelButton:{label:"아니오"},confirmButton:{label:"네, 삭제합니다",onConfirm:()=>{q.mutate({homeworkKey:l,requestBody:{member_keys:Array.from(M)}})}}})]})};export{is as default};
7//# sourceMappingURL=CourseHomeworkSubmissionsPage-D099l_4W.js.map

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.