Live search for apps

This commit is contained in:
unknown 2021-09-06 12:47:17 +02:00
parent 6ae6c58f4c
commit fac280ff0a
3 changed files with 32 additions and 18 deletions

View File

@ -28,16 +28,28 @@ const SearchBar = (props: ComponentProps): JSX.Element => {
}, []);
const searchHandler = (e: KeyboardEvent<HTMLInputElement>) => {
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)}
/>
);
};

View File

@ -1,5 +1,8 @@
import { Query } from './Query';
export interface SearchResult {
isLocal: boolean;
prefix: null | string;
query: string;
sameTab: boolean;
search: string;
query: Query;
}

View File

@ -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;