summaryrefslogtreecommitdiff
path: root/lib/information/table/delete-information-dialog.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/information/table/delete-information-dialog.tsx')
-rw-r--r--lib/information/table/delete-information-dialog.tsx125
1 files changed, 125 insertions, 0 deletions
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