Skip to content

Commit aa2cd2d

Browse files
committed
refactor: 페이지네이션 분리
1 parent 36e2aaf commit aa2cd2d

File tree

2 files changed

+50
-36
lines changed

2 files changed

+50
-36
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/shared/ui";
2+
import { Button } from "@/shared/ui/button";
3+
4+
export interface PostPaginationProps {
5+
total: number;
6+
skip: number;
7+
limit: number;
8+
onChangeLimit: (value: number) => void;
9+
onPrev: () => void;
10+
onNext: () => void;
11+
}
12+
13+
export function PostPagination({ total, skip, limit, onChangeLimit, onPrev, onNext }: Readonly<PostPaginationProps>) {
14+
return (
15+
<div className="flex justify-between items-center">
16+
<div className="flex items-center gap-2">
17+
<span>표시</span>
18+
<Select value={String(limit)} onValueChange={(value) => onChangeLimit(Number(value))}>
19+
<SelectTrigger className="w-[180px]">
20+
<SelectValue placeholder="10" />
21+
</SelectTrigger>
22+
<SelectContent>
23+
<SelectItem value="10">10</SelectItem>
24+
<SelectItem value="20">20</SelectItem>
25+
<SelectItem value="30">30</SelectItem>
26+
</SelectContent>
27+
</Select>
28+
<span>항목</span>
29+
</div>
30+
<div className="flex gap-2">
31+
<Button disabled={skip === 0} onClick={onPrev}>
32+
이전
33+
</Button>
34+
<Button disabled={skip + limit >= total} onClick={onNext}>
35+
다음
36+
</Button>
37+
</div>
38+
</div>
39+
);
40+
}

src/pages/PostsManagerPage.tsx

Lines changed: 10 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,6 @@
11
import { Plus } from "lucide-react";
22

3-
import {
4-
Button,
5-
Card,
6-
CardContent,
7-
CardHeader,
8-
CardTitle,
9-
Select,
10-
SelectContent,
11-
SelectItem,
12-
SelectTrigger,
13-
SelectValue,
14-
} from "@shared/ui";
3+
import { Button, Card, CardContent, CardHeader, CardTitle } from "@shared/ui";
154

165
import { PostDetailDialog, usePosts } from "@entities/post";
176

@@ -20,6 +9,7 @@ import { PostAddDialogContainer, PostEditDialogContainer, useNewPostForm } from
209
import { usePostFilter } from "@/features/post-filter";
2110
import { PostFilterContainer } from "@/features/post-filter/ui/post-filter-container";
2211
import { PostsTableContainer } from "@/features/post-load";
12+
import { PostPagination } from "@/features/post-pagination/ui/post-pagination";
2313
import { UserDetailDialogContainer } from "@/features/user-load";
2414

2515
const PostsManager = () => {
@@ -53,30 +43,14 @@ const PostsManager = () => {
5343
{isLoading ? <div className="flex justify-center p-4">로딩 중...</div> : <PostsTableContainer />}
5444

5545
{/* 페이지네이션 */}
56-
<div className="flex justify-between items-center">
57-
<div className="flex items-center gap-2">
58-
<span>표시</span>
59-
<Select value={limit.toString()} onValueChange={(value) => setLimit(Number(value))}>
60-
<SelectTrigger className="w-[180px]">
61-
<SelectValue placeholder="10" />
62-
</SelectTrigger>
63-
<SelectContent>
64-
<SelectItem value="10">10</SelectItem>
65-
<SelectItem value="20">20</SelectItem>
66-
<SelectItem value="30">30</SelectItem>
67-
</SelectContent>
68-
</Select>
69-
<span>항목</span>
70-
</div>
71-
<div className="flex gap-2">
72-
<Button disabled={skip === 0} onClick={() => setSkip(Math.max(0, skip - limit))}>
73-
이전
74-
</Button>
75-
<Button disabled={skip + limit >= total} onClick={() => setSkip(skip + limit)}>
76-
다음
77-
</Button>
78-
</div>
79-
</div>
46+
<PostPagination
47+
total={total}
48+
skip={skip}
49+
limit={limit}
50+
onChangeLimit={(value) => setLimit(Number(value))}
51+
onPrev={() => setSkip(Math.max(0, skip - limit))}
52+
onNext={() => setSkip(skip + limit)}
53+
/>
8054
</div>
8155
</CardContent>
8256

0 commit comments

Comments
 (0)