/** * @file Auto-save settings section */ import * as React from "react"; import { SwitchInput } from "../../elements/SwitchInput"; import { useI18n } from "../../../i18n/context"; import { InspectorInput } from "../../inspector/parts/InspectorInput"; import { InspectorDefinitionItem } from "../../inspector/parts/InspectorDefinitionList"; type AutoSaveSectionProps = { autoSave: boolean; autoSaveInterval: number; settingsWritable: boolean; onAutoSaveToggle: (enabled: boolean) => void; onAutoSaveIntervalChange: (interval: number) => void; }; /** * Section for auto-save settings */ export function AutoSaveSection({ autoSave, autoSaveInterval, settingsWritable, onAutoSaveToggle, onAutoSaveIntervalChange, }: AutoSaveSectionProps): React.ReactElement { const { t } = useI18n(); const [intervalInput, setIntervalInput] = React.useState(() => String(autoSaveInterval)); React.useEffect(() => { setIntervalInput(String(autoSaveInterval)); }, [autoSaveInterval]); const handleAutoSaveToggle = React.useEffectEvent((enabled: boolean) => { onAutoSaveToggle(enabled); }); const handleIntervalChange = React.useEffectEvent((value: string) => { setIntervalInput(value); }); const handleIntervalBlur = React.useEffectEvent(() => { const interval = parseInt(intervalInput, 10); if (!Number.isNaN(interval) && interval >= 5 && interval <= 3600) { onAutoSaveIntervalChange(interval); } else { setIntervalInput(String(autoSaveInterval)); } }); return ( handleIntervalChange(e.target.value)} onBlur={handleIntervalBlur} disabled={!settingsWritable} aria-label="Auto-save interval in seconds" /> ); }