Skip to content
Merged
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
37 changes: 36 additions & 1 deletion src/app/(home)/_components/FloatingBtn/FloatingBtn.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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 객체 반환
}
);
}
};

Expand Down
2 changes: 1 addition & 1 deletion src/app/_components/SaveContentModal/SaveContentModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const SaveContent = ({
}: {
closeSaveModal: (isSaved: boolean | null) => void;
openNewGroupModal: () => void;
contentId: string;
contentId: number;
}) => {
const [groupListData, setGroupListData] = useState<{
content: IGroup[];
Expand Down
2 changes: 1 addition & 1 deletion src/app/_components/ShareModal/ShareModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const ShareModal = ({
contentId,
}: {
closeShareModal: () => void;
contentId: string;
contentId: number;
}) => {
// const [href, setHref] = useState("");
const [isCopied, setIsCopied] = useState(false);
Expand Down
17 changes: 3 additions & 14 deletions src/app/_hooks/useReactQuery.tsx
Original file line number Diff line number Diff line change
@@ -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();
}, []);
Expand Down
14 changes: 14 additions & 0 deletions src/app/_utils/queryClient.ts
Original file line number Diff line number Diff line change
@@ -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;
1 change: 1 addition & 0 deletions src/app/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export interface IContentData {
providerTitle: string;
providerUrl: string;
providerIconUrl: string;
bookmarked: boolean;
}
export interface ITokenData {
userId: string;
Expand Down
Loading