1
0
Fork 0
mirror of https://github.com/pawelmalak/flame.git synced 2025-07-23 05:19:37 +02:00

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>) => { 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({ createNotification({
title: 'Error', title: 'Error',
message: 'Prefix not found', message: 'Prefix not found',
}); });
} else if (searchResult.isLocal) { } 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} ref={inputRef}
type="text" type="text"
className={classes.SearchBar} className={classes.SearchBar}
onKeyDown={(e) => searchHandler(e)} onKeyUp={(e) => searchHandler(e)}
/> />
); );
}; };

View file

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

View file

@ -6,8 +6,13 @@ import { searchConfig } from '.';
export const searchParser = (searchQuery: string): SearchResult => { export const searchParser = (searchQuery: string): SearchResult => {
const result: SearchResult = { const result: SearchResult = {
isLocal: false, isLocal: false,
prefix: null, sameTab: false,
query: '', search: '',
query: {
name: '',
prefix: '',
template: '',
},
}; };
const splitQuery = searchQuery.match(/^\/([a-z]+)[ ](.+)$/i); 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); const query = queries.find((q: Query) => q.prefix === prefix);
if (query) { if (query) {
result.prefix = query.prefix; result.query = query;
result.query = search; result.search = search;
if (prefix === 'l') { if (prefix === 'l') {
result.isLocal = true; result.isLocal = true;
} else { } else {
const sameTab = searchConfig('searchSameTab', false); result.sameTab = searchConfig('searchSameTab', false);
if (sameTab) {
document.location.replace(`${query.template}${search}`);
} else {
window.open(`${query.template}${search}`);
}
} }
return result; return result;