From 1136072eff26b99148a2470ecf6a5d7b045eb90d Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Thu, 18 Apr 2024 13:10:53 +0500 Subject: [PATCH] mobile: improve search experience --- apps/mobile/app/screens/search/index.tsx | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/apps/mobile/app/screens/search/index.tsx b/apps/mobile/app/screens/search/index.tsx index c762da849..17523227a 100644 --- a/apps/mobile/app/screens/search/index.tsx +++ b/apps/mobile/app/screens/search/index.tsx @@ -19,11 +19,12 @@ along with this program. If not, see . import { Item, Note, VirtualizedGrouping } from "@notesnook/core"; import React, { useEffect, useRef, useState } from "react"; -import { db } from "../../common/database"; +import { DatabaseLogger, db } from "../../common/database"; import List from "../../components/list"; import SelectionHeader from "../../components/selection-header"; import { useNavigationFocus } from "../../hooks/use-navigation-focus"; import { + ToastManager, eSubscribeEvent, eUnSubscribeEvent } from "../../services/event-manager"; @@ -37,6 +38,7 @@ export const Search = ({ route, navigation }: NavigationProps<"Search">) => { const [loading, setLoading] = useState(false); const [searchStatus, setSearchStatus] = useState(); const currentQuery = useRef(); + const timer = useRef(); const isFocused = useNavigationFocus(navigation, { onFocus: (prev) => { useNavigationStore.getState().setFocusedRouteId(route.name); @@ -68,6 +70,8 @@ export const Search = ({ route, navigation }: NavigationProps<"Search">) => { console.log( `Found ${results.placeholders?.length} results for ${query}` ); + if (currentQuery.current !== query) return; + await results.item(0); setResults(results); if (results.placeholders?.length === 0) { setSearchStatus(`No results found for ${query}`); @@ -76,7 +80,8 @@ export const Search = ({ route, navigation }: NavigationProps<"Search">) => { } setLoading(false); } catch (e) { - console.log(e); + ToastManager.error(e as Error); + DatabaseLogger.error(e); } }, [route.params?.items, route.params.type] @@ -89,7 +94,6 @@ export const Search = ({ route, navigation }: NavigationProps<"Search">) => { } }; eSubscribeEvent(eOnRefreshSearch, onRefreshSearch); - return () => { eUnSubscribeEvent(eOnRefreshSearch, onRefreshSearch); }; @@ -103,18 +107,26 @@ export const Search = ({ route, navigation }: NavigationProps<"Search">) => { type={route.params?.type} renderedInRoute={route.name} /> - + { + clearTimeout(timer.current); + timer.current = setTimeout(() => { + onSearch(query); + }, 300); + }} + loading={loading} + />