Restructure application to use /home for authenticated pages
- Move authenticated home page from /[locale] to /[locale]/home - Move login page from /[locale]/login to /[locale] (new landing page) - Move all restricted pages (bill, location, year-month, print, account) under /[locale]/home - Simplify middleware to protect all routes under /home instead of using publicPages array - Update auth config: change signIn page from /login to / - Update SignInButton callback URL to redirect to /home after login - Update all internal links throughout the application to reflect new structure - Update server action redirects in navigationActions.ts - Public share routes (/share/*) remain unchanged 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
6
app/[locale]/home/print/[year]/[month]/not-found.tsx
Normal file
6
app/[locale]/home/print/[year]/[month]/not-found.tsx
Normal file
@@ -0,0 +1,6 @@
|
||||
import { NotFoundPage } from '@/app/ui/NotFoundPage';
|
||||
|
||||
const PrintPageNotFound = () =>
|
||||
<NotFoundPage title="404 Print Page Not Found" description="Could not find the requested print preview page." />;
|
||||
|
||||
export default PrintPageNotFound;
|
||||
63
app/[locale]/home/print/[year]/[month]/page.tsx
Normal file
63
app/[locale]/home/print/[year]/[month]/page.tsx
Normal file
@@ -0,0 +1,63 @@
|
||||
import { fetchBarcodeDataForPrint } from '@/app/lib/actions/printActions';
|
||||
import { notFound } from 'next/navigation';
|
||||
import { PrintPreview } from '@/app/ui/PrintPreview';
|
||||
import { getTranslations } from 'next-intl/server';
|
||||
|
||||
interface PrintPageProps {
|
||||
params: {
|
||||
year: string;
|
||||
month: string;
|
||||
locale: string;
|
||||
};
|
||||
}
|
||||
|
||||
export default async function PrintPage({ params }: PrintPageProps) {
|
||||
const year = parseInt(params.year);
|
||||
const month = parseInt(params.month);
|
||||
|
||||
// Validate year and month parameters
|
||||
if (isNaN(year) || isNaN(month) || month < 1 || month > 12) {
|
||||
notFound();
|
||||
}
|
||||
|
||||
let printData;
|
||||
|
||||
try {
|
||||
printData = await fetchBarcodeDataForPrint(year, month);
|
||||
} catch (error) {
|
||||
console.error('Error fetching print data:', error);
|
||||
notFound();
|
||||
}
|
||||
|
||||
// Get translations for the current locale
|
||||
const t = await getTranslations("home-page.print-preview");
|
||||
const yearMonth = `${year}-${month.toString().padStart(2, '0')}`;
|
||||
const translations = {
|
||||
title: t("title"),
|
||||
barcodesFound: t("barcodes-found"),
|
||||
barcodeSingular: t("barcode-singular"),
|
||||
printButton: t("print-button"),
|
||||
printFooter: t("print-footer", { date: new Date().toLocaleDateString() }),
|
||||
tableHeaderIndex: t("table-header-index"),
|
||||
tableHeaderBillInfo: t("table-header-bill-info"),
|
||||
tableHeaderBarcode: t("table-header-barcode"),
|
||||
emptyStateTitle: t("empty-state-title"),
|
||||
emptyStateMessage: t("empty-state-message", { yearMonth })
|
||||
};
|
||||
|
||||
// If no barcode data found, show empty state
|
||||
if (!printData || printData.length === 0) {
|
||||
return (
|
||||
<div className="min-h-screen flex items-center justify-center">
|
||||
<div className="text-center">
|
||||
<h1 className="text-2xl font-bold mb-4">{translations.emptyStateTitle}</h1>
|
||||
<p className="text-gray-600">
|
||||
{translations.emptyStateMessage}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return <PrintPreview data={printData} year={year} month={month} translations={translations} />;
|
||||
}
|
||||
Reference in New Issue
Block a user