Compare commits

4 Commits

Author SHA1 Message Date
0e3e41e064 2.20.3 2026-01-05 16:03:44 +01:00
488c771a09 (fix) ParamsYearInvalidMessage moved to client-side component so that it can use useEffect 2026-01-05 16:03:38 +01:00
1076797c89 (bugfix) HomePage: if current year was not found in DB containing data the app would crash.
This would happen at in January after user hasn't touched the app since the previous year and he did not create any records in the next (now current) year
2026-01-05 15:57:10 +01:00
Knee Cola
a54771e479 Merge branch 'hotfix/2.20.1' 2025-12-24 23:55:58 +01:00
4 changed files with 52 additions and 12 deletions

View File

@@ -4,6 +4,7 @@ import { getUserSettings } from '@/app/lib/actions/userSettingsActions';
import { BillingLocation, YearMonth } from '@/app/lib/db-types';
import { FC } from 'react';
import { MonthLocationList } from '@/app/ui/MonthLocationList';
import { ParamsYearInvalidMessage } from './ParamsYearInvalidMessage';
export interface HomePageProps {
searchParams?: {
@@ -14,11 +15,9 @@ export interface HomePageProps {
export const HomePage:FC<HomePageProps> = async ({ searchParams }) => {
/** years found in the DB sorted descending */
let availableYears: number[];
// const asyncTimout = (ms:number) => new Promise(resolve => setTimeout(resolve, ms));
// await asyncTimout(5000);
try {
availableYears = await fetchAvailableYears();
} catch (error:any) {
@@ -28,14 +27,34 @@ export const HomePage:FC<HomePageProps> = async ({ searchParams }) => {
</main>);
}
// if the database is in it's initial state, show the add location button for the current month
if(availableYears.length === 0) {
return (<MonthLocationList />);
const paramsYear = searchParams?.year ? Number(searchParams.year) : null;
let selectedYear:number;
// IF year is set via params, check if it's valid
if(paramsYear) {
// IF the database is in it's initial state
// THEN show message param being invalid AND redirect to root page
if(availableYears.length === 0) {
return (<ParamsYearInvalidMessage />);
}
// IF the year specified in the params is not found in the DB
// THEN show message param being invalid AND redirect to page showing first available year
if(!availableYears.includes(paramsYear)) {
return (<ParamsYearInvalidMessage firstAvailableYear={availableYears[0]} />);
}
selectedYear = paramsYear;
} else {
const currYear = new Date().getFullYear();
// IF current year is available in DB THEN use it
// ELSE use the latest year found in the DB
selectedYear = availableYears.includes(currYear) ? currYear : availableYears[0];
}
const currentYear = Number(searchParams?.year) || new Date().getFullYear();
const locations = await fetchAllLocations(currentYear);
const locations = await fetchAllLocations(selectedYear);
const userSettings = await getUserSettings();
// group locations by month

View File

@@ -0,0 +1,21 @@
"use client";
import { FC, useEffect } from 'react';
import { redirect } from 'next/navigation';
export const ParamsYearInvalidMessage:FC<{ firstAvailableYear?: number }> = ({ firstAvailableYear }) => {
// Redirect to the first available year after showing the message
useEffect(() => {
if(firstAvailableYear) {
redirect(`/?year=${firstAvailableYear}`);
} else {
redirect(`/`);
}
});
return(
<main className="flex min-h-screen flex-col p-6 bg-base-300">
<p className="text-center text-2xl text-red-500">The year specified in the URL is invalid ... redirecting</p>
</main>
);
};

4
package-lock.json generated
View File

@@ -1,11 +1,11 @@
{
"name": "evidencija-rezija",
"version": "2.20.0",
"version": "2.20.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"version": "2.20.0",
"version": "2.20.3",
"dependencies": {
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",

View File

@@ -58,5 +58,5 @@
"engines": {
"node": ">=18.17.0"
},
"version": "2.20.0"
"version": "2.20.3"
}