Upgrade app to Next.js 16
CI / quality (push) Waiting to run

This commit is contained in:
MOH
2026-03-13 15:50:37 +01:00
parent f14116b56c
commit e32ac4cacb
40 changed files with 1853 additions and 1157 deletions
+6 -6
View File
@@ -14,16 +14,15 @@ import { getLocalizedPath, resolveLocale } from "@/lib/locale";
import { buildLocalizedMetadata } from "@/lib/metadata";
type AboutPageProps = {
params: {
params: Promise<{
locale: string;
};
}>;
};
export const dynamic = "force-dynamic";
export async function generateMetadata({
params: { locale },
}: AboutPageProps): Promise<Metadata> {
export async function generateMetadata({ params }: AboutPageProps): Promise<Metadata> {
const { locale } = await params;
const localeKey = resolveLocale(locale);
const t = await getTranslations({ locale: localeKey, namespace: "aboutPage" });
@@ -35,7 +34,8 @@ export async function generateMetadata({
});
}
export default async function AboutPage({ params: { locale } }: AboutPageProps) {
export default async function AboutPage({ params }: AboutPageProps) {
const { locale } = await params;
const localeKey = resolveLocale(locale);
const [t, siteSettings, mediaBindings] = await Promise.all([
getTranslations({ locale: localeKey, namespace: "aboutPage" }),
+1 -1
View File
@@ -1,7 +1,7 @@
"use server";
import { redirect } from "next/navigation";
import { isRedirectError } from "next/dist/client/components/redirect";
import { isRedirectError } from "next/dist/client/components/redirect-error";
import { z } from "zod";
import { enforceContactRateLimit, verifyTurnstileToken } from "@/lib/contact-guard";
+6 -6
View File
@@ -15,14 +15,13 @@ import { CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { submitContactFormAction } from "./actions";
type ContactPageProps = {
params: {
params: Promise<{
locale: string;
};
}>;
};
export async function generateMetadata({
params: { locale },
}: ContactPageProps): Promise<Metadata> {
export async function generateMetadata({ params }: ContactPageProps): Promise<Metadata> {
const { locale } = await params;
const localeKey = resolveLocale(locale);
const t = await getTranslations({ locale: localeKey, namespace: "contactPage" });
@@ -34,7 +33,8 @@ export async function generateMetadata({
});
}
export default async function ContactPage({ params: { locale } }: ContactPageProps) {
export default async function ContactPage({ params }: ContactPageProps) {
const { locale } = await params;
const localeKey = resolveLocale(locale);
const [t, protection] = await Promise.all([
getTranslations({ locale: localeKey, namespace: "contactPage" }),
+5 -4
View File
@@ -11,23 +11,24 @@ import { getLocalizedPath, resolveLocale } from "@/lib/locale";
type SiteLayoutProps = {
children: ReactNode;
params: {
params: Promise<{
locale: string;
};
}>;
};
export const dynamic = "force-dynamic";
export const revalidate = 0;
export default async function SiteLayout({ children, params: { locale } }: SiteLayoutProps) {
export default async function SiteLayout({ children, params }: SiteLayoutProps) {
noStore();
const { locale } = await params;
const localeKey = resolveLocale(locale);
const [maintenanceEnabled, mediaBindings] = await Promise.all([
getMaintenanceMode(),
getSiteSettingsMediaBindings(),
]);
const authenticated = isAdminAuthenticated();
const authenticated = await isAdminAuthenticated();
if (maintenanceEnabled && !authenticated) {
redirect(getLocalizedPath(localeKey, "/coming-soon"));
+6 -6
View File
@@ -24,9 +24,9 @@ import { CardContent } from "@/components/ui/card";
import { getLocalizedPath, resolveLocale } from "@/lib/locale";
type HomePageProps = {
params: {
params: Promise<{
locale: string;
};
}>;
};
const serviceIcons = [
@@ -41,9 +41,8 @@ const serviceIcons = [
export const dynamic = "force-dynamic";
export async function generateMetadata({
params: { locale },
}: HomePageProps): Promise<Metadata> {
export async function generateMetadata({ params }: HomePageProps): Promise<Metadata> {
const { locale } = await params;
const localeKey = resolveLocale(locale);
const [t, siteSettings] = await Promise.all([
getTranslations({ locale: localeKey, namespace: "homepage" }),
@@ -59,7 +58,8 @@ export async function generateMetadata({
});
}
export default async function HomePage({ params: { locale } }: HomePageProps) {
export default async function HomePage({ params }: HomePageProps) {
const { locale } = await params;
const localeKey = resolveLocale(locale);
const [t, marqueeSettings] = await Promise.all([
getTranslations({ locale: localeKey, namespace: "homepage" }),
@@ -13,17 +13,16 @@ import {
} from "@/lib/portfolio";
type PortfolioItemPageProps = {
params: {
params: Promise<{
locale: string;
slug: string;
};
}>;
};
export const dynamic = "force-dynamic";
export async function generateMetadata({
params: { locale, slug },
}: PortfolioItemPageProps): Promise<Metadata> {
export async function generateMetadata({ params }: PortfolioItemPageProps): Promise<Metadata> {
const { locale, slug } = await params;
const localeKey = resolveLocale(locale);
const item = await getPublishedPortfolioProjectBySlug(slug);
@@ -45,8 +44,9 @@ export async function generateMetadata({
}
export default async function PortfolioItemPage({
params: { locale, slug },
params,
}: PortfolioItemPageProps) {
const { locale, slug } = await params;
const localeKey = resolveLocale(locale);
const item = await getPublishedPortfolioProjectBySlug(slug);
@@ -16,17 +16,16 @@ import {
} from "@/lib/portfolio";
type PortfolioCategoryPageProps = {
params: {
params: Promise<{
locale: string;
slug: string;
};
}>;
};
export const dynamic = "force-dynamic";
export async function generateMetadata({
params: { locale, slug },
}: PortfolioCategoryPageProps): Promise<Metadata> {
export async function generateMetadata({ params }: PortfolioCategoryPageProps): Promise<Metadata> {
const { locale, slug } = await params;
const localeKey = resolveLocale(locale);
const t = await getTranslations({ locale: localeKey, namespace: "portfolioPage" });
const category = await getActivePortfolioCategoryBySlug(slug);
@@ -49,8 +48,9 @@ export async function generateMetadata({
}
export default async function PortfolioCategoryPage({
params: { locale, slug },
params,
}: PortfolioCategoryPageProps) {
const { locale, slug } = await params;
const localeKey = resolveLocale(locale);
const t = await getTranslations({ locale: localeKey, namespace: "portfolioPage" });
const [categories, category, projects] = await Promise.all([
@@ -3,14 +3,15 @@ import { permanentRedirect } from "next/navigation";
import { getLocalizedPath, resolveLocale } from "@/lib/locale";
type PortfolioCategoryIndexPageProps = {
params: {
params: Promise<{
locale: string;
};
}>;
};
export default function PortfolioCategoryIndexPage({
params: { locale },
export default async function PortfolioCategoryIndexPage({
params,
}: PortfolioCategoryIndexPageProps) {
const { locale } = await params;
const localeKey = resolveLocale(locale);
permanentRedirect(getLocalizedPath(localeKey, "/portfolio"));
+12 -9
View File
@@ -11,19 +11,18 @@ import { getLocalizedPath, resolveLocale } from "@/lib/locale";
import { getActivePortfolioCategories, getPublishedPortfolioProjects } from "@/lib/portfolio";
type PortfolioPageProps = {
params: {
params: Promise<{
locale: string;
};
searchParams?: {
}>;
searchParams?: Promise<{
category?: string;
};
}>;
};
export const dynamic = "force-dynamic";
export async function generateMetadata({
params: { locale },
}: PortfolioPageProps): Promise<Metadata> {
export async function generateMetadata({ params }: PortfolioPageProps): Promise<Metadata> {
const { locale } = await params;
const localeKey = resolveLocale(locale);
const t = await getTranslations({ locale: localeKey, namespace: "portfolioPage" });
@@ -36,12 +35,16 @@ export async function generateMetadata({
}
export default async function PortfolioPage({
params: { locale },
params,
searchParams,
}: PortfolioPageProps) {
const [{ locale }, resolvedSearchParams] = await Promise.all([
params,
searchParams,
]);
const localeKey = resolveLocale(locale);
const t = await getTranslations({ locale: localeKey, namespace: "portfolioPage" });
const selectedCategory = searchParams?.category ?? "";
const selectedCategory = resolvedSearchParams?.category ?? "";
if (selectedCategory) {
redirect(getLocalizedPath(localeKey, `/portfolio/category/${selectedCategory}`));
+6 -6
View File
@@ -13,14 +13,13 @@ import { Button } from "@/components/ui/button";
import { CardContent } from "@/components/ui/card";
type SuccessPageProps = {
params: {
params: Promise<{
locale: string;
};
}>;
};
export async function generateMetadata({
params: { locale },
}: SuccessPageProps): Promise<Metadata> {
export async function generateMetadata({ params }: SuccessPageProps): Promise<Metadata> {
const { locale } = await params;
const localeKey = resolveLocale(locale);
const t = await getTranslations({ locale: localeKey, namespace: "successPage" });
@@ -32,7 +31,8 @@ export async function generateMetadata({
});
}
export default async function SuccessPage({ params: { locale } }: SuccessPageProps) {
export default async function SuccessPage({ params }: SuccessPageProps) {
const { locale } = await params;
const localeKey = resolveLocale(locale);
const t = await getTranslations({ locale: localeKey, namespace: "successPage" });