import { useEffect, useState } from "react"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Card, CardContent } from "@/components/ui/card"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from "@/components/ui/dialog"; import { Avatar, AvatarFallback } from "@/components/ui/avatar"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; import { MadeWithDyad } from "@/components/made-with-dyad"; import { PlusCircle, Search, User, LogOut, Settings, ChevronDown, Plus, Archive, Trash2, Image, CheckSquare } from "lucide-react"; import AuthService from "@/services/AuthService"; import AdminService from "@/services/AdminService"; import NotesService, { Note } from "@/services/NotesService"; import { useNavigate } from "react-router-dom"; interface UserType { id: number; username: string; is_admin: boolean; } const Index = () => { const [user, setUser] = useState(null); const [showAdmin, setShowAdmin] = useState(false); const [activeTab, setActiveTab] = useState("all"); const [searchQuery, setSearchQuery] = useState(""); const [notes, setNotes] = useState([]); const [currentNote, setCurrentNote] = useState(null); const [users, setUsers] = useState([]); const navigate = useNavigate(); useEffect(() => { const userFromAuth = AuthService.getUser(); if (userFromAuth) { setUser(userFromAuth); loadNotes(); } else { navigate("/login"); } }, [navigate]); const loadNotes = async () => { const fetchedNotes = await NotesService.getNotes(); setNotes(fetchedNotes || []); if (fetchedNotes && fetchedNotes.length > 0) { setCurrentNote(fetchedNotes[0]); } }; const loadUsers = async () => { if (user?.is_admin) { const fetchedUsers = await AdminService.getUsers(); setUsers(fetchedUsers || []); } }; const handleLogout = () => { AuthService.logout(); navigate("/login"); }; const handleCreateNote = async () => { const newNote = await NotesService.createNote("Nouvelle note"); if (newNote) { setNotes([newNote, ...notes]); setCurrentNote(newNote); } }; const handleUpdateNote = async (updatedFields: Partial) => { if (!currentNote) return; const updatedNote = { ...currentNote, ...updatedFields, todos: currentNote.todos || [], images: currentNote.images || [] }; const success = await NotesService.updateNote(updatedNote); if (success) { setCurrentNote(updatedNote); setNotes(notes.map(note => note.id === updatedNote.id ? updatedNote : note)); } }; const handleDeleteNote = async () => { if (!currentNote?.id) return; if (window.confirm("Êtes-vous sûr de vouloir supprimer cette note ?")) { const success = await NotesService.deleteNote(currentNote.id); if (success) { const updatedNotes = notes.filter(note => note.id !== currentNote.id); setNotes(updatedNotes); setCurrentNote(updatedNotes.length > 0 ? updatedNotes[0] : null); } } }; const handleAddUser = async () => { const username = prompt("Nom d'utilisateur:"); if (!username) return; const password = prompt("Mot de passe:"); if (!password) return; const isAdmin = window.confirm("Donner les droits administrateur ?"); const newUser = await AdminService.createUser(username, password, isAdmin); if (newUser) { loadUsers(); } }; const handleChangePassword = async (userId: number) => { const password = prompt("Nouveau mot de passe:"); if (!password) return; const success = await AdminService.updateUserPassword(userId, password); if (success) { loadUsers(); } }; const handleToggleAdmin = async (userId: number, currentStatus: boolean) => { const success = await AdminService.toggleAdminStatus(userId, currentStatus); if (success) { loadUsers(); } }; const handleDeleteUser = async (userId: number) => { if (window.confirm("Êtes-vous sûr de vouloir supprimer cet utilisateur ?")) { const success = await AdminService.deleteUser(userId); if (success) { loadUsers(); } } }; // Charger les utilisateurs quand le panel admin s'ouvre useEffect(() => { if (showAdmin) { loadUsers(); } }, [showAdmin]); const filteredNotes = notes.filter(note => (activeTab === "all" || (activeTab === "archived" && note.archived)) && (searchQuery === "" || note.title.toLowerCase().includes(searchQuery.toLowerCase()) || (note.content && note.content.toLowerCase().includes(searchQuery.toLowerCase()))) ); return (
{/* Top Navigation */}
Notes App
{user && ( Mon compte {user.is_admin && ( setShowAdmin(true)}> Administration )} Déconnexion )}
{/* Main Content */}
{/* Sidebar */}
setSearchQuery(e.target.value)} />
Toutes Archivées
{filteredNotes.length === 0 ? (

Aucune note trouvée

) : ( filteredNotes.map(note => ( setCurrentNote(note)} >

{note.title || "Sans titre"}

{note.content ? note.content.replace(/<[^>]*>/g, '') : ""}

)) )}
{/* Note Editor */} {currentNote ? (
handleUpdateNote({ title: e.target.value })} />
Contenu Tâches Images
handleUpdateNote({ content: e.currentTarget.innerHTML })} />
{currentNote.todos && currentNote.todos.length > 0 ? ( currentNote.todos.map((todo, index) => (
{ const updatedTodos = [...(currentNote.todos || [])]; updatedTodos[index].completed = !updatedTodos[index].completed; handleUpdateNote({ todos: updatedTodos }); }} className="h-4 w-4" /> {todo.text}
)) ) : (

Aucune tâche

)}
{currentNote.images && currentNote.images.length > 0 ? ( currentNote.images.map((image, index) => (
{`Note
)) ) : (

Aucune image

)}
) : (

Aucune note sélectionnée

)}
{/* Admin Modal */} Administration Gérez les utilisateurs et les paramètres de l'application Utilisateurs Paramètres
{users.length > 0 ? ( users.map(user => (
{user.username.charAt(0).toUpperCase()}

{user.username}

{user.is_admin ? "Administrateur" : "Utilisateur"}

{user.id !== 1 && ( <> )}
)) ) : (

Chargement des utilisateurs...

)}

Paramètres de l'application

); }; export default Index;