user-row.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import moment from 'moment'
  2. import { useCallback } from 'react'
  3. import { Col, Row } from 'react-bootstrap'
  4. import { useTranslation } from 'react-i18next'
  5. import { User } from '../../../../../types/group-management/user'
  6. type GroupMemberRowProps = {
  7. user: User
  8. selectUser: (user: User) => void
  9. unselectUser: (user: User) => void
  10. selected: boolean
  11. }
  12. export default function UserRow({
  13. user,
  14. selectUser,
  15. unselectUser,
  16. selected,
  17. }: GroupMemberRowProps) {
  18. const { t } = useTranslation()
  19. const handleSelectUser = useCallback(
  20. (event, user) => {
  21. if (event.target.checked) {
  22. selectUser(user)
  23. } else {
  24. unselectUser(user)
  25. }
  26. },
  27. [selectUser, unselectUser]
  28. )
  29. return (
  30. <li key={`user-${user.email}`}>
  31. <Row>
  32. <Col xs={4}>
  33. <label htmlFor={`select-user-${user.email}`} className="sr-only">
  34. {t('select_user')}
  35. </label>
  36. <input
  37. className="select-item"
  38. id={`select-user-${user.email}`}
  39. type="checkbox"
  40. autoComplete="off"
  41. checked={selected}
  42. onChange={e => handleSelectUser(e, user)}
  43. />
  44. <span>{user.email}</span>
  45. </Col>
  46. <Col xs={4}>
  47. {user.first_name} {user.last_name}
  48. </Col>
  49. <Col xs={2}>
  50. {user.last_active_at
  51. ? moment(user.last_active_at).format('Do MMM YYYY')
  52. : 'N/A'}
  53. </Col>
  54. <Col xs={2}>
  55. {user.invite ? (
  56. <>
  57. <i
  58. className="fa fa-times"
  59. aria-hidden="true"
  60. aria-label={t('invite_not_accepted')}
  61. />
  62. <span className="sr-only">{t('invite_not_accepted')}</span>
  63. </>
  64. ) : (
  65. <>
  66. <i
  67. className="fa fa-check text-success"
  68. aria-hidden="true"
  69. aria-label={t('accepted_invite')}
  70. />
  71. <span className="sr-only">{t('accepted_invite')}</span>
  72. </>
  73. )}
  74. </Col>
  75. </Row>
  76. </li>
  77. )
  78. }