diff --git a/frontend/app/(main)/admin/dashboard/DashboardListClient.tsx b/frontend/app/(main)/admin/dashboard/DashboardListClient.tsx
index 8c55e366..a67761e4 100644
--- a/frontend/app/(main)/admin/dashboard/DashboardListClient.tsx
+++ b/frontend/app/(main)/admin/dashboard/DashboardListClient.tsx
@@ -13,18 +13,9 @@ import {
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
-import {
- AlertDialog,
- AlertDialogAction,
- AlertDialogCancel,
- AlertDialogContent,
- AlertDialogDescription,
- AlertDialogFooter,
- AlertDialogHeader,
- AlertDialogTitle,
-} from "@/components/ui/alert-dialog";
import { useToast } from "@/hooks/use-toast";
import { Pagination, PaginationInfo } from "@/components/common/Pagination";
+import { DeleteConfirmModal } from "@/components/common/DeleteConfirmModal";
import { Plus, Search, Edit, Trash2, Copy, MoreVertical, AlertCircle, RefreshCw } from "lucide-react";
interface DashboardListClientProps {
@@ -307,26 +298,18 @@ export default function DashboardListClient({ initialDashboards, initialPaginati
)}
{/* 삭제 확인 모달 */}
-
-
-
- 대시보드 삭제
-
- "{deleteTarget?.title}" 대시보드를 삭제하시겠습니까?
-
이 작업은 되돌릴 수 없습니다.
-
-
-
- 취소
-
- 삭제
-
-
-
-
+
+ "{deleteTarget?.title}" 대시보드를 삭제하시겠습니까?
+
이 작업은 되돌릴 수 없습니다.
+ >
+ }
+ onConfirm={handleDeleteConfirm}
+ />
>
);
}
diff --git a/frontend/components/common/DeleteConfirmModal.tsx b/frontend/components/common/DeleteConfirmModal.tsx
new file mode 100644
index 00000000..6168a069
--- /dev/null
+++ b/frontend/components/common/DeleteConfirmModal.tsx
@@ -0,0 +1,64 @@
+"use client";
+
+import React from "react";
+import {
+ AlertDialog,
+ AlertDialogAction,
+ AlertDialogCancel,
+ AlertDialogContent,
+ AlertDialogDescription,
+ AlertDialogFooter,
+ AlertDialogHeader,
+ AlertDialogTitle,
+} from "@/components/ui/alert-dialog";
+import { Loader2 } from "lucide-react";
+
+interface DeleteConfirmModalProps {
+ open: boolean;
+ onOpenChange: (open: boolean) => void;
+ title: string;
+ description: React.ReactNode;
+ onConfirm: () => void | Promise;
+ confirmText?: string;
+ isLoading?: boolean;
+}
+
+/**
+ * 삭제 확인 모달 (공통 컴포넌트)
+ * - 표준 디자인: shadcn AlertDialog 기반
+ * - 반응형: 모바일/데스크톱 최적화
+ * - 로딩 상태 지원
+ */
+export function DeleteConfirmModal({
+ open,
+ onOpenChange,
+ title,
+ description,
+ onConfirm,
+ confirmText = "삭제",
+ isLoading = false,
+}: DeleteConfirmModalProps) {
+ return (
+
+
+
+ {title}
+ {description}
+
+
+
+ 취소
+
+
+ {isLoading && }
+ {confirmText}
+
+
+
+
+ );
+}