Files
carmanagement/apps/homepage/src/app/[locale]/[mode]/[slug]/page.tsx
T
root 781512399b
Build & Deploy / Build & Push Docker Image (push) Successful in 2m51s
Test / Type Check (all packages) (push) Successful in 52s
Build & Deploy / Deploy to VPS (push) Successful in 4s
Test / API Unit Tests (push) Successful in 49s
Test / Homepage Unit Tests (push) Successful in 44s
Test / Storefront Unit Tests (push) Successful in 39s
Test / Admin Unit Tests (push) Successful in 40s
Test / Dashboard Unit Tests (push) Successful in 40s
Test / API Integration Tests (push) Successful in 1m0s
Update homepage routes to include language and mode
2026-07-02 14:10:17 -04:00

96 lines
3.0 KiB
TypeScript

import { StateAction, StateActions, StateShell } from '@/components/app-shell/StateShell';
import { SignInForm } from '@/components/auth/SignInForm';
import { ForgotPasswordForm } from '@/components/auth/ForgotPasswordForm';
import { ResetPasswordForm } from '@/components/auth/ResetPasswordForm';
import {
isLocale,
isMode,
localizedModePath,
routeIdFromSlug,
type Locale,
type RouteId,
} from '@/lib/localization/config';
import { getMessages, type ShellMessages } from '@/lib/localization/messages';
import { buildLocalizedMetadata } from '@/lib/metadata/build-metadata';
import type { ThemePreference } from '@/lib/theme/config';
import type { Metadata } from 'next';
import { notFound } from 'next/navigation';
interface PendingRouteProps {
params: Promise<{ locale: string; mode: string; slug: string }>;
}
function routeLabel(messages: ShellMessages, routeId: RouteId): string {
const labels = messages.footer.links;
switch (routeId) {
case 'sign-in':
return labels.login;
case 'forgot-password':
return 'Forgot password';
case 'reset-password':
return 'Reset password';
case 'privacy':
return labels.privacy;
case 'terms':
return labels.terms;
case 'accessibility':
return labels.accessibility;
case 'home':
return 'RentalDriveGo';
}
}
async function resolveParams(params: PendingRouteProps['params']) {
const { locale: localeValue, mode: modeValue, slug } = await params;
if (!isLocale(localeValue)) notFound();
if (!isMode(modeValue)) notFound();
const routeId = routeIdFromSlug(localeValue, slug);
if (!routeId || routeId === 'home') notFound();
return { locale: localeValue as Locale, mode: modeValue as ThemePreference, routeId };
}
export async function generateMetadata({ params }: PendingRouteProps): Promise<Metadata> {
const { locale, mode, routeId } = await resolveParams(params);
const messages = getMessages(locale).shell;
const label = routeLabel(messages, routeId);
return buildLocalizedMetadata({
locale,
mode,
routeId,
title: `${label} | ${messages.metadata.pendingTitle}`,
description: messages.metadata.pendingDescription,
indexable: false,
});
}
export default async function PendingRoute({ params }: PendingRouteProps) {
const { locale, mode, routeId } = await resolveParams(params);
const messages = getMessages(locale).shell;
const label = routeLabel(messages, routeId);
if (routeId === 'sign-in') {
return <SignInForm locale={locale} />;
}
if (routeId === 'forgot-password') {
return <ForgotPasswordForm locale={locale} />;
}
if (routeId === 'reset-password') {
return <ResetPasswordForm locale={locale} />;
}
return (
<StateShell
title={`${label}: ${messages.states.pendingTitle}`}
body={messages.states.pendingBody}
>
<StateActions>
<StateAction href={localizedModePath('home', locale, mode)}>
{messages.states.backHome}
</StateAction>
</StateActions>
</StateShell>
);
}