@@ -17,7 +17,7 @@ import { RoutePoint } from "../constant/enum/routeEnum";
17
17
import { Markers } from "../constant/enum/markerEnum" ;
18
18
import createAdvancedMarker , { createUniversityMarker } from "../utils/markers/createAdvanedMarker" ;
19
19
import toggleMarkers from "../utils/markers/toggleMarkers" ;
20
- import { Link } from "react-router" ;
20
+ import { useNavigate } from "react-router" ;
21
21
import useModal from "../hooks/useModal" ;
22
22
import ReportModal from "../components/map/reportModal" ;
23
23
import useUniversityInfo from "../hooks/useUniversityInfo" ;
@@ -28,9 +28,11 @@ import { CautionIssueType, DangerIssueType, MarkerTypes } from "../data/types/en
28
28
import { CautionIssue , DangerIssue } from "../constant/enum/reportEnum" ;
29
29
30
30
/** API 호출 */
31
- import { useSuspenseQueries } from "@tanstack/react-query" ;
31
+ import { useQuery , useSuspenseQueries } from "@tanstack/react-query" ;
32
32
import { getAllRisks } from "../api/routes" ;
33
33
import { getAllBuildings } from "../api/nodes" ;
34
+ import { getNavigationResult } from "../api/route" ;
35
+ import useQueryError from "../hooks/useQueryError" ;
34
36
35
37
export type SelectedMarkerTypes = {
36
38
type : MarkerTypes ;
@@ -68,8 +70,32 @@ export default function MapPage() {
68
70
const { university } = useUniversityInfo ( ) ;
69
71
useRedirectUndefined < University | undefined > ( [ university ] ) ;
70
72
73
+ const navigate = useNavigate ( ) ;
71
74
if ( ! university ) return ;
72
75
76
+ const [ FailModal , { status, data, refetch : findFastRoute } ] = useQueryError ( {
77
+ queryKey : [ 'fastRoute' , university . id , origin ?. nodeId , destination ?. nodeId ] ,
78
+ queryFn : ( ) => getNavigationResult ( university . id , origin ? origin ?. nodeId : - 1 , destination ? destination ?. nodeId : - 1 ) ,
79
+ enabled : false ,
80
+ retry : 0 ,
81
+ } ,
82
+ undefined ,
83
+ ( ) => { navigate ( '/result' ) } ,
84
+ {
85
+ fallback : {
86
+ 400 : {
87
+ mainTitle : "잘못된 요청입니다." , subTitle : [ "새로고침 후 다시 시도 부탁드립니다." ]
88
+ } ,
89
+ 404 : {
90
+ mainTitle : "해당 경로를 찾을 수 없습니다." , subTitle : [ "해당 건물이 길이랑 연결되지 않았습니다." ]
91
+ } ,
92
+ 422 : {
93
+ mainTitle : "해당 경로를 찾을 수 없습니다." , subTitle : [ "위험 요소 버튼을 클릭하여," , "통행할 수 없는 원인을 파악하실 수 있습니다." ]
94
+ }
95
+ }
96
+ }
97
+ )
98
+
73
99
const results = useSuspenseQueries ( {
74
100
queries : [
75
101
{ queryKey : [ university . id , "risks" ] , queryFn : ( ) => getAllRisks ( university . id ) } ,
@@ -495,9 +521,9 @@ export default function MapPage() {
495
521
</ BottomSheet >
496
522
{ origin && destination && origin . nodeId !== destination . nodeId ? (
497
523
/** 출발지랑 도착지가 존재하는 경우 길찾기 버튼 보이기 */
498
- < Link to = "/result" className = "absolute bottom-6 space-y-2 w-full px-4" >
524
+ < div onClick = { ( ) => findFastRoute ( ) } className = "absolute bottom-6 space-y-2 w-full px-4" >
499
525
< Button variant = "primary" > 길찾기</ Button >
500
- </ Link >
526
+ </ div >
501
527
) : (
502
528
/** 출발지랑 도착지가 존재하지 않거나, 같은 경우 기존 Button UI 보이기 */
503
529
< >
@@ -511,6 +537,7 @@ export default function MapPage() {
511
537
</ >
512
538
) }
513
539
{ isOpen && < ReportModal close = { close } /> }
540
+ < FailModal />
514
541
</ div >
515
542
) ;
516
543
}
0 commit comments