Skip to content

Commit fa6f135

Browse files
authored
Merge pull request #101 from codeit9-temporary/feature/pagination
Refactor: LinkCardStore 에 totalCount 추가
2 parents 1a4a9a2 + d183e5c commit fa6f135

File tree

6 files changed

+20
-25
lines changed

6 files changed

+20
-25
lines changed

components/Link/LinkCard.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ const LinkCard = ({ info }: LinkCardProps) => {
4141
const handleFavoriteToggle = async () => {
4242
setIsSubscribed((prev) => !prev);
4343
try {
44-
await putLinkFavorite(info.id, { favorite: !isSubscribed });
4544
updateFavorite(info.id, !isSubscribed);
4645
} catch (error) {
4746
console.error("즐겨찾기 설정 중 오류 발생:", error);

hooks/useFetchLinks.tsx

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@ import { useRouter } from "next/router";
55

66
// 링크페이지의 query가 바뀌면 새로운 리스트로 업데이트 해주는 훅
77
const useFetchLinks = (
8-
query: {
9-
page?: number;
10-
search?: string;
11-
},
12-
setLinkCardList: (list: LinkData[]) => void
8+
setLinkCardList: (list: LinkData[], totalCount: number) => void
139
) => {
1410
const router = useRouter();
1511

@@ -18,9 +14,9 @@ const useFetchLinks = (
1814
// 경로에 따라 API 엔드포인트 분기
1915
let endpoint = "/api/links";
2016
const params: any = {
21-
page: query.page,
17+
page: router.query.page,
2218
pageSize: 6,
23-
search: query.search,
19+
search: router.query.search,
2420
};
2521

2622
if (router.pathname === "/favorite") {
@@ -29,14 +25,14 @@ const useFetchLinks = (
2925

3026
try {
3127
const res = await proxy.get(endpoint, { params });
32-
setLinkCardList(res.data.list);
28+
setLinkCardList(res.data.list, res.data.totalCount);
3329
} catch (error) {
3430
console.error("Error fetching links:", error);
3531
}
3632
};
3733

38-
if (query) fetchLinks();
39-
}, [query, setLinkCardList, router.pathname]);
34+
if (router.query) fetchLinks();
35+
}, [router.query, setLinkCardList, router.pathname]);
4036
};
4137

4238
export default useFetchLinks;

pages/api/links/[linkId]/favorite.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
1515
switch (req.method) {
1616
case "PUT":
1717
const { favorite } = req.body;
18-
if (favorite === undefined) {
19-
return res.status(400).json({ message: "즐겨찾기 상태가 필요합니다." });
18+
19+
if (favorite === undefined || typeof favorite !== "boolean") {
20+
return res
21+
.status(400)
22+
.json({ message: "즐겨찾기 상태는 boolean이어야 합니다." });
2023
}
2124

2225
try {

pages/favorite/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ const FavoritePage = ({ favoriteList, totalCount }: FavoriteProps) => {
5050
const [linkCardList, setLinkCardList] =
5151
useState<FavoriteDataType[]>(favoriteList);
5252

53-
useFetchLinks(router.query, setLinkCardList);
53+
useFetchLinks(setLinkCardList);
5454
return (
5555
<>
5656
<div className="page-title pt-[10px] md:pt-5 pb-10 md:pb-[60px] bg-gray100 text-center">

pages/link/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ const LinkPage = ({
5757
const [folderList, setFolderList] = useState(initialFolderList);
5858

5959
// 링크페이지의 query가 바뀌면 새로운 리스트로 업데이트 해주는 훅
60-
useFetchLinks(router.query, setLinkCardList);
60+
useFetchLinks(setLinkCardList);
6161

6262
// 클라이언트에서 초기 목록을 설정
6363
useEffect(() => {
64-
setLinkCardList(initialLinkList);
64+
setLinkCardList(initialLinkList, totalCount);
6565
}, [initialLinkList, setLinkCardList]);
6666

6767
return (

store/useLinkCardStore.tsx

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
import {
2-
deleteLinkURL,
3-
getLinks,
4-
putLinkFavorite,
5-
putLinkURL,
6-
} from "@/lib/api/link";
1+
import { deleteLinkURL, putLinkFavorite, putLinkURL } from "@/lib/api/link";
72
import { create } from "zustand";
83
import { LinkData } from "@/types/linkTypes";
94

@@ -13,17 +8,19 @@ interface UpdateLinkBody {
138

149
interface LinkCardStore {
1510
linkCardList: LinkData[];
16-
setLinkCardList: (list: LinkData[]) => void;
11+
setLinkCardList: (list: LinkData[], totalCount: number) => void;
1712
updateLink: (linkId: number, body: UpdateLinkBody) => Promise<void>;
1813
deleteLink: (linkId: number) => Promise<void>;
1914
updateFavorite: (linkId: number, favorite: boolean) => Promise<void>;
15+
totalCount: number | null;
2016
}
2117

2218
export const useLinkCardStore = create<LinkCardStore>((set) => ({
2319
linkCardList: [],
20+
totalCount: null,
2421

25-
setLinkCardList: (list: LinkData[]) => {
26-
set({ linkCardList: list });
22+
setLinkCardList: (list: LinkData[], totalCount: number) => {
23+
set({ linkCardList: list, totalCount: totalCount });
2724
},
2825

2926
// 수정 요청 보낸 후 목록 가져오기

0 commit comments

Comments
 (0)