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"}
+
+ {type === "edit" ? (
+
+
+
+
+ ) : null}
+