diff --git a/frontend/src/components/Pages/GestionPageAccueil.jsx b/frontend/src/components/Pages/GestionPageAccueil.jsx
index f1d011b..2e84d06 100644
--- a/frontend/src/components/Pages/GestionPageAccueil.jsx
+++ b/frontend/src/components/Pages/GestionPageAccueil.jsx
@@ -1,168 +1,224 @@
-import React, { useState, useEffect } from "react";
-import { updateHomePageACF, uploadImage } from "../../wordpress";
+import { useState, useEffect } from "react";
import { useNavigate } from "react-router-dom";
-import { Box, Button, TextField, Typography, Snackbar, Alert, Paper, Card, CardMedia } from "@mui/material";
-import api from "../../api";
-
-const PAGE_ID = 13; // ID de la page d'accueil
+import { updateHomePageACF, uploadImage } from "../../wordpress";
+import { getToken } from "../../auth";
+import {
+ Typography,
+ TextField,
+ Button,
+ Container,
+ Paper,
+ Box,
+ CircularProgress,
+} from "@mui/material";
const GestionPageAccueil = () => {
- const [heroTitle, setHeroTitle] = useState("");
- const [heroText, setHeroText] = useState("");
- const [heroImage, setHeroImage] = useState(null);
- const [heroImageId, setHeroImageId] = useState(null);
- const [message, setMessage] = useState({ type: "", text: "" });
- const navigate = useNavigate(); // 🔥 Gestion de la navigation
+ const navigate = useNavigate();
+ const [heroTitle, setHeroTitle] = useState("");
+ const [heroText, setHeroText] = useState("");
+ const [heroImage, setHeroImage] = useState(null);
+ const [loading, setLoading] = useState(true);
+ const [error, setError] = useState(null);
+ const [successMessage, setSuccessMessage] = useState("");
- // ✅ Charger les données ACF existantes
- useEffect(() => {
- const fetchPageData = async () => {
- try {
- const response = await api.get(`wp/v2/pages/${PAGE_ID}?_fields=acf`);
- const acfData = response.data.acf;
-
- if (acfData) {
- setHeroTitle(acfData.hero_title || "");
- setHeroText(acfData.hero_text || "");
+ // ✅ Vérification de l'authentification (Redirection si non connecté)
+ useEffect(() => {
+ if (!getToken()) {
+ navigate("/admin/login");
+ }
+ }, [navigate]);
- if (acfData.img_hero) {
- setHeroImageId(acfData.img_hero);
- const imageResponse = await api.get(`wp/v2/media/${acfData.img_hero}`);
- setHeroImage(imageResponse.data.source_url);
- }
- }
- } catch (error) {
- console.error("❌ Erreur chargement ACF :", error);
- setMessage({ type: "error", text: "Erreur lors du chargement des données." });
- }
- };
- fetchPageData();
- }, []);
+ // ✅ Chargement des données ACF depuis WordPress
+ useEffect(() => {
+ const fetchPageData = async () => {
+ try {
+ const response = await fetch(
+ "https://preprod.octopusdesign.fr/api-octopus/server/wp-json/wp/v2/pages/13?_fields=acf",
+ {
+ method: "GET",
+ headers: {
+ "Content-Type": "application/json",
+ },
+ }
+ );
- // ✅ Sauvegarde des données ACF
- const handleSave = async () => {
- try {
- const formData = {
- acf: {
- hero_title: heroTitle,
- hero_text: heroText,
- img_hero: heroImageId || null, // âś… Mise Ă jour avec l'ID de l'image
- }
- };
-
- console.log("📢 Envoi des nouvelles données ACF :", formData);
- await updateHomePageACF(PAGE_ID, formData);
-
- setMessage({ type: "success", text: "✅ Mise à jour réussie !" });
-
- // ✅ 🔥 Redirection vers le Dashboard après 1.5 sec
- setTimeout(() => {
- navigate("/admin/dashboard");
- }, 1500);
- } catch (error) {
- console.error("❌ Erreur mise à jour ACF :", error);
- setMessage({ type: "error", text: "❌ Échec de la mise à jour. Vérifie les permissions WordPress." });
+ if (!response.ok) {
+ throw new Error("Erreur de chargement des données");
}
+
+ const data = await response.json();
+ setHeroTitle(data.acf?.hero_title || "");
+ setHeroText(data.acf?.hero_text || "");
+
+ // ✅ Récupération de l'image Hero
+ if (data.acf?.img_hero) {
+ const mediaResponse = await fetch(
+ `https://preprod.octopusdesign.fr/api-octopus/server/wp-json/wp/v2/media/${data.acf.img_hero}`
+ );
+ const mediaData = await mediaResponse.json();
+ setHeroImage(mediaData.source_url);
+ }
+
+ setLoading(false);
+ } catch (error) {
+ console.error("❌ Erreur chargement ACF :", error);
+ setError("Impossible de charger les données.");
+ setLoading(false);
+ }
};
- // âś… Gestion de l'upload d'image
- const handleImageUpload = async (event) => {
- const file = event.target.files[0];
- if (!file) return;
+ fetchPageData();
+ }, []);
- try {
- const imageId = await uploadImage(file);
- setHeroImageId(imageId);
+ // âś… Mise Ă jour des champs ACF
+ const handleSave = async () => {
+ try {
+ const newData = {
+ hero_title: heroTitle,
+ hero_text: heroText,
+ };
- const imageResponse = await api.get(`wp/v2/media/${imageId}`);
- setHeroImage(imageResponse.data.source_url);
+ console.log("📢 Données envoyées pour mise à jour ACF :", newData);
+ await updateHomePageACF(13, newData);
- setMessage({ type: "success", text: "✅ Image uploadée avec succès !" });
- } catch (error) {
- console.error("❌ Erreur lors de l'upload de l'image :", error);
- setMessage({ type: "error", text: "❌ Échec de l'upload de l'image." });
- }
- };
+ setSuccessMessage("✅ Modifications enregistrées avec succès !");
+ setTimeout(() => setSuccessMessage(""), 3000);
+ } catch (error) {
+ console.error("❌ Erreur mise à jour :", error);
+ setError("âš Impossible de mettre Ă jour les champs ACF.");
+ }
+ };
- return (
-
-
-
- 🏠Gestion de la Page d'Accueil
+ // ✅ Gérer le téléversement d’une nouvelle image Hero
+ const handleImageUpload = async (event) => {
+ const file = event.target.files[0];
+ if (file) {
+ try {
+ const imageId = await uploadImage(file);
+ setHeroImage(URL.createObjectURL(file)); // Affichage immédiat
+ await updateHomePageACF(13, { img_hero: imageId });
+ setSuccessMessage("âś… Image mise Ă jour !");
+ } catch (error) {
+ console.error("❌ Erreur lors de l'upload :", error);
+ setError("❌ Échec de l'upload de l'image.");
+ }
+ }
+ };
+
+ return (
+
+
+ {/* âś… En-tĂŞte */}
+
+ 🏠Gestion de la Page d'Accueil
+
+
+ {/* âś… Affichage du statut de chargement */}
+ {loading ? (
+
+
+
+ ) : error ? (
+
+ {error}
+
+ ) : (
+ <>
+ {/* ✅ Message de succès */}
+ {successMessage && (
+
+
+ {successMessage}
+
+ )}
- {message.text && (
- setMessage({ type: "", text: "" })}>
-
- {message.text}
-
-
- )}
-
- {/* ✅ Aperçu de l'image actuelle */}
- {heroImage && (
-
-
-
- )}
-
- {/* âś… Bouton pour modifier l'image */}
-
-
- setHeroTitle(e.target.value)}
- sx={{ "& .MuiInputBase-input": { fontSize: "1.2rem" } }}
+ {/* âś… Affichage de l'image actuelle */}
+ {heroImage && (
+
+
+
+ )}
- setHeroText(e.target.value)}
- multiline
- rows={3}
- sx={{ "& .MuiInputBase-input": { fontSize: "1rem" } }}
- />
+ {/* âś… Bouton pour changer l'image */}
+
-
+ {/* âś… Formulaire de modification */}
+ setHeroTitle(e.target.value)}
+ sx={{ mb: 2, backgroundColor: "#fff", borderRadius: "5px" }}
+ />
- {/* âś… Bouton retour Dashboard */}
-
-
-
- );
+ setHeroText(e.target.value)}
+ sx={{ mb: 2, backgroundColor: "#fff", borderRadius: "5px" }}
+ multiline
+ rows={3}
+ />
+
+ {/* âś… Bouton d'enregistrement */}
+
+
+ {/* âś… Bouton retour au Dashboard */}
+
+ >
+ )}
+
+
+ );
};
export default GestionPageAccueil;
\ No newline at end of file