diff --git a/dashboard/15-final/app/dashboard/invoices/[id]/edit/page.tsx b/dashboard/15-final/app/dashboard/invoices/[id]/edit/page.tsx index 0d2c74b..9a179ca 100644 --- a/dashboard/15-final/app/dashboard/invoices/[id]/edit/page.tsx +++ b/dashboard/15-final/app/dashboard/invoices/[id]/edit/page.tsx @@ -1,3 +1,18 @@ -export default function Page() { - return
Edit Invoice Page
+import InvoiceForm from "@/app/ui/invoices/form"; +import { invoices } from "@/app/lib/dummy-data"; +import { notFound } from "next/navigation"; + +export default function Page({ params }: { params: { id: string } }) { + const id = params.id ? parseInt(params.id) : null; + const invoice = invoices.find((invoice) => invoice.id === id); + + if (!invoice) { + notFound(); + } + + return ( +
+ +
+ ); } diff --git a/dashboard/15-final/app/dashboard/invoices/[id]/page.tsx b/dashboard/15-final/app/dashboard/invoices/[id]/page.tsx index 188d95c..30de135 100644 --- a/dashboard/15-final/app/dashboard/invoices/[id]/page.tsx +++ b/dashboard/15-final/app/dashboard/invoices/[id]/page.tsx @@ -1,3 +1,3 @@ export default function Page() { - return
Individual Invoice Page
+ return
Individual Invoice Page
; } diff --git a/dashboard/15-final/app/dashboard/invoices/create/page.tsx b/dashboard/15-final/app/dashboard/invoices/create/page.tsx index 563cb0c..74a2a0d 100644 --- a/dashboard/15-final/app/dashboard/invoices/create/page.tsx +++ b/dashboard/15-final/app/dashboard/invoices/create/page.tsx @@ -1,5 +1,5 @@ -import AddInvoiceForm from "@/app/ui/invoices/add-invoice-form"; +import InvoiceForm from "@/app/ui/invoices/form"; export default function Page() { - return ; + return ; } diff --git a/dashboard/15-final/app/lib/actions.tsx b/dashboard/15-final/app/lib/actions.tsx index efebdd6..92e37c0 100644 --- a/dashboard/15-final/app/lib/actions.tsx +++ b/dashboard/15-final/app/lib/actions.tsx @@ -4,3 +4,8 @@ export async function deleteInvoice(id: number) { // TO DO: Add delete invoice logic console.log("Delete invoice", id); } + +export async function addOrUpdateInvoice(formData: FormData) { + // TO DO: Add create/update invoice logic + console.log("Edit Invoice"); +} diff --git a/dashboard/15-final/app/ui/invoices/add-invoice-form.tsx b/dashboard/15-final/app/ui/invoices/form.tsx similarity index 54% rename from dashboard/15-final/app/ui/invoices/add-invoice-form.tsx rename to dashboard/15-final/app/ui/invoices/form.tsx index 65519fd..96295b3 100644 --- a/dashboard/15-final/app/ui/invoices/add-invoice-form.tsx +++ b/dashboard/15-final/app/ui/invoices/form.tsx @@ -1,11 +1,30 @@ "use client"; + import { Invoice } from "@/app/lib/definitions"; import { customers } from "@/app/lib/dummy-data"; import { useState, FormEvent } from "react"; -export default function AddInvoiceForm() { - const [selectedCustomer, setSelectedCustomer] = useState(0); - const [amount, setAmount] = useState(""); +// import { addOrUpdateInvoice } from "@/app/lib/actions"; +// export const dynamic = "force-dynamic"; + +export default function InvoiceForm({ + type, + invoice, +}: { + type: "new" | "edit"; + invoice?: Invoice; +}) { + // TO DO: Replace state and handleSubmit with a Server Action + const customer = customers.find( + (customer) => customer.id === invoice?.customerId, + ); + const initialCustomer = customer ? customer.id : 0; + const initialAmount = invoice?.amount ? invoice.amount / 100 : 0; + const initialStatus = invoice?.status || "pending"; + + const [selectedCustomer, setSelectedCustomer] = useState(initialCustomer); + const [amount, setAmount] = useState(initialAmount); + const [status, setStatus] = useState<"pending" | "paid">(initialStatus); const handleSubmit = (e: FormEvent) => { e.preventDefault(); @@ -13,11 +32,11 @@ export default function AddInvoiceForm() { if (selectedCustomer && amount) { const newInvoice: Invoice = { customerId: selectedCustomer, - amount: parseInt(amount) * 100, // Convert to cents + amount: amount * 100, // Convert to cents // These would be generated on the server id: 1, // Record ID will be automatically incremented - status: "pending", // Default status for a new invoice + status: status, // Default status for a new invoice date: new Date().toISOString().split("T")[0], }; @@ -28,7 +47,9 @@ export default function AddInvoiceForm() { return (
-

New Invoice

+

+ {type === "new" ? "New Invoice" : "Edit Invoice"} +

+ { + const value = e.target.value; + + if (value === "paid" || value === "pending") { + setStatus(value); + } + }} + value={status} + > + + + +
+ ) : null} +