diff --git a/src/components/admin/members-content.tsx b/src/components/admin/members-content.tsx index c3ee801..e93a3c5 100644 --- a/src/components/admin/members-content.tsx +++ b/src/components/admin/members-content.tsx @@ -191,6 +191,20 @@ export function MembersContent() { }, }) + const bulkUpdateRoles = trpc.user.bulkUpdateRoles.useMutation({ + onSuccess: (r) => { + const parts: string[] = [] + if (r.updated > 0) parts.push(`Updated ${r.updated} user${r.updated === 1 ? '' : 's'}`) + if (r.alreadyHadRole > 0) parts.push(`${r.alreadyHadRole} already had role`) + toast.success(parts.join(' · ') || 'No changes') + setSelectedIds(new Set()) + utils.user.list.invalidate() + }, + onError: (error) => { + toast.error(error.message || 'Failed to update roles') + }, + }) + const selectableUsers = useMemo( () => data?.users ?? [], [data?.users] @@ -321,9 +335,29 @@ export function MembersContent() {

- Selection persists across pages and filters. + {selectedIds.size > 0 + ? `${selectedIds.size} selected. Selection persists across pages and filters.` + : 'Selection persists across pages and filters.'}

+ {selectedIds.size > 0 && ( + + )}