web: bump to node 22, next 15, react 19, etc.

This commit is contained in:
2025-04-30 19:21:33 +02:00
parent 7030950850
commit cc2a11cd64
21 changed files with 2384 additions and 2580 deletions

View File

@@ -71,11 +71,13 @@ export async function generateStaticParams() {
});
}
type Params = Promise<{ url: string[] }>;
export async function generateMetadata(
{ params }: { params: { url: string[] } },
{ params }: { params: Params },
parent: ResolvingMetadata
): Promise<Metadata | null> {
const { url } = params;
const { url } = await params;
const urlPath = getWagtailUrlPath(url);
const { data, error } = await getClient().query(genericPageByUrlPathQuery, {
urlPath: urlPath,
@@ -93,8 +95,8 @@ export async function generateMetadata(
return metadata;
}
export default async function Page({ params }: { params: { url: string[] } }) {
const { url } = params;
export default async function Page({ params }: { params: Params }) {
const { url } = await params;
const urlPath = getWagtailUrlPath(url);
const { data, error } = await getClient().query(genericPageByUrlPathQuery, {
urlPath: urlPath,

View File

@@ -44,12 +44,15 @@ export async function generateStaticParams() {
}));
}
type Params = Promise<{ slug: string }>;
export async function generateMetadata(
{ params }: { params: { slug: string } },
{ params }: { params: Params },
parent: ResolvingMetadata
): Promise<Metadata | null> {
const { slug } = await params;
const { data, error } = await getClient().query(newsBySlugQuery, {
slug: params.slug,
slug,
});
if (error) {
throw new Error(error.message);
@@ -62,9 +65,10 @@ export async function generateMetadata(
return metadata;
}
export default async function Page({ params }: { params: { slug: string } }) {
export default async function Page({ params }: { params: Params }) {
const { slug } = await params;
const { data, error } = await getClient().query(newsBySlugQuery, {
slug: params.slug,
slug,
});
if (error) {

View File

@@ -6,7 +6,7 @@ import { newsQuery, NewsFragment, NewsIndexFragment } from "@/lib/news";
import { getSeoMetadata } from "@/lib/seo";
export async function generateMetadata(
{ params }: { params: { url: string[] } },
{ params }: { params: Promise<{}> },
parent: ResolvingMetadata
): Promise<Metadata | null> {
const { data, error } = await getClient().query(newsQuery, {});

View File

@@ -34,15 +34,7 @@ type ResponseData = {
total: number;
};
const whitelistFilter = (obj: Record<string, any>, whitelist: string[]) =>
Object.entries(obj)
.filter(([key, value]) => whitelist.includes(key))
.reduce(
(obj: Record<string, any>, [key, value]) => ((obj[key] = value), obj),
{}
);
export async function GET(req: NextRequest, res: NextResponse<ResponseData>) {
export async function GET(req: NextRequest) {
const searchParams = req.nextUrl.searchParams;
const view = searchParams.get("view");
@@ -80,15 +72,20 @@ export async function GET(req: NextRequest, res: NextResponse<ResponseData>) {
: null;
return {
url: `${process.env.URL}/arrangementer/${event.slug}`,
id: event.id,
slug: event.slug,
title: event.title,
subtitle: event.subtitle,
nextOccurrence: nextOccurrence,
url: `${process.env.URL}/arrangementer/${event.slug}`,
futureOccurrencesCount: futureOccurrences.length,
...whitelistFilter(event, keepKeys),
};
} as CompactEvent;
});
return NextResponse.json(
{ events: compactEvents, total: compactEvents.length },
{ status: 200 }
);
const responseData: ResponseData = {
events: compactEvents,
total: compactEvents.length,
};
return NextResponse.json(responseData, { status: 200 });
}

View File

@@ -45,12 +45,15 @@ export async function generateStaticParams() {
}));
}
type Params = Promise<{ slug: string }>;
export async function generateMetadata(
{ params }: { params: { slug: string } },
{ params }: { params: Params },
parent: ResolvingMetadata
): Promise<Metadata | null> {
const { slug } = await params;
const { data, error } = await getClient().query(eventBySlugQuery, {
slug: params.slug,
slug,
});
if (error) {
@@ -65,9 +68,10 @@ export async function generateMetadata(
return metadata;
}
export default async function Page({ params }: { params: { slug: string } }) {
export default async function Page({ params }: { params: Params }) {
const { slug } = await params;
const { data, error } = await getClient().query(eventBySlugQuery, {
slug: params.slug,
slug,
});
if (error) {

View File

@@ -14,7 +14,7 @@ import { EventIndexFragment, VenueFragment } from "@/gql/graphql";
import { getSeoMetadata } from "@/lib/seo";
export async function generateMetadata(
{ params }: { params: { url: string[] } },
{ params }: { params: Promise<{}> },
parent: ResolvingMetadata
): Promise<Metadata | null> {
const { data, error } = await getClient().query(eventIndexMetadataQuery, {});

View File

@@ -20,12 +20,15 @@ const associationBySlugQuery = graphql(`
}
`);
type Params = Promise<{ slug: string }>;
export async function generateMetadata(
{ params }: { params: { slug: string } },
{ params }: { params: Params },
parent: ResolvingMetadata
): Promise<Metadata | null> {
const { slug } = await params;
const { data, error } = await getClient().query(associationBySlugQuery, {
slug: params.slug,
slug,
});
if (error) {
@@ -65,9 +68,10 @@ export async function generateStaticParams() {
}));
}
export default async function Page({ params }: { params: { slug: string } }) {
export default async function Page({ params }: { params: Params }) {
const { slug } = await params;
const { data, error } = await getClient().query(associationBySlugQuery, {
slug: params.slug,
slug,
});
if (error) {

View File

@@ -26,7 +26,7 @@ const allAssociationsQuery = graphql(`
`);
export async function generateMetadata(
{ params }: { params: { url: string[] } },
{ params }: { params: Promise<{}> },
parent: ResolvingMetadata
): Promise<Metadata | null> {
const { data, error } = await getClient().query(allAssociationsQuery, {});

View File

@@ -33,7 +33,7 @@ const ContactIndexDefinition = graphql(`
`);
export async function generateMetadata(
{ params }: { params: { url: string[] } },
{ params }: { params: Promise<{}> },
parent: ResolvingMetadata
): Promise<Metadata | null> {
const { data, error } = await getClient().query(contactQuery, {});

View File

@@ -2,6 +2,7 @@ import "@/css/main.scss";
import { Header } from "@/components/layout/Header";
import { Footer } from "@/components/layout/Footer";
import { Metadata } from "next";
import { NuqsAdapter } from "nuqs/adapters/next/app";
const baseUrlMetadata = process.env.URL
? { metadataBase: new URL(process.env.URL) }
@@ -43,9 +44,11 @@ export default function RootLayout({
)}
</head>
<body>
<Header />
{children}
<Footer />
<NuqsAdapter>
<Header />
{children}
<Footer />
</NuqsAdapter>
</body>
</html>
);

View File

@@ -20,12 +20,15 @@ const venueBySlugQuery = graphql(`
}
`);
type Params = Promise<{ slug: string }>;
export async function generateMetadata(
{ params }: { params: { slug: string } },
{ params }: { params: Params },
parent: ResolvingMetadata
): Promise<Metadata | null> {
const { slug } = await params;
const { data, error } = await getClient().query(venueBySlugQuery, {
slug: params.slug,
slug,
});
if (error) {
@@ -65,9 +68,10 @@ export async function generateStaticParams() {
}));
}
export default async function Page({ params }: { params: { slug: string } }) {
export default async function Page({ params }: { params: Params }) {
const { slug } = await params;
const { data, error } = await getClient().query(venueBySlugQuery, {
slug: params.slug,
slug,
});
if (error) {

View File

@@ -70,7 +70,7 @@ const VenueFragmentDefinition = graphql(`
`);
export async function generateMetadata(
{ params }: { params: { url: string[] } },
{ params }: { params: Promise<{}> },
parent: ResolvingMetadata
): Promise<Metadata | null> {
const { data, error } = await getClient().query(venueIndexQuery, {});

View File

@@ -8,11 +8,11 @@ import { Suspense } from "react";
export default async function Page({
searchParams,
}: {
searchParams?: {
searchParams?: Promise<{
q?: string;
};
}>;
}) {
const { q: query } = searchParams ?? {};
const { q: query } = (await searchParams) ?? {};
let results = [];
if (query) {

View File

@@ -38,7 +38,7 @@ const VenueRentalIndexDefinition = graphql(`
`);
export async function generateMetadata(
{ params }: { params: { url: string[] } },
{ params }: { params: Promise<{}> },
parent: ResolvingMetadata
): Promise<Metadata | null> {
const { data, error } = await getClient().query(venueRentalIndexQuery, {});