From 8bf66f695d1caf1ac1f94bb21a69ca38dacf7d94 Mon Sep 17 00:00:00 2001 From: Ladebeze66 Date: Mon, 3 Feb 2025 17:58:36 +0000 Subject: [PATCH] first --- .gitignore | 2 ++ app/Competences/[slug]/page.tsx | 15 ++++++--- app/portfolio/[slug]/page.tsx | 56 +++++++++++++++++++++++++++++---- next.config.ts | 4 +-- 4 files changed, 63 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 5ef6a52..c4ea510 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,5 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +.vercel diff --git a/app/Competences/[slug]/page.tsx b/app/Competences/[slug]/page.tsx index 5e2e5a5..609cbd8 100644 --- a/app/Competences/[slug]/page.tsx +++ b/app/Competences/[slug]/page.tsx @@ -1,5 +1,10 @@ -import ContentSectionCompetencesContainer from "../../components/ContentSectionCompetencesContainer"; - -export default function CompetencePage({ params }: { params: { slug: string } }) { - return ; -} +import ContentSectionCompetencesContainer from "../../components/ContentSectionCompetencesContainer"; + +export default function CompetencePage({ params }: { params: { slug: string } }) { + // Vérifie que le paramètre `slug` est bien défini + if (!params?.slug) { + return
Erreur : Slug introuvable.
; + } + + return ; +} diff --git a/app/portfolio/[slug]/page.tsx b/app/portfolio/[slug]/page.tsx index 46cef79..0fa0d81 100644 --- a/app/portfolio/[slug]/page.tsx +++ b/app/portfolio/[slug]/page.tsx @@ -1,7 +1,51 @@ -import ContentSection from "../../components/ContentSection"; // Importation du composant ContentSection +"use client"; -// Composant principal de la page de détail du projet -export default function Page({ params }: { params: { slug: string } }) { - // Rendu du composant ContentSection avec les paramètres de la collection et du slug - return ; -} \ No newline at end of file +import { useParams } from "next/navigation"; +import ContentSection from "../../components/ContentSection"; +import { useEffect, useState } from "react"; + +export default function Page() { + const params = useParams(); + const [data, setData] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); // ✅ Ajout du typage string | null + const slug = typeof params.slug === "string" ? params.slug : ""; + + useEffect(() => { + if (!params?.slug) return; + + async function fetchData() { + try { + const response = await fetch(`http://localhost:1337/api/projects?filters[slug][$eq]=${params.slug}&populate=*`); + const jsonData = await response.json(); + + if (!jsonData?.data || jsonData.data.length === 0) { + setError("❌ Erreur : Projet introuvable."); + } else { + setData(jsonData.data); + } + } catch (err) { + setError("❌ Erreur de chargement des données."); + } finally { + setLoading(false); + } + } + + fetchData(); + }, [params.slug]); + + if (!params?.slug) { + return
❌ Erreur : Slug introuvable.
; + } + + if (loading) { + return
⏳ Chargement...
; + } + + if (error) { + return
{error}
; + } + + return params.slug ? :
❌ Erreur : Slug introuvable.
; + +} diff --git a/next.config.ts b/next.config.ts index 22d113f..e77b6cf 100644 --- a/next.config.ts +++ b/next.config.ts @@ -2,10 +2,8 @@ const nextConfig = { // Active le mode strict de React pour signaler des erreurs potentielles reactStrictMode: true, - - // Activer les fonctionnalités expérimentales nécessaires (par exemple appDir pour les layouts de l'application) experimental: { - appDir: true, + appDir: true, // ✅ Assurez-vous que cette ligne est bien présente }, // Gestion des réécritures d'URL pour proxy local vers le backend