update api users and groups and users

This commit is contained in:
Alma 2025-04-09 20:25:15 +02:00
parent 56184d395f
commit e8c6a7e7f5
2 changed files with 138 additions and 26 deletions

View File

@ -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<Group | null>(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) {
<DropdownMenuContent align="end" className="bg-black/90 border-gray-700">
<DropdownMenuLabel className="text-gray-400">Actions</DropdownMenuLabel>
<DropdownMenuItem
onClick={() => console.log("Edit", group.id)}
onClick={() => handleModifyGroup(group.id)}
className="text-white hover:bg-black/50"
>
<Edit className="mr-2 h-4 w-4" />
Modifier
</DropdownMenuItem>
<DropdownMenuItem
onClick={() => console.log("Manage members", group.id)}
onClick={() => handleManageMembers(group.id)}
className="text-white hover:bg-black/50"
>
<Users className="mr-2 h-4 w-4" />
@ -245,6 +325,31 @@ export function GroupsTable({ userRole = [] }: GroupsTableProps) {
</TableBody>
</Table>
</div>
<Dialog open={modifyGroupDialog} onOpenChange={setModifyGroupDialog}>
<DialogContent>
<DialogHeader>
<DialogTitle>Modifier le groupe</DialogTitle>
</DialogHeader>
<div className="space-y-4">
<div className="space-y-2">
<Label htmlFor="name">Nom du groupe</Label>
<Input
id="name"
value={modifiedGroupName}
onChange={(e) => setModifiedGroupName(e.target.value)}
placeholder="Entrez le nouveau nom du groupe"
/>
</div>
<Button
onClick={handleUpdateGroup}
className="w-full"
>
Modifier
</Button>
</div>
</DialogContent>
</Dialog>
</div>
);
}

View File

@ -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",
});
}
};