"use client"; import React from "react"; import { AddLocationButton } from "./AddLocationButton"; import { AddMonthButton } from "./AddMonthButton"; import { MonthCard } from "./MonthCard"; import Pagination from "./Pagination"; import { LocationCard } from "./LocationCard"; import { PrintButton } from "./PrintButton"; import { BillingLocation, UserSettings, YearMonth } from "../lib/db-types"; import { useRouter, useSearchParams } from "next/navigation"; import { ToastContainer, toast } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import { useTranslations } from "next-intl"; import { MultiBillEditButton } from "../[locale]/home/multi-bill-edit/[year]/[month]/MultiBillEditButton"; const getNextYearMonth = (yearMonth:YearMonth) => { const {year, month} = yearMonth; return({ year: month===12 ? year+1 : year, month: month===12 ? 1 : month+1 } as YearMonth); } export type MonthArray = Array<{ yearMonth: YearMonth; locations: BillingLocation[]; payedTotal: number; unpaidTotal: number; }>; export interface MonthLocationListProps { availableYears: number[]; months: MonthArray; userSettings?: UserSettings | null; } export const MonthLocationList:React.FC = ({ availableYears, months: activeYearMonths, userSettings, }) => { const router = useRouter(); const search = useSearchParams(); const t = useTranslations("home-page"); const initialMonth = search.get('month') const [expandedMonth, setExpandedMonth] = React.useState( initialMonth ? parseInt(initialMonth as string) : -1 // no month is expanded ); // Check for success messages React.useEffect(() => { const params = new URLSearchParams(search.toString()); let messageShown = false; if (search.get('userSettingsSaved') === 'true') { toast.success(t("user-settings-saved-message"), { theme: "dark" }); params.delete('userSettingsSaved'); messageShown = true; } if (search.get('billSaved') === 'true') { toast.success(t("bill-saved-message"), { theme: "dark" }); params.delete('billSaved'); messageShown = true; } if (search.get('billDeleted') === 'true') { toast.success(t("bill-deleted-message"), { theme: "dark" }); params.delete('billDeleted'); messageShown = true; } if (search.get('locationSaved') === 'true') { toast.success(t("location-saved-message"), { theme: "dark" }); params.delete('locationSaved'); messageShown = true; } if (search.get('locationDeleted') === 'true') { toast.success(t("location-deleted-message"), { theme: "dark" }); params.delete('locationDeleted'); messageShown = true; } if (search.get('bill-multi-edit-saved') === 'true') { toast.success(t("bill-multi-edit-save-success-message"), { theme: "dark" }); params.delete('bill-multi-edit-saved'); messageShown = true; } }, [search, router, t]); if(availableYears.length === 0 || activeYearMonths.length === 0) { const currentYearMonth:YearMonth = { year: new Date().getFullYear(), month: new Date().getMonth() + 1 }; return( <> {}} expanded={true} > ) }; // when the month is toggled, update the URL // and set the the new expandedMonth const handleMonthToggle = (yearMonth:YearMonth) => { // if the month is already expanded, collapse it if(expandedMonth === yearMonth.month) { // router.push(`/home?year=${yearMonth.year}`); setExpandedMonth(-1); // no month is expanded } else { // router.push(`/home?year=${yearMonth.year}&month=${yearMonth.month}`); setExpandedMonth(yearMonth.month); } } return(<> { activeYearMonths.map(({ yearMonth, locations, unpaidTotal, payedTotal }, monthIx) => { yearMonth.month === expandedMonth ? locations.map((location, ix) => ) : null }
) }
) }