AlertRuleItem.tsx 2.2 KB

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