mirror of
https://github.com/rgrgogu/new_starr.git
synced 2026-09-27 00:12:54 +08:00
@@ -34,6 +34,8 @@ export const UserProvider = ({ children }) => {
|
||||
const [activity, setActivity] = useState([]);
|
||||
const [activityPagination, setActivityPagination] = useState(PAGINATION_INIT);
|
||||
const [activityLoading, setActivityLoading] = useState(false);
|
||||
const [bans, setBans] = useState([]);
|
||||
const [bansLoading, setBansLoading] = useState(false);
|
||||
|
||||
const request = useCallback(async (fn) => {
|
||||
setLoading(true);
|
||||
@@ -289,10 +291,90 @@ export const UserProvider = ({ children }) => {
|
||||
}
|
||||
}, []);
|
||||
|
||||
// ─── POST /api/admin/users/:id/ban ────────────────────────────────────────
|
||||
const banUser = useCallback(
|
||||
(userId, payload) =>
|
||||
request(async () => {
|
||||
const res = await api.post(`${BASE}/users/${userId}/ban`, payload);
|
||||
setUsers((prev) =>
|
||||
prev.map((u) => (u.user_id === userId ? { ...u, is_banned: true } : u))
|
||||
);
|
||||
if (user?.user_id === userId) setUser((prev) => prev ? { ...prev, is_banned: true } : prev);
|
||||
toast.success("User banned successfully.");
|
||||
return res.data;
|
||||
}),
|
||||
[request, user]
|
||||
);
|
||||
|
||||
// ─── POST /api/admin/users/:id/unban ──────────────────────────────────────
|
||||
const unbanUser = useCallback(
|
||||
(userId, payload) =>
|
||||
request(async () => {
|
||||
const res = await api.post(`${BASE}/users/${userId}/unban`, payload);
|
||||
setUsers((prev) =>
|
||||
prev.map((u) => (u.user_id === userId ? { ...u, is_banned: false } : u))
|
||||
);
|
||||
if (user?.user_id === userId) setUser((prev) => prev ? { ...prev, is_banned: false } : prev);
|
||||
toast.success("User unbanned successfully.");
|
||||
return res.data;
|
||||
}),
|
||||
[request, user]
|
||||
);
|
||||
|
||||
// ─── POST /api/admin/users/bulk/ban ───────────────────────────────────────
|
||||
const bulkBanUsers = useCallback(
|
||||
({ ids, ...payload }) =>
|
||||
request(async () => {
|
||||
const res = await api.post(`${BASE}/users/bulk/ban`, { ids, ...payload });
|
||||
const { banned_ids } = res.data?.data ?? {};
|
||||
if (banned_ids?.length) {
|
||||
setUsers((prev) =>
|
||||
prev.map((u) => (banned_ids.includes(u.user_id) ? { ...u, is_banned: true } : u))
|
||||
);
|
||||
toast.success(`${banned_ids.length} user(s) banned.`);
|
||||
}
|
||||
return res.data;
|
||||
}),
|
||||
[request]
|
||||
);
|
||||
|
||||
// ─── POST /api/admin/users/bulk/unban ─────────────────────────────────────
|
||||
const bulkUnbanUsers = useCallback(
|
||||
({ ids, lift_reason } = {}) =>
|
||||
request(async () => {
|
||||
const res = await api.post(`${BASE}/users/bulk/unban`, { ids, lift_reason });
|
||||
const { unbanned_ids } = res.data?.data ?? {};
|
||||
if (unbanned_ids?.length) {
|
||||
setUsers((prev) =>
|
||||
prev.map((u) => (unbanned_ids.includes(u.user_id) ? { ...u, is_banned: false } : u))
|
||||
);
|
||||
toast.success(`${unbanned_ids.length} user(s) unbanned.`);
|
||||
}
|
||||
return res.data;
|
||||
}),
|
||||
[request]
|
||||
);
|
||||
|
||||
// ─── GET /api/admin/users/:id/bans ────────────────────────────────────────
|
||||
const fetchUserBans = useCallback(async (userId) => {
|
||||
setBansLoading(true);
|
||||
try {
|
||||
const res = await api.get(`${BASE}/users/${userId}/bans`);
|
||||
setBans(res.data?.data ?? []);
|
||||
return res.data?.data;
|
||||
} catch (err) {
|
||||
toast.error(err?.response?.data?.message ?? "Could not load ban history.");
|
||||
return [];
|
||||
} finally {
|
||||
setBansLoading(false);
|
||||
}
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<UserContext.Provider value={{
|
||||
users, user, sessions, achievements, achievementsLoading, pagination, attributes, loading, error,
|
||||
activity, activityPagination, activityLoading,
|
||||
bans, bansLoading,
|
||||
setPagination,
|
||||
fetchUsers, fetchArchivedUsers, fetchUser,
|
||||
addStaffUser, updateUser,
|
||||
@@ -302,6 +384,7 @@ export const UserProvider = ({ children }) => {
|
||||
fetchUserFieldValues,
|
||||
fetchUserAchievements,
|
||||
fetchActivity, fetchUserActivity,
|
||||
banUser, unbanUser, bulkBanUsers, bulkUnbanUsers, fetchUserBans,
|
||||
}}>
|
||||
{children}
|
||||
</UserContext.Provider>
|
||||
|
||||
Reference in New Issue
Block a user