Files
buzz/desktop
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 d053578f15 fix(desktop): collapse mark-read/unread menu into one toggling item
The message action menu rendered two independent items ("Mark unread"
and "Mark read"), each gated only on prop presence, so both showed at
once. Collapse them into a single DropdownMenuItem whose label, icon, and
handler branch on the clicked message's own read state, mirroring the
existing Follow-thread toggle in the same file.

The read state comes from isMessageUnread — the same computeThreadUnreadMarker
predicate the unread badge uses — so the menu label and badge cannot drift.
Its callback identity now depends on a forcedUnreadVersion counter so a
mark-read/unread re-flows through the memoized message subtree (the
forced-unread overlay is a ref, otherwise invisible to React).

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-06-22 22:45:12 -04:00
..
2026-06-11 15:06:24 +00:00
2026-06-11 15:06:24 +00:00

Buzz

Desktop chat shell with:

  • Tauri + React + TypeScript + Vite
  • Tailwind CSS
  • shadcn/ui-ready shared components
  • Biome (lint/format/check)
  • Feature-driven frontend structure

Scripts

  • pnpm dev - run the web frontend
  • pnpm tauri dev - run the desktop app
  • pnpm build - typecheck and build frontend
  • pnpm typecheck - TypeScript checks
  • pnpm lint - Biome lint
  • pnpm format - Biome format (write)
  • pnpm check - Biome check

Structure

  • src/shared - reusable app-wide code (ui, lib, styles)
  • src/features - feature modules (vertical slices)
  • src/app - top-level app composition