Files
Homarr/components/Settings/SettingsMenu.tsx
2022-04-27 20:10:51 +02:00

100 lines
2.5 KiB
TypeScript

import { ActionIcon, Group, Modal, Switch, Title, Text, Tooltip, TextInput } from '@mantine/core';
import { showNotification } from '@mantine/notifications';
import { motion } from 'framer-motion';
import { CSSProperties, useEffect, useState } from 'react';
import { Mail, Settings, X } from 'tabler-icons-react';
import { Config, loadConfig } from '../../tools/config';
import SaveConfigComponent from '../Config/SaveConfig';
function SettingsMenu(props: any) {
const [config, setConfig] = useState<Config>({
searchUrl: 'https://www.google.com/search?q=',
searchBar: true,
});
useEffect(() => {
const config = loadConfig('settings');
if (config) {
setConfig(config);
}
}, []);
return (
<Group direction="column" grow>
<TextInput label='Search bar querry url' defaultValue={config.searchUrl} onChange={
(e) => {
setConfig({
...config,
searchUrl: e.target.value
});
localStorage.setItem(
'settings',
JSON.stringify({
...config,
searchUrl: e.target.value,
})
);
}
} />
<Group direction="column" >
<Switch
onChange={(e) => {
setConfig({
...config,
searchBar: e.target.checked,
});
localStorage.setItem(
'settings',
JSON.stringify({
...config,
searchBar: e.target.checked,
})
);
}}
checked={config.searchBar}
label="Enable search bar"
/>
</Group>
<SaveConfigComponent />
<Text
style={{
alignSelf: 'center',
fontSize: '0.75rem',
textAlign: 'center',
color: '#a0aec0',
}}
>
tip: You can upload your config file by dragging and dropping it into the page
</Text>
</Group>
);
}
export function SettingsMenuButton(props: any) {
const [opened, setOpened] = useState(false);
return (
<>
<Modal
size={'md'}
title={<Title order={3}>Settings</Title>}
opened={props.opened || opened}
onClose={() => setOpened(false)}
>
<SettingsMenu />
</Modal>
<ActionIcon
variant="default"
radius="xl"
size={'xl'}
color={'blue'}
style={props.style}
onClick={() => setOpened(true)}
>
<Tooltip label="Settings">
<Settings />
</Tooltip>
</ActionIcon>
</>
);
}