import { useForm } from 'react-hook-form'; import { useEffect, useState } from 'react'; import { FilePen, FolderOpen, RefreshCw, ScrollText, ShieldCheck } from 'lucide-react'; import { PreferencesSchema } from '~common/schemas'; import { api } from '~renderer/utils/api'; import zodResolver from '~renderer/utils/zodResolver'; import TextButton from './styled/TextButton'; import CheckboxInput from './form/CheckboxInput'; import DialogButton from './styled/DialogButton'; import ClientDirDialog from './ClientDirDialog'; import CloseButton from './styled/CloseButton'; const MirrorStatus = () => { const [state, setState] = useState('verifying'); api.updater.observe.useSubscription(undefined, { onData: ({ state }) => setState(state) }); if (state === 'serverUnreachable') return offline; if (state === 'verifying' || state === 'updating') return checking…; return online; }; type Props = { close: () => void }; const PreferencesDialog = ({ close }: Props) => { const { data: pref } = api.preferences.get.useQuery(); const setPref = api.preferences.set.useMutation(); const verify = api.updater.verify.useMutation(); const openInstallFolder = api.general.openInstallFolder.useMutation(); const openLogFile = api.general.openLogFile.useMutation(); const { handleSubmit, watch, setValue, reset } = useForm({ defaultValues: pref ?? {}, resolver: zodResolver(PreferencesSchema) }); useEffect(() => { pref && reset(pref); }, [reset, pref]); const setBool = (key: keyof PreferencesSchema) => (v: boolean) => setValue(key, v, { shouldTouch: true, shouldDirty: true, shouldValidate: true }); return (
{ await setPref.mutateAsync(v); close(); })} > { reset(); close(); }} />

SETTINGS


INSTALL LOCATION:

openInstallFolder.mutateAsync()} className="!p-1 text-blueGray" > Open folder
{pref?.clientDir ?? 'Not selected'} ( { closeInner(); close(); }} /> )} clickAway={pref?.isPortable} > {open => ( Change )}

DOWNLOAD MIRROR:

Iceland verify.mutateAsync()} title="Re-check" className="!p-0 text-blueGray" />

TROUBLESHOOTING:

verify.mutateAsync().then(close)} className="text-warmGreen" > Verify game files openLogFile.mutateAsync()} className="text-pink" > Open log file

GENERAL SETTINGS:

Save ); }; export default PreferencesDialog;