Replace all Save buttons on the Settings page with debounced auto-save: - useAutoSave hook: debounce with latest-payload-wins, flush() for blur, pending-edit flush on unmount, status machine (idle/saving/saved/error) with saved fading back to idle. Covered by 6 Vitest tests (fake timers). - SaveStatus pill (framer-motion) in the page header and notification card headers — Saving…/Saved/Save failed. - Timing per control: toggles/selects/channel ~150-400ms; typed inputs (email, URLs, grace period, drift pct) 900ms + flush on blur. - Push token never auto-saves mid-type: saves on blur only, so a partial token can never overwrite a working one. - Notification cards no longer refetch parent settings on save (would clobber in-flight edits under auto-save). - Decision: no undo toast — settings are non-destructive and instantly re-editable; undo would add noise without safety. - vitest include now picks up .jsx tests; jsdom + @testing-library/react added as devDependencies. |
||
|---|---|---|
| .. | ||
| components | ||
| contexts | ||
| hooks | ||
| lib | ||
| pages | ||
| public/img | ||
| App.jsx | ||
| api.js | ||
| index.css | ||
| main.jsx | ||