diff --git a/src/app/(protected)/dashboard/[id]/edit/page.tsx b/src/app/(protected)/dashboard/[id]/edit/page.tsx
index 58ec974..3f9b6bf 100644
--- a/src/app/(protected)/dashboard/[id]/edit/page.tsx
+++ b/src/app/(protected)/dashboard/[id]/edit/page.tsx
@@ -9,17 +9,18 @@ import Input from "@/components/form/Input";
import Label from "@/components/form/Label";
import InviteModal from "@/components/modal/InviteModal";
import MyButton from "@/components/common/Button";
-import Pagination from "@/components/common/Pagination";
+import { useQueryClient } from "@tanstack/react-query";
import {
getDashboardById,
updateDashboard,
deleteDashboard,
getDashboardInvitations,
cancelDashboardInvitation,
- // inviteToDashboard,
} from "@/features/dashboard/api";
import { getMembers, deleteMember } from "@/features/members/api";
-import { useQueryClient } from "@tanstack/react-query";
+
+import InviteList from "@/components/common/dashboard/edit/InviteList";
+import MembersList from "@/components/common/dashboard/edit/MembersList";
export default function DashboardIdEdit() {
const { id } = useParams<{ id: string }>();
@@ -221,122 +222,23 @@ export default function DashboardIdEdit() {
{/* 구성원 리스트 */}
-
-
-
구성원
-
-
- {totalMemberPages} 페이지 중 {memberPage}
-
-
-
-
- {/* 라벨 */}
-
-
-
-
- {members.map((m, idx) => {
- const isOwner = m?.isOwner;
-
- return (
- -
-
-

-
{m.nickname}
-
- {!isOwner && (
- handleDeleteMember(m.id)}
- color="buttonBasic"
- className="tablet:w-21 tablet:text-sm text-brand-blue-500 h-8 w-13 rounded-md px-3 py-1 text-xs font-medium"
- >
- 삭제
-
- )}
-
- );
- })}
-
-
+
{/* 초대 내역 */}
-
-
-
초대 내역
-
-
- {totalInvitePages} 페이지 중 {invitePage}
-
-
-
setInviteOpen(true)}
- color="buttonBlue"
- className="tablet:flex hidden h-8 w-[105px] items-center justify-center gap-2 rounded-md text-sm"
- >
-
- 초대하기
-
-
-
- {/* 모바일 전용 라벨*/}
-
-
-
setInviteOpen(true)}
- color="buttonBlue"
- className="flex h-[26px] w-[86px] items-center justify-center gap-2 rounded-md text-xs font-medium"
- >
-
- 초대하기
-
-
-
- {/* tablet+ 전용 라벨 */}
-
-
-
-
- {invites.map((i, idx) => (
- -
- {i.email}
- handleCancelInvitation(i.id)}
- color="buttonBasic"
- className="tablet:w-21 tablet:text-sm text-brand-blue-500 h-8 w-13 rounded-md px-3 py-1 text-xs font-medium"
- >
- 취소
-
-
- ))}
-
-
+ setInviteOpen(true)}
+ />
{/* 삭제 버튼 */}
void;
+ onCancel: (inviteId: number) => void;
+ onOpenInviteModal: () => void;
+}
+
+export default function InviteList({
+ invites,
+ page,
+ totalPages,
+ setPage,
+ onCancel,
+ onOpenInviteModal,
+}: InviteListProps) {
+ return (
+
+
+
초대 내역
+
+
+ {Math.max(totalPages, 1)} 페이지 중 {page}
+
+
+
+
+ 초대하기
+
+
+
+
+ {/* 모바일 전용 라벨 */}
+
+
+
+
+ 초대하기
+
+
+
+ {/* tablet+ 전용 라벨 */}
+
+
+
+
+
+ {invites.map((i, idx) => (
+ -
+ {i.email}
+ onCancel(i.id)}
+ color="buttonBasic"
+ className="tablet:w-21 tablet:text-sm text-brand-blue-500 h-8 w-13 rounded-md px-3 py-1 text-xs font-medium"
+ >
+ 취소
+
+
+ ))}
+
+
+ );
+}
diff --git a/src/components/common/dashboard/edit/MembersList.tsx b/src/components/common/dashboard/edit/MembersList.tsx
new file mode 100644
index 0000000..a0dc8e5
--- /dev/null
+++ b/src/components/common/dashboard/edit/MembersList.tsx
@@ -0,0 +1,85 @@
+"use client";
+
+import MyButton from "@/components/common/Button";
+import Label from "@/components/form/Label";
+import Pagination from "@/components/common/Pagination";
+
+type Member = {
+ id: number;
+ userId: number;
+ email: string;
+ nickname: string;
+ profileImageUrl?: string;
+ isOwner?: boolean;
+};
+
+interface MembersListProps {
+ members: Member[];
+ page: number;
+ totalPages: number;
+ setPage: (page: number) => void;
+ onDeleteMember: (memberId: number) => void;
+}
+
+export default function MembersList({
+ members,
+ page,
+ totalPages,
+ setPage,
+ onDeleteMember,
+}: MembersListProps) {
+ return (
+
+
+
구성원
+
+
+ {totalPages} 페이지 중 {page}
+
+
+
+
+
+ {/* 라벨 */}
+
+
+
+
+
+ {members.map((m, idx) => {
+ const isOwner = m?.isOwner;
+
+ return (
+ -
+
+

+
{m.nickname}
+
+
+ {!isOwner && (
+ onDeleteMember(m.id)}
+ color="buttonBasic"
+ className="tablet:w-21 tablet:text-sm text-brand-blue-500 h-8 w-13 rounded-md px-3 py-1 text-xs font-medium"
+ >
+ 삭제
+
+ )}
+
+ );
+ })}
+
+
+ );
+}