Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ```ts
- import React from 'react';
- import { notFound } from 'next/navigation';
- // 1️⃣ Import your actual page components
- import ContactPage from '@/app/contact/page';
- import AboutPage from '@/app/a-propos/page';
- import TeamPage from '@/app/a-propos/equipe/page';
- // 2️⃣ Define the routing tree
- type RouteNode = {
- component?: React.FC;
- children?: Record<string, RouteNode>;
- };
- const routeTree: Record<string, RouteNode> = {
- 'contact': { component: ContactPage },
- 'a-propos': {
- component: AboutPage,
- children: {
- 'equipe': { component: TeamPage },
- },
- },
- };
- export default function CatchAllPage({
- params,
- }: {
- params: Promise<{ segments?: string[] }>;
- }) {
- const resolvedParams = await params;
- const segments = resolvedParams.segments ?? [];
- let node: RouteNode | undefined;
- let Comp: React.FC | undefined;
- for (let i = 0; i < segments.length; i++) {
- const rawSeg = segments[i];
- const seg = decodeURIComponent(rawSeg);
- node = i === 0 ? routeTree[seg] : node?.children?.[seg];
- if (!node) {
- return notFound();
- }
- if (i === segments.length - 1) {
- Comp = node.component;
- }
- }
- if (!Comp) {
- return notFound();
- }
- return <Comp />;
- }
- export async function generateStaticParams() {
- return [
- { segments: ['contact'] },
- { segments: ['a-propos', 'equipe'] },
- ];
- }
- export async function generateMetadata({
- params,
- }: {
- params: Promise<{ segments?: string[] }>;
- }) {
- const resolvedParams = await params;
- const path = (resolvedParams.segments ?? []).join('/');
- switch (path) {
- case 'contact':
- return {
- title: 'Contact – Mon Site',
- description: 'Contactez-nous pour toute question ou demande d’information.',
- alternates: { canonical: '/contact' },
- };
- case 'a-propos/equipe':
- return {
- title: 'Notre Équipe – À Propos',
- description: 'Découvrez les membres de notre équipe et leurs expertises.',
- alternates: { canonical: '/a-propos/equipe' },
- };
- default:
- return {};
- }
- }
- ```
Advertisement
Add Comment
Please, Sign In to add comment