PageSourceSearch

https://clipo.ai/assets/RecordEditPage-CzWmSkLh.js

js clipo.ai collected 2026-10-05 11:57:28 UTC 13,545 bytes, 3 lines download raw bytes

1import{an as $,y as U,iH as ie,gH as ce,r as S,z as ee,bc as te,c as P,lP as G,a4 as le,t as O,D as J,j as e,ag as de,m as D,T as y,F as Z,l as A,B as ue,s as re,aM as ye,gS as he,gT as me,n as N,e as B,hr as se,x as f,b as pe,X as V,aC as ne,R as X,jM as xe,f as fe,P as oe,fh as ge,lU as be,w as q,A as _e,b2 as Se,em as je,o as Ce,aI as ke,cK as ve,K as we,lV as Ie,aw as H}from"./index-aREvobyF.js";import{S as Te}from"./StoryRecordLayout-DYZQk1IJ.js";import{K as De,u as Fe}from"./KeywordBadges-BtXGCYTz.js";import{S as Be}from"./switch-BmUkzzHy.js";import{c as Ee}from"./activity-characters.zod-B-SmnJdH.js";import{C as Ke}from"./vars-B8hcJ5CT.js";import{u as We}from"./index-xW_BAHmH.js";import{C as Oe}from"./CopyButton-Dj1GIf_w.js";import{A as Pe}from"./ai-failure-messages-rTmvRgra.js";import{b as ae}from"./text-BZlRU9-h.js";import{a as Ge}from"./skeleton-mQUxPgEi.js";import{S as Ve}from"./SimpleTable-DF7EMZw0.js";import{A as R}from"./AIRecordOverwriteButton-DdQLwviB.js";import{I as Le}from"./IconButtonWithTooltip-BidBKNAt.js";import{u as Me}from"./useParamsStrict-CRxFNkx_.js";import{u as z,w as qe}from"./xlsx-Dxpd-3wM.js";import"./PageMetaHeader-6lUw-EYb.js";import"./Stepper-B6Hsfzct.js";import"./ButtonWithTooltip-mLqxUQDU.js";import"./index-tSUJqBuq.js";import"./index-jD9-SXOc.js";import"./mathLatex-CP574j0c.js";import"./link-box-DcUyRFYn.js";import"./table-BqH1TAsn.js";try{let s=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},r=new s.Error().stack;r&&(s._sentryDebugIds=s._sentryDebugIds||{},s._sentryDebugIds[r]="fd9a9722-e7e6-4f5d-935f-f4bfa40050ee",s._sentryDebugIdIdentifier="sentry-dbid-fd9a9722-e7e6-4f5d-935f-f4bfa40050ee")}catch{}const Q=Ee,He=({groupMember:s,lastAiRecord:r,...d})=>{const{groupKey:x}=$(),g=U(),{aiLackOfCreditDisclosure:k}=ie(),[b,j]=ce("행특기록_기록편집_키워드사전보기"),[c,w]=S.useState(r?r.target_characters_count:500),l=ee({defaultValues:{story:s.story??void 0}}),{getValues:u,setValue:h,reset:v,control:C}=l,m=te({control:C,name:"story"}),E=!!(m&&m.length>Q),F=We([]),K=()=>{v({story:s.story??void 0}),F.clear(),j(!1),d.onClose()},I=P({mutationFn:o=>G.appsActivityCharactersApiActivityCharacterGroupMemberStoryUpdate(o)}),T=P({mutationFn:o=>G.appsActivityCharactersApiActivityCharacterGroupRecordsAiGenerate({requestBody:o}),onError:o=>{if(o instanceof le&&o.status===429){k.onOpen();return}O.create({title:J(o),type:"error"})}}),L=()=>{if(!m||E){O.create({title:"키워드 및 일화를 입력해 주세요.",type:"error"});return}I.mutate({groupMemberKey:s.key,requestBody:{story:m}},{onSuccess:()=>{x!==void 0&&g.setQueryData(f.activityCharacters.group._ctx.detail({groupKey:x})._ctx.members.queryKey,o=>o===void 0?o:o.map(t=>t.key===s.key?{...t,story:m}:t)),T.mutate({member_keys:[s.key],target_characters_count:c},{onSuccess:()=>{g.invalidateQueries(f.credits.myCredits),x!==void 0&&g.invalidateQueries({queryKey:f.activityCharacters.group._ctx.detail({groupKey:x})._ctx.recordsAiStatus.queryKey}),g.invalidateQueries(f.users.aiStatuses),K()}})},onError:o=>{O.create({title:J(o),type:"error"})}})},M=({category:o,keyword:t})=>{const n=u("story")??"";if((n?n+", "+t:t).length>Q){O.create({title:`${Q}자 이내로 입력해 주세요.`,type:"error"});return}h("story",n?n+", "+t:t),F.add(`${o}-${t}`)},W=I.isPending||T.isPending;return e.jsx(de,{title:"기록 생성",size:"lg",closeOnInteractOutside:!1,closeOnEscape:!1,trigger:{...d},footer:{description:"AI 크레딧 1개가 사용됩니다.",cancelButton:{isHidden:!0},saveButton:e.jsxs(N,{disabled:E||!m||W,loading:W,loadingText:"생성 중",onClick:L,children:[e.jsx(B,{as:se}),"기록 생성"]})},children:e.jsxs(D,{flexDir:"column",w:"100%",gap:"1.5rem",children:[e.jsx(y,{textStyle:"b1-regular",children:"학생의 키워드 및 활동 내역을 입력해 주세요."}),e.jsxs(D,{flexDir:"column",w:"100%",border:"1px solid",borderColor:"border.border",borderRadius:"lg",bgColor:"bg.subtle",children:[e.jsxs(Z,{orientation:"horizontal",w:"100%",alignItems:"center",justifyContent:"space-between",gap:2,p:4,children:[e.jsx(A,{as:y,minW:"fit-content",textStyle:"b1-semibold",children:"키워드 사전 보기"}),e.jsx(Be,{checked:b,onCheckedChange:o=>j(o.checked)})]}),b&&e.jsx(ue,{width:"100%",height:"100%",maxH:"21.25rem",position:"relative",overflowY:"auto",borderRadius:"inherit",children:e.jsx(De,{pt:"0.5rem",clickedKeywords:F,onClickBadge:M})})]}),e.jsxs(Z,{children:[e.jsxs(A,{as:y,textStyle:"b1-semibold",children:[s.student.identity," ",s.student.name," 학생 키워드 및 일화"]}),e.jsx(re,{control:C,name:"story",render:({field:{...o}})=>e.jsx(ye,{height:"9.5rem",resize:"none",overflowY:"auto",borderRadius:"md",borderColor:"border.border",placeholder:`학생의 특성을 나타내는 키워드나 일화를 쉼표(,)로 구분하여 입력해 주세요.
2키워드와 일화를 조합한 기록이 생성됩니다.`,...o})})]}),e.jsxs(D,{flexDir:"column",w:"100%",gap:3,children:[e.jsx(y,{textStyle:"t4-semibold-compact",children:"AI 기록 생성 분량"}),e.jsx(he,{mt:5,value:c.toString(),onValueChange:({value:o})=>{w(Number(o))},children:e.jsx(D,{flexDir:"column",gap:4,children:Ke.map(o=>e.jsx(me,{value:o.value.toString(),children:e.jsx(y,{textStyle:"b1-medium-compact",children:o.label})},o.value))})})]})]})})},ze=({groupMember:s,lastAiRecord:r})=>{const d=pe();return e.jsxs(e.Fragment,{children:[e.jsxs(N,{size:"sm",loading:(r==null?void 0:r.status)==="I",loadingText:"생성 중",onClick:d.onOpen,children:[e.jsx(B,{as:se}),r?"다시 생성":"기록 생성"]}),e.jsx(He,{groupMember:s,lastAiRecord:r,...d})]})},Qe=({groupMember:s,lastAiRecord:r})=>{const d=S.useMemo(()=>!s.story||r===null?"기록 생성 버튼을 눌러 AI 기록을 생성해 보세요.":r.status==="I"?"":r.status==="F"?Pe.WITH_CREDIT_REFUND:"기록 생성 버튼을 눌러 AI 기록을 생성해 보세요.",[s.story,r]);return e.jsxs(V,{height:"100%",border:"1px solid",borderRadius:"0.5rem",borderColor:"border",p:5,justify:"space-between",gap:7,children:[(r==null?void 0:r.status)==="I"?e.jsx(D,{flexDir:"column",w:"full",h:"160px",css:{"& > div > div:last-of-type":{maxWidth:"50%"}},children:e.jsx(Ge,{noOfLines:3,gap:2,"data-testid":"skeleton"})}):e.jsx(ne,{readOnly:!0,resize:"none",border:0,textStyle:"b1-regular",p:0,minH:"160px",maxH:"320px",minW:"380px",placeholder:d,value:(r==null?void 0:r.content)??void 0,...(r==null?void 0:r.status)==="F"&&{_placeholder:{color:"fg.error",opacity:.8}}}),e.jsxs(D,{flexDir:"row",w:"100%",alignItems:"center",children:[e.jsx(y,{color:"fg.muted",textStyle:"b3-regular-compact",children:e.jsx($e,{lastAiRecord:r})}),e.jsx(X,{}),e.jsx(Oe,{circle:!1,text:(r==null?void 0:r.content)??"",disabled:!(r!=null&&r.content),boxSize:"2.25rem",mr:1,variant:"ghost",colorPalette:"gray",borderWidth:0,_hover:{bg:"colorPalette.muted"},children:e.jsx(B,{as:xe})}),e.jsx(ze,{groupMember:s,lastAiRecord:r})]})]})},$e=({lastAiRecord:s})=>s===null||(s==null?void 0:s.status)==="I"||(s==null?void 0:s.status)==="F"?e.jsx(e.Fragment,{}):s.content?`${s.content.length}자 (${ae(s.content)}Byte)`:"0자 (0Byte)",Ue=({groupMember:s,onSaved:r})=>{const{groupKey:d}=$(),x=U(),{control:g,getValues:k}=fe(),b=S.useRef(null),{mutate:j}=P({mutationFn:l=>G.appsActivityCharactersApiActivityCharacterGroupSaveRecords({groupKey:d??"",requestBody:l})}),c=()=>{var l;(l=b.current)==null||l.focus()},w=()=>{const l=k(s.key);l!==void 0&&j({records:[{group_member_key:s.key,content:l}]},{onSuccess:()=>{r(),d!==void 0&&x.setQueryData(f.activityCharacters.group._ctx.detail({groupKey:d})._ctx.members.queryKey,u=>u===void 0?u:u.map(h=>h.key===s.key?{...h,activity_character_record:{...h.activity_character_record,content:l}}:h))}})};return e.jsx(V,{p:5,h:"full",border:"1px solid",borderRadius:"0.5rem",borderColor:"border",justify:"space-between",_focusWithin:{borderColor:"blue.500"},onClick:()=>c(),children:e.jsx(re,{control:g,name:s.key,render:({field:{ref:l,value:u,onBlur:h,...v}})=>{const C=ae(u);return e.jsxs(e.Fragment,{children:[e.jsx(ne,{ref:m=>{b.current=m,l(m)},border:0,resize:"none",p:0,textStyle:"b1-regular",minH:"160px",maxH:"320px",minW:"380px",_focusVisible:{border:0},_focus:{border:0},value:u,placeholder:"AI 생성 기록을 가져와서 수정하거나 직접 작성하실 수 있어요.",onBlur:()=>{w(),h()},...v}),e.jsxs(oe,{width:"100%",height:"2rem",children:[e.jsx(y,{color:"fg.muted",textStyle:"b3-regular-compact",children:u?`${u.length}자 (${C}Byte)`:"0자 (0Byte)"}),e.jsx(X,{}),C>1500&&e.jsx(y,{textStyle:"b3-regular-compact",color:"fg.error",children:"1,500byte 초과"})]})]})}})})},Ne=()=>{const s=ge(be);return S.useLayoutEffect(()=>(s(!0),()=>{s(!1)}),[s]),e.jsx(e.Fragment,{})}
2,gt=()=>{const s=$(),{groupKey:r}=Me(s),d=U(),[x,g]=S.useState(!1),[k,b]=S.useState(null),{data:j}=q({...f.activityCharacters.group._ctx.detail({groupKey:r})}),{data:c,isFetched:w}=q({...f.activityCharacters.group._ctx.detail({groupKey:r})._ctx.members}),{data:l}=q({...f.activityCharacters.group._ctx.detail({groupKey:r})._ctx.recordsAiStatus,refetchInterval:x?5*1e3:!1}),{mutate:u}=P({mutationFn:t=>G.appsActivityCharactersApiActivityCharacterGroupSaveRecords({groupKey:r,requestBody:t})}),h=S.useMemo(()=>(l??[]).reduce((t,n)=>(t.set(n.group_member.key,n),t),new Map),[l]),v=S.useMemo(()=>(c==null?void 0:c.sort((t,n)=>t.student.identity.localeCompare(n.student.identity)))??[],[c]),C=ee({defaultValues:c==null?void 0:c.reduce((t,n)=>{var a;return t[n.key]=((a=n.activity_character_record)==null?void 0:a.content)||void 0,t},{})}),{getValues:m,setValue:E,control:F,reset:K}=C,I=te({control:F}),T=(t,n,a)=>{if(!n||n.status!=="S"||!n.content)return;const i=n.content;E(t.key,i),a&&u({records:[{group_member_key:t.key,content:i}]},{onSuccess:()=>{b({at:H(),mode:"manual"}),d.setQueryData(f.activityCharacters.group._ctx.detail({groupKey:r})._ctx.members.queryKey,_=>_===void 0?_:_.map(p=>p.key===t.key?{...p,activity_character_record:{...p.activity_character_record,content:i}}:p))}})},L=()=>{c==null||c.forEach(t=>{var a;const n=((a=h.get(t.key))==null?void 0:a.last_ai_generated_record)??null;T(t,n,!1)})},M=()=>{const t=m(),n=Object.entries(t).filter(([a,i])=>i!==void 0).map(([a,i])=>({group_member_key:a,content:i??""}));u({records:n},{onSuccess:()=>{b({at:H(),mode:"manual"}),r!==void 0&&d.invalidateQueries({queryKey:f.activityCharacters.group._ctx.detail({groupKey:r})._ctx.members.queryKey})}})},W=()=>{b({at:H(),mode:"auto"})},o=()=>{const t=j?`행동특성_및_종합의견_지원_${j.name}`:"행동특성_및_종합의견_지원",n=["학년","반","번호","이름","키워드 및 일화","기록"],a=v.map(p=>{var Y;return[p.student.grade,p.student.class_num,p.student.number,p.student.name,p.story,((Y=p.activity_character_record)==null?void 0:Y.content)||""]}),i=z.aoa_to_sheet([n,...a]),_=z.book_new();z.book_append_sheet(_,i,"sheet1"),qe(_,`${t}.xlsx`)};return Fe(()=>{const t=(l??[]).map(n=>{var a;return(a=n.last_ai_generated_record)==null?void 0:a.status}).filter(n=>n!==void 0);t.length!==0&&(!x&&t.some(n=>n==="I")?g(!0):x&&t.every(n=>n==="S")&&g(!1))},[l]),S.useEffect(()=>{w&&Object.keys(I).length===0&&c&&K(c.reduce((t,n)=>{var a;return t[n.key]=((a=n.activity_character_record)==null?void 0:a.content)||void 0,t},{}))},[w,I,c,K]),Ne(),e.jsx(Te,{group:j,status:"record",children:e.jsx(_e,{...C,children:e.jsxs(V,{width:"100%",height:"100%",gap:0,children:[e.jsxs(oe,{width:"100%",backgroundColor:"white",px:"1.5rem",gap:0,pt:"1.25rem",children:[e.jsxs(y,{textStyle:"b1-medium-compact",children:["총 ",v.length,"명"]}),e.jsx(X,{}),k&&e.jsxs(y,{textStyle:"b1-regular-compact",mr:3,color:"fg.muted",children:[Se(k.at,je),k.mode==="manual"?" ":" 자동","저장됨"]}),e.jsx(R,{buttonType:"allRecords",onConfirm:L}),e.jsx(Ce,{orientation:"vertical",mx:3,h:"20px"}),e.jsxs(N,{size:"sm",mr:2,onClick:M,children:[e.jsx(B,{as:ke}),"저장"]}),e.jsx(Le,{tooltipProps:{content:"엑셀 다운로드",showArrow:!0},size:"sm",colorPalette:"green",onClick:o,children:e.jsx(B,{as:ve})})]}),e.jsx(we,{width:"100%",maxWidth:"100%",overflowX:"auto",height:"100%",px:"1.5rem",pt:"0.75rem",pb:"2.5rem",m:0,backgroundColor:"white",children:e.jsx(Ve,{width:"100%",minWidth:Ie.lg,height:"100%",borderColor:"gray.200",rows:v.map(t=>{var _;const n=!!t.story,a=!!I[t.key],i=((_=h.get(t.key))==null?void 0:_.last_ai_generated_record)??null;return{key:t.key,cells:[{key:"학번",children:t.student.identity},{key:"이름",children:t.student.name},{key:"story",children:e.jsx(V,{gap:"0.75rem",px:2,children:e.jsx(y,{color:n?"black.400":"black.200",width:"100%",whiteSpace:"pre-wrap",lineClamp:4,wordBreak:"keep-all",children:t.story||"-"})})},{key:"generated",children:e.jsx(Qe,{groupMember:t,lastAiRecord:i}),minW:"420px"},{key:"send",children:e.jsx(R,{buttonType:"singleRecord",disabled:(i==null?void 0:i.status)!=="S"||!(i!=null&&i.content),onConfirm:()=>T(t,i,!0),...!a&&{onClick:()=>T(t,i,!0)}})},{key:"record",minW:"420px",children:e.jsx(Ue,{groupMember:t,onSaved:W})}]}}),css:{"& th":{px:"0.5rem"},"& td":{px:0,py:4}},header:{columns:[{key:"학번",minWidth:"5rem",children:"학번"},{key:"이름",minWidth:"6rem",children:"이름"},{key:"story",minWidth:"8rem",children:"키워드 및 일화"},{key:"generated",textTransform:"none",width:"50%",children:e.jsx(y,{color:"gray.800",children:"AI Assistant가 생성한 기록"})},{key:"send",minWidth:"3rem",children:""},{key:"record",width:"50%",children:"선생님 직접 작성"}]}})})]})})})};export{gt as default};
3//# sourceMappingURL=RecordEditPage-CzWmSkLh.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.