@@ -2,7 +2,7 @@ import React from 'react';
22import { useRouter } from 'next/router' ;
33import { useSuspenseQuery } from '@tanstack/react-query' ;
44import { deptQueries } from 'api/dept/queries' ;
5- import { Lecture , MyLectureInfo } from 'api/timetable/entity' ;
5+ import { Lecture , MyLectureInfo , SemesterCheckResponse , TimetableFrameListResponse } from 'api/timetable/entity' ;
66import { isValidTimetableFrameId } from 'api/timetable/queries' ;
77import DownloadIcon from 'assets/svg/download-icon.svg' ;
88import GraduationIcon from 'assets/svg/graduation-icon.svg' ;
@@ -24,13 +24,30 @@ import DownloadTimetableModal from './DownloadTimetableModal';
2424import styles from './MyLectureTimetable.module.scss' ;
2525
2626interface MainTimetableLayoutProps {
27- curriculum : React . ReactNode ;
28- myLectures : Lecture [ ] | MyLectureInfo [ ] | undefined ;
29- onClickDownloadImage : ( e : React . MouseEvent < HTMLButtonElement > ) => void ;
30- onClickEdit : ( ) => void ;
31- onClickGraduation : ( ) => void ;
32- timetableContent : React . ReactNode ;
33- footer ?: React . ReactNode ;
27+ readonly curriculum : React . ReactNode ;
28+ readonly myLectures : Lecture [ ] | MyLectureInfo [ ] | undefined ;
29+ readonly onClickDownloadImage : ( e : React . MouseEvent < HTMLButtonElement > ) => void ;
30+ readonly onClickEdit : ( ) => void ;
31+ readonly onClickGraduation : ( ) => void ;
32+ readonly timetableContent : React . ReactNode ;
33+ readonly footer ?: React . ReactNode ;
34+ }
35+
36+ function checkSemesterAndTimetable (
37+ mySemester : SemesterCheckResponse | null | undefined ,
38+ frameList : TimetableFrameListResponse ,
39+ ) : boolean {
40+ if ( mySemester ?. semesters . length === 0 ) {
41+ toast . error ( '학기가 존재하지 않습니다. 학기를 추가해주세요.' ) ;
42+ return false ;
43+ }
44+
45+ if ( ! frameList . some ( ( frame ) => isValidTimetableFrameId ( frame . id ) ) ) {
46+ toast . error ( '시간표가 존재하지 않습니다. 시간표를 추가해주세요.' ) ;
47+ return false ;
48+ }
49+
50+ return true ;
3451}
3552
3653function MainTimetableLayout ( {
@@ -79,27 +96,13 @@ function InvalidMainTimetable() {
7996 const { data : deptList } = useSuspenseQuery ( deptQueries . list ( ) ) ;
8097 const { data : mySemester } = useSemesterCheck ( token ) ;
8198
82- const isSemesterAndTimetableExist = ( ) => {
83- if ( mySemester ?. semesters . length === 0 ) {
84- toast . error ( '학기가 존재하지 않습니다. 학기를 추가해주세요.' ) ;
85- return false ;
86- }
87-
88- if ( ! timeTableFrameList . some ( ( frame ) => isValidTimetableFrameId ( frame . id ) ) ) {
89- toast . error ( '시간표가 존재하지 않습니다. 시간표를 추가해주세요.' ) ;
90- return false ;
91- }
92-
93- return true ;
94- } ;
95-
9699 const onClickDownloadImage = ( e : React . MouseEvent < HTMLButtonElement > ) => {
97100 e . stopPropagation ( ) ;
98- isSemesterAndTimetableExist ( ) ;
101+ checkSemesterAndTimetable ( mySemester , timeTableFrameList ) ;
99102 } ;
100103
101104 const onClickEdit = ( ) => {
102- isSemesterAndTimetableExist ( ) ;
105+ checkSemesterAndTimetable ( mySemester , timeTableFrameList ) ;
103106 } ;
104107
105108 return (
@@ -121,7 +124,7 @@ function InvalidMainTimetable() {
121124 ) ;
122125}
123126
124- function ValidMainTimetable ( { timetableFrameId } : { timetableFrameId : number } ) {
127+ function ValidMainTimetable ( { timetableFrameId } : { readonly timetableFrameId : number } ) {
125128 const [ isModalOpen , openModal , closeModal ] = useBooleanState ( false ) ;
126129 const token = useTokenState ( ) ;
127130 const semester = useSemester ( ) ;
@@ -132,24 +135,10 @@ function ValidMainTimetable({ timetableFrameId }: { timetableFrameId: number })
132135 const { data : deptList } = useSuspenseQuery ( deptQueries . list ( ) ) ;
133136 const { data : mySemester } = useSemesterCheck ( token ) ;
134137
135- const isSemesterAndTimetableExist = ( ) => {
136- if ( mySemester ?. semesters . length === 0 ) {
137- toast . error ( '학기가 존재하지 않습니다. 학기를 추가해주세요.' ) ;
138- return false ;
139- }
140-
141- if ( ! timeTableFrameList . some ( ( frame ) => isValidTimetableFrameId ( frame . id ) ) ) {
142- toast . error ( '시간표가 존재하지 않습니다. 시간표를 추가해주세요.' ) ;
143- return false ;
144- }
145-
146- return true ;
147- } ;
148-
149138 const onClickDownloadImage = ( e : React . MouseEvent < HTMLButtonElement > ) => {
150139 e . stopPropagation ( ) ;
151140
152- if ( isSemesterAndTimetableExist ( ) ) {
141+ if ( checkSemesterAndTimetable ( mySemester , timeTableFrameList ) ) {
153142 logger . actionEventClick ( {
154143 team : 'USER' ,
155144 event_label : 'timetable' ,
@@ -161,7 +150,7 @@ function ValidMainTimetable({ timetableFrameId }: { timetableFrameId: number })
161150 } ;
162151
163152 const onClickEdit = ( ) => {
164- if ( isSemesterAndTimetableExist ( ) ) {
153+ if ( checkSemesterAndTimetable ( mySemester , timeTableFrameList ) ) {
165154 router . push (
166155 `/${ ROUTES . TimetableModify ( { id : String ( timetableFrameId ) , type : 'regular' } ) } &year=${ semester ?. year } &term=${ semester ?. term } ` ,
167156 ) ;
@@ -190,7 +179,7 @@ function ValidMainTimetable({ timetableFrameId }: { timetableFrameId: number })
190179 ) ;
191180}
192181
193- function MainTimetable ( { timetableFrameId } : { timetableFrameId : number } ) {
182+ function MainTimetable ( { timetableFrameId } : { readonly timetableFrameId : number } ) {
194183 if ( ! isValidTimetableFrameId ( timetableFrameId ) ) {
195184 return < InvalidMainTimetable /> ;
196185 }
0 commit comments