import React, { Component } from "react"; import PropTypes from "prop-types"; import { action, observable } from "mobx"; import { observer } from "mobx-react"; import hash from "object-hash"; import { Manager, Reference, Popper } from "react-popper"; import onClickOutside from "react-onclickoutside"; import Moment from "react-moment"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faCaretDown } from "@fortawesome/free-solid-svg-icons/faCaretDown"; import { faBellSlash } from "@fortawesome/free-solid-svg-icons/faBellSlash"; import { faExternalLinkAlt } from "@fortawesome/free-solid-svg-icons/faExternalLinkAlt"; import { APIAlert, APIGroup } from "Models/API"; import { AlertStore } from "Stores/AlertStore"; import { SilenceFormStore } from "Stores/SilenceFormStore"; import { FetchPauser } from "Components/FetchPauser"; import { DropdownSlide } from "Components/Animations/DropdownSlide"; const onSilenceClick = (alertStore, silenceFormStore, group, alert) => { silenceFormStore.data.resetProgress(); silenceFormStore.data.fillMatchersFromGroup( group, alertStore.settings.values.silenceForm.strip.labels, [alert] ); silenceFormStore.toggle.show(); }; const MenuContent = onClickOutside( ({ popperPlacement, popperRef, popperStyle, group, alert, afterClick, alertStore, silenceFormStore }) => { return (
Alert source links:
{alert.alertmanager.map(am => ( {am.name} ))}
onSilenceClick(alertStore, silenceFormStore, group, alert) } > Silence this alert
); } ); MenuContent.propTypes = { popperPlacement: PropTypes.string, popperRef: PropTypes.func, popperStyle: PropTypes.object, group: APIGroup.isRequired, alert: APIAlert.isRequired, afterClick: PropTypes.func.isRequired }; const AlertMenu = observer( class AlertMenu extends Component { static propTypes = { group: APIGroup.isRequired, alert: APIAlert.isRequired, alertStore: PropTypes.instanceOf(AlertStore).isRequired, silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired }; collapse = observable( { value: true, toggle() { this.value = !this.value; }, hide() { this.value = true; } }, { toggle: action.bound, hide: action.bound }, { name: "Alert menu toggle" } ); handleClickOutside = action(event => { this.collapse.hide(); }); render() { const { group, alert, alertStore, silenceFormStore } = this.props; const uniqueClass = `components-grid-alert-${group.id}-${hash( alert.labels )}`; return ( {({ ref }) => ( {alert.startsAt} )} {({ placement, ref, style }) => ( )} ); } } ); export { AlertMenu, MenuContent };