We can now load as much data as we want in the services and settings values. This solves the issue of using multiple localStorages boxes
104 lines
2.8 KiB
TypeScript
104 lines
2.8 KiB
TypeScript
import {
|
|
Input,
|
|
TextInput,
|
|
Text,
|
|
ActionIcon,
|
|
useMantineTheme,
|
|
Center,
|
|
Popover,
|
|
} from '@mantine/core';
|
|
import { useForm } from '@mantine/hooks';
|
|
import { showNotification } from '@mantine/notifications';
|
|
import { useState, useEffect } from 'react';
|
|
import {
|
|
Search,
|
|
ArrowRight,
|
|
ArrowLeft,
|
|
BrandYoutube,
|
|
Download,
|
|
InfoCircle,
|
|
FileX,
|
|
} from 'tabler-icons-react';
|
|
import { useConfig } from '../../tools/state';
|
|
import { Settings } from '../../tools/types';
|
|
|
|
export default function SearchBar(props: any) {
|
|
const { config, setConfig } = useConfig();
|
|
const [opened, setOpened] = useState(false);
|
|
const [icon, setIcon] = useState(<Search />);
|
|
const querryUrl = config.settings.searchUrl || 'https://www.google.com/search?q=';
|
|
|
|
const form = useForm({
|
|
initialValues: {
|
|
querry: '',
|
|
},
|
|
});
|
|
|
|
if (config.settings.searchBar == false) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<form
|
|
onChange={() => {
|
|
// If querry contains !yt or !t add "Searching on YouTube" or "Searching torrent"
|
|
const querry = form.values.querry.trim();
|
|
const isYoutube = querry.startsWith('!yt');
|
|
const isTorrent = querry.startsWith('!t');
|
|
if (isYoutube) {
|
|
setIcon(<BrandYoutube />);
|
|
} else if (isTorrent) {
|
|
setIcon(<Download />);
|
|
} else {
|
|
setIcon(<Search />);
|
|
}
|
|
}}
|
|
onSubmit={form.onSubmit((values) => {
|
|
// Find if querry is prefixed by !yt or !t
|
|
const querry = values.querry.trim();
|
|
const isYoutube = querry.startsWith('!yt');
|
|
const isTorrent = querry.startsWith('!t');
|
|
if (isYoutube) {
|
|
window.open(`https://www.youtube.com/results?search_query=${querry.substring(3)}`);
|
|
} else if (isTorrent) {
|
|
window.open(`https://thepiratebay.org/search.php?q=${querry.substring(3)}`);
|
|
} else {
|
|
window.open(`${querryUrl}${values.querry}`);
|
|
}
|
|
})}
|
|
>
|
|
<Popover
|
|
opened={opened}
|
|
style={{
|
|
width: '100%',
|
|
}}
|
|
position="bottom"
|
|
placement="start"
|
|
withArrow
|
|
trapFocus={false}
|
|
transition="pop-top-left"
|
|
onFocusCapture={() => setOpened(true)}
|
|
onBlurCapture={() => setOpened(false)}
|
|
target={
|
|
<TextInput
|
|
variant="filled"
|
|
color="blue"
|
|
icon={<Search size={18} />}
|
|
radius="md"
|
|
rightSection={icon}
|
|
size="md"
|
|
placeholder="Search the web"
|
|
{...props}
|
|
{...form.getInputProps('querry')}
|
|
/>
|
|
}
|
|
>
|
|
<Text>
|
|
tip: You can prefix your querry with <b>!yt</b> or <b>!t</b> to research on youtube or for
|
|
a torrent
|
|
</Text>
|
|
</Popover>
|
|
</form>
|
|
);
|
|
}
|