"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 && ( 인기질문 )}
))}
{/* 경고 메시지 */}
주의: 질문을 삭제하면 해당 질문의 모든 답변과 댓글도 함께 삭제됩니다.
) } return ( {showTrigger && ( )} {title} {description}
{/* 삭제할 질문 목록 */}
삭제 대상:
{qnas.map((qna, index) => (
{index + 1}.
{qna.title}
{qna.authorName} • 답변 {qna.totalAnswers}개
))}
{/* 경고 메시지 */}
주의: 삭제된 질문과 관련 데이터는 복구할 수 없습니다.
) }