11"use client" ;
22
33import { useRouter } from "next/navigation" ;
4- import { useEffect , useState } from "react" ;
4+ import { useState } from "react" ;
55
66import TopDetailNavigation from "@/components/layout/TopDetailNavigation" ;
77import ProgressBar from "@/components/ui/ProgressBar" ;
88
99import ConfirmStep from "./ConfirmStep" ;
1010import DoneStep from "./DoneStep" ;
11+ import EmptyGPA from "./EmptyGPA" ;
1112import GpaStep from "./GpaStep" ;
1213import LanguageStep from "./LanguageStep" ;
1314import UniversityStep from "./UniversityStep" ;
1415
15- import { GpaScore , LanguageTestScore } from "@/types/score" ;
1616import { ListUniversity } from "@/types/university" ;
1717
18- import { postApplicationApi } from "@/api/application" ;
19- import { getMyGpaScoreApi , getMyLanguageTestScoreApi } from "@/api/score" ;
20- import { getUniversityListPublicApi } from "@/api/university" ;
18+ import usePostSubmitApplication from "@/api/applications/client/usePostSubmitApplication" ;
19+ import useGetMyGpaScore from "@/api/score/client/useGetMyGpaScore" ;
20+ import useGetMyLanguageTestScore from "@/api/score/client/useGetMyLanguageTestScore" ;
21+ import useGetUniversitySearchByText from "@/api/university/client/useGetUniversitySearchByText" ;
2122
2223const ApplyPageContent = ( ) => {
2324 const router = useRouter ( ) ;
2425 const [ step , setStep ] = useState < number > ( 1 ) ;
2526
26- const [ languageTestScoreList , setLanguageTestScoreList ] = useState < LanguageTestScore [ ] > ( [ ] ) ;
27- const [ gpaScoreList , setGpaScoreList ] = useState < GpaScore [ ] > ( [ ] ) ;
28- const [ universityList , setUniversityList ] = useState < ListUniversity [ ] > ( [ ] ) ;
27+ const { data : universityList = [ ] } = useGetUniversitySearchByText ( "" ) ;
28+
29+ const { data : gpaScoreList = [ ] } = useGetMyGpaScore ( ) ;
30+ const { data : languageTestScoreList = [ ] } = useGetMyLanguageTestScore ( ) ;
31+ const { mutate : postSubmitApplication } = usePostSubmitApplication ( ) ;
2932
3033 const [ curLanguageTestScore , setCurLanguageTestScore ] = useState < number | null > ( null ) ;
3134 const [ curGpaScore , setCurGpaScore ] = useState < number | null > ( null ) ;
3235 const [ curUniversityList , setCurUniversityList ] = useState < number [ ] > ( [ ] ) ;
3336
34- const [ isSubmitting , setIsSubmitting ] = useState < boolean > ( false ) ;
35-
36- useEffect ( ( ) => {
37- const fetchAll = async ( ) => {
38- try {
39- const [ gpaRes , languageRes , universityRes ] = await Promise . all ( [
40- getMyGpaScoreApi ( ) ,
41- getMyLanguageTestScoreApi ( ) ,
42- getUniversityListPublicApi ( ) ,
43- ] ) ;
44- setGpaScoreList (
45- gpaRes . data . gpaScoreStatusResponseList . filter ( ( score : GpaScore ) => score . verifyStatus === "APPROVED" ) ,
46- ) ;
47- setLanguageTestScoreList (
48- languageRes . data . languageTestScoreStatusResponseList . filter (
49- ( score : LanguageTestScore ) => score . verifyStatus === "APPROVED" ,
50- ) ,
51- ) ;
52-
53- // 대학명을 지역/나라, 대학명 가나다 순으로 정렬합니다
54- const sortedUniversityList = [ ...universityRes . data ] . sort ( ( a , b ) => {
55- // 1) region 비교
56- const regionCompare = a . region . localeCompare ( b . region ) ;
57- if ( regionCompare !== 0 ) return regionCompare ;
58-
59- // 2) country 비교
60- const countryCompare = a . country . localeCompare ( b . country ) ;
61- if ( countryCompare !== 0 ) return countryCompare ;
62-
63- // 3) 같은 region, country라면 대학명을 비교(가나다 순)
64- return a . koreanName . localeCompare ( b . koreanName ) ;
65- } ) ;
66- setUniversityList ( sortedUniversityList ) ;
67- } catch ( err ) {
68- if ( err . response ) {
69- console . error ( "Axios response error" , err . response ) ;
70- if ( err . response . status === 401 || err . response . status === 403 ) {
71- alert ( "로그인이 필요합니다" ) ;
72- document . location . href = "/login" ;
73- } else {
74- alert ( err . response . data ?. message ) ;
75- }
76- } else {
77- console . error ( "Error" , err . message ) ;
78- alert ( err . message ) ;
79- }
80- }
81- } ;
82- fetchAll ( ) ;
83- } , [ ] ) ;
84-
8537 // 다음 스텝으로 넘어가기
8638 const goNextStep = ( ) => setStep ( ( prev ) => prev + 1 ) ;
8739 // 이전 스텝으로 돌아가기
@@ -108,69 +60,68 @@ const ApplyPageContent = () => {
10860 return ;
10961 }
11062
111- if ( isSubmitting ) return ;
112- setIsSubmitting ( true ) ; // TODO: 현재 임시 submit 처리, 이후에 통합 처리 추가
113- try {
114- await postApplicationApi ( {
115- gpaScoreId : curGpaScore ,
116- languageTestScoreId : curLanguageTestScore ,
117- universityChoiceRequest : {
118- firstChoiceUniversityId : curUniversityList [ 0 ] || null ,
119- secondChoiceUniversityId : curUniversityList [ 1 ] || null ,
120- thirdChoiceUniversityId : curUniversityList [ 2 ] || null ,
121- } ,
122- } ) ;
123- setStep ( 99 ) ;
124- } catch ( err ) {
125- alert ( err . response . data . message ) ;
126- } finally {
127- setIsSubmitting ( false ) ;
128- }
63+ postSubmitApplication ( {
64+ gpaScoreId : curGpaScore ,
65+ languageTestScoreId : curLanguageTestScore ,
66+ universityChoiceRequest : {
67+ firstChoiceUniversityId : curUniversityList [ 0 ] || null ,
68+ secondChoiceUniversityId : curUniversityList [ 1 ] || null ,
69+ thirdChoiceUniversityId : curUniversityList [ 2 ] || null ,
70+ } ,
71+ } ) ;
72+ setStep ( 99 ) ;
12973 } ;
13074
75+ const isDataExist = gpaScoreList . length === 0 || languageTestScoreList . length === 0 ;
13176 return (
13277 < >
13378 < TopDetailNavigation title = "지원하기" handleBack = { goPrevStep } />
134- < div className = "px-5" >
135- { ( step === 1 || step === 2 || step === 3 ) && < ProgressBar currentStep = { step } totalSteps = { 3 } /> }
79+ < div className = "mt-1 px-5" >
80+ { ( step === 1 || step === 2 || step === 3 ) && < ProgressBar currentStep = { step } totalSteps = { 4 } /> }
13681 </ div >
137- { step === 1 && (
138- < LanguageStep
139- languageTestScoreList = { languageTestScoreList }
140- curLanguageTestScore = { curLanguageTestScore }
141- setCurLanguageTestScore = { setCurLanguageTestScore }
142- onNext = { goNextStep }
143- />
144- ) }
145- { step === 2 && (
146- < GpaStep
147- gpaScoreList = { gpaScoreList }
148- curGpaScore = { curGpaScore }
149- setCurGpaScore = { setCurGpaScore }
150- onNext = { goNextStep }
151- />
152- ) }
153- { step === 3 && (
154- < UniversityStep
155- universityList = { universityList }
156- curUniversityList = { curUniversityList }
157- setCurUniversityList = { setCurUniversityList }
158- onNext = { goNextStep }
159- />
160- ) }
161- { step === 4 && (
162- < ConfirmStep
163- languageTestScore = { languageTestScoreList . find ( ( score ) => score . id === curLanguageTestScore ) }
164- gpaScore = { gpaScoreList . find ( ( score ) => score . id === curGpaScore ) }
165- universityList = {
166- curUniversityList
167- . map ( ( id ) => universityList . find ( ( university ) => university . id === id ) )
168- . filter ( Boolean ) as ListUniversity [ ]
169- }
170- onNext = { handleSubmit }
171- />
82+ { isDataExist ? (
83+ < EmptyGPA />
84+ ) : (
85+ < >
86+ { step === 1 && (
87+ < LanguageStep
88+ languageTestScoreList = { languageTestScoreList }
89+ curLanguageTestScore = { curLanguageTestScore }
90+ setCurLanguageTestScore = { setCurLanguageTestScore }
91+ onNext = { goNextStep }
92+ />
93+ ) }
94+ { step === 2 && (
95+ < GpaStep
96+ gpaScoreList = { gpaScoreList }
97+ curGpaScore = { curGpaScore }
98+ setCurGpaScore = { setCurGpaScore }
99+ onNext = { goNextStep }
100+ />
101+ ) }
102+ { step === 3 && (
103+ < UniversityStep
104+ universityList = { universityList }
105+ curUniversityList = { curUniversityList }
106+ setCurUniversityList = { setCurUniversityList }
107+ onNext = { goNextStep }
108+ />
109+ ) }
110+ { step === 4 && (
111+ < ConfirmStep
112+ languageTestScore = { languageTestScoreList . find ( ( score ) => score . id === curLanguageTestScore ) }
113+ gpaScore = { gpaScoreList . find ( ( score ) => score . id === curGpaScore ) }
114+ universityList = {
115+ curUniversityList
116+ . map ( ( id ) => universityList . find ( ( university ) => university . id === id ) )
117+ . filter ( Boolean ) as ListUniversity [ ]
118+ }
119+ onNext = { handleSubmit }
120+ />
121+ ) }
122+ { step === 99 && < DoneStep /> }
123+ </ >
172124 ) }
173- { step === 99 && < DoneStep /> }
174125 </ >
175126 ) ;
176127} ;
0 commit comments