From 9c1c0e44655c393ec6b448f71558a93e44270afe Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 20 Oct 2022 11:12:47 -0700 Subject: [PATCH] Add quicklook searchDescriptions option --- src/components/quicklaunch.jsx | 31 +++++++++++++++++++++++++++---- src/pages/index.jsx | 9 ++++++++- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/components/quicklaunch.jsx b/src/components/quicklaunch.jsx index a78ed598..4d99bb59 100644 --- a/src/components/quicklaunch.jsx +++ b/src/components/quicklaunch.jsx @@ -6,7 +6,7 @@ import { resolveIcon } from "./services/item"; import { SettingsContext } from "utils/contexts/settings"; -export default function QuickLaunch({servicesAndBookmarks, searchString, setSearchString, isOpen, close}) { +export default function QuickLaunch({servicesAndBookmarks, searchString, setSearchString, isOpen, close, searchDescriptions}) { const { t } = useTranslation(); const { settings } = useContext(SettingsContext); @@ -59,13 +59,27 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear useEffect(() => { if (searchString.length === 0) setResults([]); else { - const newResults = servicesAndBookmarks.filter(r => r.name.toLowerCase().includes(searchString)); + let newResults = servicesAndBookmarks.filter(r => { + const nameMatch = r.name.toLowerCase().includes(searchString); + let descriptionMatch; + if (searchDescriptions) { + descriptionMatch = r.description?.toLowerCase().includes(searchString) + r.priority = nameMatch ? 2 * (+nameMatch) : +descriptionMatch; // eslint-disable-line no-param-reassign + } + return nameMatch || descriptionMatch; + }); + + if (searchDescriptions) { + newResults = newResults.sort((a, b) => b.priority - a.priority); + } + setResults(newResults); + if (newResults.length) { setCurrentItemIndex(0); } } - }, [searchString, servicesAndBookmarks]); + }, [searchString, servicesAndBookmarks, searchDescriptions]); const [hidden, setHidden] = useState(true); @@ -87,6 +101,11 @@ export default function QuickLaunch({servicesAndBookmarks, searchString, setSear }, [isOpen, closeAndReset]); + function highlightText(text) { + const parts = text.split(new RegExp(`(${searchString})`, 'gi')); + return {parts.map(part => part.toLowerCase() === searchString.toLowerCase() ? {part} : part)}; + } + return (