PageSourceSearch

https://clipo.ai/assets/CourseRecordDetailPage-DFwhKQkq.js

js clipo.ai collected 2026-10-05 11:56:57 UTC 12,530 bytes, 6 lines download raw bytes

1import{a as N,y as H,an as $,r as b,b as L,c as F,jK as D,t as M,D as E,x as j,j as e,X as q,m,T as l,k as g,aC as P,P as k,R as T,b2 as V,n as _,e as S,bm as U,aH as X,fx as Y,B as G,jM as J,hr as Z,C as O,aw as ee,gf as te,ls as se,g3 as re,w as A,jk as oe,hR as ne,iE as ae,iD as le}from"./index-aREvobyF.js";import{C as ie}from"./CourseLoadingPage-Byivnx3I.js";import{P as ce}from"./PageMetaHeader-6lUw-EYb.js";import{b as Q}from"./text-BZlRU9-h.js";import{C as de}from"./CopyButton-Dj1GIf_w.js";import{M as B}from"./MathText-DrsOsUuW.js";import{C as ue,u as me}from"./useAIPipelineStatus-D9v9K4k_.js";import{T as pe,c as xe,a as he,b as be}from"./tabs-T51Ak6Ra.js";import{f as fe,s as ge,z as K}from"./big-C3dewPw-.js";import{u as ye}from"./useFullLayout-Bu1NScr0.js";import{u as je}from"./useHideTeacherFooter-CU0yARvY.js";import"./mathLatex-CP574j0c.js";import"./KatexRender-C66B1828.js";import"./BasicDrawer-Cq_OtdQ3.js";import"./CourseRecordAICreateForm-SVmGmUMo.js";import"./switch-BmUkzzHy.js";import"./SimpleTable-DF7EMZw0.js";import"./link-box-DcUyRFYn.js";import"./table-BqH1TAsn.js";import"./useBlockerModal-DJZBYWEu.js";import"./visually-hidden-DcFTik96.js";import"./SimpleAccordion-_CTB73dy.js";import"./accordion-CzJ6Bxtx.js";import"./useBucket-BM-z749K.js";import"./checkbox-card-syh6hK3B.js";import"./index-z0otkVtn.js";import"./index-vZ6wwhg-.js";import"./external-DWRwAfQj.js";import"./ai-failure-messages-rTmvRgra.js";import"./useTemporaryRecoilState-CiB7Jgny.js";try{let t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},s=new t.Error().stack;s&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[s]="509e337f-89db-4ad2-b14b-aa66f089e771",t._sentryDebugIdIdentifier="sentry-dbid-509e337f-89db-4ad2-b14b-aa66f089e771")}catch{}const we=({recordDetailOut:t,records:s,groupKey:r})=>{var i,c,v;const n=N(),o=H(),{courseKey:x}=$(),a=b.useMemo(()=>{if(s===void 0)return null;const d=s.findIndex(({student:R})=>R.identity===t.student.identity);if(d===-1||d===void 0)return null;const z=[...s.slice(d+1),...s.slice(0,d)].find(({record:R})=>!(R!=null&&R.is_submitted));return z===void 0?null:z.key},[t.student.identity,s]),{open:u,onOpen:p,onClose:f}=L(),[h,y]=b.useState(((i=t.record)==null?void 0:i.content)??""),C=Q(h),w=C>1500;b.useEffect(()=>{var d;y(((d=t.record)==null?void 0:d.content)??"")},[t.record]);const{mutate:I}=F({mutationFn:({saveRecords:d})=>D.appsRecordsApiSaveCourseRecords({courseKey:x,requestBody:{records:d}}),onSuccess:async()=>{M.create({title:"저장되었습니다.",type:"success"}),await o.invalidateQueries(j.courses.detail({courseKey:x})._ctx.records({groupKey:r})),await o.invalidateQueries(j.records.detail({memberKey:t.key})),n(a!==null?`/teachers/courses/${x}/records/${a}`:`/teachers/courses/${x}/records?grade=${t.student.grade}&classNum=${t.student.class_num}`)},onError:d=>{M.create({title:E(d),type:"error"})}});return e.jsxs(q,{w:"full",alignItems:"flex-end",flex:1,rowGap:6,maxH:{base:"none",xl:"90%"},children:[e.jsxs(m,{className:"common-pannel",overflow:"auto",children:[e.jsxs(l,{textStyle:"b1-semibold-compact",children:[t.student.name," 학생 세부능력 및 특기사항 기록"]}),e.jsxs(g,{rowGap:3,children:[e.jsx(l,{textStyle:"b2-semibold-compact",children:"선생님이 작성한 기록"}),e.jsxs(g,{flex:"1",backgroundColor:"white",border:"1px solid",borderColor:u?w?"red.500":"blue.500":"gray.200",borderWidth:u?"2px":"1px",px:`calc(1rem - ${u?"1px":"0px"})`,py:`calc(0.75rem - ${u?"1px":"0px"})`,rounded:"md",children:[e.jsx(P,{variant:"outline",p:0,border:"none",resize:"none",maxH:"none",overflowY:"hidden",minRows:1,rows:1,placeholder:"작성된 기록이 없습니다.",value:h,onChange:d=>y(d.target.value),onBlur:f,onFocus:p}),e.jsxs(k,{flexWrap:"wrap",py:2.5,mt:"auto",children:[e.jsxs(l,{textStyle:"c-regular-compact",color:w?"red.500":"fg.muted",children:[h.length,"자 (",C,"Byte)"]}),e.jsx(T,{}),w&&e.jsx(l,{color:"red.500",children:"1500 Byte 초과 입력"})]})]})]})]}),e.jsxs(m,{ml:{base:0,md:"auto"},mb:3,gap:3,flexDirection:{base:"column-reverse",md:"row"},alignItems:"center",children:[((c=t.record)==null?void 0:c.is_submitted)&&e.jsxs(l,{textStyle:"b1-regular",children:[V((v=t.record)==null?void 0:v.updated_at,"MM/DD HH:mm")," 저장됨"]}),e.jsxs(_,{circle:!0,size:"lg",disabled:h.length===0,onClick:()=>{I({saveRecords:[{member_key:t.key,content:h}]})},children:[e.jsx(S,{as:U}),"저장 후 다음 학생"]})]})]})},ke=({recordDetailOut:t})=>{var w,I;const{courseKey:s}=$(),r=H(),{mutate:n}=F({mutationFn:({requestBody:i})=>D.appsRecordsApiCreateAiCourseRecords({courseKey:s,requestBody:i}),onSuccess:()=>{r.invalidateQueries(j.records.detail({memberKey:t.key})),M.info({title:"AI 기록 생성을 시작합니다.",type:"success"})}}),o=!(t.record&&t.record.ai_pipelines.length>0),x=b.useMemo(()=>t.reviews.reduce((i,c)=>(i.set(c.homework.key,{key:c.key,score:c.score,status:c.status,homework_key:c.homework.key,project_key:c.homework.project.key,has_feedback_record:!!c.record}),i),new Map),[t.reviews]),a=Math.min(((w=t.record)==null?void 0:w.ai_pipelines.length)??0,5),[u,p]=b.useState(`${a}`),f=((I=t.record)==null?void 0:I.ai_pipelines.slice(0,a))??[],h=f.at(a-parseInt(u)),y=f.at(0);b.useEffect(()=>{(y==null?void 0:y.status)==="D"&&p(`${a}`)},[y,a]);const C=L();return e.jsxs(m,{className:"common-pannel",children:[e.jsx(l,{textStyle:"b1-semibold-compact",children:"AI Assistant 기록 생성 결과"}),o?e.jsx(l,{textAlign:"center",my:"6.25rem",children:"생성된 AI Assistant 기록이 없습니다."}):e.jsxs(g,{overflow:"auto",rowGap:5,children:[e.jsxs(pe,{lazyMount:!0,colorPalette:"blue",as:g,display:"flex",rowGap:3,value:u,onValueChange:i=>
1p(i.value),children:[e.jsx(l,{textStyle:"b2-semibold-compact",children:"AI 생성 기록"}),f.map((i,c)=>{var v;return e.jsxs(xe,{p:0,value:`${a-c}`,children:[e.jsx(Se,{lastPipeline:{key:i.key??"",status:i.status,type:i.type,output:((v=i.ai_final_output)==null?void 0:v.output)??""},onRecreate:C.onOpen},i.key??""),e.jsx(ue,{...C,memberKey:t.key,reviews:x,onSubmit:d=>{d.homework_keys.length!==0&&d.member_keys.length!==0&&n({requestBody:d},{onSuccess:()=>{r.invalidateQueries(j.credits.myCredits),r.invalidateQueries(j.users.aiStatuses)},onError:W=>{M.create({title:E(W),type:"error"})}})}},t.key)]},i.key??c)}),e.jsxs(he,{as:X,border:"none",borderBottom:"none",flexWrap:"wrap",columnGap:2,rowGap:3,css:{"& > .chakra-tabs__tab":{marginInline:0}},children:[f.map((i,c)=>e.jsx(be,{asChild:!0,value:`${a-c}`,children:e.jsxs(_,{variant:"outline",size:"sm",colorPalette:"gray",whiteSpace:"nowrap",_before:{w:0},_selected:{color:"blue.600",border:"1px solid",fontWeight:600,borderColor:"blue.600"},children:["기록 ",a-c]})},i.key??c)),e.jsxs(k,{columnGap:2,children:[e.jsx(S,{as:Y,boxSize:3.5,color:"fg.muted"}),e.jsx(l,{textStyle:"c-medium",color:"fg.muted",children:"최대 5개의 AI 기록이 저장됩니다."})]})]})]}),(h==null?void 0:h.status)==="S"&&e.jsxs(g,{rowGap:3,children:[e.jsx(l,{textStyle:"b2-semibold-compact",children:"AI 생성 근거"}),e.jsx(Ce,{selectedAiPipeline:h})]})]})]})},Se=({lastPipeline:t,onRecreate:s})=>{const{isGenerating:r,value:n,placeholder:o}=me({pipeline:t});return e.jsxs(g,{bg:"bg.subtle",flex:"1",rowGap:4,px:5,py:4,borderRadius:"lg",children:[e.jsx(G,{whiteSpace:"pre-wrap",textStyle:"b1-regular",textAlign:"left",color:n===""?"fg.muted":"inherit",children:n||o}),e.jsxs(k,{flexWrap:"wrap",mt:"auto",children:[e.jsxs(l,{textStyle:"c-regular-compact",color:"fg.muted",children:[n.length,"자 (",Q(n)," Byte)"]}),e.jsx(T,{}),e.jsxs(k,{columnGap:1,children:[e.jsx(de,{text:n,size:"sm",borderWidth:0,disabled:r,variant:"ghost",colorPalette:"gray",children:e.jsx(S,{as:J})}),e.jsxs(_,{size:"sm",disabled:r,onClick:s,children:[e.jsx(S,{as:Z,boxSize:5}),"다시 생성"]})]})]})]})},Ce=({selectedAiPipeline:t})=>{const s=b.useMemo(()=>t.type==="B"&&t.homework_highlights?t.homework_highlights.output.replaceAll("**",""):t.type==="R"&&t.refine_info?`- 다듬기 전 AI 기록:
2"${t.refine_info.ref_output??""}"
3
4- 수정 요청사항:
5"${t.refine_info.request_message??""}"`:"",[t]);return e.jsx(B,{as:"pre",whiteSpace:"pre-wrap",px:5,py:4,gap:4,borderRadius:"lg",textStyle:"b1-regular",bg:"bg.subtle",children:s})},ve=({recordDetailOut:t})=>e.jsxs(m,{className:"common-pannel",children:[e.jsxs(k,{children:[e.jsx(l,{textStyle:"b1-semibold-compact",children:"수행평가 채점 결과"}),e.jsx(T,{}),e.jsxs(l,{textStyle:"b2-regular-compact",children:["총점(원점수 기준) ",fe(t.raw_total_score)," /"," ",t.reviews.flatMap(s=>s.homework.project.elements.map(r=>r.levels[0].value)).reduce((s,r)=>s.plus(ge(r)??K),K).toNumber(),"점"]})]}),e.jsxs(g,{rowGap:5,overflow:"auto",children:[t.reviews.map(s=>e.jsxs(m,{flexDirection:"column",gap:3,children:[e.jsxs(l,{textStyle:"b2-semibold-compact",children:["[",s.homework.title,"]"]}),s.status==="SC"?e.jsxs(e.Fragment,{children:[e.jsx(m,{bg:"bg.subtle",py:4,px:5,borderRadius:"lg",flexDirection:"column",rowGap:3,children:s.homework.project.elements.map(r=>e.jsxs(m,{flexDirection:"column",alignItems:"flex-start",rowGap:2,children:[e.jsx(B,{as:"span",textStyle:"b2-semibold-compact",children:r.title}),e.jsx(m,{columnGap:1,children:r.levels.map(n=>e.jsx(O,{px:2,py:1,minW:"35px",textStyle:"b1-semibold-compact",borderRadius:"md",borderWidth:1,borderColor:"border.emphasized",color:"fg.muted",...s.scorings.filter(o=>o.level.element.title===r.title).find(o=>o.level.value===n.value)&&{bg:"fg.muted",color:"white",borderWidth:0},children:Number(n.value)},n.key))})]},r.title))}),e.jsx(G,{p:3,bg:"white",borderWidth:1,borderRadius:"lg",hidden:!s.record,whiteSpace:"pre-wrap",children:e.jsx(B,{children:s.record})})]}):e.jsx(m,{bg:"gray.50",p:3,borderRadius:"lg",flexDirection:"column",gap:3,fontSize:"sm",fontWeight:500,children:"과제 미제출"})]},s.key)),t.snippets.length>0&&e.jsxs(m,{flexDirection:"column",rowGap:3,children:[e.jsxs(k,{w:"full",justifyContent:"space-between",children:[e.jsx(l,{textStyle:"b2-semibold-compact",children:"[관찰 기록]"}),e.jsxs(l,{textStyle:"b2-regular-compact",children:["총 ",t.snippets.length,"건"]})]}),e.jsx(m,{flexDirection:"column",rowGap:3,children:t.snippets.map(s=>e.jsxs(m,{flexDirection:"column",rowGap:1,children:[e.jsx(G,{px:4,py:3,bg:"bg.subtle",borderRadius:"md",children:e.jsx(l,{textStyle:"b2-medium",children:s.text})}),e.jsxs(l,{color:"fg.muted",textStyle:"b3-regular-compact",ml:"auto",children:[ee(s.created_at).format(te)," 작성"]})]},s.key))})]})]})]}),Re=({data:t,records:s,groupKey:r})=>
5e.jsxs(m,{flexDirection:{base:"column-reverse",xl:"row"},width:"100%",gap:5,alignItems:"flex-start",h:"full",minH:0,overflow:{base:"auto",xl:"hidden"},css:{"& .common-pannel":{w:"full",bg:"white",borderRadius:"lg",boxShadow:"sm",p:5,flexDirection:"column",rowGap:5,flex:{base:"unset",xl:1},maxH:{base:"none",xl:"full"}}},children:[e.jsx(ve,{recordDetailOut:t}),e.jsx(ke,{recordDetailOut:t}),e.jsx(we,{recordDetailOut:t,records:s,groupKey:r})]}),_e=({records:t})=>{const{memberKey:s}=$(),r=t.findIndex(({key:p})=>p===s),n=r===0,o=r===t.length-1,x=N(),a=()=>{if(n)return;const{key:p}=t[r-1];x(`../${p}`)},u=()=>{if(o)return;const{key:p}=t[r+1];x(`../${p}`)};return e.jsxs(m,{alignItems:"center",gap:3,ml:"auto",children:[e.jsxs(_,{variant:"link",fontWeight:500,color:"black.400",disabled:n,onClick:a,children:[e.jsx(S,{as:se,boxSize:5,color:"blue.500"}),"이전 학생"]}),e.jsx(l,{color:"black.200",children:"|"}),e.jsxs(_,{disabled:o,variant:"link",fontWeight:500,color:"black.400",onClick:u,children:["다음 학생",e.jsx(S,{ml:1,as:re,boxSize:5,color:"blue.500"})]})]})},ot=()=>{const{courseKey:t,memberKey:s}=$(),[r,n]=b.useState(!1),{data:o,isPending:x}=A({...j.records.detail({memberKey:s}),refetchInterval:r?10*1e3:!1}),a=b.useMemo(()=>o===void 0?null:oe({member:o}),[o]),{data:u}=A({...j.courses.detail({courseKey:t})._ctx.records({groupKey:a}),enabled:a!==null});if(ye({maxWidthState:ne}),je(),b.useEffect(()=>{o&&o.record&&(o.record.ai_pipelines.some(f=>f.status==="D")?n(!0):n(!1))},[o]),x||a===null)return e.jsx(ie,{});const p=o?`${o.student.name}(${o.student.identity})`:"";return e.jsxs(g,{px:6,h:`calc(100vh - ${ae} - ${le})`,pb:"24px",children:[e.jsx(ce,{title:`${p} 학생 기록 근거`,backLink:`/teachers/courses/${t}/records?groupKey=${a}`,...u&&{rightSection:{components:[e.jsx(_e,{records:u},"navigator")]}}}),o&&u&&e.jsx(Re,{data:o,records:u,groupKey:a})]})};export{ot as default};
6//# sourceMappingURL=CourseRecordDetailPage-DFwhKQkq.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.