use-user-selection.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { useCallback, useState } from 'react'
  2. import { User } from '../../../../../types/group-management/user'
  3. export default function useUserSelection(initialUsers: User[]) {
  4. const [users, setUsers] = useState<User[]>(initialUsers)
  5. const [selectedUsers, setSelectedUsers] = useState<User[]>([])
  6. const selectAllUsers = () => setSelectedUsers(users)
  7. const unselectAllUsers = () => setSelectedUsers([])
  8. const selectAllNonManagedUsers = useCallback(() => {
  9. // Pending: user.enrollment will be `undefined`
  10. // Not managed: user.enrollment will be an empty object
  11. const nonManagedUsers = users.filter(user => !user.enrollment?.managedBy)
  12. setSelectedUsers(nonManagedUsers)
  13. }, [users])
  14. const selectUser = useCallback((user: User) => {
  15. setSelectedUsers(users => [...users, user])
  16. }, [])
  17. const unselectUser = useCallback((user: User) => {
  18. setSelectedUsers(users => users.filter(u => u.email !== user.email))
  19. }, [])
  20. return {
  21. users,
  22. setUsers,
  23. selectedUsers,
  24. setSelectedUsers,
  25. selectUser,
  26. unselectUser,
  27. selectAllUsers,
  28. unselectAllUsers,
  29. selectAllNonManagedUsers,
  30. }
  31. }