Files
peakskills/hooks/use-users-management.ts
2025-08-25 09:20:36 +02:00

114 lines
3.1 KiB
TypeScript

import { useState, useEffect } from "react";
import { useToast } from "@/hooks/use-toast";
import { Team } from "@/lib/types";
import { adminClient } from "@/clients";
import { User, UserFormData } from "@/clients/domains/admin-client";
export function useUsersManagement(teams: Team[], initialUsers?: any[]) {
const [users, setUsers] = useState<User[]>(initialUsers || []);
const [isLoading, setIsLoading] = useState(!initialUsers);
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();
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);
const newUser = await adminClient.createUser(userFormData);
toast({
title: "Succès",
description: "Utilisateur créé avec succès",
});
// Ajouter le nouvel utilisateur à la liste locale
setUsers([...users, newUser]);
resetForm();
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 {
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,
};
}