Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Room list v2 feature implementation (outdated checklist) #13635

Closed
51 of 68 tasks
turt2live opened this issue May 11, 2020 · 2 comments
Closed
51 of 68 tasks

Room list v2 feature implementation (outdated checklist) #13635

turt2live opened this issue May 11, 2020 · 2 comments

Comments

@turt2live
Copy link
Member

turt2live commented May 11, 2020

The core algorithm being used is tracked as #11743 - this issue is all about the UI/UX features which need implementing. It's a bit long.

This doesn't account for a huge number of features. See the project board for more information on what is when.

  • Expand/collapse lists
  • Resize list height
  • Badges on room tiles
    • Shown on first render
    • Update as the room updates (new messages, read messages, etc)
  • Hover effect on room tiles
    • CSS
  • Hover effects on sublist
    • Resize handle visible
    • Show additional buttons on header
  • Per-list algorithm options
  • Add room button
  • Render room lists with tiles
  • Render room lists lazily
  • Group/community invites
  • Archive view
    • No historical section
    • Left panel takeover with "archive"
  • Filter box
    • Filter by room name (partial)
    • Filter by canonical alias (partial)
    • Filter by alt alias (partial)
    • CTRL+K to target
    • ESC to clear
  • Community filter panel (LLP) support
  • Custom tag support
  • Context menu show
    • Leave room
    • Tag (favourite, DM, low prio, off)
    • Room settings
  • Accessibility - TODO: Improve list of features we intentionally support
    • Natural tab ordering/stops
    • Arrow key navigation
    • aria-labels and aria-levels
    • ALT+UP/DOWN navigability
    • Automatic scrolling when using keyboard
    • Enter to view room
    • LEFT/RIGHT to collapse/expand sublist
    • Other TODO comments
  • Room tile error boundary
  • Incoming call support
  • Jitsi support
  • Presence decoration
  • Globe decoration
  • Update room tiles when room decorations change (name, join rules, e2e, etc)
  • Breadcrumbs update with viewed rooms
  • Custom theme support
  • Upload file animation
  • Upload failed icon
  • Typing animation
  • Breadcrumbs
    • View
    • Become smaller on scroll
  • Missed notifications bar (when scrolled)
  • Minimized view
  • Home link on user menu

Algorithmic behaviour:

  • Sticky room behaves as documented (stay in place)
  • Importance algorithm
    • List sorting algorithm applied to category lists (recents vs alphabetical)
    • Red > Grey > Bold > Idle
  • Natural algorithm
    • List sorting applied to sublists (recents vs alphabetical)
  • Update behaviour/regenerate lists when options change
    • Custom tags
    • Importance vs Natural ordering
    • List sorting algorithm (skip regeneration for whole list?)

Tests (end-to-end as well as unit/integration tests):

  • Importance algorithm behaviour (end-to-end and integration)
  • Natural algorithm behaviour (end-to-end and integration)
  • ... and whatever else is possible (probably for each individual feature listed above)
@turt2live
Copy link
Member Author

Extremely early and unapproved designs show we might be interested in having an option to order favourites like regular rooms, so matrix-org/matrix-spec-proposals#2579 exists (it was about time anyways). This would include #4484

turt2live added a commit to matrix-org/matrix-react-sdk that referenced this issue Jun 1, 2020
For element-hq/element-web#13635

This is an incomplete implementation and is mostly dumped in this state for review purposes. The remainder of the features/bugs are expected to be in more bite-sized chunks.

This exposes the RoomListStore on the window for easy access to things like the new filter functions (used in debugging).

This also adds initial handling of "new rooms" to the client, though the support is poor.

Known bugs:
* [ ] Regenerates the entire room list when a new room is seen.
* [ ] Doesn't handle 2+ filters at the same time very well (see gif. will need a priority/ordering of some sort).
* [ ] Doesn't handle room order changes within a tag yet, despite the docs implying it does.
turt2live added a commit to matrix-org/matrix-react-sdk that referenced this issue Jun 6, 2020
Originally this was intended to be done only in the importance algorithm, however it is clear that all algorithms will need to deal with this. As such, it has been put into the base class to deal with as we may override it in the future. 

This commit should be self-documenting enough to describe what is going on, though the major highlight is that the handling of the sticky room is done by lying to the underlying algorithm.

This has not been optimized for performance yet.

For element-hq/element-web#13635
turt2live added a commit to matrix-org/matrix-react-sdk that referenced this issue Jun 6, 2020
For element-hq/element-web#13635

This adds support for:
* Tag changes
* DM changes
* Marking our own rooms as read
* Our own membership changes

The remaining branch we didn't need was the alternate 'new room' branch, so it was removed.

This is not optimized - optimization is deferred.
jryans added a commit to matrix-org/matrix-react-sdk that referenced this issue Jul 13, 2020
If a sublist changes from sticky top to sticky bottom in a single run of the
logic (without passing through the default state), we were leaving the previous
top position set. This handles them independently to resolve this.

Fixes element-hq/element-web#14390
Maybe helps with element-hq/element-web#14443
For element-hq/element-web#13635
@turt2live
Copy link
Member Author

Finally closing this and it's 2mb screenshots' worth of referenced PRs. Everything else is tracked in the new-room-list label.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants