"use client"; import { ProcessMessage } from "@/components/content/process-message"; import { TableCellDate } from "@/components/data-table/table-cell-date"; import { FormSheetStatusReportUpdate } from "@/components/forms/status-report-update/sheet"; import { Button } from "@/components/ui/button"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; import { icons } from "@/data/icons"; import { colors } from "@/data/status-report-updates.client"; import { useTRPC } from "@/lib/trpc/client"; import { cn } from "@/lib/utils"; import type { RouterOutputs } from "@openstatus/api"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { Plus } from "lucide-react"; import { useParams } from "next/navigation"; import { DataTableRowActions } from "./data-table-row-actions"; type StatusReportUpdates = RouterOutputs["statusReport"]["list"][number]["updates"]; export function DataTable({ updates, reportId, }: { updates: StatusReportUpdates; reportId: number; }) { const trpc = useTRPC(); const { id } = useParams<{ id: string }>(); const queryClient = useQueryClient(); const sendStatusReportUpdateMutation = useMutation( trpc.emailRouter.sendStatusReport.mutationOptions(), ); const createStatusReportUpdateMutation = useMutation( trpc.statusReport.createStatusReportUpdate.mutationOptions({ onSuccess: (update) => { // TODO: move to server if (update?.notifySubscribers) { sendStatusReportUpdateMutation.mutateAsync({ id: update.id }); } // queryClient.invalidateQueries({ queryKey: trpc.statusReport.list.queryKey({ pageId: Number.parseInt(id), }), }); queryClient.invalidateQueries({ queryKey: trpc.page.list.queryKey(), }); queryClient.invalidateQueries({ queryKey: trpc.statusReport.list.queryKey({ period: "7d", }), }); }, }), ); return ( Status Message Date { await createStatusReportUpdateMutation.mutateAsync({ statusReportId: reportId, message: values.message, status: values.status, date: values.date, notifySubscribers: values.notifySubscribers, }); }} > Create Report Update {updates.map((update) => { const Icon = icons.status[update.status]; return (
); })}
); }