import { Button, Drawer, DrawerBody, DrawerCloseButton, DrawerContent, DrawerFooter, DrawerHeader, DrawerOverlay, Icon, IconButton, Input, InputRightElement, Stack, Textarea, useDisclosure } from '@chakra-ui/react'; import { TbFolder, TbHelp, TbSettings } from 'react-icons/tb'; import React from 'react'; import { invoke } from '@tauri-apps/api'; import { open } from '@tauri-apps/api/dialog'; import { useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; import { SettingsItem } from './SettingsItem'; import RootContext from '../store'; import { parseIpfsGateways } from '../scripts/ipfs'; interface Config { index_dir: string; ipfs_gateways: string; } const Settings: React.FC = () => { const { t } = useTranslation(); const { isOpen, onOpen, onClose } = useDisclosure(); const btnRef = React.useRef(null); const { register, handleSubmit, watch, setValue, formState: { errors } } = useForm(); const [submitting, setSubmitting] = React.useState(false); const rootContext = React.useContext(RootContext); React.useEffect(() => { isOpen && invoke('get_config').then((conf) => { const config = conf as { index_dir: string; ipfs_gateways: string[]; }; setValue('index_dir', config.index_dir, { shouldValidate: true }); setValue('ipfs_gateways', config.ipfs_gateways.join('\n'), { shouldValidate: true }); }); }, [isOpen]); const onSubmit = async (newConfig: Config) => { setSubmitting(true); const ipfsGateways: string[]= parseIpfsGateways(newConfig.ipfs_gateways); const config = { index_dir: newConfig.index_dir, ipfs_gateways: ipfsGateways }; await invoke('set_config', { newConfig: config }); rootContext.ipfs_gateways = ipfsGateways; onClose(); setSubmitting(false); }; return ( <> } onClick={onOpen} variant="ghost" /> {t('settings.title')}
} rightElement={ } variant="unstyled" pt={1} onClick={async () => { const selected = (await open({ defaultPath: watch('index_dir'), directory: true, multiple: false })) as string | null; if (selected) setValue('index_dir', selected, { shouldValidate: true }); }} /> } /> } />
); }; export default Settings;