"use client" import * as React from "react" import { toast } from "sonner" import { Trash2 } from "lucide-react" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog" import { Drawer, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, } from "@/components/ui/drawer" import { Badge } from "@/components/ui/badge" import { ScrollArea } from "@/components/ui/scroll-area" import { QnaViewSelect } from "@/db/schema" import { useMediaQuery } from "@/hooks/use-media-query" import { deleteQna } from "../service" interface DeleteQnaDialogProps { open: boolean onOpenChange: (open: boolean) => void qnas: QnaViewSelect[] showTrigger?: boolean onSuccess?: () => void } export function DeleteQnaDialog({ open, onOpenChange, qnas, showTrigger = true, onSuccess }: DeleteQnaDialogProps) { const [isDeletePending, startDeleteTransition] = React.useTransition() const isDesktop = useMediaQuery("(min-width: 640px)") const qnaCount = qnas.length const isMultiple = qnaCount > 1 async function handleDelete() { startDeleteTransition(async () => { try { const promises = qnas.map(qna => deleteQna(qna.id)) const results = await Promise.all(promises) const successCount = results.filter(result => result.success).length const failCount = results.length - successCount if (successCount > 0) { toast.success( isMultiple ? `${successCount}개의 질문이 삭제되었습니다.` : "질문이 삭제되었습니다." ) onSuccess?.() } if (failCount > 0) { toast.error( isMultiple ? `${failCount}개의 질문 삭제에 실패했습니다.` : "질문 삭제에 실패했습니다." ) } if (successCount > 0) { onOpenChange(false) } } catch (error) { toast.error("삭제 중 오류가 발생했습니다.") console.error("질문 삭제 오류:", error) } }) } const title = isMultiple ? `${qnaCount}개 질문 삭제` : "질문 삭제" const description = isMultiple ? "선택한 질문들을 정말로 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다." : "이 질문을 정말로 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다." if (isDesktop) { return ( {showTrigger && ( 삭제 )} {title} {description} {/* 삭제할 질문 목록 */} 삭제 대상: {qnas.map((qna, index) => ( {index + 1}. {qna.title} {qna.authorName} • {qna.companyName || "미지정"} • 답변 {qna.totalAnswers}개 {qna.hasAnswers && ( 답변있음 )} {qna.isPopular && ( 인기질문 )} ))} {/* 경고 메시지 */} 주의: 질문을 삭제하면 해당 질문의 모든 답변과 댓글도 함께 삭제됩니다. onOpenChange(false)} disabled={isDeletePending} > 취소 {isDeletePending ? "삭제 중..." : "삭제"} ) } return ( {showTrigger && ( 삭제 )} {title} {description} {/* 삭제할 질문 목록 */} 삭제 대상: {qnas.map((qna, index) => ( {index + 1}. {qna.title} {qna.authorName} • 답변 {qna.totalAnswers}개 ))} {/* 경고 메시지 */} 주의: 삭제된 질문과 관련 데이터는 복구할 수 없습니다. {isDeletePending ? "삭제 중..." : "삭제"} onOpenChange(false)} disabled={isDeletePending} > 취소 ) }