Open a channel at the first unread, with a "new messages" bar #301

Closed
opened 2026-10-07 20:43:12 -04:00 by Salastil · 1 comment
Owner

On channel switch the list calls scrollToBottom() unconditionally (MessageList.tsx:500), even when the "New" divider is far above, so everything unread is skipped. "Jump to present" is a full-width bar over the last message (app.css:1687-1702).

Discord and Element open at the unread marker and show a bar: "N new messages since 3:02 PM — Mark as read".

Fix: open at the first unread when it is off-screen; the top bar with Mark as read; "Jump to present" becomes a floating pill with a count that slides in/out (Esc also jumps).

Part of the v1.0 UI pass.

On channel switch the list calls `scrollToBottom()` unconditionally (MessageList.tsx:500), even when the "New" divider is far above, so everything unread is skipped. "Jump to present" is a full-width bar over the last message (app.css:1687-1702). Discord and Element open at the unread marker and show a bar: "N new messages since 3:02 PM — Mark as read". **Fix:** open at the first unread when it is off-screen; the top bar with Mark as read; "Jump to present" becomes a floating pill with a count that slides in/out (Esc also jumps). _Part of the v1.0 UI pass._
Salastil added this to the v1.0 milestone 2026-10-07 20:43:13 -04:00
Salastil added the feature label 2026-10-07 20:43:13 -04:00
Author
Owner

Finished: 55fd192.

Before (left) and after (right) - a channel opened with 90 unread messages, from an isolated test copy against a fake server:

open at unread

  • It opens at the first unread, with the red NEW line near the top, instead of at the end with everything unread out of sight. The line goes where reading stopped (the time the conversation was last marked read) when the conversation has not been loaded yet, which is the usual case after a restart; otherwise it counts back from the end.
  • A strip along the top while the New line is out of sight above ("89 new messages since 3:16 PM" and Mark as read), after scrolling down:

bar

Clicking the words scrolls back to the line; Mark as read clears the conversation and puts the strip away. It does not show when the line is only just off the top (everything after it is already on screen).

  • Checked with real scrolling in the test copy: opening put the line 48px from the top, the strip appeared after scrolling down, clicking its text went back to the line, and Mark as read hid it.

Not done: Esc already reads and jumps to the end (#286); and the "Jump to present" pill sliding in and out is part of the motion pass (#283).

Finished: [55fd192](https://git.salastil.com/Salastil/moho/commit/55fd19282e60fd5224333f2728d3897369cee60e). Before (left) and after (right) - a channel opened with 90 unread messages, from an isolated test copy against a fake server: ![open at unread](https://git.salastil.com/attachments/d3456556-f57a-4376-86ca-61b7b31949e8) - **It opens at the first unread**, with the red NEW line near the top, instead of at the end with everything unread out of sight. The line goes where reading stopped (the time the conversation was last marked read) when the conversation has not been loaded yet, which is the usual case after a restart; otherwise it counts back from the end. - **A strip along the top** while the New line is out of sight above ("89 new messages since 3:16 PM" and **Mark as read**), after scrolling down: ![bar](https://git.salastil.com/attachments/ad8d1dc1-be11-4b98-8b33-15982a76525f) Clicking the words scrolls back to the line; Mark as read clears the conversation and puts the strip away. It does not show when the line is only just off the top (everything after it is already on screen). - Checked with real scrolling in the test copy: opening put the line 48px from the top, the strip appeared after scrolling down, clicking its text went back to the line, and Mark as read hid it. Not done: Esc already reads and jumps to the end (#286); and the "Jump to present" pill sliding in and out is part of the motion pass (#283).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Salastil/moho#301