siftlode/frontend/src/lib
npeter83 d24ff9c0f0 feat(settings): explicit Save/Discard for preferences with dirty tracking
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.
2026-06-18 23:59:40 +02:00
..
api.ts feat(settings): explicit Save/Discard for preferences with dirty tracking 2026-06-18 23:59:40 +02:00
errorDialog.ts fix(ux): modal error dialog for server-refused actions + ESC closes only the topmost 2026-06-18 01:17:31 +02:00
format.ts feat(i18n): translate remaining components (HU/EN/DE) 2026-06-15 00:47:04 +02:00
hints.ts feat(ui): liquid-glass design system, settings polish, hints, notif fixes 2026-06-11 21:08:35 +02:00
notifications.ts fix(web): make the 'connection lost' notice self-resolving 2026-06-18 23:17:32 +02:00
onboarding.ts feat(demo): login trigger, feature gating + admin UI (HU/EN/DE) 2026-06-16 09:17:34 +02:00
releaseNotes.ts docs(release): reflect unified notification center in v0.9.0 notes 2026-06-18 04:37:51 +02:00
sidebarLayout.ts feat(tags): tag UX overhaul + per-card video reset 2026-06-18 01:17:31 +02:00
theme.ts feat: M4 (part 2) — React reader UI with theming 2026-06-11 02:19:47 +02:00
urlState.ts feat(notifications): durable per-user inbox (P1) + maintenance schema 2026-06-18 03:20:17 +02:00
useLiveQuery.ts feat(scheduler): live admin Scheduler dashboard + reusable poll hook (HU/EN/DE) 2026-06-16 14:38:51 +02:00
useUndoable.ts feat(playlists): sort + group-by-channel with reusable undo/redo 2026-06-15 21:52:28 +02:00
version.ts feat(i18n): foundation — react-i18next, language switcher, server-persisted choice 2026-06-15 00:30:34 +02:00