Skip to content

Commit bc8a580

Browse files
authored
Merge pull request #117 from WithTime12/develop
[Deploy] 배포
2 parents 8576692 + 9e05beb commit bc8a580

File tree

4 files changed

+68
-27
lines changed

4 files changed

+68
-27
lines changed

src/api/axiosInstance.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ axiosInstance.interceptors.response.use(
2020
async (error) => {
2121
if (error.status === 401) {
2222
if (isRedirecting) {
23+
window.location.href = '/';
2324
return Promise.reject(error);
2425
}
2526

@@ -44,19 +45,23 @@ axiosInstance.interceptors.response.use(
4445
console.error('refreshToken이 없습니다. 로그인 페이지로 이동합니다.');
4546
void logout();
4647
localStorage.clear();
48+
window.location.href = '/';
4749
} else if (refreshError.status === 404) {
4850
console.error('사용자 정보를 찾지 못했습니다. 로그인 페이지로 이동합니다.');
4951
void logout();
5052
localStorage.clear();
53+
window.location.href = '/';
5154
} else {
5255
console.error('알 수 없는 오류가 발생했습니다', errors);
5356
void logout();
5457
localStorage.clear();
58+
window.location.href = '/';
5559
}
5660
} else {
5761
console.error('알 수 없는 오류가 발생했습니다', errors);
5862
void logout();
5963
localStorage.clear();
64+
window.location.href = '/';
6065
}
6166

6267
return Promise.reject(errors);

src/components/modal/dateCourseSearchFilterModal.tsx

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// DateCourseSearchFilterModal.tsx
21
import { useMemo } from 'react';
3-
import { useLocation } from 'react-router-dom';
2+
import { Navigate, useLocation } from 'react-router-dom';
3+
import ClipLoader from 'react-spinners/ClipLoader';
44

55
import { DateCourseQuestion } from '@/constants/dateCourseQuestion';
66

@@ -80,12 +80,12 @@ export default function DateCourseSearchFilterModal({ onClose }: TProps) {
8080
transportation,
8181
userPreferredKeywords,
8282
size: 5,
83-
page: 1,
83+
page: 0,
8484
isBookmarked,
8585
};
8686

87-
const { data: courseData } = useGetCourse(commonParams);
88-
const { data: bookmarkedData } = useGetBookmarkedCourse(commonParams);
87+
const { data: courseData, isLoading: courseDataLoading, error: courseDataError } = useGetCourse(commonParams);
88+
const { data: bookmarkedData, isLoading: bookmarkDataLoading, error: bookmarkDataError } = useGetBookmarkedCourse(commonParams);
8989

9090
const data = isBookmarked ? bookmarkedData : courseData;
9191

@@ -162,6 +162,10 @@ export default function DateCourseSearchFilterModal({ onClose }: TProps) {
162162
}
163163
};
164164

165+
if (bookmarkDataError || courseDataError) {
166+
return <Navigate to="/error" replace={true} />;
167+
}
168+
165169
return (
166170
<Modal onClose={onClose} title="검색 필터">
167171
<div className="flex flex-col w-full max-w-[80vw] px-[8%] gap-10 py-10">
@@ -180,9 +184,13 @@ export default function DateCourseSearchFilterModal({ onClose }: TProps) {
180184
))}
181185

182186
<div className="flex w-full justify-end">
183-
<Button size="big-16" variant="mint" className="w-fit text-center px-[30px] font-body1" onClick={onClose}>
184-
데이트 코스 {data?.result.totalCount ?? 0}개 보기
185-
</Button>
187+
{bookmarkDataLoading || courseDataLoading ? (
188+
<ClipLoader />
189+
) : (
190+
<Button size="big-16" variant="mint" className="w-fit text-center px-[30px] font-body1" onClick={onClose}>
191+
데이트 코스 {data?.result.totalCount ?? 0}개 보기
192+
</Button>
193+
)}
186194
</div>
187195
</div>
188196
</Modal>

src/pages/dateCourse/CoursePage.tsx

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useState } from 'react';
2-
import { useNavigate } from 'react-router-dom';
2+
import { Navigate, useNavigate } from 'react-router-dom';
3+
import ClipLoader from 'react-spinners/ClipLoader';
34

45
import useGetBookmarkedCourse from '@/hooks/course/useGetBookmarkedCourse';
56
import { useUserGrade } from '@/hooks/home/useUserGrade';
@@ -15,11 +16,11 @@ import useModalStore from '@/store/useModalStore';
1516
export default function Course() {
1617
const navigate = useNavigate();
1718
const { openModal } = useModalStore();
18-
const [current, setCurrent] = useState(1);
19+
const [current, setCurrent] = useState(0);
1920

2021
const { budget, datePlaces, dateDurationTime, startTime, mealTypes, transportation, userPreferredKeywords } = useFilterStore();
21-
// 수정 예정
22-
const { data } = useGetBookmarkedCourse({
22+
23+
const { data, isLoading, error } = useGetBookmarkedCourse({
2324
page: current,
2425
size: 5,
2526
budget,
@@ -31,7 +32,13 @@ export default function Course() {
3132
startTime,
3233
isBookmarked: true,
3334
});
35+
3436
const { data: gradeData } = useUserGrade();
37+
38+
if (error) {
39+
return <Navigate to="/error" replace={true} />;
40+
}
41+
3542
return (
3643
<div className="flex flex-col justify-center items-center w-full">
3744
<div className="flex w-[1000px] max-w-[80vw] flex-col py-[24px] gap-[64px]">
@@ -64,12 +71,20 @@ export default function Course() {
6471
</div>
6572
</div>
6673
</div>
67-
<div className="flex flex-col gap-[24px] ">
68-
{data?.result.dateCourseList.map((course, idx) => {
69-
return <DateCourse key={course.dateCourseId ?? idx} {...course} />;
70-
})}
71-
</div>
72-
<Navigator current={current} end={data?.result.totalPages!} onClick={setCurrent} />
74+
{isLoading ? (
75+
<div className="w-full justify-center flex">
76+
<ClipLoader />
77+
</div>
78+
) : (
79+
<>
80+
<div className="flex flex-col gap-[24px] ">
81+
{data?.result.dateCourseList.map((course, idx) => {
82+
return <DateCourse key={course.dateCourseId ?? idx} {...course} />;
83+
})}
84+
</div>
85+
<Navigator current={current + 1} end={data?.result.totalPages!} onClick={setCurrent} />
86+
</>
87+
)}
7388
</div>
7489
</div>
7590
</div>

src/pages/dateCourse/FindDateCourse.tsx

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useEffect, useState } from 'react';
2-
import { useNavigate } from 'react-router-dom';
2+
import { Navigate, useNavigate } from 'react-router-dom';
3+
import ClipLoader from 'react-spinners/ClipLoader';
34

45
import useGetCourse from '@/hooks/course/useGetCourse';
56

@@ -14,14 +15,14 @@ import useModalStore from '@/store/useModalStore';
1415

1516
function FindDateCourse() {
1617
const { openModal } = useModalStore();
17-
const [current, setCurrent] = useState(1);
18+
const [current, setCurrent] = useState(0);
1819
const navigate = useNavigate();
1920
const { budget, datePlaces, dateDurationTime, startTime, mealTypes, transportation, userPreferredKeywords } = useFilterStore();
2021
useEffect(() => {
2122
setCurrent(1);
2223
}, [budget, datePlaces, dateDurationTime, startTime, mealTypes, transportation, userPreferredKeywords]);
2324

24-
const { data: courseData } = useGetCourse({
25+
const { data, isLoading, error } = useGetCourse({
2526
page: current,
2627
size: 5,
2728
budget,
@@ -34,6 +35,10 @@ function FindDateCourse() {
3435
isBookmarked: false,
3536
});
3637

38+
if (error) {
39+
return <Navigate to="/error" replace={true} />;
40+
}
41+
3742
return (
3843
<div className="w-full flex justify-center items-center flex-col h-fit">
3944
<div className="flex w-[1000px] max-w-[80vw] flex-col py-[24px] gap-[20px]">
@@ -51,12 +56,20 @@ function FindDateCourse() {
5156
검색 필터
5257
</div>
5358
</div>
54-
<div className="flex flex-col gap-[24px] ">
55-
{courseData?.result.dateCourseList.map((course) => {
56-
return <DateCourse key={course.dateCourseId} {...course} />;
57-
})}
58-
</div>
59-
<Navigator current={current} end={courseData?.result.totalPages!} onClick={setCurrent} />
59+
{isLoading ? (
60+
<div className="w-full justify-center flex">
61+
<ClipLoader />
62+
</div>
63+
) : (
64+
<>
65+
<div className="flex flex-col gap-[24px] ">
66+
{data?.result?.dateCourseList.map((course, idx) => {
67+
return <DateCourse key={course.dateCourseId ?? idx} {...course} />;
68+
})}
69+
</div>
70+
<Navigator current={current + 1} end={data?.result?.totalPages!} onClick={setCurrent} />
71+
</>
72+
)}
6073
</div>
6174
</div>
6275
</div>

0 commit comments

Comments
 (0)