You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Direct follow-up to conversation threading: once a reply-back correctly
joins its thread, it showed up as a second row in the inbox list -- same
conversation, two rows, reading as a duplicate. groupByThread (api.jsx)
collapses same-thread-id rows client-side over whatever page is already
loaded: since the list is always sorted created_at desc, the first message
seen for a thread_id is its latest and becomes the representative row,
with later same-thread messages folding into its count/anyUnread/
anyStarred. A message with no thread_id (a fresh Compose) keeps its own
single-message group.
Stated plainly, not silently: this is a page-local collapse, not a true
thread count -- a thread whose messages straddle a page boundary still
shows as separate rows on each page, since poche has no server-side GROUP
BY (same reason messageFieldFacets scans-and-aggregates in Go).
Selecting a collapsed row's checkbox selects every message id in that
group at once, so bulk star/archive/delete/tag act on the whole
conversation. A collapsed row's star icon does the same via a new
onStarThread(ids, star) handler that reuses the existing /api/bulk
star/unstar action with explicit ids -- no new backend surface, inherits
that endpoint's already-fixed ownership check for free.
Verified in a real browser: a 2-message inbound thread (+ a separate
outbound reply correctly excluded from the Inbox view's direction=in
filter) collapsed into one row with a "2" badge; clicking it opened the
latest message with the pane's ThreadStrip showing all three messages
including the outbound reply; the row checkbox selected both underlying
ids (toolbar showed "(2)"); starring the row starred both underlying
messages, confirmed via a direct query, without touching the outbound
reply that was never part of that row's group.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
0 commit comments