diff --git a/ui/src/Components/Grid/AlertGrid/AlertGroup/Alert/AlertMenu.js b/ui/src/Components/Grid/AlertGrid/AlertGroup/Alert/AlertMenu.js index f9fc72c92..6e7fe6523 100644 --- a/ui/src/Components/Grid/AlertGrid/AlertGroup/Alert/AlertMenu.js +++ b/ui/src/Components/Grid/AlertGrid/AlertGroup/Alert/AlertMenu.js @@ -1,7 +1,7 @@ -import React, { useRef } from "react"; +import React, { useRef, useState, useCallback } from "react"; import PropTypes from "prop-types"; -import { useObserver, useLocalStore } from "mobx-react"; +import { useObserver } from "mobx-react"; import { Manager, Reference, Popper } from "react-popper"; @@ -99,20 +99,20 @@ const AlertMenu = ({ silenceFormStore, setIsMenuOpen, }) => { - const collapse = useLocalStore(() => ({ - isHidden: true, - toggle() { - this.isHidden = !this.isHidden; - setIsMenuOpen(!this.isHidden); - }, - hide() { - this.isHidden = true; - setIsMenuOpen(!this.isHidden); - }, - })); + const [isHidden, setIsHidden] = useState(true); + + const toggle = useCallback(() => { + setIsMenuOpen(isHidden); + setIsHidden(!isHidden); + }, [isHidden, setIsMenuOpen]); + + const hide = useCallback(() => { + setIsHidden(true); + setIsMenuOpen(false); + }, [setIsMenuOpen]); const rootRef = useRef(null); - useOnClickOutside(rootRef, collapse.hide, !collapse.isHidden); + useOnClickOutside(rootRef, hide, !isHidden); return useObserver(() => ( @@ -122,7 +122,7 @@ const AlertMenu = ({ )} - + )} diff --git a/ui/src/Components/Grid/AlertGrid/AlertGroup/GroupHeader/GroupMenu.js b/ui/src/Components/Grid/AlertGrid/AlertGroup/GroupHeader/GroupMenu.js index 955121834..8808d6fd6 100644 --- a/ui/src/Components/Grid/AlertGrid/AlertGroup/GroupHeader/GroupMenu.js +++ b/ui/src/Components/Grid/AlertGrid/AlertGroup/GroupHeader/GroupMenu.js @@ -1,8 +1,6 @@ -import React, { useRef } from "react"; +import React, { useRef, useState, useCallback } from "react"; import PropTypes from "prop-types"; -import { useObserver, useLocalStore } from "mobx-react"; - import copy from "copy-to-clipboard"; import { Manager, Reference, Popper } from "react-popper"; @@ -105,29 +103,29 @@ const GroupMenu = ({ themed, setIsMenuOpen, }) => { - const collapse = useLocalStore(() => ({ - isHidden: true, - toggle() { - this.isHidden = !this.isHidden; - setIsMenuOpen(!this.isHidden); - }, - hide() { - this.isHidden = true; - setIsMenuOpen(!this.isHidden); - }, - })); + const [isHidden, setIsHidden] = useState(true); + + const toggle = useCallback(() => { + setIsMenuOpen(isHidden); + setIsHidden(!isHidden); + }, [isHidden, setIsMenuOpen]); + + const hide = useCallback(() => { + setIsHidden(true); + setIsMenuOpen(false); + }, [setIsMenuOpen]); const rootRef = useRef(null); - useOnClickOutside(rootRef, collapse.hide, !collapse.isHidden); + useOnClickOutside(rootRef, hide, !isHidden); - return useObserver(() => ( + return ( {({ ref }) => ( )} - + )} - )); + ); }; GroupMenu.propTypes = { group: APIGroup.isRequired, diff --git a/ui/src/Components/Grid/AlertGrid/AlertGroup/GroupHeader/index.js b/ui/src/Components/Grid/AlertGrid/AlertGroup/GroupHeader/index.js index 4c88fd505..2f4b5640e 100644 --- a/ui/src/Components/Grid/AlertGrid/AlertGroup/GroupHeader/index.js +++ b/ui/src/Components/Grid/AlertGrid/AlertGroup/GroupHeader/index.js @@ -14,7 +14,8 @@ import { ToggleIcon } from "Components/ToggleIcon"; import { GroupMenu } from "./GroupMenu"; const GroupHeader = ({ - collapseStore, + isCollapsed, + setIsCollapsed, group, alertStore, silenceFormStore, @@ -25,13 +26,13 @@ const GroupHeader = ({ const onCollapseClick = (event) => { // left click => toggle current group // left click + alt => toggle all groups - collapseStore.toggle(); + setIsCollapsed(!isCollapsed); if (event.altKey === true) { const toggleEvent = new CustomEvent("alertGroupCollapse", { detail: { gridLabelValue: gridLabelValue, - value: collapseStore.value, + value: !isCollapsed, }, }); window.dispatchEvent(toggleEvent); @@ -41,7 +42,7 @@ const GroupHeader = ({ return useObserver(() => (
@@ -99,7 +100,7 @@ const GroupHeader = ({ onClick={onCollapseClick} > - + @@ -107,10 +108,8 @@ const GroupHeader = ({ )); }; GroupHeader.propTypes = { - collapseStore: PropTypes.shape({ - value: PropTypes.bool.isRequired, - toggle: PropTypes.func.isRequired, - }).isRequired, + isCollapsed: PropTypes.bool.isRequired, + setIsCollapsed: PropTypes.func.isRequired, group: APIGroup.isRequired, alertStore: PropTypes.instanceOf(AlertStore).isRequired, silenceFormStore: PropTypes.instanceOf(SilenceFormStore).isRequired, diff --git a/ui/src/Components/Grid/AlertGrid/AlertGroup/index.js b/ui/src/Components/Grid/AlertGrid/AlertGroup/index.js index 031682ca9..5aeb04ae8 100644 --- a/ui/src/Components/Grid/AlertGrid/AlertGroup/index.js +++ b/ui/src/Components/Grid/AlertGrid/AlertGroup/index.js @@ -1,8 +1,8 @@ -import React, { useEffect, useCallback, useRef } from "react"; +import React, { useEffect, useCallback, useRef, useState } from "react"; import PropTypes from "prop-types"; import { toJS } from "mobx"; -import { useObserver, useLocalStore } from "mobx-react"; +import { useObserver } from "mobx-react"; import { Fade } from "react-reveal"; @@ -61,23 +61,15 @@ const AlertGroup = ({ settingsStore.alertGroupConfig.config.defaultRenderCount ); - const renderConfig = useLocalStore(() => ({ - alertsToRender: initialAlertsToRender || defaultRenderCount, - isMenuOpen: false, - setIsMenuOpen(val) { - this.isMenuOpen = val; - }, - })); + const [alertsToRender, setAlertsToRender] = useState( + initialAlertsToRender || defaultRenderCount + ); - const collapse = useLocalStore(() => ({ - value: DefaultDetailsCollapseValue(settingsStore), - toggle() { - this.value = !this.value; - }, - set(value) { - this.value = value; - }, - })); + const [isMenuOpen, setIsMenuOpen] = useState(false); + + const [isCollapsed, setIsCollapsed] = useState( + DefaultDetailsCollapseValue(settingsStore) + ); // Used to calculate step size when loading more alerts. // Step is calculated from the excesive alert count @@ -99,31 +91,23 @@ const AlertGroup = ({ const loadMore = () => { const step = getStepSize(group.alerts.length); - // show cur+step, but not more that total alert count - renderConfig.alertsToRender = Math.min( - renderConfig.alertsToRender + step, - group.alerts.length - ); + setAlertsToRender(Math.min(alertsToRender + step, group.alerts.length)); }; const loadLess = () => { const step = getStepSize(group.alerts.length); - // show cur-step, but not less than 1 - renderConfig.alertsToRender = Math.max( - renderConfig.alertsToRender - step, - 1 - ); + setAlertsToRender(Math.max(alertsToRender - step, 1)); }; const onAlertGroupCollapseEvent = useCallback( (event) => { if (event.detail.gridLabelValue === gridLabelValue) { - collapse.set(event.detail.value); + setIsCollapsed(event.detail.value); } }, - [collapse, gridLabelValue] + [gridLabelValue] ); useEffect(() => { @@ -182,7 +166,7 @@ const AlertGroup = ({ }`} style={{ width: groupWidth, - zIndex: renderConfig.isMenuOpen ? 100 : null, + zIndex: isMenuOpen ? 100 : null, }} >
- {collapse.value ? null : ( + {isCollapsed ? null : (
    - {group.alerts - .slice(0, renderConfig.alertsToRender) - .map((alert) => ( - 1 && - group.alerts.length === 1 - } - afterUpdate={afterUpdate} - alertStore={alertStore} - silenceFormStore={silenceFormStore} - setIsMenuOpen={renderConfig.setIsMenuOpen} - /> - ))} + {group.alerts.slice(0, alertsToRender).map((alert) => ( + 1 && + group.alerts.length === 1 + } + afterUpdate={afterUpdate} + alertStore={alertStore} + silenceFormStore={silenceFormStore} + setIsMenuOpen={setIsMenuOpen} + /> + ))} {group.alerts.length > defaultRenderCount ? (
  • - {Math.min( - renderConfig.alertsToRender, - group.alerts.length - )} + {Math.min(alertsToRender, group.alerts.length)} {" of "} {group.alerts.length} @@ -248,7 +228,7 @@ const AlertGroup = ({
)} - {collapse.value === false && group.alerts.length > 1 ? ( + {isCollapsed === false && group.alerts.length > 1 ? (