import { LocationCard } from './ui/LocationCard'; import { MonthTitle } from './ui/MonthTitle'; import { AddMonthButton } from './ui/AddMonthButton'; import { AddLocationButton } from './ui/AddLocationButton'; import { PageFooter } from './ui/PageFooter'; import { isAuthErrorMessage } from '@/app/lib/auth'; import { fetchAllLocations } from './lib/actions/locationActions'; import { formatCurrency } from './lib/formatStrings'; import { fetchAvailableYears } from './lib/actions/monthActions'; const getNextYearMonth = (year:number, month:number) => { return({ year: month<12 ? year+1 : year, month: month<12 ? month+1 : 1 }); } export const Page = async () => { const locations = await fetchAllLocations(); const availableYearMonths = await fetchAvailableYears(); if(isAuthErrorMessage(locations)) { return ( {locations.message} ); } // if the database is in it's initial state, show the add location button for the current month if(locations.length === 0) { const currentYear = new Date().getFullYear(); const currentMonth = new Date().getMonth() + 1; return ( ); } let monthlyExpense = 0; return ( { locations.map((location, ix, array) => { const isFirstLocationInMonth = ix === 0 || location.year !== array[ix-1].year || location.month !== array[ix-1].month; const isLastLocationInMonth = location.year !== array[ix+1]?.year || location.month !== array[ix+1]?.month; const isLastLocationOfFirstMonth = isLastLocationInMonth && location.year === array[0].year && location.month === array[0].month; if(isFirstLocationInMonth) { monthlyExpense = 0; } monthlyExpense += location.bills.reduce((acc, bill) => acc + (bill.payedAmount ?? 0), 0); return ( <> { // show month title above the first LocationCard in the month isFirstLocationInMonth ? : null } { // show AddLocationButton as a last item in the firts month isLastLocationOfFirstMonth ? : null } { isLastLocationInMonth && monthlyExpense>0 ? Total monthly expenditure: { formatCurrency(monthlyExpense) } : null } > ) }) } { availableYearMonths.map(ym => {ym}) } ); } export default Page;
{locations.message}
Total monthly expenditure: { formatCurrency(monthlyExpense) }
{ym}