managed-users-select-all-checkbox.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { useCallback } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import { useGroupMembersContext } from '../../context/group-members-context'
  4. export default function ManagedUsersSelectAllCheckbox() {
  5. const { t } = useTranslation()
  6. const { selectedUsers, users, selectAllNonManagedUsers, unselectAllUsers } =
  7. useGroupMembersContext()
  8. const handleSelectAllNonManagedClick = useCallback(
  9. (e: React.ChangeEvent<HTMLInputElement>) => {
  10. if (e.target.checked) {
  11. selectAllNonManagedUsers()
  12. } else {
  13. unselectAllUsers()
  14. }
  15. },
  16. [selectAllNonManagedUsers, unselectAllUsers]
  17. )
  18. // Pending: user.enrollment will be `undefined`
  19. // Not managed: user.enrollment will be an empty object
  20. const nonManagedUsers = users.filter(user => !user.enrollment?.managedBy)
  21. if (nonManagedUsers.length === 0) {
  22. return null
  23. }
  24. return (
  25. <td className="cell-checkbox">
  26. <label htmlFor="select-all" className="sr-only">
  27. {t('select_all')}
  28. </label>
  29. <input
  30. className="select-all"
  31. id="select-all"
  32. type="checkbox"
  33. onChange={handleSelectAllNonManagedClick}
  34. checked={selectedUsers.length === nonManagedUsers.length}
  35. />
  36. </td>
  37. )
  38. }