user-row.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import moment from 'moment'
  2. import { useCallback } from 'react'
  3. import { useTranslation } from 'react-i18next'
  4. import { User } from '../../../../../types/group-management/user'
  5. import OLFormCheckbox from '@/features/ui/components/ol/ol-form-checkbox'
  6. import MaterialIcon from '@/shared/components/material-icon'
  7. type GroupMemberRowProps = {
  8. user: User
  9. selectUser: (user: User) => void
  10. unselectUser: (user: User) => void
  11. selected: boolean
  12. }
  13. export default function UserRow({
  14. user,
  15. selectUser,
  16. unselectUser,
  17. selected,
  18. }: GroupMemberRowProps) {
  19. const { t } = useTranslation()
  20. const handleSelectUser = useCallback(
  21. (event: React.ChangeEvent<HTMLInputElement>, user: User) => {
  22. if (event.target.checked) {
  23. selectUser(user)
  24. } else {
  25. unselectUser(user)
  26. }
  27. },
  28. [selectUser, unselectUser]
  29. )
  30. return (
  31. <tr key={`user-${user.email}`} className="managed-entity-row">
  32. <td className="cell-checkbox">
  33. <OLFormCheckbox
  34. autoComplete="off"
  35. checked={selected}
  36. onChange={e => handleSelectUser(e, user)}
  37. aria-label={t('select_user')}
  38. data-testid="select-single-checkbox"
  39. />
  40. </td>
  41. <td>{user.email}</td>
  42. <td className="cell-name">
  43. {user.first_name} {user.last_name}
  44. </td>
  45. <td className="cell-last-active">
  46. {user.last_active_at
  47. ? moment(user.last_active_at).format('Do MMM YYYY')
  48. : 'N/A'}
  49. </td>
  50. <td className="cell-accepted-invite">
  51. {user.invite ? (
  52. <MaterialIcon
  53. type="clear"
  54. accessibilityLabel={t('invite_not_accepted')}
  55. />
  56. ) : (
  57. <MaterialIcon
  58. type="check"
  59. className="text-success"
  60. accessibilityLabel={t('accepted_invite')}
  61. />
  62. )}
  63. </td>
  64. </tr>
  65. )
  66. }