Files
peakskills/hooks/use-users-management.ts
2025-08-24 22:03:15 +02:00

151 lines
3.8 KiB
TypeScript

import { useState, useEffect } from "react";
import { useToast } from "@/hooks/use-toast";
import { Team } from "@/clients/domains/admin-client";
interface User {
uuid: string;
firstName: string;
lastName: string;
teamName?: string;
hasEvaluations: boolean;
}
interface UserFormData {
firstName: string;
lastName: string;
teamId: string;
}
export function useUsersManagement(teams: Team[]) {
const [users, setUsers] = useState<User[]>([]);
const [isLoading, setIsLoading] = useState(true);
const [error, setError] = useState<string | null>(null);
const [deletingUserId, setDeletingUserId] = useState<string | null>(null);
const [userFormData, setUserFormData] = useState<UserFormData>({
firstName: "",
lastName: "",
teamId: "",
});
const [isSubmitting, setIsSubmitting] = useState(false);
const { toast } = useToast();
// Charger les utilisateurs depuis l'API
const fetchUsers = async () => {
setIsLoading(true);
setError(null);
try {
const response = await fetch("/api/admin/users");
if (!response.ok) {
throw new Error("Erreur lors de la récupération des utilisateurs");
}
const usersData = await response.json();
setUsers(usersData);
} catch (err: any) {
setError(err.message || "Erreur lors du chargement des utilisateurs");
} finally {
setIsLoading(false);
}
};
// Charger les utilisateurs au montage du composant
useEffect(() => {
fetchUsers();
}, []);
const resetForm = () => {
setUserFormData({ firstName: "", lastName: "", teamId: "" });
};
const handleCreateUser = async () => {
if (!userFormData.firstName || !userFormData.lastName) {
toast({
title: "Erreur",
description: "Veuillez remplir tous les champs obligatoires",
variant: "destructive",
});
return false;
}
try {
setIsSubmitting(true);
// TODO: Implémenter la création d'utilisateur
toast({
title: "Succès",
description: "Utilisateur créé avec succès",
});
resetForm();
// Rafraîchir la liste
await fetchUsers();
return true;
} catch (error: any) {
toast({
title: "Erreur",
description:
error.message || "Erreur lors de la création de l'utilisateur",
variant: "destructive",
});
return false;
} finally {
setIsSubmitting(false);
}
};
const handleDeleteUser = async (user: User) => {
if (user.teamName) {
toast({
title: "Action impossible",
description:
"Retirez d'abord l'utilisateur de son équipe avant de le supprimer",
variant: "destructive",
});
return;
}
if (
!confirm(
`Êtes-vous sûr de vouloir supprimer définitivement ${user.firstName} ${user.lastName} ?\n\nCette action supprimera aussi toutes ses évaluations par skills et est irréversible.`
)
) {
return;
}
setDeletingUserId(user.uuid);
try {
// TODO: Implémenter la suppression d'utilisateur
// await adminClient.deleteUser(user.uuid);
// Mettre à jour la liste locale
setUsers((prev) => prev.filter((u) => u.uuid !== user.uuid));
toast({
title: "Succès",
description: `${user.firstName} ${user.lastName} a été supprimé avec succès`,
});
} catch (err: any) {
toast({
title: "Erreur",
description:
err.message || "Erreur lors de la suppression de l'utilisateur",
variant: "destructive",
});
} finally {
setDeletingUserId(null);
}
};
return {
users,
isLoading,
error,
deletingUserId,
userFormData,
isSubmitting,
setUserFormData,
resetForm,
handleCreateUser,
handleDeleteUser,
fetchUsers,
};
}