diff --git a/dashboard/15-final/app/dashboard/customers/page.tsx b/dashboard/15-final/app/dashboard/customers/page.tsx index c799c65..72a441b 100644 --- a/dashboard/15-final/app/dashboard/customers/page.tsx +++ b/dashboard/15-final/app/dashboard/customers/page.tsx @@ -4,12 +4,10 @@ import CustomersTable from '@/app/ui/customers/table'; export default async function Page({ searchParams, }: { - searchParams: - | { - query: string | undefined; - page: string | undefined; - } - | undefined; + searchParams?: { + query?: string; + page?: string; + }; }) { const query = searchParams?.query || ''; const customers = await fetchFilteredCustomers(query); diff --git a/dashboard/15-final/app/dashboard/invoices/[id]/edit/not-found.tsx b/dashboard/15-final/app/dashboard/invoices/[id]/edit/not-found.tsx index 49f490d..444667f 100644 --- a/dashboard/15-final/app/dashboard/invoices/[id]/edit/not-found.tsx +++ b/dashboard/15-final/app/dashboard/invoices/[id]/edit/not-found.tsx @@ -4,12 +4,12 @@ import { FaceFrownIcon } from '@heroicons/react/24/outline'; export default function NotFound() { return (
- -

Not Found

+ +

404 Not Found

Could not find the requested invoice.

Go Back 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 c02654e..d9a5750 100644 --- a/dashboard/15-final/app/dashboard/invoices/[id]/edit/page.tsx +++ b/dashboard/15-final/app/dashboard/invoices/[id]/edit/page.tsx @@ -1,11 +1,12 @@ -import { fetchInvoiceById, fetchCustomerNames } from '@/app/lib/data'; -import { notFound } from 'next/navigation'; import Form from '@/app/ui/invoices/edit-form'; +import Breadcrumbs from '@/app/ui/invoices/breadcrumbs'; +import { fetchInvoiceById, fetchCustomers } from '@/app/lib/data'; +import { notFound } from 'next/navigation'; export default async function Page({ params }: { params: { id: string } }) { const id = params.id; const invoice = await fetchInvoiceById(id); - const customerNames = await fetchCustomerNames(); + const customers = await fetchCustomers(); if (!invoice) { notFound(); @@ -13,7 +14,17 @@ export default async function Page({ params }: { params: { id: string } }) { return (
-
+ +
); } diff --git a/dashboard/15-final/app/dashboard/invoices/create/page.tsx b/dashboard/15-final/app/dashboard/invoices/create/page.tsx index b50595f..413db57 100644 --- a/dashboard/15-final/app/dashboard/invoices/create/page.tsx +++ b/dashboard/15-final/app/dashboard/invoices/create/page.tsx @@ -1,12 +1,23 @@ -import { fetchCustomerNames } from '@/app/lib/data'; +import { fetchCustomers } from '@/app/lib/data'; import Form from '@/app/ui/invoices/create-form'; +import Breadcrumbs from '@/app/ui/invoices/breadcrumbs'; export default async function Page() { - const customerNames = await fetchCustomerNames(); + const customers = await fetchCustomers(); return (
- + +
); } diff --git a/dashboard/15-final/app/dashboard/invoices/error.tsx b/dashboard/15-final/app/dashboard/invoices/error.tsx index d01f433..551faa9 100644 --- a/dashboard/15-final/app/dashboard/invoices/error.tsx +++ b/dashboard/15-final/app/dashboard/invoices/error.tsx @@ -18,7 +18,7 @@ export default function Error({

Something went wrong!

+ + {/* Invoice Amount */} +
+ +
+
+ + +
+
+ + {state.errors?.amount ? ( +
+ {state.errors.amount.map((error: string) => ( +

{error}

+ ))} +
+ ) : null}
- - + + {/* Invoice Status */} +
+ +
+
+
+ + +
+
+ + +
+
+
+ {state.errors?.status ? ( +
+ {state.errors.status.map((error: string) => ( +

{error}

+ ))} +
+ ) : null} +
+ + {state.message ? ( +
+

{state.message}

+
+ ) : null} + +
+ + Cancel + + +
+ ); } diff --git a/dashboard/15-final/app/ui/invoices/edit-form.tsx b/dashboard/15-final/app/ui/invoices/edit-form.tsx index 2776335..685d3b7 100644 --- a/dashboard/15-final/app/ui/invoices/edit-form.tsx +++ b/dashboard/15-final/app/ui/invoices/edit-form.tsx @@ -1,194 +1,174 @@ 'use client'; -import { CustomerName, InvoiceForm } from '@/app/lib/definitions'; -import { updateInvoice } from '@/app/lib/actions'; -// @ts-ignore React types do not yet include useFormState -import { experimental_useFormState as useFormState } from 'react-dom'; -import Link from 'next/link'; -import { lusitana } from '@/app/ui/fonts'; -import { clsx } from 'clsx'; +import { CustomerField, InvoiceForm } from '@/app/lib/definitions'; import { CheckIcon, ClockIcon, CurrencyDollarIcon, UserCircleIcon, } from '@heroicons/react/24/outline'; +import Link from 'next/link'; import { Button } from '../button'; -import { Breadcrumbs } from './breadcrumbs'; +import { updateInvoice } from '@/app/lib/actions'; +// @ts-ignore React types do not yet include useFormState +import { experimental_useFormState as useFormState } from 'react-dom'; export default function EditInvoiceForm({ - id, invoice, - customerNames, + customers, }: { - id: string; invoice: InvoiceForm; - customerNames: CustomerName[]; + customers: CustomerField[]; }) { const initialState = { message: null, errors: [] }; const [state, dispatch] = useFormState(updateInvoice, initialState); return ( -
- -
-
- {/* Customer Name */} -
-