import React, { PureComponent } from 'react'; import { hot } from 'react-hot-loader'; import { connect } from 'react-redux'; import classNames from 'classnames'; import PageHeader from 'app/core/components/PageHeader/PageHeader'; import appEvents from 'app/core/app_events'; import Highlighter from 'react-highlight-words'; import { updateLocation } from 'app/core/actions'; import { getNavModel } from 'app/core/selectors/navModel'; import { NavModel, StoreState, AlertRule } from 'app/types'; import { getAlertRulesAsync } from './state/actions'; interface Props { navModel: NavModel; alertRules: AlertRule[]; updateLocation: typeof updateLocation; getAlertRulesAsync: typeof getAlertRulesAsync; } interface State { rules: AlertRule[]; search: string; stateFilter: string; } export class AlertRuleList extends PureComponent { stateFilters = [ { text: 'All', value: 'all' }, { text: 'OK', value: 'ok' }, { text: 'Not OK', value: 'not_ok' }, { text: 'Alerting', value: 'alerting' }, { text: 'No Data', value: 'no_data' }, { text: 'Paused', value: 'paused' }, ]; constructor(props) { super(props); this.state = { rules: [], search: '', stateFilter: '', }; } componentDidMount() { this.fetchRules(); } onStateFilterChanged = evt => { this.props.updateLocation({ query: { state: evt.target.value }, }); this.fetchRules(); }; async fetchRules() { await this.props.getAlertRulesAsync(); // this.props.alertList.loadRules({ // state: this.props.view.query.get('state') || 'all', // }); } onOpenHowTo = () => { appEvents.emit('show-modal', { src: 'public/app/features/alerting/partials/alert_howto.html', modalClass: 'confirm-modal', model: {}, }); }; onSearchQueryChange = evt => { // this.props.alertList.setSearchQuery(evt.target.value); }; render() { const { navModel, alertRules } = this.props; const { search, stateFilter } = this.state; return (
    {alertRules.map(rule => )}
); } } function AlertStateFilterOption({ text, value }) { return ( ); } export interface AlertRuleItemProps { rule: AlertRule; search: string; } export class AlertRuleItem extends React.Component { toggleState = () => { // this.props.rule.togglePaused(); }; renderText(text: string) { return ( ); } render() { const { rule } = this.props; const stateClass = classNames({ fa: true, 'fa-play': rule.state === 'paused', 'fa-pause': rule.state !== 'paused', }); const ruleUrl = `${rule.url}?panelId=${rule.panelId}&fullscreen=true&edit=true&tab=alert`; return (
  • {this.renderText(rule.stateText)} for {rule.stateAge}
    {rule.info &&
    {this.renderText(rule.info)}
    }
  • ); } } const mapStateToProps = (state: StoreState) => ({ navModel: getNavModel(state.navIndex, 'alert-list'), alertRules: state.alertRules, }); const mapDispatchToProps = { updateLocation, getAlertRulesAsync, }; export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(AlertRuleList));