Settings-page prefs (theme/scheme/dark-mode/list-view/perf/hints/font + the
notification settings) were each auto-saved to the server on every toggle via
fire-and-forget savePrefs().catch(() => {}) — silent on failure, and no
positive confirmation on success, so the user had zero feedback either way.
Make them a draft instead: changes apply locally for instant preview but
persist only on an explicit Save (or revert on Discard). App owns the live
draft + the last-saved baseline, computes dirty, and exposes a controller to
the panel. The panel shows a Save/Discard bar with 'Saving…' → 'Settings
saved' (auto-clearing) / 'Couldn't save' feedback. Leaving the page with
unsaved changes prompts a confirm (in-app nav + browser Back), and a
beforeunload guards reload/close. savePrefs is now idempotent so the Save
survives a transient gateway blip; failures surface via the connection-lost
status. Language & sidebar layout stay instant (edited outside this page).
New i18n keys settings.save.* / settings.unsaved.* in EN/HU/DE.
|
||
|---|---|---|
| .. | ||
| api.ts | ||
| errorDialog.ts | ||
| format.ts | ||
| hints.ts | ||
| notifications.ts | ||
| onboarding.ts | ||
| releaseNotes.ts | ||
| sidebarLayout.ts | ||
| theme.ts | ||
| urlState.ts | ||
| useLiveQuery.ts | ||
| useUndoable.ts | ||
| version.ts | ||