fix(status): harden presets after review
Address findings from 2 review agents on the status-presets feature: - Presence-echo race: a heartbeat can echo the previous status just after a new one is saved, reverting the input. Track the last-applied value and ignore non-matching echoes until our own echo lands or a 15s window elapses (bounded so a dropped echo can't block real cross-device updates). Applies to Save, preset apply, and Clear. - Duplicate chips: a saved custom preset that matches a built-in is now hidden from "Your presets" (it already shows under Quick statuses). - a11y: the two preset rows use aria-labelledby tied to their visible headings instead of mismatched hardcoded aria-labels. - Visual grouping: a custom preset's chip and its delete X now sit with gap=0 as one unit while the row separates presets with gap=200, so a chip and its delete no longer read as two separate presets. Delete/Plus icons bumped to size=100 to match the folds chip-icon convention. - Parity: addPreset/removePreset promises are now caught like the other account-data call sites. Docs updated to the exact 11-preset built-in list. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -910,7 +910,7 @@ A presence status selector in the user panel offering five modes:
|
||||
- Optional auto-clear timer with presets: 30 minutes, 1 hour, 4 hours, 1 day, 3 days, 7 days
|
||||
- Status is broadcast via `mx.setPresence({ status_msg: ... })`
|
||||
- Character counter appears at 56/64 characters remaining to warn of the limit
|
||||
- **Status presets**: a "Quick statuses" row of built-in presets spanning gaming/social/life/work (🎮 Gaming, 🎧 In a party, 🏆 Ranked grind, 😴 AFK, 🍿 Watching, 🗓️ In a meeting, 🏠 Working remotely, 🍽️ Lunch, 🌴 On vacation, 🤒 Out sick…). Clicking a preset applies its message + suggested auto-clear in one click. Users can also save the current status as a reusable custom preset (stored in `io.lotus.status_presets` account data, synced across devices, de-duped by label, capped at 20) and delete presets inline. Built-in list + pure `upsertPreset` de-dupe/cap logic live in `src/app/utils/statusPresets.ts` (unit-tested); persistence in `src/app/hooks/useStatusPresets.ts`.
|
||||
- **Status presets**: a "Quick statuses" row of 11 built-in presets spanning gaming/social/life/work — 🎮 Gaming, 🎧 In a party, 🏆 Ranked grind, 😴 AFK, 🍿 Watching, 🍽️ Lunch, 🗓️ In a meeting, 🏠 Working remotely, 🎯 Focusing, 🌴 On vacation, 🤒 Out sick (see `BUILT_IN_STATUS_PRESETS`). Clicking a preset applies its message + suggested auto-clear in one click. Users can also save the current status as a reusable custom preset (stored in `io.lotus.status_presets` account data, synced across devices, de-duped by label, capped at 20; a saved preset matching a built-in is hidden to avoid a duplicate chip) and delete presets inline. Built-in list + pure `upsertPreset` de-dupe/cap logic live in `src/app/utils/statusPresets.ts` (unit-tested); persistence in `src/app/hooks/useStatusPresets.ts`.
|
||||
|
||||
### Presence Badges
|
||||
|
||||
|
||||
Reference in New Issue
Block a user