// ✅ Importations nécessaires import React, { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import { Box, Typography, Button, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, TextField, Avatar } from "@mui/material"; import { Add, ArrowBack, Edit, Delete } from "@mui/icons-material"; import api from "../../api"; import { getToken } from "../../auth"; import { deletePost } from "../../wordpress"; const GestionArticles = () => { const [posts, setPosts] = useState([]); const [searchTerm, setSearchTerm] = useState(""); const navigate = useNavigate(); // ✅ Vérifier si l'utilisateur est connecté useEffect(() => { if (!getToken()) { navigate("/admin/login"); } }, [navigate]); // ✅ Récupérer les articles et leurs images associées useEffect(() => { const fetchPosts = async () => { try { const response = await api.get("wp/v2/posts?_fields=id,title,excerpt,featured_media"); const postsData = response.data; const postsWithImages = await Promise.all( postsData.map(async (post) => { if (post.featured_media) { try { const mediaResponse = await api.get(`wp/v2/media/${post.featured_media}`); return { ...post, image: mediaResponse.data.source_url, imageId: post.featured_media }; } catch (error) { console.error(`❌ Erreur chargement image article ${post.id}:`, error); return { ...post, image: null, imageId: null }; } } return { ...post, image: null, imageId: null }; }) ); setPosts(postsWithImages); } catch (error) { console.error("❌ Erreur chargement des articles :", error); } }; fetchPosts(); }, []); // ✅ Supprimer un article et son image associée const handleDeletePost = async (postId, imageId) => { if (window.confirm("Es-tu sûr de vouloir supprimer cet article ?")) { try { await deletePost(postId, imageId); // ✅ Appel de la fonction deletePost setPosts(posts.filter((post) => post.id !== postId)); // ✅ Met à jour la liste après suppression alert("✅ Article supprimé avec succès !"); } catch (error) { console.error("❌ Erreur suppression article :", error); alert("⚠ Erreur : impossible de supprimer l'article."); } } }; // ✅ Filtrage des articles const filteredPosts = posts.filter((post) => post.title.rendered.toLowerCase().includes(searchTerm.toLowerCase()) || post.excerpt.rendered.replace(/(<([^>]+)>)/gi, "").replace(/ /g, " ").toLowerCase().includes(searchTerm.toLowerCase()) ); return ( {/* ✅ En-tête avec retour et création */} Gestion des Articles {/* ✅ Recherche */} setSearchTerm(e.target.value)} sx={{ mb: 3 }} /> {/* ✅ Tableau des articles */} Image Titre Résumé Actions {filteredPosts.length > 0 ? ( filteredPosts.map((post) => ( {/* ✅ Image en vedette */} {/* ✅ Titre de l'article */} {post.title.rendered} {/* ✅ Résumé avec 100 caractères max */} {post.excerpt.rendered.replace(/(<([^>]+)>)/gi, "").replace(/ /g, " ").substring(0, 100)}... {/* ✅ Boutons Modifier et Supprimer */} )) ) : ( Aucun article trouvé. )}
); }; export default GestionArticles;