1
+ /* eslint-disable */
1
2
import { useEffect , ReactNode , Suspense } from 'react' ;
2
3
import {
3
4
Routes ,
4
5
Route ,
5
6
useLocation ,
7
+ Navigate ,
6
8
} from 'react-router-dom' ;
7
9
import AuthPage from 'pages/Auth/AuthPage' ;
8
10
import LoginPage from 'pages/Auth/LoginPage' ;
9
11
import BoardPage from 'pages/BoardPage' ;
10
12
import StorePage from 'pages/Store/StorePage' ;
11
- import NoticePage from 'pages/Notice/NoticePage ' ;
12
- import NoticeListPage from 'pages/Notice/NoticeListPage ' ;
13
- import NoticeDetailPage from 'pages/Notice/NoticeDetailPage ' ;
13
+ import ArticlesPage from 'pages/Articles/ArticlesPage ' ;
14
+ import ArticleListPage from 'pages/Articles/ArticleListPage ' ;
15
+ import ArticlesDetailPage from 'pages/Articles/ArticlesDetailPage ' ;
14
16
import Toast from 'components/common/Toast' ;
15
17
import LogPage from 'components/common/LogPage' ;
16
18
import SignupPage from 'pages/Auth/SignupPage' ;
@@ -27,27 +29,39 @@ import TimetablePage from 'pages/TimetablePage/MainTimetablePage';
27
29
import CafeteriaPage from 'pages/Cafeteria' ;
28
30
import MetaHelmet from 'components/common/MetaHelmet' ;
29
31
import ModifyInfoPage from 'pages/Auth/ModifyInfoPage' ;
30
- import PrivateRoute from 'components/common/PrivateRoute' ;
31
32
import AddReviewPage from 'pages/StoreReviewPage/AddReviewPage' ;
32
33
import EditReviewPage from 'pages/StoreReviewPage/EditReviewPage' ;
33
34
import ReviewReportingPage from 'pages/Store/StoreDetailPage/Review/components/ReviewReporting' ;
34
35
import ModifyTimetablePage from 'pages/TimetablePage/ModifyTimetablePage' ;
35
36
import PageNotFound from 'pages/Error/PageNotFound' ;
36
37
import PolicyPage from 'pages/PolicyPage' ;
37
38
import ROUTES from 'static/routes' ;
39
+ import LostItemWritePage from 'pages/Articles/LostItemWritePage' ;
40
+ import LostItemDetailPage from 'pages/Articles/LostItemDetailPage' ;
41
+ import useTokenState from 'utils/hooks/state/useTokenState' ;
38
42
39
- interface HelmetWrapperProps {
43
+ interface WrapperProps {
40
44
title : string ;
41
45
element : ReactNode ;
46
+ needAuth ?: boolean ;
42
47
}
43
48
44
- function HelmetWrapper ( { title, element } : HelmetWrapperProps ) {
49
+ function Wrapper ( {
50
+ title,
51
+ element,
52
+ needAuth = false , // 로그인이 필요한 라우트
53
+ } : WrapperProps ) {
45
54
const location = useLocation ( ) ;
55
+ const token = useTokenState ( ) ;
46
56
47
57
useEffect ( ( ) => {
48
- document . title = title ;
58
+ document . title = `코인 - ${ title } ` ;
49
59
} , [ title , location ] ) ;
50
60
61
+ if ( needAuth && ! token ) {
62
+ return < Navigate replace to = { ROUTES . Main ( ) } /> ;
63
+ }
64
+
51
65
return (
52
66
< >
53
67
< MetaHelmet title = { title } />
@@ -64,47 +78,43 @@ function App() {
64
78
< >
65
79
< Routes >
66
80
< Route path = { ROUTES . Main ( ) } element = { < BoardPage /> } >
67
- < Route path = { ROUTES . Timetable ( ) } element = { < HelmetWrapper title = "코인 - 시간표" element = { < TimetablePage /> } /> } />
68
- < Route path = { ROUTES . TimetableRegular ( { isLink : false } ) } element = { < HelmetWrapper title = "코인 - 시간표 수정" element = { < ModifyTimetablePage /> } /> } />
69
- < Route path = { ROUTES . TimetableDirect ( { isLink : false } ) } element = { < HelmetWrapper title = "코인 - 시간표 수정" element = { < ModifyTimetablePage /> } /> } />
70
- < Route path = { ROUTES . Main ( ) } element = { < HelmetWrapper title = "코인 - 한기대 커뮤니티" element = { < IndexPage /> } /> } />
71
- < Route path = { ROUTES . Store ( ) } element = { < HelmetWrapper title = "코인 - 상점" element = { < StorePage /> } /> } />
72
- < Route path = { ROUTES . BenefitStore ( ) } element = { < HelmetWrapper title = "코인 - 전화 혜택" element = { < StoreBenefitPage /> } /> } />
73
- < Route path = { ROUTES . StoreDetail ( { isLink : false } ) } element = { < HelmetWrapper title = "코인 - 상점 상세" element = { < StoreDetailPage /> } /> } />
74
- < Route path = { ROUTES . BusRoute ( ) } element = { < HelmetWrapper title = "코인 - 버스" element = { < BusRoutePage /> } /> } />
75
- < Route path = { ROUTES . BusCourse ( ) } element = { < HelmetWrapper title = "코인 - 버스" element = { < BusCoursePage /> } /> } />
76
- < Route path = { ROUTES . Cafeteria ( ) } element = { < HelmetWrapper title = "코인 - 식단" element = { < CafeteriaPage /> } /> } />
77
- < Route path = { ROUTES . PrivatePolicy ( ) } element = { < HelmetWrapper title = "코인 - 개인정보 처리방침" element = { < PolicyPage /> } /> } />
78
- < Route path = { ROUTES . BoardNotice ( ) } element = { < HelmetWrapper title = "코인 - 공지사항" element = { < NoticePage /> } /> } >
79
- < Route path = { ROUTES . BoardNotice ( ) } element = { < NoticeListPage /> } />
80
- < Route path = { ROUTES . BoardNoticeDetail ( { isLink : false } ) } element = { < HelmetWrapper title = "코인 - 공지사항 상세" element = { < NoticeDetailPage /> } /> } />
81
+ < Route index element = { < Wrapper title = "한기대 커뮤니티" element = { < IndexPage /> } /> } />
82
+ < Route path = { ROUTES . PrivatePolicy ( ) } element = { < Wrapper title = "개인정보 처리방침" element = { < PolicyPage /> } /> } />
83
+
84
+ < Route path = { ROUTES . Timetable ( ) } element = { < Wrapper title = "시간표" element = { < TimetablePage /> } /> } />
85
+ < Route path = { ROUTES . TimetableRegular ( { isLink : false } ) } element = { < Wrapper title = "시간표 수정" element = { < ModifyTimetablePage /> } /> } />
86
+ < Route path = { ROUTES . TimetableDirect ( { isLink : false } ) } element = { < Wrapper title = "시간표 수정" element = { < ModifyTimetablePage /> } /> } />
87
+
88
+ < Route path = { ROUTES . Store ( ) } element = { < Wrapper title = "상점" element = { < StorePage /> } /> } />
89
+ < Route path = { ROUTES . BenefitStore ( ) } element = { < Wrapper title = "전화 혜택" element = { < StoreBenefitPage /> } /> } />
90
+ < Route path = { ROUTES . StoreDetail ( { isLink : false } ) } element = { < Wrapper title = "상점 상세" element = { < StoreDetailPage /> } /> } />
91
+ < Route path = { ROUTES . Review ( { isLink : false } ) } element = { < Wrapper needAuth title = "상점 리뷰" element = { < AddReviewPage /> } /> } />
92
+ < Route path = { ROUTES . ReviewEdit ( { isLink : false } ) } element = { < Wrapper needAuth title = "상점 리뷰" element = { < EditReviewPage /> } /> } />
93
+ < Route path = { ROUTES . ReviewReport ( { isLink : false } ) } element = { < Wrapper needAuth title = "리뷰 신고" element = { < ReviewReportingPage /> } /> } />
94
+ < Route path = { ROUTES . Room ( ) } element = { < Wrapper title = "복덕방" element = { < RoomPage /> } /> } />
95
+ < Route path = { ROUTES . RoomDetail ( { isLink : false } ) } element = { < Wrapper title = "복덕방 상세" element = { < RoomDetailPage /> } /> } />
96
+
97
+ < Route path = { ROUTES . BusRoute ( ) } element = { < Wrapper title = "버스" element = { < BusRoutePage /> } /> } />
98
+ < Route path = { ROUTES . BusCourse ( ) } element = { < Wrapper title = "버스" element = { < BusCoursePage /> } /> } />
99
+ < Route path = { ROUTES . Cafeteria ( ) } element = { < Wrapper title = "식단" element = { < CafeteriaPage /> } /> } />
100
+ < Route path = { ROUTES . Articles ( ) } element = { < Wrapper title = "공지사항" element = { < ArticlesPage /> } /> } >
101
+ < Route index element = { < ArticleListPage /> } />
102
+ < Route path = { ROUTES . ArticlesDetail ( { isLink : false } ) } element = { < Wrapper title = "공시사항 상세" element = { < ArticlesDetailPage /> } /> } />
103
+ < Route path = { ROUTES . LostItemDetail ( { isLink : false } ) } element = { < Wrapper title = "분실물 상세" element = { < LostItemDetailPage /> } /> } />
81
104
</ Route >
82
- < Route path = { ROUTES . Room ( ) } element = { < HelmetWrapper title = "코인 - 복덕방 " element = { < RoomPage /> } /> } />
83
- < Route path = { ROUTES . RoomDetail ( { isLink : false } ) } element = { < HelmetWrapper title = "코인 - 복덕방 상세 " element = { < RoomDetailPage /> } /> } />
84
- < Route path = { ROUTES . CampusInfo ( ) } element = { < HelmetWrapper title = "코인 - 교내 시설물 정보" element = { < CampusInfo /> } /> } />
105
+ < Route path = { ROUTES . LostItemFound ( ) } element = { < Wrapper needAuth title = "분실물 글쓰기 " element = { < LostItemWritePage /> } /> } />
106
+ < Route path = { ROUTES . LostItemLost ( ) } element = { < Wrapper needAuth title = "분실물 글쓰기 " element = { < LostItemWritePage /> } /> } />
107
+ < Route path = { ROUTES . CampusInfo ( ) } element = { < Wrapper title = "교내 시설물 정보" element = { < CampusInfo /> } /> } />
85
108
</ Route >
86
- < Route
87
- path = { ROUTES . Auth ( ) }
88
- element = { < PrivateRoute requireAuthentication = { false } element = { < AuthPage /> } /> }
89
- >
90
- < Route index element = { < HelmetWrapper title = "코인 - 로그인" element = { < LoginPage /> } /> } />
91
- < Route path = { ROUTES . AuthSignup ( ) } element = { < HelmetWrapper title = "코인 - 회원가입" element = { < SignupPage /> } /> } />
92
- < Route path = { ROUTES . AuthFindPW ( ) } element = { < HelmetWrapper title = "코인 - 비밀번호 찾기" element = { < FindPasswordPage /> } /> } />
93
- </ Route >
94
- < Route path = { ROUTES . Main ( ) } element = { < BoardPage /> } >
95
- < Route path = { ROUTES . Review ( { isLink : false } ) } element = { < PrivateRoute requireAuthentication element = { < HelmetWrapper title = "코인 - 상점 리뷰" element = { < AddReviewPage /> } /> } /> } />
96
- < Route path = { ROUTES . ReviewEdit ( { isLink : false } ) } element = { < PrivateRoute requireAuthentication element = { < HelmetWrapper title = "코인 - 상점 리뷰" element = { < EditReviewPage /> } /> } /> } />
97
- < Route path = { ROUTES . ReviewReport ( { isLink : false } ) } element = { < PrivateRoute requireAuthentication element = { < HelmetWrapper title = "코인 - 리뷰 신고" element = { < ReviewReportingPage /> } /> } /> } />
98
109
99
- </ Route >
100
110
< Route path = { ROUTES . Auth ( ) } element = { < AuthPage /> } >
101
- < Route path = { ROUTES . AuthModifyInfo ( ) } element = { < PrivateRoute requireAuthentication element = { < HelmetWrapper title = "코인 - 유저 정보변경" element = { < ModifyInfoPage /> } /> } /> } />
111
+ < Route index element = { < Wrapper title = "로그인" element = { < LoginPage /> } /> } />
112
+ < Route path = { ROUTES . AuthSignup ( ) } element = { < Wrapper title = "회원가입" element = { < SignupPage /> } /> } />
113
+ < Route path = { ROUTES . AuthFindPW ( ) } element = { < Wrapper title = "비밀번호 찾기" element = { < FindPasswordPage /> } /> } />
114
+ < Route path = { ROUTES . AuthModifyInfo ( ) } element = { < Wrapper needAuth title = "유저 정보변경" element = { < ModifyInfoPage /> } /> } />
102
115
</ Route >
103
116
104
- < Route path = { ROUTES . Webview ( ) } >
105
- < Route path = { ROUTES . WebviewCampusInfo ( ) } element = { < HelmetWrapper title = "코인 - 교내 시설물 정보" element = { < CampusInfo /> } /> } />
106
- </ Route >
107
- < Route path = { ROUTES . NotFound ( ) } element = { < HelmetWrapper title = "코인 - 404 Not Found" element = { < PageNotFound /> } /> } />
117
+ < Route path = { ROUTES . NotFound ( ) } element = { < Wrapper title = "404 Not Found" element = { < PageNotFound /> } /> } />
108
118
</ Routes >
109
119
< Toast />
110
120
</ >
0 commit comments