@@ -13,6 +13,7 @@ import { mapApiResponseToStudents, convertToApiFormat, Evaluation } from "@/util
1313import useStudentFilterStore from "@/store/student-filter-store" ;
1414import useGradeFilterStore from "@/store/grade-filter-store" ;
1515import useTeacher from "@/store/teacher-store" ;
16+
1617export default function GradesPage ( ) {
1718 const { grade, classNumber, studentNumber } = useStudentFilterStore ( ) ;
1819 const { year, semester, subject } = useGradeFilterStore ( ) ;
@@ -87,13 +88,7 @@ export default function GradesPage() {
8788
8889 const handleInputBlur = ( ) => {
8990 if ( ! editing ) return ;
90- setStudents ( prev =>
91- prev . map ( stu =>
92- stu . number === editing . row
93- ? { ...stu , [ editing . key ] : inputValue === "" ? undefined : Number ( inputValue ) }
94- : stu
95- )
96- ) ;
91+ setStudents ( ( prev ) => prev . map ( ( stu ) => ( stu . number === editing . row ? { ...stu , [ editing . key ] : inputValue === "" ? undefined : Number ( inputValue ) } : stu ) ) ) ;
9792 setEditing ( null ) ;
9893 } ;
9994
@@ -103,16 +98,17 @@ export default function GradesPage() {
10398
10499 const handleSave = async ( e : React . MouseEvent < HTMLButtonElement > ) => {
105100 e . preventDefault ( ) ;
106- if ( subject != mysubject ) {
107- alert ( `본인의 과목인 ${ mysubject } 만 수정가능합니다.` )
108- } else {
109- const payload = convertToApiFormat ( students , evaluations , Number ( classNumber ) ) ;
110- try {
111- await PostScore ( payload ) ;
112- window . location . reload ( ) ;
113- } catch {
114- alert ( "저장에 실패했습니다. 다시 시도해주세요." ) ;
115- } }
101+ if ( subject != mysubject ) {
102+ alert ( `본인의 과목인 ${ mysubject } 만 수정가능합니다.` ) ;
103+ } else {
104+ const payload = convertToApiFormat ( students , evaluations , Number ( classNumber ) ) ;
105+ try {
106+ await PostScore ( payload ) ;
107+ window . location . reload ( ) ;
108+ } catch {
109+ alert ( "저장에 실패했습니다. 다시 시도해주세요." ) ;
110+ }
111+ }
116112 } ;
117113
118114 const handleAddEval = async ( ) => {
@@ -121,25 +117,16 @@ export default function GradesPage() {
121117 return ;
122118 }
123119 try {
124- await PostEval (
125- subject ,
126- Number ( year ) ,
127- Number ( semester ) ,
128- Number ( grade ) ,
129- evalInput . examType ,
130- evalInput . title ,
131- Number ( evalInput . weight ) ,
132- Number ( evalInput . fullScore )
133- ) ;
134- setEvaluations ( prev => [
120+ await PostEval ( subject , Number ( year ) , Number ( semester ) , Number ( grade ) , evalInput . examType , evalInput . title , Number ( evalInput . weight ) , Number ( evalInput . fullScore ) ) ;
121+ setEvaluations ( ( prev ) => [
135122 ...prev ,
136123 {
137124 evaluationId : Date . now ( ) ,
138125 title : evalInput . title ,
139126 examType : evalInput . examType ,
140127 weight : evalInput . weight ,
141128 fullScore : evalInput . fullScore ,
142- }
129+ } ,
143130 ] ) ;
144131 setShowEvalInput ( false ) ;
145132 setEvalInput ( { title : "" , examType : "WRITTEN" , weight : 20 , fullScore : 100 } ) ;
@@ -149,13 +136,13 @@ export default function GradesPage() {
149136 } ;
150137
151138 return (
152- < div className = "mx-0 sm:mx-8 mt-4 mb-8 h-[calc(100vh-120px)] flex flex-col" >
139+ < div className = "mx-4 sm:mx-8 mt-4 mb-8 h-[calc(100vh-120px)] flex flex-col" >
153140 < GradeHeaderSection />
154141 < GradeActionBar onAddEval = { ( ) => setShowEvalInput ( true ) } onSave = { handleSave } />
155142 < EvalAddModal
156143 open = { showEvalInput }
157144 value = { evalInput }
158- onChange = { v => setEvalInput ( prev => ( { ...prev , ...v } ) ) }
145+ onChange = { ( v ) => setEvalInput ( ( prev ) => ( { ...prev , ...v } ) ) }
159146 onAdd = { handleAddEval }
160147 onCancel = { ( ) => setShowEvalInput ( false ) }
161148 />
0 commit comments