TableContainer.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import React, { PureComponent } from 'react';
  2. import { hot } from 'react-hot-loader';
  3. import { connect } from 'react-redux';
  4. import { ExploreId, ExploreItemState } from 'app/types/explore';
  5. import { StoreState } from 'app/types';
  6. import { toggleTable } from './state/actions';
  7. import Table from './Table';
  8. import Panel from './Panel';
  9. import TableModel from 'app/core/table_model';
  10. import { LoadingState } from '@grafana/data';
  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. <Panel label="Table" loading={loading} collapsible isOpen={showingTable} onToggle={this.onClickTableButton}>
  27. {tableResult && <Table data={tableResult} loading={loading} onClickCell={onClickCell} />}
  28. </Panel>
  29. );
  30. }
  31. }
  32. function mapStateToProps(state: StoreState, { exploreId }) {
  33. const explore = state.explore;
  34. const item: ExploreItemState = explore[exploreId];
  35. const { loadingState, showingTable, tableResult } = item;
  36. const loading =
  37. tableResult && tableResult.rows.length > 0
  38. ? false
  39. : loadingState === LoadingState.Loading || loadingState === LoadingState.Streaming;
  40. return { loading, showingTable, tableResult };
  41. }
  42. const mapDispatchToProps = {
  43. toggleTable,
  44. };
  45. export default hot(module)(
  46. connect(
  47. mapStateToProps,
  48. mapDispatchToProps
  49. )(TableContainer)
  50. );