From e8c6a7e7f5be866260af3d9fd02d71ee77e45c72 Mon Sep 17 00:00:00 2001 From: Alma Date: Wed, 9 Apr 2025 20:25:15 +0200 Subject: [PATCH] update api users and groups and users --- components/groups/groups-table.tsx | 109 ++++++++++++++++++++++++++++- components/users/users-table.tsx | 55 ++++++++------- 2 files changed, 138 insertions(+), 26 deletions(-) diff --git a/components/groups/groups-table.tsx b/components/groups/groups-table.tsx index 8bc8206d..5e6a0a43 100644 --- a/components/groups/groups-table.tsx +++ b/components/groups/groups-table.tsx @@ -51,6 +51,9 @@ export function GroupsTable({ userRole = [] }: GroupsTableProps) { const [searchTerm, setSearchTerm] = useState(""); const [newGroupDialog, setNewGroupDialog] = useState(false); const [newGroupName, setNewGroupName] = useState(""); + const [modifyGroupDialog, setModifyGroupDialog] = useState(false); + const [selectedGroup, setSelectedGroup] = useState(null); + const [modifiedGroupName, setModifiedGroupName] = useState(""); useEffect(() => { fetchGroups(); @@ -138,6 +141,83 @@ export function GroupsTable({ userRole = [] }: GroupsTableProps) { } }; + const handleModifyGroup = async (groupId: string) => { + try { + const group = groups.find(g => g.id === groupId); + if (!group) return; + + setSelectedGroup(group); + setModifiedGroupName(group.name); + setModifyGroupDialog(true); + } catch (error) { + toast({ + title: "Erreur", + description: error instanceof Error ? error.message : "Une erreur est survenue", + variant: "destructive", + }); + } + }; + + const handleUpdateGroup = async () => { + try { + if (!selectedGroup || !modifiedGroupName.trim()) { + throw new Error("Le nom du groupe est requis"); + } + + const response = await fetch(`/api/groups/${selectedGroup.id}`, { + method: "PUT", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ name: modifiedGroupName }), + }); + + if (!response.ok) { + throw new Error("Erreur lors de la modification du groupe"); + } + + setGroups(prev => prev.map(group => + group.id === selectedGroup.id + ? { ...group, name: modifiedGroupName } + : group + )); + + setModifyGroupDialog(false); + setSelectedGroup(null); + setModifiedGroupName(""); + + toast({ + title: "Succès", + description: "Le groupe a été modifié avec succès", + }); + } catch (error) { + toast({ + title: "Erreur", + description: error instanceof Error ? error.message : "Une erreur est survenue", + variant: "destructive", + }); + } + }; + + const handleManageMembers = async (groupId: string) => { + try { + const group = groups.find(g => g.id === groupId); + if (!group) return; + + // TODO: Implement member management UI + toast({ + title: "Info", + description: "La gestion des membres sera bientôt disponible", + }); + } catch (error) { + toast({ + title: "Erreur", + description: error instanceof Error ? error.message : "Une erreur est survenue", + variant: "destructive", + }); + } + }; + const filteredGroups = groups.filter(group => group.name.toLowerCase().includes(searchTerm.toLowerCase()) ); @@ -216,14 +296,14 @@ export function GroupsTable({ userRole = [] }: GroupsTableProps) { Actions console.log("Edit", group.id)} + onClick={() => handleModifyGroup(group.id)} className="text-white hover:bg-black/50" > Modifier console.log("Manage members", group.id)} + onClick={() => handleManageMembers(group.id)} className="text-white hover:bg-black/50" > @@ -245,6 +325,31 @@ export function GroupsTable({ userRole = [] }: GroupsTableProps) { + + + + + Modifier le groupe + +
+
+ + setModifiedGroupName(e.target.value)} + placeholder="Entrez le nouveau nom du groupe" + /> +
+ +
+
+
); } \ No newline at end of file diff --git a/components/users/users-table.tsx b/components/users/users-table.tsx index ec14cb07..7c5217a2 100644 --- a/components/users/users-table.tsx +++ b/components/users/users-table.tsx @@ -23,6 +23,7 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; +import { toast } from "@/components/ui/use-toast"; interface User { id: string; @@ -122,19 +123,21 @@ export function UsersTable({ userRole = [] }: UsersTableProps) { const data = await response.json(); if (!response.ok) { - console.error("Delete error:", data); - // You might want to show an error message to the user here - return; + throw new Error(data.error || "Erreur lors de la suppression de l'utilisateur"); } - // Remove the user from the local state setUsers(prevUsers => prevUsers.filter(user => user.id !== userId)); - // Optional: Show success message - console.log("User deleted successfully"); + toast({ + title: "Succès", + description: "L'utilisateur a été supprimé avec succès", + }); } catch (error) { - console.error("Error deleting user:", error); - // You might want to show an error message to the user here + toast({ + title: "Erreur", + description: error instanceof Error ? error.message : "Une erreur est survenue", + variant: "destructive", + }); } }; @@ -204,21 +207,23 @@ export function UsersTable({ userRole = [] }: UsersTableProps) { const data = await response.json(); if (!response.ok) { - console.error("Edit error:", data); - // You might want to show an error message to the user here - return; + throw new Error(data.error || "Erreur lors de la modification de l'utilisateur"); } - // Update the user in the local state setUsers(prevUsers => prevUsers.map(u => u.id === userId ? { ...u, ...data } : u )); - // Optional: Show success message - console.log("User updated successfully"); + toast({ + title: "Succès", + description: "L'utilisateur a été modifié avec succès", + }); } catch (error) { - console.error("Error updating user:", error); - // You might want to show an error message to the user here + toast({ + title: "Erreur", + description: error instanceof Error ? error.message : "Une erreur est survenue", + variant: "destructive", + }); } }; @@ -241,21 +246,23 @@ export function UsersTable({ userRole = [] }: UsersTableProps) { const data = await response.json(); if (!response.ok) { - console.error("Role update error:", data); - // You might want to show an error message to the user here - return; + throw new Error(data.error || "Erreur lors de la mise à jour des rôles"); } - // Update the user's roles in the local state setUsers(prevUsers => prevUsers.map(u => u.id === userId ? { ...u, roles: data.roles } : u )); - // Optional: Show success message - console.log("User roles updated successfully"); + toast({ + title: "Succès", + description: "Les rôles ont été mis à jour avec succès", + }); } catch (error) { - console.error("Error updating user roles:", error); - // You might want to show an error message to the user here + toast({ + title: "Erreur", + description: error instanceof Error ? error.message : "Une erreur est survenue", + variant: "destructive", + }); } };