UsersTable.tsx 2.1 KB

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