Skip to content

Commit 42fcf00

Browse files
authored
Merge pull request #304 from devpalsPlus/feat/#302
유저페이지 카테고리 분리, 공지사항 상세 인피티니 삭제, FAQ 더보기 애니메이션 추가 #302
2 parents 575d9e0 + b3d674b commit 42fcf00

File tree

15 files changed

+134
-114
lines changed

15 files changed

+134
-114
lines changed

src/api/userpage.api.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { ApiUserInfo } from '../models/userInfo';
2-
import type { ApiSelectUserProject } from '../models/userProject';
2+
import type { ApiUserProject } from '../models/userProject';
33
import { httpClient } from './http.api';
44

55
export const getUserInfo = async (id: number) => {
@@ -15,8 +15,8 @@ export const getUserInfo = async (id: number) => {
1515

1616
export const getUserJoinedProjectList = async (id: number) => {
1717
try {
18-
const response = await httpClient.get<ApiSelectUserProject>(
19-
`/user/${id}/project`
18+
const response = await httpClient.get<ApiUserProject>(
19+
`/user/${id}/participated`
2020
);
2121

2222
return response.data;
@@ -25,3 +25,16 @@ export const getUserJoinedProjectList = async (id: number) => {
2525
throw error;
2626
}
2727
};
28+
29+
export const getUserManagedProjectList = async (id: number) => {
30+
try {
31+
const response = await httpClient.get<ApiUserProject>(
32+
`/user/${id}/project`
33+
);
34+
35+
return response.data;
36+
} catch (error) {
37+
console.error('다른 유저 기획 프로젝트 조회: ', error);
38+
throw error;
39+
}
40+
};

src/components/user/mypage/joinedProject/MyJoinProjects.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ const MyJoinProjects = () => {
1414
return <Spinner />;
1515
}
1616

17-
if (!myJoinedProjectListData) return;
18-
1917
return (
2018
<S.Container>
2119
<S.FilterWrapper>

src/components/user/userPage/joinedProject/UserJoinProject.tsx

Lines changed: 0 additions & 71 deletions
This file was deleted.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { Link } from 'react-router-dom';
2+
import * as S from '../../mypage/joinedProject/MyJoinProjects.styled';
3+
import { ROUTES } from '../../../../constants/user/routes';
4+
import NoContent from '../../../common/noContent/NoContent';
5+
import ScrollWrapper from '../../mypage/ScrollWrapper';
6+
import Spinner from '../../mypage/Spinner';
7+
import Project from '../../mypage/joinedProject/Project';
8+
import { useGetUserProjectList } from '../../../../hooks/user/useGetUserProjectList';
9+
10+
export default function UserProjects() {
11+
const { userProjectData, isLoading, title } = useGetUserProjectList();
12+
13+
if (isLoading) {
14+
return <Spinner />;
15+
}
16+
17+
return (
18+
<S.Container>
19+
<S.FilterWrapper>
20+
<S.FilterTitle>{title}</S.FilterTitle>
21+
</S.FilterWrapper>
22+
{userProjectData && userProjectData.length > 0 ? (
23+
<ScrollWrapper>
24+
<S.WrapperProject>
25+
{userProjectData?.map((project) => (
26+
<Link
27+
key={project.id}
28+
to={`${ROUTES.projectDetail}/${project.id}`}
29+
>
30+
<Project project={project} />
31+
</Link>
32+
))}
33+
</S.WrapperProject>
34+
</ScrollWrapper>
35+
) : (
36+
<S.NoWrapper>
37+
<NoContent type='projects' />
38+
</S.NoWrapper>
39+
)}
40+
</S.Container>
41+
);
42+
}

src/constants/user/routes.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,15 @@ export const ROUTES = {
1111
manageProjectsPassNonPass: '/manage/pass-nonpass',
1212
mypage: '/mypage',
1313
mypageEdit: '/mypage/edit',
14-
mypageJoinedProjects: 'joined-projects',
15-
mypageAppliedProjects: 'apply-projects',
14+
joinedProjects: 'joined-projects',
15+
managedProjects: 'managed-projects',
1616
myPageNotifications: 'notifications',
1717
notificationsAppliedProjects: 'applied-projects',
1818
notificationsCheckedApplicants: 'checked-applicants',
1919
activityInquiries: 'inquiries',
2020
comments: 'comments',
2121
myPageActivityLog: 'activity-log',
2222
userpage: '/user',
23-
userJoinedProject: 'joined-projects',
2423
modifyProject: '/project-modify',
2524
notFound: '/not-found',
2625
customerService: '/customer-service',

src/hooks/queries/user/keys.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export const myInfoKey = {
1616
export const userInfoKey = {
1717
userProfile: ['userProfile'],
1818
userJoinedList: ['userJoinedProjectList'],
19+
userManagedList: ['userManagedProjectList'],
1920
} as const;
2021

2122
export const ProjectListKey = {

src/hooks/user/useGetNoticeDetail.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ export const useGetNoticeDetail = (id: string) => {
66
const { data: noticeDetailData, isLoading } = useQuery({
77
queryKey: [CustomerService.noticeDetail, id],
88
queryFn: () => getNoticeDetail(id),
9-
staleTime: Infinity,
10-
gcTime: Infinity,
119
});
1210

1311
return { noticeDetail: noticeDetailData, isLoading };
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { useQuery } from '@tanstack/react-query';
2+
import {
3+
getUserJoinedProjectList,
4+
getUserManagedProjectList,
5+
} from '../../api/userpage.api';
6+
import { userInfoKey } from '../queries/user/keys';
7+
import { useLocation, useParams } from 'react-router-dom';
8+
import type { ApiUserProject } from '../../models/userProject';
9+
10+
export const useGetUserProjectList = () => {
11+
const { userId } = useParams();
12+
const location = useLocation();
13+
const isJoinedPage = location.pathname.includes('joined') ? true : false;
14+
const title = isJoinedPage
15+
? '참여한 프로젝트 리스트'
16+
: '기획한 프로젝트 리스트';
17+
18+
const { data, isLoading } = useQuery<ApiUserProject>({
19+
queryKey: [userInfoKey.userManagedList, userId, isJoinedPage],
20+
queryFn: () =>
21+
isJoinedPage
22+
? getUserJoinedProjectList(Number(userId))
23+
: getUserManagedProjectList(Number(userId)),
24+
});
25+
26+
return { userProjectData: data?.data, isLoading, title };
27+
};

src/hooks/user/useUserInfo.ts

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ import { useQuery } from '@tanstack/react-query';
22
import { userInfoKey } from '../queries/user/keys';
33
import useAuthStore from '../../store/authStore';
44
import { ApiUserInfo } from '../../models/userInfo';
5-
import { getUserInfo, getUserJoinedProjectList } from '../../api/userpage.api';
6-
import { ApiSelectUserProject } from '../../models/userProject';
5+
import { getUserInfo } from '../../api/userpage.api';
76

87
export const useUserProfileInfo = (id: number) => {
98
const isLoggedIn = useAuthStore((state) => state.isLoggedIn);
@@ -17,16 +16,3 @@ export const useUserProfileInfo = (id: number) => {
1716

1817
return { userData: data?.data, isLoading };
1918
};
20-
21-
export const useUserJoinedProjectList = (id: number) => {
22-
const isLoggedIn = useAuthStore((state) => state.isLoggedIn);
23-
24-
const { data, isLoading } = useQuery<ApiSelectUserProject>({
25-
queryKey: [userInfoKey.userJoinedList, id],
26-
queryFn: () => getUserJoinedProjectList(id),
27-
staleTime: 1 * 60 * 1000,
28-
enabled: isLoggedIn,
29-
});
30-
31-
return { userJoinedProjectListData: data?.data, isLoading };
32-
};

src/models/userProject.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@ export interface ApiAppliedProject extends ApiCommonType {
2525
data: AppliedProject[] | null;
2626
}
2727

28-
export interface SelectUserProject {
29-
acceptedProjects: JoinedProject[];
30-
ownProjects: JoinedProject[];
31-
}
32-
33-
export interface ApiSelectUserProject extends ApiCommonType {
34-
data: SelectUserProject;
28+
export interface ApiUserProject extends ApiCommonType {
29+
data: JoinedProject[];
3530
}

0 commit comments

Comments
 (0)