From 2897b290d3b8c4bf68852cdd135f44bf2a0b5ed3 Mon Sep 17 00:00:00 2001
From: Delba de Oliveira <32464864+delbaoliveira@users.noreply.github.com>
Date: Tue, 19 Sep 2023 19:24:38 +0100
Subject: [PATCH] Simplify invoices table.tsx component (#166)
* Rename file and add data fetches for overview page
* Rename calculations.ts to utils.ts
* Update code to match course
* Add temporary calculation
* Fix error
* Move types to data fetching file
* Add error handling
* Parallelize data fetches
* Add skeletons
* Add delayed data request
* Fix ts errors
* Code for chapter 8
* Fix error
* Clean up
* Move formatDateToLocal to utils file
* Extract add invoice button
* Extract edit invoice button
* Extract InvoiceStatus
* Use formatCurrency from utils
* Misc
* Use outline icon
* outline!
* Rename table-search to search
---
dashboard/15-final/app/lib/utils.ts | 16 ++++-
.../15-final/app/ui/invoices/add-button.tsx | 11 +++
.../15-final/app/ui/invoices/edit-button.tsx | 12 ++++
.../invoices/{table-search.tsx => search.tsx} | 2 +-
dashboard/15-final/app/ui/invoices/status.tsx | 27 ++++++++
dashboard/15-final/app/ui/invoices/table.tsx | 69 ++++---------------
6 files changed, 78 insertions(+), 59 deletions(-)
create mode 100644 dashboard/15-final/app/ui/invoices/add-button.tsx
create mode 100644 dashboard/15-final/app/ui/invoices/edit-button.tsx
rename dashboard/15-final/app/ui/invoices/{table-search.tsx => search.tsx} (96%)
create mode 100644 dashboard/15-final/app/ui/invoices/status.tsx
diff --git a/dashboard/15-final/app/lib/utils.ts b/dashboard/15-final/app/lib/utils.ts
index 3b9582d..b694c1a 100644
--- a/dashboard/15-final/app/lib/utils.ts
+++ b/dashboard/15-final/app/lib/utils.ts
@@ -1,4 +1,4 @@
-import { Invoice, Revenue, Customer, LatestInvoice } from './definitions';
+import { Invoice, Revenue, Customer } from './definitions';
export const formatCurrency = (amount: number) => {
return (amount / 100).toLocaleString('en-US', {
@@ -7,6 +7,20 @@ export const formatCurrency = (amount: number) => {
});
};
+export const formatDateToLocal = (
+ dateStr: string,
+ locale: string = 'en-US',
+) => {
+ const date = new Date(dateStr);
+ const options: Intl.DateTimeFormatOptions = {
+ day: 'numeric',
+ month: 'short',
+ year: 'numeric',
+ };
+ const formatter = new Intl.DateTimeFormat(locale, options);
+ return formatter.format(date);
+};
+
export function findLatestInvoices(invoices: Invoice[], customers: Customer[]) {
// Sort the invoices by date in descending order and take the top 5
const latestInvoices = [...invoices]
diff --git a/dashboard/15-final/app/ui/invoices/add-button.tsx b/dashboard/15-final/app/ui/invoices/add-button.tsx
new file mode 100644
index 0000000..7113cd1
--- /dev/null
+++ b/dashboard/15-final/app/ui/invoices/add-button.tsx
@@ -0,0 +1,11 @@
+import Link from 'next/link';
+export default function AddInvoice() {
+ return (
+
+ Add Invoice
+
+ );
+}
diff --git a/dashboard/15-final/app/ui/invoices/edit-button.tsx b/dashboard/15-final/app/ui/invoices/edit-button.tsx
new file mode 100644
index 0000000..a7352ec
--- /dev/null
+++ b/dashboard/15-final/app/ui/invoices/edit-button.tsx
@@ -0,0 +1,12 @@
+import { PencilSquareIcon } from '@heroicons/react/24/outline';
+import Link from 'next/link';
+export default function EditInvoice({ id }: { id: number }) {
+ return (
+
+