diff --git a/ui/src/Components/NavBar/FilterInput/index.js b/ui/src/Components/NavBar/FilterInput/index.js index 7e63474c8..e9b1b2559 100644 --- a/ui/src/Components/NavBar/FilterInput/index.js +++ b/ui/src/Components/NavBar/FilterInput/index.js @@ -1,7 +1,7 @@ -import React, { useEffect, useState, useRef } from "react"; +import React, { useEffect, useState, useRef, useCallback } from "react"; import PropTypes from "prop-types"; -import { useObserver, useLocalStore } from "mobx-react"; +import { useObserver } from "mobx-react"; import Autosuggest from "react-autosuggest"; import Highlight from "react-highlighter"; @@ -22,36 +22,32 @@ const FilterInput = ({ alertStore, settingsStore }) => { const autosuggestRef = useRef(); const inputRef = useRef(); - const inputStore = useLocalStore(() => ({ - suggestions: [], - value: "", - focused: false, - onChange(event, { newValue }) { - // onChange here handles change for the user input in the filter bar - // we need to update inputStore.value every time user types in something - this.value = newValue; - }, - onSubmit(event) { - event.preventDefault(); - if (this.value !== "") { - alertStore.filters.addFilter(this.value); - this.value = ""; - } - }, - onSuggestionsClearRequested() { - this.suggestions = []; - }, - onSuggestionSelected(event, { suggestion }) { - this.value = ""; + const [suggestions, setSuggestions] = useState([]); + const [value, setValue] = useState(""); + const [isFocused, setIsFocused] = useState(false); + + const onSuggestionsClearRequested = useCallback(() => setSuggestions([]), []); + + const onSuggestionSelected = useCallback( + (event, { suggestion }) => { + setValue(""); alertStore.filters.addFilter(suggestion); }, - onFocus() { - this.focused = true; + [alertStore.filters] + ); + + const onChange = useCallback((event, { newValue }) => setValue(newValue), []); + + const onSubmit = useCallback( + (event) => { + event.preventDefault(); + if (value !== "") { + alertStore.filters.addFilter(value); + setValue(""); + } }, - onBlur() { - this.focused = false; - }, - })); + [alertStore.filters, value] + ); useEffect(() => { inputRef.current = autosuggestRef.current.input.parentElement; @@ -76,11 +72,11 @@ const FilterInput = ({ alertStore, settingsStore }) => { useEffect(() => { if (error) { - inputStore.onSuggestionsClearRequested(); + onSuggestionsClearRequested(); } else if (!isLoading) { - inputStore.suggestions = response; + setSuggestions(response); } - }, [response, error, isLoading, inputStore]); + }, [response, error, isLoading, onSuggestionsClearRequested]); const onInputClick = (event) => { if ( @@ -118,10 +114,10 @@ const FilterInput = ({ alertStore, settingsStore }) => { return useObserver(() => ( // data-filters is there to register filters for observation in mobx // in order to re-render input component -