managed-user-row.tsx 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import moment from 'moment'
  2. import { type Dispatch, type SetStateAction } from 'react'
  3. import { useTranslation } from 'react-i18next'
  4. import { User } from '../../../../../../types/group-management/user'
  5. import Badge from '../../../../shared/components/badge'
  6. import Tooltip from '../../../../shared/components/tooltip'
  7. import type { ManagedUserAlert } from '../../utils/types'
  8. import ManagedUserStatus from './managed-user-status'
  9. import ManagedUserDropdownButton from './managed-user-dropdown-button'
  10. import ManagedUsersSelectUserCheckbox from './managed-users-select-user-checkbox'
  11. type ManagedUserRowProps = {
  12. user: User
  13. openOffboardingModalForUser: (user: User) => void
  14. groupId: string
  15. setManagedUserAlert: Dispatch<SetStateAction<ManagedUserAlert>>
  16. }
  17. export default function ManagedUserRow({
  18. user,
  19. openOffboardingModalForUser,
  20. setManagedUserAlert,
  21. groupId,
  22. }: ManagedUserRowProps) {
  23. const { t } = useTranslation()
  24. return (
  25. <tr
  26. key={`user-${user.email}`}
  27. className={`managed-user-row ${user.invite ? 'text-muted' : ''}`}
  28. >
  29. <ManagedUsersSelectUserCheckbox user={user} />
  30. <td className="cell-email">
  31. <span>
  32. {user.email}
  33. {user.invite ? (
  34. <span>
  35. &nbsp;
  36. <Tooltip
  37. id={`pending-invite-symbol-${user._id}`}
  38. description={t('pending_invite')}
  39. >
  40. <Badge aria-label={t('pending_invite')}>
  41. {t('pending_invite')}
  42. </Badge>
  43. </Tooltip>
  44. </span>
  45. ) : (
  46. ''
  47. )}
  48. {user.isEntityAdmin && (
  49. <span>
  50. &nbsp;
  51. <Tooltip
  52. id={`group-admin-symbol-${user._id}`}
  53. description={t('group_admin')}
  54. >
  55. <i
  56. className="fa fa-user-circle-o"
  57. aria-hidden="true"
  58. aria-label={t('group_admin')}
  59. />
  60. </Tooltip>
  61. </span>
  62. )}
  63. </span>
  64. </td>
  65. <td className="cell-name">
  66. {user.first_name} {user.last_name}
  67. </td>
  68. <td className="cell-last-active">
  69. {user.last_active_at
  70. ? moment(user.last_active_at).format('Do MMM YYYY')
  71. : 'N/A'}
  72. </td>
  73. <td className="cell-security">
  74. <div className="managed-user-security">
  75. <ManagedUserStatus user={user} />
  76. </div>
  77. </td>
  78. <td className="cell-dropdown">
  79. <ManagedUserDropdownButton
  80. user={user}
  81. openOffboardingModalForUser={openOffboardingModalForUser}
  82. setManagedUserAlert={setManagedUserAlert}
  83. groupId={groupId}
  84. />
  85. </td>
  86. </tr>
  87. )
  88. }