UsersTable.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import React, { FC } from 'react';
  2. import { OrgUser } from 'app/types';
  3. export interface Props {
  4. users: OrgUser[];
  5. onRoleChange: (role: string, user: OrgUser) => void;
  6. onRemoveUser: (user: OrgUser) => void;
  7. }
  8. const UsersTable: FC<Props> = props => {
  9. const { users, onRoleChange, onRemoveUser } = props;
  10. return (
  11. <table className="filter-table form-inline">
  12. <thead>
  13. <tr>
  14. <th />
  15. <th>Login</th>
  16. <th>Email</th>
  17. <th>Seen</th>
  18. <th>Role</th>
  19. <th style={{ width: '34px' }} />
  20. </tr>
  21. </thead>
  22. <tbody>
  23. {users.map((user, index) => {
  24. return (
  25. <tr key={`${user.userId}-${index}`}>
  26. <td className="width-4 text-center">
  27. <img className="filter-table__avatar" src={user.avatarUrl} />
  28. </td>
  29. <td>{user.login}</td>
  30. <td>
  31. <span className="ellipsis">{user.email}</span>
  32. </td>
  33. <td>{user.lastSeenAtAge}</td>
  34. <td>
  35. <div className="gf-form-select-wrapper width-12">
  36. <select
  37. value={user.role}
  38. className="gf-form-input"
  39. onChange={event => onRoleChange(event.target.value, user)}
  40. >
  41. {['Viewer', 'Editor', 'Admin'].map((option, index) => {
  42. return (
  43. <option value={option} key={`${option}-${index}`}>
  44. {option}
  45. </option>
  46. );
  47. })}
  48. </select>
  49. </div>
  50. </td>
  51. <td>
  52. <div onClick={() => onRemoveUser(user)} className="btn btn-danger btn-small">
  53. <i className="fa fa-remove" />
  54. </div>
  55. </td>
  56. </tr>
  57. );
  58. })}
  59. </tbody>
  60. </table>
  61. );
  62. };
  63. export default UsersTable;