feat(desktop): Contacts + Settings→Devices + expanded Profile + QR + keybinds (v2.2.0-rc1)
Completes the desktop feature surface ahead of the v2.2.0 tag. Only
auto-update + packaging remain.
Settings — now two-paned (nav on the left, pages on the right):
* NodePage — URL ping-on-commit + API token field.
* IdentityPage — pub key / X25519 pub, Export (safe-save dialog) /
Import (open dialog + wipe + replace) / Delete identity.
* DevicesPage — full multi-device UI: list every active device with
a THIS DEVICE badge; Unlink button on every other row submits
UNLINK_DEVICE + optimistic local remove; Link new device modal
takes {code, device key, name}, submits LINK_DEVICE, then ships
the handshake envelope (master Ed25519 priv encrypted for the
new X25519) — same protocol as mobile's primary-device modal.
* AboutPage — version, platform, Gitea links.
* store.settingsPage discriminated union keeps selection across
section switches.
Contacts section (now real):
* ContactsList — alphabetical, filter-as-you-type; each row shows
avatar letter + name + short address.
* ContactsDetail — profile card (username/alias/pub) + Open chat /
View posts / Copy address actions + stats grid
(Balance, Devices, Encryption, Added) + Identity card with
DC address, username, published X25519, device_count.
* store.selectedContact persists across navigation.
Profile section (expanded):
* ProfileList — big avatar + pub key + contacts count.
* ProfileDetail — balance hero, quick actions (My posts →
feed author wall, Manage devices → Settings→Devices, Copy
address), Identity card, inline Linked devices list with a
THIS DEVICE badge matching the Settings page.
Receive modal — canvas QR via `qrcode` (new dep, ~5 KB gzipped),
white-on-transparent so it sits inside the same black modal chrome.
Global keybinds (useGlobalKeybinds hook mounted in Shell):
* Ctrl/Cmd+W — close the current conversation (drops activeChat,
keeps section). Does NOT close the window.
* Ctrl/Cmd+K — jump to Contacts.
* Ctrl/Cmd+, — Settings.
Each guards against being in a text field so typing `k,` in a
composer / search doesn't hijack.
docs/ROADMAP.md — rc1 row flipped to done; v2.2.0 narrows to
auto-update + packaging + optional attachments in Compose.
This commit is contained in:
@@ -188,20 +188,20 @@ desktop/
|
||||
|
||||
### План работ
|
||||
|
||||
- [x] **v2.2.0-alpha4** — Boilerplate: Electron + Vite + React + TS,
|
||||
frame-less window, 3-panel shell, nav + status bar, safeStorage
|
||||
for keyfile via IPC, Welcome + Create/Import auth flow, section
|
||||
stubs that the rest of the alphas will fill in.
|
||||
- [ ] **v2.2.0-alpha5** — Messages section (chat list + conversation)
|
||||
using the same fan-out semantics as mobile. Pairing flow wired up
|
||||
(new-device poll loop + primary-device modal reused from mobile).
|
||||
- [ ] **v2.2.0-alpha6** — Feed + Wallet real content (reuse feed.ts /
|
||||
tx builders from client-app via a shared workspace package).
|
||||
- [ ] **v2.2.0-rc1** — Contacts + Settings → Devices + Profile,
|
||||
polish pass (keybinds, focus, drag-drop attachments).
|
||||
- [x] **v2.2.0-alpha4** — Boilerplate, 3-panel shell, safeStorage IPC,
|
||||
Welcome / Create / Import auth, section stubs.
|
||||
- [x] **v2.2.0-alpha5** — Messages section + pairing poll loop; chain
|
||||
+ clients learn to attribute conversations by master Ed25519.
|
||||
- [x] **v2.2.0-alpha6** — Feed (tabs + list + detail + compose) +
|
||||
Wallet (history + detail + Send/Receive).
|
||||
- [x] **v2.2.0-rc1** — Contacts section (list + profile detail + actions),
|
||||
Settings → Devices (list + unlink + link-new-device modal with the
|
||||
same protocol as mobile), expanded Profile, QR in Receive, global
|
||||
keybinds (Ctrl+W close chat / Ctrl+K jump to Contacts / Ctrl+, Settings).
|
||||
- [ ] **v2.2.0** — Auto-update through the same `/api/update-check`
|
||||
pipeline nodes use; `electron-builder` → `.dmg`, `.exe`,
|
||||
`.AppImage`, `.deb`.
|
||||
`.AppImage`, `.deb`; optional: attachments in Compose
|
||||
(file picker + client-side image resize + scrub).
|
||||
|
||||
### Открытые вопросы (desktop)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user