ApiKeysPage.tsx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import React, { PureComponent } from 'react';
  2. import { connect } from 'react-redux';
  3. import { hot } from 'react-hot-loader';
  4. import { NavModel, ApiKey } from '../../types';
  5. import { getNavModel } from 'app/core/selectors/navModel';
  6. // import { getSearchQuery, getTeams, getTeamsCount } from './state/selectors';
  7. import PageHeader from 'app/core/components/PageHeader/PageHeader';
  8. import { loadApiKeys, deleteApiKey } from './state/actions';
  9. import EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA';
  10. export interface Props {
  11. navModel: NavModel;
  12. apiKeys: ApiKey[];
  13. searchQuery: string;
  14. loadApiKeys: typeof loadApiKeys;
  15. deleteApiKey: typeof deleteApiKey;
  16. // loadTeams: typeof loadTeams;
  17. // deleteTeam: typeof deleteTeam;
  18. // setSearchQuery: typeof setSearchQuery;
  19. }
  20. export class ApiKeysPage extends PureComponent<Props, any> {
  21. componentDidMount() {
  22. this.fetchApiKeys();
  23. }
  24. async fetchApiKeys() {
  25. await this.props.loadApiKeys();
  26. }
  27. deleteApiKey(id: number) {
  28. return () => {
  29. this.props.deleteApiKey(id);
  30. };
  31. }
  32. render() {
  33. const { navModel, apiKeys } = this.props;
  34. return (
  35. <div>
  36. <PageHeader model={navModel} />
  37. <div className="page-container page-body">
  38. <h3 className="page-heading">Existing Keys</h3>
  39. <table className="filter-table">
  40. <thead>
  41. <tr>
  42. <th>Name</th>
  43. <th>Role</th>
  44. <th style={{ width: '34px' }} />
  45. </tr>
  46. </thead>
  47. {apiKeys.length > 0 ? (
  48. <tbody>
  49. {apiKeys.map(key => {
  50. // id, name, role
  51. return (
  52. <tr key={key.id}>
  53. <td>{key.name}</td>
  54. <td>{key.role}</td>
  55. <td>
  56. <a onClick={this.deleteApiKey(key.id)} className="btn btn-danger btn-mini">
  57. <i className="fa fa-remove" />
  58. </a>
  59. </td>
  60. </tr>
  61. );
  62. })}
  63. </tbody>
  64. ) : null}
  65. </table>
  66. </div>
  67. </div>
  68. );
  69. }
  70. }
  71. function mapStateToProps(state) {
  72. return {
  73. navModel: getNavModel(state.navIndex, 'apikeys'),
  74. apiKeys: state.apiKeys.keys,
  75. // searchQuery: getSearchQuery(state.teams),
  76. };
  77. }
  78. const mapDispatchToProps = {
  79. loadApiKeys,
  80. deleteApiKey,
  81. // loadTeams,
  82. // deleteTeam,
  83. // setSearchQuery,
  84. };
  85. export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(ApiKeysPage));