TableContainer.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import React, { PureComponent } from 'react';
  2. import { hot } from 'react-hot-loader';
  3. import { connect } from 'react-redux';
  4. import { LoadingState } from '@grafana/data';
  5. import { Collapse } from '@grafana/ui';
  6. import { ExploreId, ExploreItemState } from 'app/types/explore';
  7. import { StoreState } from 'app/types';
  8. import { toggleTable } from './state/actions';
  9. import Table from './Table';
  10. import TableModel from 'app/core/table_model';
  11. interface TableContainerProps {
  12. exploreId: ExploreId;
  13. loading: boolean;
  14. onClickCell: (key: string, value: string) => void;
  15. showingTable: boolean;
  16. tableResult?: TableModel;
  17. toggleTable: typeof toggleTable;
  18. }
  19. export class TableContainer extends PureComponent<TableContainerProps> {
  20. onClickTableButton = () => {
  21. this.props.toggleTable(this.props.exploreId, this.props.showingTable);
  22. };
  23. render() {
  24. const { loading, onClickCell, showingTable, tableResult } = this.props;
  25. return (
  26. <Collapse label="Table" loading={loading} collapsible isOpen={showingTable} onToggle={this.onClickTableButton}>
  27. {tableResult && <Table data={tableResult} loading={loading} onClickCell={onClickCell} />}
  28. </Collapse>
  29. );
  30. }
  31. }
  32. function mapStateToProps(state: StoreState, { exploreId }: { exploreId: string }) {
  33. const explore = state.explore;
  34. // @ts-ignore
  35. const item: ExploreItemState = explore[exploreId];
  36. const { loadingState, showingTable, tableResult } = item;
  37. const loading =
  38. tableResult && tableResult.rows.length > 0
  39. ? false
  40. : loadingState === LoadingState.Loading || loadingState === LoadingState.Streaming;
  41. return { loading, showingTable, tableResult };
  42. }
  43. const mapDispatchToProps = {
  44. toggleTable,
  45. };
  46. export default hot(module)(
  47. connect(
  48. mapStateToProps,
  49. mapDispatchToProps
  50. )(TableContainer)
  51. );