Skip to content

Commit 3a512b6

Browse files
authored
Merge pull request #158 from CodeitFESI4-Team1/Feat/156/ReviewList
Feat/156/review list
2 parents afba481 + 6c368ca commit 3a512b6

File tree

18 files changed

+723
-314
lines changed

18 files changed

+723
-314
lines changed

package-lock.json

Lines changed: 465 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/_apis/review/my-review-apis.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { fetchApi } from '@/src/utils/api';
2+
import { ApiResponse, MyReviewResponse } from '@/src/types/review';
3+
4+
export function getMyReviews(page: number, size: number): Promise<MyReviewResponse> {
5+
// 최종 반환 타입
6+
const url = `/api/review/memberReviews?page=${page}&size=${size}`;
7+
return fetchApi<ApiResponse<MyReviewResponse>>(url, {
8+
method: 'GET',
9+
headers: {
10+
'Content-Type': 'application/json',
11+
},
12+
}).then((response) => {
13+
return response.data;
14+
});
15+
}
16+
17+
// 리뷰 삭제 API
18+
export function deleteReview(reviewId: number): Promise<void> {
19+
const url = `/api/review/${reviewId}`;
20+
return fetchApi<void>(url, {
21+
method: 'DELETE',
22+
headers: {
23+
'Content-Type': 'application/json',
24+
},
25+
});
26+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { getMyReviews } from '@/src/_apis/review/my-review-apis';
2+
import { MyReviewResponse } from '@/src/types/review';
3+
4+
export function useGetMyReviewsQuery({ size }: { size: number }) {
5+
return {
6+
queryKey: ['myReviews'],
7+
queryFn: ({ pageParam = 0 }: { pageParam?: number }) => getMyReviews(pageParam, size),
8+
getNextPageParam: (lastPage: MyReviewResponse, allPages: MyReviewResponse[]) => {
9+
return lastPage.hasNext ? allPages.length : undefined;
10+
},
11+
};
12+
}

src/app/(crew)/crew/detail/[id]/_components/crew-review-list.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export default function CrewReviewList({
2121
return (
2222
<div className="flex flex-col justify-between p-6">
2323
<div className="mb-6 grid flex-grow gap-4">
24-
{reviews.map((review) => (
24+
{/* {reviews.map((review) => (
2525
<ReviewCard
2626
key={review.id}
2727
rate={review.rate}
@@ -30,7 +30,7 @@ export default function CrewReviewList({
3030
crewId={review.crewId}
3131
reviewer={review.reviewer}
3232
/>
33-
))}
33+
))} */}
3434
</div>
3535
<div className="mt-6 flex justify-center">
3636
<Pagination

src/app/(crew)/my-page/_components/profile-card/container.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export default function ProfileCard() {
5050
const file = (event.target as HTMLInputElement)?.files?.[0];
5151
if (file) {
5252
if (file.size > 5 * 1024 * 1024) {
53-
alert('5MB 이하의 파일만 업로드 가능합니다.');
53+
toast.error('5MB 이하의 파일만 업로드 가능합니다.');
5454
return;
5555
}
5656

src/app/(crew)/my-page/_components/review-tabs.tsx

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,7 @@
33
import { useState } from 'react';
44
import { useRouter } from 'next/navigation';
55
import { Divider } from '@mantine/core';
6-
import { getReviewableGatherings } from '@/src/_apis/gathering/reviewable-gathering';
7-
import { useInfiniteScroll } from '@/src/hooks/use-infinite-scroll';
8-
import { fetchMyReviewData } from '@/src/app/api/mock-api/review';
9-
import ReviewCardList from '@/src/components/common/review-list/review-card-list';
106
import Tabs from '@/src/components/common/tab';
11-
import ReviewableGatheringCardList from '@/src/components/my-page/reviewable-gatherings/reviewable-gathering-card-list';
12-
import { ReviewInformResponse } from '@/src/types/review';
13-
import { ReviewableGatheringCardInformResponse } from '@/src/types/reviewable-gathering-card';
147

158
export default function ReviewTabs() {
169
const myPageTabs = [

src/app/(crew)/my-page/layout.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import ProfileCardContainer from '@/src/app/(crew)/my-page/_components/profile-card/container';
22
import ReviewTabs from './_components/review-tabs';
33

4-
export default function MyPage() {
4+
export default function MyPage({ children }: { children: React.ReactNode }) {
55
return (
66
<div className="container mx-auto my-0 min-h-screen max-w-pc bg-gray-50 px-3 py-11 md:px-8 lg:px-11">
77
<div className="lg:gap-4.5 flex flex-col gap-3 md:gap-4">
88
<ProfileCardContainer />
99
</div>
1010
<ReviewTabs />
11+
<div>{children}</div>
1112
<div />
1213
</div>
1314
);
Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,40 @@
1+
'use client';
2+
3+
import { toast } from 'react-toastify';
4+
import { Loader } from '@mantine/core';
5+
import { useGetMyReviewsQuery } from '@/src/_queries/review/my-review-queries';
6+
import { useInfiniteScroll } from '@/src/hooks/use-infinite-scroll';
7+
import ReviewCardList from '@/src/components/common/review-list/review-card-list';
8+
19
export default function MyReviewPage() {
2-
return <div>my review list component</div>;
10+
const size = 6;
11+
12+
const { data, isLoading, error, ref, isFetchingNextPage, refetch } = useInfiniteScroll(
13+
useGetMyReviewsQuery({ size }),
14+
);
15+
16+
if (isLoading) {
17+
return (
18+
<div className="flex h-full items-center justify-center">
19+
<Loader />
20+
</div>
21+
);
22+
}
23+
24+
if (error) {
25+
toast.error('리뷰를 불러오는 중 문제가 발생했습니다.');
26+
return null;
27+
}
28+
29+
return (
30+
<div className="mt-8">
31+
<ReviewCardList data={data ?? { pages: [], pageParams: [] }} refetch={refetch} />
32+
{isFetchingNextPage && (
33+
<div className="mt-4 flex items-center justify-center">
34+
<Loader />
35+
</div>
36+
)}
37+
<div ref={ref} className="h-[1px]" />
38+
</div>
39+
);
340
}

src/app/(crew)/my-page/page.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ import { redirect } from 'next/navigation';
44

55
export default function MyPage() {
66
redirect('/my-page/reviewable');
7+
return null;
78
}

src/app/api/mock-api/review.ts

Lines changed: 0 additions & 41 deletions
This file was deleted.

0 commit comments

Comments
 (0)