From d66d308169e559457878c02e3b0443da22693241 Mon Sep 17 00:00:00 2001
From: dujinkim <dujin.kim@dtsolution.co.kr>
Date: Tue, 1 Jul 2025 02:53:18 +0000
Subject: (최겸) 정보시스템 인포메이션 기능 개발
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../table/delete-information-dialog.tsx            | 125 +++++++++++++++++++++
 1 file changed, 125 insertions(+)
 create mode 100644 lib/information/table/delete-information-dialog.tsx

(limited to 'lib/information/table/delete-information-dialog.tsx')

diff --git a/lib/information/table/delete-information-dialog.tsx b/lib/information/table/delete-information-dialog.tsx
new file mode 100644
index 00000000..e36d948d
--- /dev/null
+++ b/lib/information/table/delete-information-dialog.tsx
@@ -0,0 +1,125 @@
+"use client"
+
+import * as React from "react"
+import { useRouter } from "next/navigation"
+import { toast } from "sonner"
+import { Loader, Trash2 } from "lucide-react"
+
+import {
+  AlertDialog,
+  AlertDialogAction,
+  AlertDialogCancel,
+  AlertDialogContent,
+  AlertDialogDescription,
+  AlertDialogFooter,
+  AlertDialogHeader,
+  AlertDialogTitle,
+} from "@/components/ui/alert-dialog"
+import { deleteInformation } from "@/lib/information/service"
+import type { PageInformation } from "@/db/schema/information"
+
+interface DeleteInformationDialogProps {
+  open: boolean
+  onOpenChange: (open: boolean) => void
+  information?: PageInformation
+  onClose: () => void
+}
+
+export function DeleteInformationDialog({
+  open,
+  onOpenChange,
+  information,
+  onClose,
+}: DeleteInformationDialogProps) {
+  const router = useRouter()
+  const [isLoading, setIsLoading] = React.useState(false)
+
+  const handleDelete = async () => {
+    if (!information) return
+
+    setIsLoading(true)
+    try {
+      const result = await deleteInformation(information.id)
+
+      if (result.success) {
+        toast.success(result.message)
+        onClose()
+        router.refresh()
+      } else {
+        toast.error(result.message)
+      }
+    } catch (error) {
+      toast.error("인포메이션 삭제에 실패했습니다.")
+      console.error(error)
+    } finally {
+      setIsLoading(false)
+    }
+  }
+
+  return (
+    <AlertDialog open={open} onOpenChange={onOpenChange}>
+      <AlertDialogContent>
+        <AlertDialogHeader>
+          <AlertDialogTitle className="flex items-center gap-2">
+            <Trash2 className="h-5 w-5 text-destructive" />
+            인포메이션 삭제
+          </AlertDialogTitle>
+          <AlertDialogDescription>
+            다음 인포메이션을 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.
+          </AlertDialogDescription>
+        </AlertDialogHeader>
+
+        {information && (
+          <div className="bg-muted rounded-lg p-4 my-4">
+            <div className="space-y-2">
+              <div>
+                <span className="font-medium text-sm">페이지 코드:</span>
+                <span className="ml-2 font-mono text-sm">{information.pageCode}</span>
+              </div>
+              <div>
+                <span className="font-medium text-sm">페이지명:</span>
+                <span className="ml-2 text-sm">{information.pageName}</span>
+              </div>
+              <div>
+                <span className="font-medium text-sm">제목:</span>
+                <span className="ml-2 text-sm">{information.title}</span>
+              </div>
+              {information.noticeTitle && (
+                <div>
+                  <span className="font-medium text-sm">공지사항 제목:</span>
+                  <span className="ml-2 text-sm">{information.noticeTitle}</span>
+                </div>
+              )}
+              {information.noticeContent && (
+                <div>
+                  <span className="font-medium text-sm">공지사항 내용:</span>
+                  <span className="ml-2 text-sm text-orange-600">{information.noticeContent}</span>
+                </div>
+              )}
+              {information.attachmentFileName && (
+                <div>
+                  <span className="font-medium text-sm">첨부파일:</span>
+                  <span className="ml-2 text-sm">{information.attachmentFileName}</span>
+                </div>
+              )}
+            </div>
+          </div>
+        )}
+
+        <AlertDialogFooter>
+          <AlertDialogCancel onClick={onClose} disabled={isLoading}>
+            취소
+          </AlertDialogCancel>
+          <AlertDialogAction
+            onClick={handleDelete}
+            disabled={isLoading}
+            className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
+          >
+            {isLoading && <Loader className="mr-2 h-4 w-4 animate-spin" />}
+            삭제
+          </AlertDialogAction>
+        </AlertDialogFooter>
+      </AlertDialogContent>
+    </AlertDialog>
+  )
+} 
\ No newline at end of file
-- 
cgit v1.2.3

