From fac280ff0a0c9feebf5a1c266af72b7db058f815 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Sep 2021 12:47:17 +0200 Subject: [PATCH] Live search for apps --- client/src/components/SearchBar/SearchBar.tsx | 22 ++++++++++++++----- client/src/interfaces/SearchResult.ts | 7 ++++-- client/src/utility/searchParser.ts | 21 +++++++++--------- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/client/src/components/SearchBar/SearchBar.tsx b/client/src/components/SearchBar/SearchBar.tsx index 0b5f3cc..f2ccdec 100644 --- a/client/src/components/SearchBar/SearchBar.tsx +++ b/client/src/components/SearchBar/SearchBar.tsx @@ -28,16 +28,28 @@ const SearchBar = (props: ComponentProps): JSX.Element => { }, []); const searchHandler = (e: KeyboardEvent) => { - if (e.code === 'Enter') { - const searchResult = searchParser(inputRef.current.value); + const searchResult = searchParser(inputRef.current.value); - if (!searchResult.prefix) { + if (searchResult.isLocal) { + setLocalSearch(searchResult.search); + } + + if (e.code === 'Enter') { + if (!searchResult.query.prefix) { createNotification({ title: 'Error', message: 'Prefix not found', }); } else if (searchResult.isLocal) { - setLocalSearch(searchResult.query); + setLocalSearch(searchResult.search); + } else { + if (searchResult.sameTab) { + document.location.replace( + `${searchResult.query.template}${searchResult.search}` + ); + } else { + window.open(`${searchResult.query.template}${searchResult.search}`); + } } } }; @@ -47,7 +59,7 @@ const SearchBar = (props: ComponentProps): JSX.Element => { ref={inputRef} type="text" className={classes.SearchBar} - onKeyDown={(e) => searchHandler(e)} + onKeyUp={(e) => searchHandler(e)} /> ); }; diff --git a/client/src/interfaces/SearchResult.ts b/client/src/interfaces/SearchResult.ts index 1467e65..271bdc2 100644 --- a/client/src/interfaces/SearchResult.ts +++ b/client/src/interfaces/SearchResult.ts @@ -1,5 +1,8 @@ +import { Query } from './Query'; + export interface SearchResult { isLocal: boolean; - prefix: null | string; - query: string; + sameTab: boolean; + search: string; + query: Query; } diff --git a/client/src/utility/searchParser.ts b/client/src/utility/searchParser.ts index a668725..c477d66 100644 --- a/client/src/utility/searchParser.ts +++ b/client/src/utility/searchParser.ts @@ -6,8 +6,13 @@ import { searchConfig } from '.'; export const searchParser = (searchQuery: string): SearchResult => { const result: SearchResult = { isLocal: false, - prefix: null, - query: '', + sameTab: false, + search: '', + query: { + name: '', + prefix: '', + template: '', + }, }; const splitQuery = searchQuery.match(/^\/([a-z]+)[ ](.+)$/i); @@ -23,19 +28,13 @@ export const searchParser = (searchQuery: string): SearchResult => { const query = queries.find((q: Query) => q.prefix === prefix); if (query) { - result.prefix = query.prefix; - result.query = search; + result.query = query; + result.search = search; if (prefix === 'l') { result.isLocal = true; } else { - const sameTab = searchConfig('searchSameTab', false); - - if (sameTab) { - document.location.replace(`${query.template}${search}`); - } else { - window.open(`${query.template}${search}`); - } + result.sameTab = searchConfig('searchSameTab', false); } return result;