104 lines
3.1 KiB
TypeScript
104 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) => {
|
||
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,
|
||
};
|
||
}
|