From 3ba3f989f4b2f3214e085edd418cf1954a598343 Mon Sep 17 00:00:00 2001 From: PARKGEONTAE <112490505+prkgnt@users.noreply.github.com> Date: Tue, 14 Jan 2025 11:07:57 +0900 Subject: [PATCH 1/4] =?UTF-8?q?type:=20bookmarked=20=ED=83=80=EC=9E=85=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/index.ts b/src/app/index.ts index d079c73..99d320b 100644 --- a/src/app/index.ts +++ b/src/app/index.ts @@ -9,6 +9,7 @@ export interface IContentData { providerTitle: string; providerUrl: string; providerIconUrl: string; + bookmarked: boolean; } export interface ITokenData { userId: string; From db8ac78bdfc8289b8ef58a6767f9b4b4dfbba453 Mon Sep 17 00:00:00 2001 From: PARKGEONTAE <112490505+prkgnt@users.noreply.github.com> Date: Tue, 14 Jan 2025 11:08:15 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20queryClient=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/_hooks/useReactQuery.tsx | 17 +++-------------- src/app/_utils/queryClient.ts | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 src/app/_utils/queryClient.ts diff --git a/src/app/_hooks/useReactQuery.tsx b/src/app/_hooks/useReactQuery.tsx index b0ddc76..dd23c4b 100644 --- a/src/app/_hooks/useReactQuery.tsx +++ b/src/app/_hooks/useReactQuery.tsx @@ -1,23 +1,12 @@ "use client"; -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import { useEffect, useState } from "react"; +import { QueryClientProvider } from "@tanstack/react-query"; +import { useEffect } from "react"; import analytics from "../_utils/firebase"; +import queryClient from "../_utils/queryClient"; export default function ReactQueryProvider({ children, }: React.PropsWithChildren) { - const [queryClient] = useState( - () => - new QueryClient({ - defaultOptions: { - queries: { - staleTime: 60 * 1000, - throwOnError: true, - retry: 1, - }, - }, - }) - ); useEffect(() => { analytics(); }, []); diff --git a/src/app/_utils/queryClient.ts b/src/app/_utils/queryClient.ts new file mode 100644 index 0000000..dc78b11 --- /dev/null +++ b/src/app/_utils/queryClient.ts @@ -0,0 +1,14 @@ +import { QueryClient } from "@tanstack/react-query"; +import { useState } from "react"; + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + staleTime: 60 * 1000, + throwOnError: true, + retry: 1, + }, + }, +}); + +export default queryClient; From e118f8961c353cead278c54b86235da88bf69ec0 Mon Sep 17 00:00:00 2001 From: PARKGEONTAE <112490505+prkgnt@users.noreply.github.com> Date: Tue, 14 Jan 2025 11:08:58 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20=EB=B6=81=EB=A7=88=ED=81=AC=20?= =?UTF-8?q?=EC=8B=9C=20query=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_components/FloatingBtn/FloatingBtn.tsx | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/app/(home)/_components/FloatingBtn/FloatingBtn.tsx b/src/app/(home)/_components/FloatingBtn/FloatingBtn.tsx index 92af938..ec2c2da 100644 --- a/src/app/(home)/_components/FloatingBtn/FloatingBtn.tsx +++ b/src/app/(home)/_components/FloatingBtn/FloatingBtn.tsx @@ -10,19 +10,24 @@ import NewGroupModal from "@/app/_components/NewGroupModal/NewGroupModal"; import ShareModal from "@/app/_components/ShareModal/ShareModal"; import LoginModal from "@/app/_components/LoginModal/LoginModal"; import CheckToken from "../../../_utils/CheckToken"; +import queryClient from "@/app/_utils/queryClient"; +import useParams from "@/app/_hooks/useParams"; +import { InfiniteData } from "@tanstack/react-query"; +import { IContentData } from "@/app"; const FloatingBtn = ({ isSaved, contentId, }: { isSaved: boolean; - contentId: string; + contentId: number; }) => { const [isLoginModalOpened, setIsLoginModalOpened] = useState(false); const [isSaveModalOpened, setIsSaveModalOpened] = useState(false); const [isShareModalOpened, setIsShareModalOpened] = useState(false); const [isNewGroupModalOpened, setIsNewGroupModalOpened] = useState(false); const [isSavedContent, setIsSavedContent] = useState(isSaved); + const searchParams = useParams("categories").getParamsToString(); const handleSaveBtnClick = async () => { const isLogin = await CheckToken(); @@ -36,8 +41,38 @@ const FloatingBtn = ({ setIsSaveModalOpened(false); if (isSaved === true) { setIsSavedContent(true); + queryClient.setQueryData( + ["shuffledContents", searchParams], + (oldData: InfiniteData<{ content: IContentData[] }, unknown>) => { + const updatedPages = oldData.pages.map((page) => { + const updatedContent = page.content.map((item) => { + if (item.id === contentId) { + return { ...item, bookmarked: true }; // 새로운 객체 반환 + } + return item; // 원본 객체 반환 + }); + return { ...page, content: updatedContent }; // 새로운 페이지 객체 반환 + }); + return { ...oldData, pages: updatedPages }; // 새로운 oldData 객체 반환 + } + ); } else if (isSaved === false) { setIsSavedContent(false); + queryClient.setQueryData( + ["shuffledContents", searchParams], + (oldData: InfiniteData<{ content: IContentData[] }, unknown>) => { + const updatedPages = oldData.pages.map((page) => { + const updatedContent = page.content.map((item) => { + if (item.id === contentId) { + return { ...item, bookmarked: false }; // 새로운 객체 반환 + } + return item; // 원본 객체 반환 + }); + return { ...page, content: updatedContent }; // 새로운 페이지 객체 반환 + }); + return { ...oldData, pages: updatedPages }; // 새로운 oldData 객체 반환 + } + ); } }; From 3752eebcf0f9094265c8c6a3f887548b1a736adf Mon Sep 17 00:00:00 2001 From: PARKGEONTAE <112490505+prkgnt@users.noreply.github.com> Date: Tue, 14 Jan 2025 11:09:06 +0900 Subject: [PATCH 4/4] =?UTF-8?q?type:=20id=20type=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/_components/SaveContentModal/SaveContentModal.tsx | 2 +- src/app/_components/ShareModal/ShareModal.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/_components/SaveContentModal/SaveContentModal.tsx b/src/app/_components/SaveContentModal/SaveContentModal.tsx index 95465b3..d46cc7c 100644 --- a/src/app/_components/SaveContentModal/SaveContentModal.tsx +++ b/src/app/_components/SaveContentModal/SaveContentModal.tsx @@ -19,7 +19,7 @@ const SaveContent = ({ }: { closeSaveModal: (isSaved: boolean | null) => void; openNewGroupModal: () => void; - contentId: string; + contentId: number; }) => { const [groupListData, setGroupListData] = useState<{ content: IGroup[]; diff --git a/src/app/_components/ShareModal/ShareModal.tsx b/src/app/_components/ShareModal/ShareModal.tsx index daddb57..72216b4 100644 --- a/src/app/_components/ShareModal/ShareModal.tsx +++ b/src/app/_components/ShareModal/ShareModal.tsx @@ -9,7 +9,7 @@ const ShareModal = ({ contentId, }: { closeShareModal: () => void; - contentId: string; + contentId: number; }) => { // const [href, setHref] = useState(""); const [isCopied, setIsCopied] = useState(false);