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:
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>) => {
|
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)}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue