Files
Verso/services/web/frontend/js/features/group-management/hooks/use-user-selection.ts
T
MoxAmberandCopybot b131020c43 Merge pull request #30950 from overleaf/as-user-management-actions
[web] User management actions

GitOrigin-RevId: c7683c596673bc252649cdeb975edd779a6154b0
2026-03-06 09:08:25 +00:00

39 lines
1.1 KiB
TypeScript

import { useCallback, useState } from 'react'
import { User } from '../../../../../types/group-management/user'
export default function useUserSelection(initialUsers: User[]) {
const [users, setUsers] = useState<User[]>(initialUsers)
const [selectedUsers, setSelectedUsers] = useState<User[]>([])
const selectAllUsers = () => setSelectedUsers(users)
const unselectAllUsers = () => setSelectedUsers([])
const selectAllNonManagedUsers = useCallback(() => {
// Pending: user.enrollment will be `undefined`
// Not managed: user.enrollment will be an empty object
const nonManagedUsers = users.filter(user => !user.enrollment?.managedBy)
setSelectedUsers(nonManagedUsers)
}, [users])
const selectUser = useCallback((user: User) => {
setSelectedUsers(users => [...users, user])
}, [])
const unselectUser = useCallback((user: User) => {
setSelectedUsers(users => users.filter(u => u.email !== user.email))
}, [])
return {
users,
setUsers,
selectedUsers,
setSelectedUsers,
selectUser,
unselectUser,
selectAllUsers,
unselectAllUsers,
selectAllNonManagedUsers,
}
}