From e537be18703b3a5f8db9336d1eb9745e85397920 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Dere=C5=BEi=C4=87?= Date: Fri, 5 Jan 2024 16:28:48 +0100 Subject: [PATCH] handling of empty database --- app/lib/billActions.ts | 1 + app/page.tsx | 35 ++++++++++++++++++++++++----------- app/ui/AddLocationButton.tsx | 2 +- app/ui/AddMonthButton.tsx | 6 +++--- app/ui/PageFooter.tsx | 8 ++++++++ 5 files changed, 37 insertions(+), 15 deletions(-) create mode 100644 app/ui/PageFooter.tsx diff --git a/app/lib/billActions.ts b/app/lib/billActions.ts index 08b6792..c66add7 100644 --- a/app/lib/billActions.ts +++ b/app/lib/billActions.ts @@ -150,6 +150,7 @@ export async function updateOrAddBill(locationId: string, billId?:string, prevSt } export async function gotoHome() { + revalidatePath('/'); redirect('/'); } diff --git a/app/page.tsx b/app/page.tsx index 83f5481..48523cb 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -4,8 +4,9 @@ import { AddMonthButton } from './ui/AddMonthButton'; import { AddLocationButton } from './ui/AddLocationButton'; import clientPromise from './lib/mongodb'; import { BillingLocation } from './lib/db-types'; +import { PageFooter } from './ui/PageFooter'; -const calcNextYearMonth = (yearMonth: number) => { +const getNextYearMonth = (yearMonth:number) => { return(yearMonth % 100 === 12 ? yearMonth + 89 : yearMonth + 1); } @@ -20,30 +21,42 @@ export const Page = async () => { .limit(20) .toArray(); + // if the database is in it's initial state, show the add location button for the current month + if(locations.length === 0) { + const currentYearMonth = new Date().getFullYear() * 100 + new Date().getMonth() + 1; + return ( +
+ + + +
+ ); + } + return (
- + { locations.map((location, ix, array) => { return ( <> { - location.yearMonth !== array[0].yearMonth && location.yearMonth !== array[ix-1].yearMonth ? : null - } - { - // show month title if it's the first location in the month - ix === 0 || location.yearMonth !== array[ix-1].yearMonth ? : null + // show month title above the first LocationCard in the month + ix === 0 || location.yearMonth !== array[ix-1].yearMonth ? + : null } + { + // show AddLocationButton as a last item in the firts month + location.yearMonth === array[0].yearMonth && location.yearMonth !== array[ix+1]?.yearMonth ? + : null + } ) }) } -

Docs

-

tailwindcss.com

-

heroicons.com

-

daisyui.com

+
); } diff --git a/app/ui/AddLocationButton.tsx b/app/ui/AddLocationButton.tsx index b3cceef..fbf0737 100644 --- a/app/ui/AddLocationButton.tsx +++ b/app/ui/AddLocationButton.tsx @@ -3,7 +3,7 @@ import { PlusCircleIcon } from "@heroicons/react/24/outline"; export interface AddLocationButtonProps { /** year month at which the new billing location should be addes */ - yyyymm: string + yyyymm: number } export const AddLocationButton:React.FC = ({yyyymm}) => diff --git a/app/ui/AddMonthButton.tsx b/app/ui/AddMonthButton.tsx index cee605f..dc62ed8 100644 --- a/app/ui/AddMonthButton.tsx +++ b/app/ui/AddMonthButton.tsx @@ -2,10 +2,10 @@ import { PlusCircleIcon } from "@heroicons/react/24/outline"; import React from "react"; export interface AddMonthButtonProps { - yearMonth: number; + nextYearMonth: number; } -export const AddMonthButton:React.FC = ({ yearMonth }) => - +export const AddMonthButton:React.FC = ({ nextYearMonth }) => + diff --git a/app/ui/PageFooter.tsx b/app/ui/PageFooter.tsx new file mode 100644 index 0000000..5cc62a6 --- /dev/null +++ b/app/ui/PageFooter.tsx @@ -0,0 +1,8 @@ +import React from "react"; + +export const PageFooter:React.FC = () => <> +

Docs

+

tailwindcss.com

+

heroicons.com

+

daisyui.com

+