Files
Homarr/components/Settings/SettingsMenu.tsx

102 lines
2.6 KiB
TypeScript
Raw Normal View History

2022-04-27 20:10:51 +02:00
import { ActionIcon, Group, Modal, Switch, Title, Text, Tooltip, TextInput } from '@mantine/core';
2022-04-27 03:12:17 +02:00
import { showNotification } from '@mantine/notifications';
import { motion } from 'framer-motion';
import { CSSProperties, useEffect, useState } from 'react';
import { Mail, Settings as SettingsIcon, X } from 'tabler-icons-react';
2022-05-01 14:46:45 +02:00
import { loadSettings } from '../../tools/settings';
import { Settings } from '../../tools/types';
2022-04-27 03:12:17 +02:00
import SaveConfigComponent from '../Config/SaveConfig';
function SettingsMenu(props: any) {
const [config, setConfig] = useState<Settings>({
2022-04-27 20:10:51 +02:00
searchUrl: 'https://www.google.com/search?q=',
2022-04-27 03:12:17 +02:00
searchBar: true,
});
useEffect(() => {
const config = loadSettings('settings');
2022-04-27 03:12:17 +02:00
if (config) {
setConfig(config);
}
}, []);
return (
2022-04-27 20:10:51 +02:00
<Group direction="column" grow>
<TextInput
label="Search bar querry url"
defaultValue={config.searchUrl}
2022-04-30 21:51:37 +02:00
onChange={(e) => {
2022-04-27 03:12:17 +02:00
setConfig({
...config,
searchUrl: e.target.value,
2022-04-27 03:12:17 +02:00
});
localStorage.setItem(
'settings',
JSON.stringify({
...config,
2022-04-27 20:10:51 +02:00
searchUrl: e.target.value,
2022-04-27 03:12:17 +02:00
})
);
2022-04-30 21:51:37 +02:00
}}
/>
<Group direction="column">
2022-04-27 20:10:51 +02:00
<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>
2022-04-27 03:12:17 +02:00
<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"
2022-04-27 03:12:17 +02:00
title={<Title order={3}>Settings</Title>}
opened={props.opened || opened}
onClose={() => setOpened(false)}
>
<SettingsMenu />
</Modal>
<ActionIcon
variant="default"
radius="xl"
size="xl"
color="blue"
2022-04-27 03:12:17 +02:00
style={props.style}
onClick={() => setOpened(true)}
>
<Tooltip label="Settings">
<SettingsIcon />
2022-04-27 03:12:17 +02:00
</Tooltip>
</ActionIcon>
</>
);
}