diff --git a/src/app/dashboard/invoices/[id]/view/page.tsx b/src/app/dashboard/invoices/[id]/view/page.tsx
index b4e959c..619b0e9 100644
--- a/src/app/dashboard/invoices/[id]/view/page.tsx
+++ b/src/app/dashboard/invoices/[id]/view/page.tsx
@@ -1,7 +1,9 @@
-import { Suspense } from "react";
-import { notFound } from "next/navigation";
+"use client";
+
+import { useState } from "react";
+import { notFound, useRouter, useParams } from "next/navigation";
import Link from "next/link";
-import { api, HydrateClient } from "~/trpc/server";
+import { api } from "~/trpc/react";
import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card";
import { Button } from "~/components/ui/button";
import { StatusBadge, type StatusType } from "~/components/data/status-badge";
@@ -10,6 +12,15 @@ import { PageHeader } from "~/components/layout/page-header";
import { PDFDownloadButton } from "../_components/pdf-download-button";
import { SendInvoiceButton } from "../_components/send-invoice-button";
import { InvoiceDetailsSkeleton } from "../_components/invoice-details-skeleton";
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+} from "~/components/ui/dialog";
+import { toast } from "sonner";
import {
Building,
@@ -21,14 +32,39 @@ import {
User,
AlertTriangle,
Check,
+ Trash2,
} from "lucide-react";
-interface InvoiceViewPageProps {
- params: Promise<{ id: string }>;
-}
+function InvoiceViewContent({ invoiceId }: { invoiceId: string }) {
+ const router = useRouter();
+ const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
-async function InvoiceViewContent({ invoiceId }: { invoiceId: string }) {
- const invoice = await api.invoices.getById({ id: invoiceId });
+ const { data: invoice, isLoading } = api.invoices.getById.useQuery({
+ id: invoiceId,
+ });
+
+ // Delete mutation
+ const deleteInvoice = api.invoices.delete.useMutation({
+ onSuccess: () => {
+ toast.success("Invoice deleted successfully");
+ router.push("/dashboard/invoices");
+ },
+ onError: (error) => {
+ toast.error(error.message ?? "Failed to delete invoice");
+ },
+ });
+
+ const handleDelete = () => {
+ setDeleteDialogOpen(true);
+ };
+
+ const confirmDelete = () => {
+ deleteInvoice.mutate({ id: invoiceId });
+ };
+
+ if (isLoading) {
+ return