/** * ========================================================================= * PLATEFORME ECO-PANNEAU.FR - VERSION 1.0.0 * Interface Administrateur - Routeur Principal * ========================================================================= */ window.AdminView = ({ data, refreshData, showToast }) => { const { useState, useEffect } = React; const [activeTab, setActiveTab] = useState('dashboard'); // Navigation automatique via URL (Paramètre chat_id) useEffect(() => { const urlParams = new URLSearchParams(window.location.search); if (urlParams.get('chat_id')) { setActiveTab('messages'); } }, []); // Calcul asynchrone et sécurisé des pastilles de notification (badges) const unseenPanels = (data.panneaux || []).filter(p => !p.admin_seen && p.id !== 'demo-panneau').length; const unreadMessages = (data.interactions || []).filter(m => m.target === 'Admin' && !m.resolved).length; const pendingShipping = (data.panneaux || []).filter(p => p.physicalPanels > 0 && p.id !== 'demo-panneau' && p.shipping_status === "Attente d'impression").length; // Définition de la barre de navigation (Appel direct aux composants window.* pour éviter l'undefined mapping) const navItems = [ { id: 'dashboard', label: 'Tableau de bord', icon: }, { id: 'panneaux', label: 'Parc panneaux', icon: , badge: unseenPanels }, { id: 'logistique', label: 'Logistique (A1)', icon: , badge: pendingShipping }, { id: 'clients', label: 'Clients & Accès', icon: }, { id: 'factures', label: 'Facturation', icon: }, { id: 'messages', label: 'Messagerie', icon: , badge: unreadMessages }, { id: 'systeme', label: 'Paramètres système', icon: } ]; const handleLogout = async () => { await fetch('?logout=1'); window.location.reload(); }; // Aiguillage des vues scindées (Appel direct des balises XML plutôt que par variables intermédiaires) const renderContent = () => { switch(activeTab) { case 'dashboard': return ; case 'panneaux': return ; case 'logistique': return ; case 'clients': return ; case 'factures': return ; case 'messages': return ; case 'systeme': return ; default: return ; } }; return ( {renderContent()} ); }; /* EOF ========== [_www/_react/_admin.jsx] */