Live search for apps
This commit is contained in:
parent
6ae6c58f4c
commit
fac280ff0a
3 changed files with 32 additions and 18 deletions
|
@ -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)}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
import { Query } from './Query';
|
||||
|
||||
export interface SearchResult {
|
||||
isLocal: boolean;
|
||||
prefix: null | string;
|
||||
query: string;
|
||||
sameTab: boolean;
|
||||
search: string;
|
||||
query: Query;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue