Handle clicking items

pull/409/head
Michael Shamoon 2 years ago
parent fa46c9a1a4
commit db9633496b

@ -12,17 +12,20 @@ export default function HomepageSearch({bookmarksAndServices, searchString, setS
const [results, setResults] = useState([]); const [results, setResults] = useState([]);
const [currentItemIndex, setCurrentItemIndex] = useState(null); const [currentItemIndex, setCurrentItemIndex] = useState(null);
function resetAndClose() {
setSearchString("");
close(false);
}
function handleSearchChange(event) { function handleSearchChange(event) {
setSearchString(event.target.value.toLowerCase()) setSearchString(event.target.value.toLowerCase())
} }
function handleSearchKeyDown(event) { function handleSearchKeyDown(event) {
if (event.key === "Escape") { if (event.key === "Escape") {
setSearchString(""); resetAndClose();
close(false);
} else if (event.key === "Enter" && results.length) { } else if (event.key === "Enter" && results.length) {
setSearchString(""); resetAndClose();
close(false);
const result = results[currentItemIndex]; const result = results[currentItemIndex];
window.open(result.href, '_blank'); window.open(result.href, '_blank');
} else if (event.key === "ArrowDown" && results[currentItemIndex + 1]) { } else if (event.key === "ArrowDown" && results[currentItemIndex + 1]) {
@ -34,6 +37,10 @@ export default function HomepageSearch({bookmarksAndServices, searchString, setS
} }
} }
function handleItemClick() {
resetAndClose();
}
useEffect(() => { useEffect(() => {
if (searchString.length === 0) setResults([]); if (searchString.length === 0) setResults([]);
else { else {
@ -76,18 +83,20 @@ export default function HomepageSearch({bookmarksAndServices, searchString, setS
)} type="text" ref={searchField} value={searchString} onChange={handleSearchChange} onKeyDown={handleSearchKeyDown} /> )} type="text" ref={searchField} value={searchString} onChange={handleSearchChange} onKeyDown={handleSearchKeyDown} />
{results.length > 0 && <ul className="max-h-[60vh] overflow-y-auto"> {results.length > 0 && <ul className="max-h-[60vh] overflow-y-auto">
{results.map((r, i) => ( {results.map((r, i) => (
<li className={classNames( <li key={r.name}>
i === currentItemIndex && "bg-theme-300/50 dark:bg-theme-700/50", <a className={classNames(
"flex flex-row items-center justify-between rounded-md text-sm md:text-xl m-2 py-2 px-4 cursor-pointer text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 hover:bg-theme-200/50 dark:hover:bg-theme-900/30", i === currentItemIndex && "bg-theme-300/50 dark:bg-theme-700/50",
)} key={r.name}> "flex flex-row items-center justify-between rounded-md text-sm md:text-xl m-2 py-2 px-4 cursor-pointer text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 hover:bg-theme-200/50 dark:hover:bg-theme-900/30",
<div className="flex flex-row items-center mr-4"> )} href={r.href} target="_blank" rel="noreferrer" onClick={handleItemClick}>
<div className="w-5 text-xs mr-4"> <div className="flex flex-row items-center mr-4">
{r.icon && resolveIcon(r.icon)} <div className="w-5 text-xs mr-4">
{r.abbr && r.abbr} {r.icon && resolveIcon(r.icon)}
{r.abbr && r.abbr}
</div>
{r.name}
</div> </div>
{r.name} <div className="text-xs text-theme-600">{r.abbr ? t("homepagesearch.bookmark") : t("homepagesearch.service")}</div>
</div> </a>
<div className="text-xs text-theme-600">{r.abbr ? t("homepagesearch.bookmark") : t("homepagesearch.service")}</div>
</li> </li>
))} ))}
</ul>} </ul>}

Loading…
Cancel
Save