diff --git a/frontend/src/components/Header.jsx b/frontend/src/components/Header.jsx
index 4361000..f1c5eb0 100644
--- a/frontend/src/components/Header.jsx
+++ b/frontend/src/components/Header.jsx
@@ -141,7 +141,7 @@ const Header = () => {
>
{title}
diff --git a/frontend/src/components/ModernSpinner.jsx b/frontend/src/components/ModernSpinner.jsx
new file mode 100644
index 0000000..bd9e9c8
--- /dev/null
+++ b/frontend/src/components/ModernSpinner.jsx
@@ -0,0 +1,47 @@
+import React from "react";
+import { Box, CircularProgress, Typography } from "@mui/material";
+
+const ModernSpinner = () => {
+ return (
+
+
+
+ Chargement des données...
+
+
+ );
+};
+
+export default ModernSpinner;
\ No newline at end of file
diff --git a/frontend/src/components/Pages/Home.jsx b/frontend/src/components/Pages/Home.jsx
index a5c7bc4..c5385e5 100644
--- a/frontend/src/components/Pages/Home.jsx
+++ b/frontend/src/components/Pages/Home.jsx
@@ -2,6 +2,7 @@ import React, { useState, useEffect } from "react";
import Hero from "../Hero";
import SEO from "../SEO";
import api from "../../api";
+import ModernSpinner from "../ModernSpinner";
import {
Box,
Grid,
@@ -10,6 +11,7 @@ import {
Card,
CardContent,
} from "@mui/material";
+import Logo from "../../assets/logo-in3-mobil.svg";
const Home = () => {
const [backgroundImage, setBackgroundImage] = useState(null);
@@ -19,26 +21,43 @@ const Home = () => {
const [heroText, setHeroText] = useState("Texte par défaut");
const [heroTextColor, setHeroTextColor] = useState("#ffffff");
const [metaTitle, setMetaTitle] = useState("Titre par défaut");
- const [metaDescription, setMetaDescription] = useState("Description par défaut.");
+ const [metaDescription, setMetaDescription] = useState(
+ "Description par défaut."
+ );
+ const [canonicalUrl, setCanonicalUrl] = useState(null);
const [isLoading, setIsLoading] = useState(true);
const [error, setError] = useState(null);
+ const [expertiseTitle, setExpertiseTitle] = useState(
+ "Titre Pourquoi Nous Choisir ?"
+ );
+ const [expertise1Title, setExpertise1Title] = useState("Titre Expertise 1");
+ const [expertise1Text, setExpertise1Text] = useState("Text Expertise 1");
+ const [expertise2Title, setExpertise2Title] = useState("Titre Expertise 2");
+ const [expertise2Text, setExpertise2Text] = useState("Text Expertise 2");
+ const [expertise3Title, setExpertise3Title] = useState("Titre Expertise 3");
+ const [expertise3Text, setExpertise3Text] = useState("Text Expertise 3");
useEffect(() => {
const fetchPageData = async () => {
try {
setIsLoading(true);
setError(null);
- const response = await api.get("wp/v2/pages/13?_fields=acf,rank_math_title,rank_math_description");
+ const response = await api.get(
+ "wp/v2/pages/13?_fields=acf,rank_math_title,rank_math_description"
+ );
const { acf, rank_math_title, rank_math_description } = response.data;
// Métadonnées SEO
setMetaTitle(rank_math_title || "Titre par défaut");
setMetaDescription(rank_math_description || "Description par défaut.");
+ // Récupération de l'URL canonique
+ setCanonicalUrl(acf?.canonical_url || window.location.href);
+
// Données Hero
setUseGradient(acf?.enable_gradient ?? false);
- setHeroTitle(acf?.hero_title || "Titre par défaut");
+ setHeroTitle(acf?.hero_title || "Titre principal");
setHeroTitleColor(acf?.hero_title_color || "#ffffff");
setHeroText(acf?.hero_text || "Texte par défaut");
setHeroTextColor(acf?.hero_text_color || "#ffffff");
@@ -50,6 +69,20 @@ const Home = () => {
} else {
setBackgroundImage(null);
}
+ // Récupération du titre de la deuxième section Expertise
+ setExpertiseTitle(acf?.titre_expertise || "Pourquoi Nous Choisir ?");
+ setExpertise1Title(acf?.gdc_expert.titre_expertise_1 || "Expertise 1");
+ setExpertise1Text(
+ acf?.gdc_expert.text_expertise_1 || "Text Expertise 1"
+ );
+ setExpertise2Title(acf?.gdc_expert.titre_expertise_2 || "Expertise 2");
+ setExpertise2Text(
+ acf?.gdc_expert.text_expertise_2 || "Text Expertise 2"
+ );
+ setExpertise3Title(acf?.gdc_expert.titre_expertise_3 || "Expertise 3");
+ setExpertise3Text(
+ acf?.gdc_expert.text_expertise_3 || "Text Expertise 3"
+ );
} catch (error) {
console.error("Erreur lors de la récupération des données :", error);
setError("Impossible de charger les données. Veuillez réessayer.");
@@ -64,6 +97,7 @@ const Home = () => {
if (isLoading) {
return (
+
// Utilisation du spinner moderne
Chargement des données...
);
@@ -72,6 +106,14 @@ const Home = () => {
if (error) {
return (
+
{error}
);
@@ -80,7 +122,11 @@ const Home = () => {
return (
{/* SEO */}
-
+
{/* Section Héros */}
{
text={heroText}
textColor={heroTextColor}
/>
+
{/*
*/}
{/* Section Intérêt : Nos Services */}
-
-
- Pourquoi Nous Choisir ?
+
+
+ {expertiseTitle}{" "}
+ {/* Expertise 1 */}
{
}}
>
-
- Expertise
-
-
- Profitez de notre expertise et de nos solutions innovantes adaptées à vos besoins.
+
+ {expertise1Title}{" "}
+ {expertise1Text}
+
+ {/* Expertise 2 */}
{
}}
>
-
- Confiance
-
-
- Une équipe dédiée et à l'écoute pour garantir votre satisfaction.
+
+ {expertise2Title}{" "}
+ {expertise2Text}
+
+ {/* Expertise 3 */}
{
}}
>
-
- Résultats
-
-
- Des résultats concrets pour vos projets, avec des retours mesurables.
+
+ {" "}
+ {expertise3Title}{" "}
+ {expertise3Text}
@@ -176,7 +259,15 @@ const Home = () => {
{/* Section Désir : Témoignages */}
-
+
Ce que disent nos clients
@@ -192,7 +283,10 @@ const Home = () => {
"Un service exceptionnel, une équipe formidable !"
-
+
- Client 1
@@ -210,7 +304,10 @@ const Home = () => {
"Des résultats impressionnants pour notre projet."
-
+
- Client 2
@@ -221,7 +318,12 @@ const Home = () => {
{/* Section Action */}
-
+
Prêt à Commencer ?
@@ -245,4 +347,4 @@ const Home = () => {
);
};
-export default Home;
\ No newline at end of file
+export default Home;
diff --git a/frontend/src/components/Pages/Post.jsx b/frontend/src/components/Pages/Post.jsx
index 84089f9..1018613 100644
--- a/frontend/src/components/Pages/Post.jsx
+++ b/frontend/src/components/Pages/Post.jsx
@@ -20,7 +20,7 @@ const Post = () => {
- Liste des Articles
+ Nos réalisations
{posts.map((post) => (
diff --git a/frontend/src/components/SEO.jsx b/frontend/src/components/SEO.jsx
index 744c648..9ecd5be 100644
--- a/frontend/src/components/SEO.jsx
+++ b/frontend/src/components/SEO.jsx
@@ -1,12 +1,13 @@
import React from 'react';
import { Helmet } from 'react-helmet-async';
-const SEO = ({ title, description }) => {
+const SEO = ({ title, description, canonicalUrl }) => {
return (
{/* Title et Description */}
{title || 'Titre par défaut'}
+ {canonicalUrl && }
{/* Preconnect */}