Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ Refactor/#423 ] group page query key 리팩토링 #424

Open
wants to merge 5 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 0 additions & 40 deletions src/Router.tsx

This file was deleted.

10 changes: 4 additions & 6 deletions src/pages/admin/hooks/queries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,28 @@ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { isAxiosError } from 'axios';
import { useNavigate } from 'react-router-dom';

import { groupKey } from '../../groupFeed/hooks/queries';
import deleteGroup from '../apis/deleteGroup';
import {
deleteAdminTopic,
editAdminTopic,
fetchAdminTopic,
postAdminTopic,
postAdminTopicPropTypes,
deleteAdminTopic,
} from '../apis/fetchAdminData';
import fetchAdminGroupInfo from '../apis/fetchAdminGroupInfo';
import fetchDeleteMember from '../apis/fetchDeleteMember';
import { fetchInvitationLink } from '../apis/fetchInvitationLink';
import fetchMemberInfo from '../apis/fetchMemberInfo';
import putAdminEditGroupInfo, { AdminEditGroupInfoPropTypes } from '../apis/putAdminEditGroupInfo';

import { QUERY_KEY_GROUPFEED } from '../../groupFeed/hooks/queries';

export const QUERY_KEY_ADMIN = {
useMemberInfo: 'fetchMemberInfo',
fetchInvitationLink: 'fetchInvitationLink',
fetchAdminGroupInfo: 'fetchAdminGroupInfo',
putAdminEditGroupInfo: 'putAdminEditGroupInfo',
deleteGroup: 'deleteGroup',
};

export const useAdminTopic = (groupId: string | undefined, pageNum: number) => {
const { data, isLoading, isError, error } = useQuery({
queryKey: ['adminTopic', groupId, pageNum],
Expand Down Expand Up @@ -178,7 +176,7 @@ export const usePutAdminGroupInfo = ({
putAdminEditGroupInfo({ groupName, groupDesc, groupImageServerUrl, isPublic, groupId }),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: [QUERY_KEY_GROUPFEED.fetchHeaderGroup],
queryKey: groupKey.detail(groupId || ''),
});
},
onError: (err) => {
Expand Down Expand Up @@ -209,7 +207,7 @@ export const useDeleteGroup = (groupId: string) => {
onSuccess: () => {
//key에 대한 정책을 변경해야함, 현재는 key의 unique함은 보장되어있지만 관련성이 적어 key의 역할을 제대로 못하고있음
queryClient.invalidateQueries({
queryKey: [QUERY_KEY_GROUPFEED.fetchHeaderGroup],
queryKey: groupKey.all,
});
navigate('/');
},
Expand Down
1 change: 1 addition & 0 deletions src/pages/groupFeed/GroupFeed.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ const GroupFeed = () => {
isError,
error,
} = useGroupFeedAuth(groupId || '');

const { isPublic, isLoading: isPublicLoading } = useGroupFeedPublicStatus(groupId || '');

//sessionStorage에 저장된 카테고리 id 값을 가져옴
Expand Down
24 changes: 5 additions & 19 deletions src/pages/groupFeed/carousel/Carousel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,15 @@ const Carousel = () => {
setSelectedTopicId(topicId);
};

const { topicInfo, isLoading: articleListLoading } = useArticleList(selectedTopicId);
const { topicInfo, isLoading: articleListLoading } = useArticleList(
selectedTopicId,
groupId || '',
);

useEffect(() => {
if (groupFeedCategoryData) {
setSelectedTopicId(groupFeedCategoryData[0]?.topicId);
console.log(groupFeedCategoryData);
}
}, [groupFeedCategoryData]);

Expand All @@ -73,9 +77,6 @@ const Carousel = () => {
</CarouselContainer>
))}
</Slider>
{/* {groupFeedCategoryData !== undefined && groupFeedCategoryData?.length > 6 && (
<GroupTabBtnBaseNextIcon className="groupFeedCarousel .slick-next.slick-disabled " />
)} */}
</CarouselWrapper>
<Spacing marginBottom="3.2" />
<Topic>{topicInfo?.topic}</Topic>
Expand All @@ -98,21 +99,6 @@ const CarouselWrapper = styled.div`
border-bottom: 0.1rem solid ${({ theme }) => theme.colors.gray30};
`;

// const GroupTabBtnBaseBeforeIcon = styled(GroupTabBtnBaseBeforeIc)`
// position: absolute;
// left: -1rem;

// pointer-events: none;
// `;

// const GroupTabBtnBaseNextIcon = styled(GroupTabBtnBaseNextIc)`
// position: absolute;
// top: 3.2rem;
// right: -1rem;

// pointer-events: none;
// `;

const Topic = styled.div`
width: 63.1rem;

Expand Down
1 change: 1 addition & 0 deletions src/pages/groupFeed/carousel/EachArticle.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ const EachArticle = (props: EachProfilePropTypes) => {
const { groupId, selectedTopicId } = props;
const { postListData, fetchNextPage, hasNextPage, isFetchingNextPage } = useArticleList(
selectedTopicId || '',
groupId,
);
const navigate = useNavigate();
const handleGoPostDetail = (postId: string) => {
Expand Down
6 changes: 2 additions & 4 deletions src/pages/groupFeed/components/GroupTodayWriteStyle.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import styled from '@emotion/styled';
import { useNavigate } from 'react-router-dom';

import { useTodayWritingStyle } from '../hooks/queries';

import Button from '../../../components/commons/Button';
import Error from '../../error/Error';
import Loading from '../../loading/Loading';

import { useTodayTopic } from '../hooks/queries';
interface GroupTodayWriteStylePropTypes {
isMember: boolean | undefined; //나의 글 작성하기 권한 확인
groupId: string | undefined; //오늘의 주제
Expand All @@ -15,7 +13,7 @@ interface GroupTodayWriteStylePropTypes {
const GroupTodayWriteStyle = (props: GroupTodayWriteStylePropTypes) => {
const navigate = useNavigate();
const { isMember, groupId } = props;
const { content, isLoading, isError, error } = useTodayWritingStyle(groupId || '');
const { content, isLoading, isError, error } = useTodayTopic(groupId || '');

const handleNavigatePostPage = () => {
navigate(`/post/${groupId}/post`);
Expand Down
62 changes: 33 additions & 29 deletions src/pages/groupFeed/hooks/queries.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';

import checkAuthenticate from '../../../utils/checkAuthenticate';
import {
fetchArticleList,
Expand All @@ -15,20 +14,6 @@ import {
fetchWriterNameOnly,
} from '../apis/fetchGroupFeed';
import { fetchHeaderGroup } from '../apis/fetchHeaderGroup';

export const QUERY_KEY_GROUPFEED = {
getGroupFeedAuth: 'getGroupFeedAuth',
getGroupFeedPublicStatus: 'getGroupFeedPublicStatus',
getTodayWritingStyle: 'getTodayWritingStyle',
getCuriousPost: 'getCuriousPost',
getGroupFeedCategory: 'getGroupFeedCategory',
getCuriousWriters: 'getCuriousWriters',
getArticleList: 'getArticleList',
fetchHeaderGroup: 'fetchHeaderGroup',
getWriterNameOnly: 'getWriterNameOnly',
getWriterInfo: 'getWriterInfo',
};

interface GroupFeedAuthQueryResult {
isMember: boolean | undefined;
isOwner: boolean | undefined;
Expand All @@ -37,9 +22,28 @@ interface GroupFeedAuthQueryResult {
error: Error | null;
}

export const groupKey = {
all: ['group'] as const,
info: () => [...groupKey.all, 'info'] as const,
detail: (groupId: string) => [...groupKey.info(), 'detail', groupId] as const,
auth: (groupId: string) => [...groupKey.info(), 'auth', groupId] as const,
isPublic: (groupId: string) => [...groupKey.info(), 'public', groupId] as const,
topics: (groupId: string) => [...groupKey.all, 'topic', groupId] as const,
topic: (groupId: string) => [...groupKey.topics(groupId), 'todayTopic'] as const,
posts: (topicId: string, groupId: string) =>
[...groupKey.topics(groupId), 'posts', topicId] as const,
curiousPosts: (groupId: string) => [...groupKey.info(), 'curiousPosts', groupId] as const,
curiousWriters: (groupId: string) => [...groupKey.info(), 'curiousWriter', groupId] as const,

user: () => [...groupKey.all, 'user'] as const,
userName: (groupId: string) => [...groupKey.user(), 'userName', groupId] as const,
userInfo: (writerNameId: number | undefined) =>
[...groupKey.user(), 'userInfo', writerNameId] as const,
userGroups: () => [...groupKey.user(), 'groups'] as const,
};
export const useGroupFeedAuth = (groupId: string): GroupFeedAuthQueryResult => {
const { data, isLoading, isError, error } = useQuery({
queryKey: [QUERY_KEY_GROUPFEED.getGroupFeedAuth, groupId],
queryKey: groupKey.auth(groupId),
queryFn: () => fetchGroupFeedAuth(groupId),
enabled: !!checkAuthenticate(),
});
Expand All @@ -66,7 +70,7 @@ interface GroupInfoQueryResult {

export const useGroupFeedPublicStatus = (groupId: string) => {
const { data, isLoading, isError } = useQuery({
queryKey: [QUERY_KEY_GROUPFEED.getGroupFeedPublicStatus, groupId],
queryKey: groupKey.isPublic(groupId),
queryFn: () => fetchGroupPublicStatus(groupId),
enabled: !!groupId,
});
Expand All @@ -78,7 +82,7 @@ export const useGroupFeedPublicStatus = (groupId: string) => {

export const useGroupInfo = (groupId: string): GroupInfoQueryResult => {
const { data, isLoading, isError, error } = useQuery({
queryKey: ['groupFeed_Info_moimId', groupId],
queryKey: groupKey.detail(groupId),
queryFn: () => fetchGroupInfo(groupId),
});

Expand All @@ -87,9 +91,9 @@ export const useGroupInfo = (groupId: string): GroupInfoQueryResult => {
return { groupInfoData, isLoading, isError, error };
};

export const useTodayWritingStyle = (groupId: string) => {
export const useTodayTopic = (groupId: string) => {
const { data, isLoading, isError, error } = useQuery({
queryKey: [QUERY_KEY_GROUPFEED.getTodayWritingStyle, groupId],
queryKey: groupKey.topic(groupId),
queryFn: () => fetchTodayTopic(groupId),
});

Expand All @@ -99,7 +103,7 @@ export const useTodayWritingStyle = (groupId: string) => {

export const useCuriousPost = (groupId: string) => {
const { data, isLoading, isError, error } = useQuery({
queryKey: [QUERY_KEY_GROUPFEED.getCuriousPost, groupId],
queryKey: groupKey.curiousPosts(groupId),
queryFn: () => fetchCuriousPost(groupId),
});

Expand All @@ -110,7 +114,7 @@ export const useCuriousPost = (groupId: string) => {

export const useTopicList = (groupId: string) => {
const { data, isLoading, isError, error } = useQuery({
queryKey: [QUERY_KEY_GROUPFEED.getGroupFeedCategory, groupId],
queryKey: groupKey.topics(groupId),
queryFn: () => fetchTopicList(groupId),
});

Expand All @@ -121,7 +125,7 @@ export const useTopicList = (groupId: string) => {

export const useCuriousWriters = (groupId: string) => {
const { data, isLoading, isError, error } = useQuery({
queryKey: [QUERY_KEY_GROUPFEED.getCuriousWriters, groupId],
queryKey: groupKey.curiousWriters(groupId),
queryFn: () => fetchCuriousWriters(groupId),
});

Expand All @@ -130,10 +134,10 @@ export const useCuriousWriters = (groupId: string) => {
return { curiousWriterData, isLoading, isError, error };
};

export const useArticleList = (topicId: string) => {
export const useArticleList = (topicId: string, groupId: string) => {
const { data, isLoading, isError, error, hasNextPage, fetchNextPage, isFetchingNextPage } =
useInfiniteQuery({
queryKey: [QUERY_KEY_GROUPFEED.getArticleList, topicId],
queryKey: groupKey.posts(topicId, groupId),
queryFn: ({ pageParam }) => fetchArticleList(topicId, pageParam),
staleTime: 10000, //20초 캐시
enabled: !!topicId,
Expand Down Expand Up @@ -164,7 +168,7 @@ export const useArticleList = (topicId: string) => {

export const useFetchHeaderGroup = () => {
const { data } = useQuery({
queryKey: [QUERY_KEY_GROUPFEED.fetchHeaderGroup],
queryKey: groupKey.userGroups(),
queryFn: () => fetchHeaderGroup(),
retry: 3,
});
Expand All @@ -177,7 +181,7 @@ export const useFetchWriterNameOnly = (
isOwner: boolean | undefined,
) => {
const { data } = useQuery({
queryKey: [QUERY_KEY_GROUPFEED.getWriterNameOnly, groupId],
queryKey: groupKey.userName(groupId),
queryFn: () => fetchWriterNameOnly(groupId),
enabled: !!isMember || !!isOwner,
});
Expand All @@ -190,7 +194,7 @@ export const useFetchWriterNameOnly = (
//[GET] 필명 + 프로필 설명 GET
export const useFetchWriterInfo = (writerNameId: number | undefined) => {
const { data } = useQuery({
queryKey: [QUERY_KEY_GROUPFEED.getWriterInfo, writerNameId],
queryKey: groupKey.userInfo(writerNameId),
queryFn: () => fetchWriterInfo(writerNameId),
enabled: writerNameId !== undefined,
});
Expand All @@ -210,7 +214,7 @@ export const useEditWriterIntro = (writerNameId: number | undefined) => {
fetchEditIntro({ writerNameId, description }),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: [QUERY_KEY_GROUPFEED.getWriterInfo, writerNameId],
queryKey: groupKey.userInfo(writerNameId),
});
},
});
Expand Down
2 changes: 1 addition & 1 deletion src/pages/groupInvite/components/GroupInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ interface GroupInfoPropTypes {

const GroupInfo = (props: GroupInfoPropTypes) => {
const { moimTitle, imageUrl, leader, foundedDate, memberCount, description } = props;
console.log(moimTitle);

return (
<GroupInfoWrapper>
<GroupImg src={imageUrl} alt={'모임 이미지'} />
Expand Down