import { useEffect, useState, useRef } from "react"; import { useTranslation } from "react-i18next"; import { useLocationStore, useDialogStore } from "../store/module"; import { memoSpecialTypes } from "../helpers/filter"; import Icon from "./Icon"; import "../less/search-bar.less"; const SearchBar = () => { const { t } = useTranslation(); const locationStore = useLocationStore(); const dialogStore = useDialogStore(); const memoType = locationStore.state.query.type; const [queryText, setQueryText] = useState(""); const inputRef = useRef(null); const [isFocus, setIsFocus] = useState(false); useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { if (!inputRef.current) { return; } if (dialogStore.getState().dialogStack.length) { return; } const isMetaKey = event.ctrlKey || event.metaKey; if (isMetaKey && event.key === "f") { event.preventDefault(); inputRef.current.focus(); return; } }; document.body.addEventListener("keydown", handleKeyDown); return () => { document.body.removeEventListener("keydown", handleKeyDown); }; }, []); useEffect(() => { const text = locationStore.getState().query.text; setQueryText(text === undefined ? "" : text); }, [locationStore.state.query.text]); const handleMemoTypeItemClick = (type: MemoSpecType | undefined) => { const { type: prevType } = locationStore.getState().query ?? {}; if (type === prevType) { type = undefined; } locationStore.setMemoTypeQuery(type); }; const handleTextQueryInput = (event: React.FormEvent) => { const text = event.currentTarget.value; setQueryText(text); locationStore.setTextQuery(text.length === 0 ? undefined : text); }; const handleFocus = () => { setIsFocus(true); }; const handleBlur = () => { setIsFocus(false); }; return (

{t("search.quickly-filter").toUpperCase()}

{t("common.type").toUpperCase()}:
{memoSpecialTypes.map((type, idx) => { return (
{ handleMemoTypeItemClick(type.value as MemoSpecType); }} > {t(type.text)} {idx + 1 < memoSpecialTypes.length ? / : null}
); })}
); }; export default SearchBar;