Settings Drawer - #347
Merged
Merged
Settings Drawer#347
Conversation
The top-right gear opens an edge drawer instead of pushing /settings: wordmark, Vescape Account (moved off the Social sheet), a status strip for backup, app version and storage, the four settings worth one tap, and one link to Advanced. IconButton gains a takeover — alternate icon, accent and an optional determinate progress ring — so the Settings button can wear a required update or a running backup the way Social wears an active Group Ride. Backup enters the UI through a single BackupSlot seam wired to #276 when it lands. Settings icon accents move into theme.settingsIcon so a destination keeps one color everywhere: Connection is now the pairing purple, Live telemetry the speed blue. Database moves out of Dev tools into the drawer.
…ize hook - useBackupSlot reports unavailable for every Rider until #276 lands; offering "sign in to back up" promised a capability this build does not have. - fmtCompactCount picks its suffix after rounding, so 999_999 reads 1.0M not 1000k. - New useDatabaseSize hook for surfaces that only want the number; the drawer no longer mounts backup/restore/rebuild state and its progress listener.
The prototype's identity pill, not the full-width widget the Social sheet used. The pill absorbs what the widget owned: a provisioning credential spins, a failed Clerk to Device Token exchange turns the pill into a retry button. AccountWidget had no callers left and is deleted.
Wordmark sits lower and breathes: 24 above, 22 to the account pill, 10 below. The status strip taller and set off from the shortcut list by its own margin, so the header, the status and the list read as three groups instead of one column.
A dash said nothing. The cell now reads Sync over No account when there is no Vescape Account, or Sync over Unavailable while this build has no uploader.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The top-right gear no longer pushes
/settings— it opens an edge drawer, the same shape as the Social drawer on the left.What lands
src/screens/main/overlays/SettingsSheet.tsx): wordmark, the Vescape Account widget (moved off the Social sheet), a three-cell status strip (backup / app version / storage), an update button when one is available, four shortcut widgets (Connection, Live telemetry, Watch on Android, Privacy zones) and one Advanced settings link to the old settings screen.IconButtongainstakeover— alternate icon, alternate accent and an optional determinate progress ring (Skia) — so the gear becomes an upgrade arrow for a required update, or a spinning-arrows glyph with drain progress while backup runs, the way the Social button becomes an active Group Ride. Priority lives insettingsTrigger.tsand is unit-tested; the component only renders it. Shown in the component library withtakeover/progresscontrols.theme.settingsIcon. Connection is now the pairing purple (same token as Board Link), Live telemetry istelemetry.speed. Recoloring a destination is a single edit.fmtCompactCountinhelpers/formatkeeps a six-figure backup backlog narrow (1.2k/100k).Backup is a seam, not an implementation
There is no uploader on
devyet — it lands with #276. Backup enters the UI through one type and one hook (BackupSlot,useBackupSlot), so until #276 merges a signed-in Rider sees a dimmed backup cell rather than a green "backed up" that would be a lie. Wiring it is a body swap inuseBackupSlot(TODO in place, naming already matchessyncStatusStore/backupProgress).Verification
bun test(746 pass), tsc, oxlint, and opened on the Android emulator: drawer renders, signed-out backup cell readsOff / Sign in, version and storage are live.Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.