import { KeyboardEvent, useRef } from "react"; import { useAtom, useAtomValue } from "jotai"; import { settingsAtom } from "lib/state/settings"; import { queryAtom } from "lib/state/query"; import { selectedSuggestionAtom } from "lib/state/suggestionSelection"; import handleEnter from "lib/onesearch/handleEnter"; import { suggestionAtom } from "lib/state/suggestion"; import { useTranslation } from "react-i18next"; import { searchboxLastInputAtom } from "lib/state/searchboxLastInput"; export default function Search(props: { onFocus: () => void }) { const { t } = useTranslation(); const settings = useAtomValue(settingsAtom); const [query, setQuery] = useAtom(queryAtom); const [selectedSuggestion, setSelected] = useAtom(selectedSuggestionAtom); const [_, setLastInput] = useAtom(searchboxLastInputAtom) const suggestions = useAtomValue(suggestionAtom); const searchBoxRef = useRef(null); const style = "default"; function handleKeydown(e: KeyboardEvent) { if (e.key == "Enter") { e.preventDefault(); handleEnter(selectedSuggestion, suggestions, query, settings, searchBoxRef); return; } else if (e.key == "ArrowUp") { e.preventDefault(); const len = suggestions.length; const lastSelectedIndex = (selectedSuggestion - 1 + len) % len; const lastSuggeston = suggestions[lastSelectedIndex]; setSelected(lastSelectedIndex); if (["QUERY", "NAVIGATION", "default"].includes(lastSuggeston.type)) { setQuery(lastSuggeston.suggestion); } } else if (e.key == "ArrowDown") { e.preventDefault(); const len = suggestions.length; const nextSelectedIndex = (selectedSuggestion + 1 + len) % len; const nextSuggeston = suggestions[nextSelectedIndex]; setSelected(nextSelectedIndex); if (["QUERY", "NAVIGATION", "default"].includes(nextSuggeston.type)) { setQuery(nextSuggeston.suggestion); } } } if (style === "default") { return ( // 祖传样式,勿动
{ setLastInput(new Date().getTime()); setQuery(() => e.target.value); }} autoComplete="off" autoCorrect="off" autoCapitalize="off" spellCheck="false" ref={searchBoxRef} value={query} />
); } else if (style == "image") { return ( // 祖传样式,勿动
); } }