UserOrganizations.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import React, { PureComponent } from 'react';
  2. import { User } from 'app/types';
  3. import { UserOrg } from 'app/core/utils/UserProvider';
  4. import { LoadingPlaceholder, Button } from '@grafana/ui';
  5. export interface Props {
  6. user: User;
  7. orgs: UserOrg[];
  8. isLoading: boolean;
  9. loadOrgs: () => void;
  10. setUserOrg: (org: UserOrg) => void;
  11. }
  12. export class UserOrganizations extends PureComponent<Props> {
  13. componentDidMount() {
  14. this.props.loadOrgs();
  15. }
  16. render() {
  17. const { isLoading, orgs, user } = this.props;
  18. if (isLoading) {
  19. return <LoadingPlaceholder text="Loading organizations..." />;
  20. }
  21. return (
  22. <>
  23. {orgs.length > 0 && (
  24. <>
  25. <h3 className="page-sub-heading">Organizations</h3>
  26. <div className="gf-form-group">
  27. <table className="filter-table form-inline">
  28. <thead>
  29. <tr>
  30. <th>Name</th>
  31. <th>Role</th>
  32. <th />
  33. </tr>
  34. </thead>
  35. <tbody>
  36. {orgs.map((org: UserOrg, index) => {
  37. return (
  38. <tr key={index}>
  39. <td>{org.name}</td>
  40. <td>{org.role}</td>
  41. <td className="text-right">
  42. {org.orgId === user.orgId ? (
  43. <span className="btn btn-primary btn-small">Current</span>
  44. ) : (
  45. <Button
  46. variant="inverse"
  47. size="sm"
  48. onClick={() => {
  49. this.props.setUserOrg(org);
  50. }}
  51. >
  52. Select
  53. </Button>
  54. )}
  55. </td>
  56. </tr>
  57. );
  58. })}
  59. </tbody>
  60. </table>
  61. </div>
  62. </>
  63. )}
  64. </>
  65. );
  66. }
  67. }
  68. export default UserOrganizations;