Able to validate user
This commit is contained in:
1 parent
62a88dab83
commit
a2929025a1
1 file changed
+28
-71
@@ -8,101 +8,58 @@ import validateUser from "../../../../utils/users/validateUser.js";
|
|||||||
import deleteOtherUser from "../../../../utils/users/deleteOtherUser.js";
|
import deleteOtherUser from "../../../../utils/users/deleteOtherUser.js";
|
||||||
|
|
||||||
function PendingMembers() {
|
function PendingMembers() {
|
||||||
|
|
||||||
const [pendingMembers, setPendingMembers] = useState([]);
|
const [pendingMembers, setPendingMembers] = useState([]);
|
||||||
const [loading, setLoading] = useState(true);
|
|
||||||
const [actionLoading, setActionLoading] = useState(null);
|
const fetchUsers = async () => {
|
||||||
const [error, setError] = useState(null);
|
|
||||||
|
const result = await getUserToValidate();
|
||||||
|
const userIds = result.data;
|
||||||
|
|
||||||
|
if (userIds && userIds.length > 0) {
|
||||||
|
const users = await Promise.all(userIds.map(id => getUserById(id)));
|
||||||
|
const usersData = users.map(u => u.data);
|
||||||
|
setPendingMembers(usersData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchPendingMembers = async () => {
|
fetchUsers();
|
||||||
setLoading(true);
|
|
||||||
const result = await getUserToValidate();
|
|
||||||
const userIds = result.data
|
|
||||||
if (userIds && userIds.length > 0) {
|
|
||||||
const users = await Promise.all(userIds.map((id) => getUserById(id)));
|
|
||||||
setPendingMembers(users.filter(Boolean));
|
|
||||||
} else {
|
|
||||||
setPendingMembers([]);
|
|
||||||
}
|
|
||||||
setLoading(false);
|
|
||||||
};
|
|
||||||
fetchPendingMembers();
|
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const removeMember = (id) => {
|
|
||||||
setPendingMembers(prevMembers =>
|
|
||||||
prevMembers.filter(member => member.id !== id)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleValidate = async (id) => {
|
const handleValidate = async (id) => {
|
||||||
setActionLoading(id);
|
|
||||||
setError(null);
|
|
||||||
try {
|
|
||||||
const result = await validateUser(id);
|
const result = await validateUser(id);
|
||||||
if (result === true) {
|
console.log(result);
|
||||||
removeMember(id);
|
fetchUsers();
|
||||||
} else {
|
|
||||||
setError("Échec de la validation.");
|
|
||||||
}
|
}
|
||||||
} catch (err) {
|
|
||||||
setError("Erreur lors de la validation.");
|
|
||||||
} finally {
|
|
||||||
setActionLoading(null);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const handleReject = async (id) => {
|
const handleRefuse = (id) => {
|
||||||
setActionLoading(id);
|
|
||||||
setError(null);
|
|
||||||
try {
|
|
||||||
const result = await deleteUser(id);
|
|
||||||
if (result.status >= 200 && result.status < 300) {
|
|
||||||
removeMember(id);
|
|
||||||
} else {
|
|
||||||
setError(result.errors || "Échec de la suppression.");
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
setError("Erreur lors de la suppression.");
|
|
||||||
} finally {
|
|
||||||
setActionLoading(null);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
if (loading) {
|
|
||||||
return <div>Chargement des membres en attente...</div>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={`${styles.rightBlock} glassCard`}>
|
<div className={`${styles.rightBlock} glassCard`}>
|
||||||
<h2>Membres en attente de validation</h2>
|
<h2>Membres en attente de validation</h2>
|
||||||
{error && <p style={{ color: "red" }}>{error}</p>}
|
|
||||||
|
|
||||||
<div className={styles.membersContainer}>
|
<div className={styles.membersContainer}>
|
||||||
|
|
||||||
{pendingMembers.length === 0 && <p>Aucun membre en attente</p>}
|
{pendingMembers.length === 0 && <p>Aucun membre en attente</p>}
|
||||||
|
|
||||||
{pendingMembers.map((member) => (
|
{pendingMembers.map((member, index) => (
|
||||||
<div key={member.id} className={`glassCard ${styles.memberCard}`}>
|
|
||||||
|
<div key={index} className={`glassCard ${styles.memberCard}`}>
|
||||||
|
|
||||||
<p>{member.name} {member.lastname}</p>
|
<p>{member.name} {member.lastname}</p>
|
||||||
|
|
||||||
<div className={styles.buttonGroup}>
|
<div className={styles.buttonGroup}>
|
||||||
<Button
|
<Button variant="primary" onClick={() => handleValidate(member.id)}>Valider</Button>
|
||||||
onClick={() => handleValidate(member.id)}
|
<Button variant="danger" onClick={() => handleRefuse(member.id)}>Refuser</Button>
|
||||||
variant="primary"
|
|
||||||
disabled={actionLoading === member.id}
|
|
||||||
>
|
|
||||||
{actionLoading === member.id ? "En cours..." : "Valider"}
|
|
||||||
</Button>
|
|
||||||
<Button
|
|
||||||
onClick={() => handleReject(member.id)}
|
|
||||||
variant="danger"
|
|
||||||
disabled={actionLoading === member.id}
|
|
||||||
>
|
|
||||||
{actionLoading === member.id ? "En cours..." : "Refuser"}
|
|
||||||
</Button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
))}
|
))}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in new issue
Block a user