1
- import { useEffect , useState } from "react" ;
1
+ import { Suspense , useEffect , useState } from "react" ;
2
2
import Input from "../components/customInput" ;
3
- import UniversityButton from "../components/universityButton" ;
4
3
import Button from "../components/customButton" ;
5
- import { Link , useNavigate } from "react-router" ;
4
+ import { Link } from "react-router" ;
6
5
import useUniversityInfo from "../hooks/useUniversityInfo" ;
7
- import { useQuery } from "@tanstack/react-query" ;
8
- import { getUniversityList } from "../api/search" ;
9
6
import { University } from "../data/types/university" ;
10
7
import useRoutePoint from "../hooks/useRoutePoint" ;
8
+ import UniversityList from "../components/university/universityList" ;
9
+ import InnerLoading from "../components/loading/innerLoading" ;
11
10
12
11
export default function UniversitySearchPage ( ) {
13
12
const [ selectedUniv , setSelectedUniv ] = useState < University > ( ) ;
14
13
const { university, setUniversity } = useUniversityInfo ( ) ;
15
14
const { setDestination, setOrigin } = useRoutePoint ( ) ;
16
15
const [ input , setInput ] = useState < string > ( "" ) ;
17
- const navigation = useNavigate ( ) ;
18
-
19
- const { data : universityList } = useQuery ( {
20
- queryKey : [ "university" , input ] ,
21
- queryFn : ( ) => getUniversityList ( input ) ,
22
- } ) ;
23
16
24
17
useEffect ( ( ) => {
25
18
if ( university ) {
@@ -38,37 +31,14 @@ export default function UniversitySearchPage() {
38
31
< div className = "h-full w-full" onClick = { ( ) => setSelectedUniv ( undefined ) } >
39
32
< div className = "relative flex flex-col h-dvh w-full max-w-[450px] mx-auto py-5" >
40
33
< div className = "w-full px-[14px] pb-[17px] border-b-[1px] border-gray-400" >
41
- < Input
42
- onChangeDebounce = { ( e ) => setInput ( e ) }
43
- placeholder = "우리 학교를 검색해보세요"
44
- handleVoiceInput = { ( ) => { } }
45
- />
34
+ < Input onChangeDebounce = { ( e ) => setInput ( e ) } placeholder = "우리 학교를 검색해보세요" />
46
35
</ div >
47
36
< div className = "overflow-y-scroll flex-1" >
48
- < ul
49
- className = "w-full h-full px-[14px] py-[6px]"
50
- onClick = { ( ) => {
51
- setSelectedUniv ( undefined ) ;
52
- } }
37
+ < Suspense
38
+ fallback = { < InnerLoading isLoading = { true } loadingContent = "학교 목록을 불러오고 있습니다." /> }
53
39
>
54
- { universityList &&
55
- universityList . map ( ( univ ) => (
56
- < UniversityButton
57
- key = { `university-${ univ . id } ` }
58
- selected = { selectedUniv ?. id === univ . id }
59
- onClick = { ( ) => {
60
- if ( selectedUniv ?. id === univ . id ) {
61
- setUniversity ( univ ) ;
62
- navigation ( "/map" ) ;
63
- return ;
64
- }
65
- setSelectedUniv ( univ ) ;
66
- } }
67
- name = { univ . name }
68
- img = { univ . imageUrl }
69
- />
70
- ) ) }
71
- </ ul >
40
+ < UniversityList query = { input } selectedUniv = { selectedUniv } setSelectedUniv = { setSelectedUniv } />
41
+ </ Suspense >
72
42
</ div >
73
43
< div className = "px-[14px]" >
74
44
{ selectedUniv && (
0 commit comments