"use client" import {ColumnDef} from "@tanstack/react-table" import {StatusBadge} from "@/components/wrappers/status-badge"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; import {Button} from "@/components/ui/button"; import {Download, MoreHorizontal, Trash2} from "lucide-react"; import {ReloadIcon} from "@radix-ui/react-icons"; import {Backup} from "@prisma/client"; import {getFileUrlPresignedLocal} from "@/features/upload/private/upload.action"; import {useMutation} from "@tanstack/react-query"; import {createRestorationAction} from "@/features/restore/restore.action"; import {toast} from "sonner"; import {useRouter} from "next/navigation"; import {TooltipCustom} from "@/components/wrappers/TooltipCustom/TooltipCustom"; export const backupColumns: ColumnDef[] = [ { accessorKey: "id", header: "Reference", }, { accessorKey: "createdAt", header: "Created At", cell: ({row}) => { return new Date(row.getValue("createdAt")).toLocaleString("fr-FR"); }, }, { accessorKey: "status", header: "Status", cell: ({row}) => { return }, }, { id: "actions", cell: ({row, table}) => { const status = row.getValue("status") const rowData: Backup = row.original const fileName = rowData.file // @ts-ignore const {extendedProps} = table.options.meta; // const isRestoring = !!rowData.restorations.find(restoration => restoration.status === "waiting"); const router = useRouter() const handleDownload = async (fileName: string) => { const url = await getFileUrlPresignedLocal(fileName) window.open(url, '_self'); } const mutationRestore = useMutation({ mutationFn: async () => { const restoration = await createRestorationAction({ backupId: rowData.id, databaseId: rowData.databaseId }) if (restoration.data.success) { toast.success(restoration.data.actionSuccess?.message || "Restoration created successfully!"); router.refresh() } else { toast.error(restoration.serverError || "Failed to create restoration."); } }}) const handleRestore = async () => { await mutationRestore.mutateAsync() } return ( Actions {status == "success" ? <> { await handleRestore() }}> Restore { await handleDownload(fileName) }}> Download : null} { }}> Delete ) }, }, ]