diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 34058db9..fda37272 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -282,7 +282,8 @@ }, "quicklaunch": { "bookmark": "Bookmark", - "service": "Service" + "service": "Service", + "search": "Search" }, "wmo": { "0-day": "Sunny", @@ -432,7 +433,7 @@ }, "cloudflared": { "origin_ip": "Origin IP", - "status": "Status" + "status": "Status" }, "proxmoxbackupserver": { "datastore_usage": "Datastore", @@ -446,4 +447,4 @@ "videos": "Videos", "storage": "Storage" } -} \ No newline at end of file +} diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx index 050de448..877b98e5 100644 --- a/src/components/quicklaunch.jsx +++ b/src/components/quicklaunch.jsx @@ -6,7 +6,7 @@ import ResolvedIcon from "./resolvedicon"; import { SettingsContext } from "utils/contexts/settings"; -export default function QuickLaunch({servicesAndBookmarks, searchString, setSearchString, isOpen, close, searchDescriptions}) { +export default function QuickLaunch({servicesAndBookmarks, searchString, setSearchString, isOpen, close, searchDescriptions, searchProvider}) { const { t } = useTranslation(); const { settings } = useContext(SettingsContext); @@ -34,7 +34,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear function handleSearchKeyDown(event) { if (!isOpen) return; - + if (event.key === "Escape") { closeAndReset(); event.preventDefault(); @@ -50,6 +50,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear } } + function handleItemHover(event) { setCurrentItemIndex(parseInt(event.target?.dataset?.index, 10)); } @@ -75,6 +76,15 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear if (searchDescriptions) { newResults = newResults.sort((a, b) => b.priority - a.priority); } + if (searchProvider) { + newResults.push( + { + href: searchProvider.url + encodeURIComponent(searchString), + name: `${searchProvider.name} ${t("quicklaunch.search")} `, + type: 'search', + } + ) + } setResults(newResults); @@ -82,7 +92,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear setCurrentItemIndex(0); } } - }, [searchString, servicesAndBookmarks, searchDescriptions]); + }, [searchString, servicesAndBookmarks, searchDescriptions, searchProvider, t]); const [hidden, setHidden] = useState(true); @@ -90,7 +100,7 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear function handleBackdropClick(event) { if (event.target?.tagName === "DIV") closeAndReset(); } - + if (isOpen) { searchField.current.focus(); document.body.addEventListener('click', handleBackdropClick); @@ -135,20 +145,20 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear i === currentItemIndex && "bg-theme-300/50 dark:bg-theme-700/50", )} onClick={handleItemClick}>