diff --git a/ui/src/Components/Grid/AlertGrid/AlertGroup/Alert/index.js b/ui/src/Components/Grid/AlertGrid/AlertGroup/Alert/index.js index 4ecc4efca..911920c85 100644 --- a/ui/src/Components/Grid/AlertGrid/AlertGroup/Alert/index.js +++ b/ui/src/Components/Grid/AlertGrid/AlertGroup/Alert/index.js @@ -1,7 +1,7 @@ -import React, { Component } from "react"; +import React from "react"; import PropTypes from "prop-types"; -import { observer } from "mobx-react"; +import { useObserver } from "mobx-react"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faVolumeMute } from "@fortawesome/free-solid-svg-icons/faVolumeMute"; @@ -17,146 +17,131 @@ import { RenderNonLinkAnnotation, RenderLinkAnnotation } from "../Annotation"; import { AlertMenu } from "./AlertMenu"; import { RenderSilence } from "../Silences"; -const Alert = observer( - class Alert extends Component { - static propTypes = { - group: APIGroup.isRequired, - alert: APIAlert.isRequired, - showAlertmanagers: PropTypes.bool.isRequired, - showReceiver: PropTypes.bool.isRequired, - afterUpdate: PropTypes.func.isRequired, - alertStore: PropTypes.instanceOf(AlertStore).isRequired, - silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired, - setIsMenuOpen: PropTypes.func.isRequired, - }; +const Alert = ({ + group, + alert, + showAlertmanagers, + showReceiver, + afterUpdate, + alertStore, + silenceFormStore, + setIsMenuOpen, +}) => { + const classNames = [ + "components-grid-alertgrid-alertgroup-alert", + "list-group-item bg-transparent", + "pl-1 pr-0 py-0", + "my-1", + "rounded-0", + "border-left-1 border-right-0 border-top-0 border-bottom-0", + BorderClassMap[alert.state] || "border-default", + ]; - render() { - const { - group, - alert, - showAlertmanagers, - showReceiver, - afterUpdate, - alertStore, - silenceFormStore, - setIsMenuOpen, - } = this.props; - - let classNames = [ - "components-grid-alertgrid-alertgroup-alert", - "list-group-item bg-transparent", - "pl-1 pr-0 py-0", - "my-1", - "rounded-0", - "border-left-1 border-right-0 border-top-0 border-bottom-0", - BorderClassMap[alert.state] || "border-default", - ]; - - const silences = {}; - for (const am of alert.alertmanager) { - if (!silences[am.cluster]) { - silences[am.cluster] = { - alertmanager: am, - silences: [ - ...new Set( - am.silencedBy.filter( - (silenceID) => - !( - group.shared.silences[am.cluster] && - group.shared.silences[am.cluster].includes(silenceID) - ) + const silences = {}; + for (const am of alert.alertmanager) { + if (!silences[am.cluster]) { + silences[am.cluster] = { + alertmanager: am, + silences: [ + ...new Set( + am.silencedBy.filter( + (silenceID) => + !( + group.shared.silences[am.cluster] && + group.shared.silences[am.cluster].includes(silenceID) ) - ), - ], - }; - } - } + ) + ), + ], + }; + } + } - return ( -
  • -
    - {alert.annotations - .filter((a) => a.isLink === false) - .map((a) => ( - - ))} -
    - - {alert.alertmanager - .map((am) => am.inhibitedBy.length) - .reduce((sum, x) => sum + x) > 0 ? ( - - - - - - ) : null} - {Object.entries(alert.labels).map(([name, value]) => ( - ( +
  • +
    + {alert.annotations + .filter((a) => a.isLink === false) + .map((a) => ( + ))} - {showAlertmanagers - ? alert.alertmanager.map((am) => ( - - )) - : null} - {showReceiver ? ( +
    + + {alert.alertmanager + .map((am) => am.inhibitedBy.length) + .reduce((sum, x) => sum + x) > 0 ? ( + + + + + + ) : null} + {Object.entries(alert.labels).map(([name, value]) => ( + + ))} + {showAlertmanagers + ? alert.alertmanager.map((am) => ( - ) : null} - {alert.annotations - .filter((a) => a.isLink === true) - .map((a) => ( - - ))} - {Object.entries(silences).map(([cluster, clusterSilences]) => - clusterSilences.silences.map((silenceID) => - RenderSilence( - alertStore, - silenceFormStore, - afterUpdate, - cluster, - silenceID - ) - ) - )} -
  • - ); - } - } -); + )) + : null} + {showReceiver ? ( + + ) : null} + {alert.annotations + .filter((a) => a.isLink === true) + .map((a) => ( + + ))} + {Object.entries(silences).map(([cluster, clusterSilences]) => + clusterSilences.silences.map((silenceID) => + RenderSilence( + alertStore, + silenceFormStore, + afterUpdate, + cluster, + silenceID + ) + ) + )} + + )); +}; +Alert.propTypes = { + group: APIGroup.isRequired, + alert: APIAlert.isRequired, + showAlertmanagers: PropTypes.bool.isRequired, + showReceiver: PropTypes.bool.isRequired, + afterUpdate: PropTypes.func.isRequired, + alertStore: PropTypes.instanceOf(AlertStore).isRequired, + silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired, + setIsMenuOpen: PropTypes.func.isRequired, +}; export { Alert };