Files
peakskills/hooks/use-users-management.ts
2025-08-25 22:04:39 +02:00

104 lines
3.1 KiB
TypeScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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) => {
const confirmMessage = user.teamName
? `Êtes-vous sûr de vouloir supprimer définitivement ${user.firstName} ${user.lastName} ?\n\n⚠ Cet utilisateur sera automatiquement retiré de l'équipe "${user.teamName}"\n\nCette action supprimera aussi toutes ses évaluations par skills et est irréversible.`
: `Ê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.`;
if (!confirm(confirmMessage)) {
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,
};
}