= () => {
- const { query, replace } = useRouter();
- const reviewRole = useSearchParam('role');
- const selectedRole = useMemo(() => {
- if (!reviewRole || !isProfileReviewListRole(reviewRole)) {
- return;
- }
- return reviewRole;
- }, [reviewRole]);
-
- // 랜덤 이미지를 picsum.photos에서 가져오는 함수
- function getRandomImageUrl(): string {
- const width = 800; // 이미지 너비
- const height = 600; // 이미지 높이
- const randomNumber = Math.floor(Math.random() * 1000); // 랜덤 숫자 생성 (picsum.photos는 0부터 999까지의 이미지를 제공)
- return `https://picsum.photos/${width}/${height}?random=${randomNumber}`;
- }
-
- // 목데이터 생성
- function generateMockReviewList(numReviews: number): GetReviewListResponse[] {
- const mockReviewList: GetReviewListResponse[] = [];
-
- for (let i = 1; i <= numReviews; i++) {
- const reviewImg: ImageType[] = [];
- const numImages = Math.floor(Math.random() * 5); // 랜덤으로 이미지 개수 생성
-
- // 랜덤 이미지 추가
- for (let j = 0; j < numImages; j++) {
- reviewImg.push({
- id: `image_${j}`,
- imageUrl: getRandomImageUrl(),
- });
- }
-
- mockReviewList.push({
- reviewId: i,
- userProfileImg: `https://picsum.photos/100/100?random=${i}`, // 프로필 이미지는 각각 다른 이미지로 설정
- nickname: `user${i}`,
- rating: Math.floor(Math.random() * 5) + 1, // 1에서 5까지의 랜덤한 평점 설정
- content: `Review content ${i}`,
- createdAt: dayjs().subtract(i, 'day').format('YYYY-MM-DD'),
- reviewImg: reviewImg,
- });
- }
-
- return mockReviewList;
- }
-
- // 목데이터 생성
- const numReviews = 10; // 생성할 리뷰 개수
- const mockReviewList = generateMockReviewList(numReviews);
-
- // const reviewData = useSuspenseQuery({
- // queryKey: [API_GET_REVIEW_LIST_KEY, { role: selectedRole }],
- // queryFn: () => getProfileReviewList({ reviewType: selectedRole ?? 'RECEIVER' }),
- // });
-
- // console.log(reviewData);
-
- return (
-
-
- {categoryTab.map((tab) => {
- const onClick = () => {
- replace({ query: { ...query, role: tab.id } });
- };
-
- return (
-
- );
- })}
-
-
-
- {/* */}
-
- {mockReviewList.map((review) => (
-
- ))}
- {/* */}
- {/* */}
-
-
- );
-};
-
-export default React.memo(ProfileReviewList);
diff --git a/src/components/profile/ProfileTab.tsx b/src/components/profile/ProfileTab.tsx
index da4b23d..a25ccb9 100644
--- a/src/components/profile/ProfileTab.tsx
+++ b/src/components/profile/ProfileTab.tsx
@@ -2,11 +2,11 @@ import styled from '@emotion/styled';
import { useRouter } from 'next/router';
import { useMemo } from 'react';
import { useSearchParam } from 'react-use';
-import PartySituation from './PartySituation';
+import PartySituation from './party/status/PartySituation';
import TabComponent from './TabComponent';
-import PartyRequest from './PartyRequest';
-import ReviewList from './ProfileReviewList';
-import ProfileReviewList from './ProfileReviewList';
+import PartyRequest from './party/request/PartyRequest';
+import ReviewList from './review/ProfileReview';
+import ProfileReviewList from './review/ProfileReview';
interface CategoryItemType {
id: CategoryIdType;
@@ -78,7 +78,7 @@ const ProfileTab = () => {
replace({ query: { category: id, role: 'SENDER' } });
return;
}
- replace({ query: { category: id, role: 'HOST' } });
+ replace({ query: { category: id, role: 'VOLUNTEER', status: 'RECRUIT' } });
};
return (
diff --git a/src/components/profile/ProfileTabPanel.tsx b/src/components/profile/ProfileTabPanel.tsx
deleted file mode 100644
index d8cc737..0000000
--- a/src/components/profile/ProfileTabPanel.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import Box from "@mui/material/Box";
-import QuerySuspenseErrorBoundary from "@components/hoc/QuerySuspenseErrorBoundary";
-import ProfileError from "./ProfileError";
-import ProfileLoading from "./ProfileLoading";
-
-interface TabPanelProps {
- children?: React.ReactNode;
- index: number;
- value: number;
-}
-
-const ProfileTabPanel = (props: TabPanelProps) => {
- const { children, value, index, ...other } = props;
-
- return (
- }
- >
-
- {value === index && {children}}
-
-