AlertRuleItem.tsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import React, { PureComponent } from 'react';
  2. import Highlighter from 'react-highlight-words';
  3. import classNames from 'classnames';
  4. import { AlertRule } from '../../types';
  5. export interface Props {
  6. rule: AlertRule;
  7. search: string;
  8. onTogglePause: () => void;
  9. }
  10. class AlertRuleItem extends PureComponent<Props> {
  11. renderText(text: string) {
  12. return (
  13. <Highlighter
  14. highlightClassName="highlight-search-match"
  15. textToHighlight={text}
  16. searchWords={[this.props.search]}
  17. />
  18. );
  19. }
  20. render() {
  21. const { rule, onTogglePause } = this.props;
  22. const iconClassName = classNames({
  23. fa: true,
  24. 'fa-play': rule.state === 'paused',
  25. 'fa-pause': rule.state !== 'paused',
  26. });
  27. const ruleUrl = `${rule.url}?panelId=${rule.panelId}&fullscreen=true&edit=true&tab=alert`;
  28. return (
  29. <li className="alert-rule-item">
  30. <span className={`alert-rule-item__icon ${rule.stateClass}`}>
  31. <i className={rule.stateIcon} />
  32. </span>
  33. <div className="alert-rule-item__body">
  34. <div className="alert-rule-item__header">
  35. <div className="alert-rule-item__name">
  36. <a href={ruleUrl}>{this.renderText(rule.name)}</a>
  37. </div>
  38. <div className="alert-rule-item__text">
  39. <span className={`${rule.stateClass}`}>{this.renderText(rule.stateText)}</span>
  40. <span className="alert-rule-item__time"> for {rule.stateAge}</span>
  41. </div>
  42. </div>
  43. {rule.info && <div className="small muted alert-rule-item__info">{this.renderText(rule.info)}</div>}
  44. </div>
  45. <div className="alert-rule-item__actions">
  46. <button
  47. className="btn btn-small btn-inverse alert-list__btn width-2"
  48. title="Pausing an alert rule prevents it from executing"
  49. onClick={onTogglePause}
  50. >
  51. <i className={iconClassName} />
  52. </button>
  53. <a className="btn btn-small btn-inverse alert-list__btn width-2" href={ruleUrl} title="Edit alert rule">
  54. <i className="icon-gf icon-gf-settings" />
  55. </a>
  56. </div>
  57. </li>
  58. );
  59. }
  60. }
  61. export default AlertRuleItem;