update api users and groups and users
This commit is contained in:
parent
56184d395f
commit
e8c6a7e7f5
@ -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>
|
||||
);
|
||||
}
|
||||
@ -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",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user