import React, { PureComponent } from 'react'; import { hot } from 'react-hot-loader'; import { connect } from 'react-redux'; import { StoreState } from 'app/types'; import { getNavModel } from 'app/core/selectors/navModel'; import { getServerStats, ServerStat } from './state/apis'; import Page from 'app/core/components/Page/Page'; import { NavModel } from '@grafana/data'; interface Props { navModel: NavModel; getServerStats: () => Promise; } interface State { stats: ServerStat[]; isLoading: boolean; } export class ServerStats extends PureComponent { state: State = { stats: [], isLoading: true, }; async componentDidMount() { try { const stats = await this.props.getServerStats(); this.setState({ stats, isLoading: false }); } catch (error) { console.error(error); } } render() { const { navModel } = this.props; const { stats, isLoading } = this.state; return ( {stats.map(StatItem)}
Name Value
); } } function StatItem(stat: ServerStat) { return ( {stat.name} {stat.value} ); } const mapStateToProps = (state: StoreState) => ({ navModel: getNavModel(state.navIndex, 'server-stats'), getServerStats: getServerStats, }); export default hot(module)(connect(mapStateToProps)(ServerStats));