mirror of
https://github.com/grafana/grafana.git
synced 2025-02-12 16:45:43 -06:00
Closes #19598 Fixes bug introduced recently where the new PromQueryEditor did not preserve the PromContext.Explore set on the query model by PromQueryField which caused the table to be empty for Prometheus in explore.
66 lines
2.1 KiB
TypeScript
66 lines
2.1 KiB
TypeScript
import React, { PureComponent } from 'react';
|
|
import { hot } from 'react-hot-loader';
|
|
import { connect } from 'react-redux';
|
|
import { DataFrame } from '@grafana/data';
|
|
import { Table, Collapse } from '@grafana/ui';
|
|
import { ExploreId, ExploreItemState } from 'app/types/explore';
|
|
import { StoreState } from 'app/types';
|
|
import { toggleTable } from './state/actions';
|
|
import { config } from 'app/core/config';
|
|
import { PANEL_BORDER } from 'app/core/constants';
|
|
|
|
interface TableContainerProps {
|
|
exploreId: ExploreId;
|
|
loading: boolean;
|
|
width: number;
|
|
onClickCell: (key: string, value: string) => void;
|
|
showingTable: boolean;
|
|
tableResult?: DataFrame;
|
|
toggleTable: typeof toggleTable;
|
|
}
|
|
|
|
export class TableContainer extends PureComponent<TableContainerProps> {
|
|
onClickTableButton = () => {
|
|
this.props.toggleTable(this.props.exploreId, this.props.showingTable);
|
|
};
|
|
|
|
getTableHeight() {
|
|
const { tableResult } = this.props;
|
|
|
|
if (!tableResult || tableResult.length === 0) {
|
|
return 200;
|
|
}
|
|
|
|
// tries to estimate table height
|
|
return Math.max(Math.min(600, tableResult.length * 35) + 35);
|
|
}
|
|
|
|
render() {
|
|
const { loading, onClickCell, showingTable, tableResult, width } = this.props;
|
|
|
|
const height = this.getTableHeight();
|
|
const tableWidth = width - config.theme.panelPadding * 2 - PANEL_BORDER;
|
|
|
|
return (
|
|
<Collapse label="Table" loading={loading} collapsible isOpen={showingTable} onToggle={this.onClickTableButton}>
|
|
{tableResult && <Table data={tableResult} width={tableWidth} height={height} onCellClick={onClickCell} />}
|
|
</Collapse>
|
|
);
|
|
}
|
|
}
|
|
|
|
function mapStateToProps(state: StoreState, { exploreId }: { exploreId: string }) {
|
|
const explore = state.explore;
|
|
// @ts-ignore
|
|
const item: ExploreItemState = explore[exploreId];
|
|
const { loading: loadingInState, showingTable, tableResult } = item;
|
|
const loading = tableResult && tableResult.length > 0 ? false : loadingInState;
|
|
return { loading, showingTable, tableResult };
|
|
}
|
|
|
|
const mapDispatchToProps = {
|
|
toggleTable,
|
|
};
|
|
|
|
export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(TableContainer));
|