"use client"; import { IconDots, IconEdit, IconMessageReply, IconTrash } from "@tabler/icons-react"; import { useState } from "react"; import { toast } from "sonner"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from "@/components/ui/alert-dialog"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Spinner } from "@/components/ui/spinner"; import { useSession } from "@/lib/auth-client"; import { type CommentWithUser, deleteComment } from "@/lib/server/comments"; import { EditCommentForm, ReplyForm } from "./comment-form"; type ActionMode = | { type: "idle" } | { type: "replying" } | { type: "editing" } | { type: "confirming-delete" } | { type: "deleting" }; const CommentActions = ({ comment }: { comment: CommentWithUser }) => { const [mode, setMode] = useState({ type: "idle" }); const { data: session } = useSession(); if (!session) return null; const handleDelete = async () => { setMode({ type: "deleting" }); try { await deleteComment(comment.id); toast.success("Your comment has been deleted successfully."); setMode({ type: "idle" }); } catch (error) { console.error("Error deleting comment:", error); toast.error("Failed to delete comment. Please try again."); setMode({ type: "idle" }); } }; const isDeleting = mode.type === "deleting"; return (
{mode.type === "editing" ? ( setMode({ type: "idle" })} onSuccess={() => setMode({ type: "idle" })} /> ) : (
{session.user.id === comment.user.id && ( }> Actions Menu setMode({ type: "editing" })}> Edit setMode({ type: "confirming-delete" })} disabled={isDeleting} variant="destructive" > {isDeleting ? : } Delete )}
)} {mode.type === "replying" && (
setMode({ type: "idle" })} onSuccess={() => setMode({ type: "idle" })} />
)} !open && setMode({ type: "idle" })} > Delete comment? This action cannot be undone. Cancel Delete
); }; export { CommentActions };