import { Divider, List, Switch, TextField } from '@mui/material'; import { TimePicker } from '@mui/x-date-pickers/TimePicker'; import { useTranslation } from 'react-i18next'; import { TokenForm } from '../../../components/TokenForm'; import { ListItem, ListItemText } from '@/components/ListItem'; import { usePreferenceObservable } from '@services/preferences/hooks'; import { WindowNames } from '@services/windows/WindowProperties'; import { Paper, SectionTitle, TimePickerContainer } from '../PreferenceComponents'; import type { ISectionProps } from '../useSections'; export function Sync(props: Required): React.JSX.Element { const { t } = useTranslation(); const preference = usePreferenceObservable(); return ( <> {t('Preference.Sync')} {preference === undefined ? {t('Loading')} : ( <> { await window.service.preference.set('syncBeforeShutdown', event.target.checked); props.requestRestartCountDown(); }} /> } > { await window.service.preference.set('syncOnlyWhenNoDraft', event.target.checked); }} /> } > { if (date === null) throw new Error(`date is null`); // Extract hours, minutes, seconds from the date and convert to milliseconds // This is timezone-independent because we're just extracting time components const hours = date.getHours(); const minutes = date.getMinutes(); const seconds = date.getSeconds(); const intervalMs = (hours * 60 * 60 + minutes * 60 + seconds) * 1000; await window.service.preference.set('syncDebounceInterval', intervalMs); props.requestRestartCountDown(); }} onClose={async () => { await window.service.window.updateWindowMeta(WindowNames.preferences, { preventClosingWindow: false }); }} onOpen={async () => { await window.service.window.updateWindowMeta(WindowNames.preferences, { preventClosingWindow: true }); }} /> { await window.service.preference.set('aiGenerateBackupTitle', event.target.checked); }} /> } > {preference.aiGenerateBackupTitle && ( { const seconds = Number.parseInt(event.target.value, 10); if (!Number.isNaN(seconds) && seconds > 0 && seconds <= 60) { await window.service.preference.set('aiGenerateBackupTitleTimeout', seconds * 1000); } }} onBlur={async (event) => { const seconds = Number.parseInt(event.target.value, 10); // Reset to current preference value if invalid if (Number.isNaN(seconds) || seconds <= 0 || seconds > 60) { event.target.value = String(preference.aiGenerateBackupTitleTimeout / 1000); } }} slotProps={{ htmlInput: { min: 1, max: 60, step: 1, }, }} sx={{ width: 100 }} size='small' label={t('Preference.Seconds')} /> )} )} ); }