Skip to content

Conversation

@kevinaboos
Copy link
Member

@kevinaboos kevinaboos commented Nov 22, 2025

This PR introduces separate, independent views of the dock for each space, and also one for the main home view that shows all rooms.
These views are virtualized, and only one exists at a single time, so we're not wasting tons of memory allocating separate widget instances for each space.

Automatic saving/restoring of per-space view state upon user navigation and programmatic navigation between different top-level nav tabs.

The RoomsList now maintains the full map of spaces and their children, and is responsible for sending space-related requests to the backend async tasks.

Other changes:

Remaining TODOs:

  • Direct messages ("people") also aren't being properly included.
    • This isn't provided by the SDK, but some clients like Element choose to include a DM in the space if the member of that DM is also a member of that space. We could do that as well, but it requires storing the member list of each space.
  • Show a loading spinner in the last "status message" element of the RoomsList's PortalList.
    • This should be present while we're paginating the list of children that space. Otherwise, the user won't know why there are no rooms shown, or not all rooms are shown yet.
    • This should probably be directly part of the status message widget, with the loading indicator on the left of it.
  • Need to update the status message content to properly reflect the number of joined or matching rooms in the currently-selected space. Fixed by Correctly calculate status message at the end of the RoomsList #643
  • Implement the actual SpaceLobbyScreen content.
  • Upon opening a new space, we also need to recursively fetch the list of children for all sub-spaces in that space. Fixed by Discover and recursively descend into nested subspaces #644
    • Without this, joined rooms in a nested space will not be shown when its parent space is selected.

showing SpaceLobby entry in the RoomsList, etc.

SpaceLobby itself not yet impl'd.
Full usage of `SelectedRoom::Space` not yet impl'd.
@kevinaboos kevinaboos marked this pull request as draft November 22, 2025 08:39
Still need to add:
1. Filtering displayed rooms in `RoomsList::update_displayed_rooms()`,
2. Saving desktop dock state, and closing rooms not in the selected space,
3. Restoring desktop dock state upon going back to the home tab,
4. Fleshing out the SpaceLobbyScreen
Fix text in SpacesBar to be more accurate regarding whether
the displayed spaces are all joined spaces or just those that match
the currently-entered keyword(s) in the RoomFilterInputBar.
TODO:
* Invites aren't being properly filtered out.
* Direct messages ("people") also aren't being properly included.
  I think what element does is include a DM in the space if the
  other member of that DM is *also* a member of that space.
  We could do that as well, but it requires storing the member list
  of each space.
* It'd be nice to show a loading spinner as the last element of
  the RoomsList's PortalList while we're paginating the list of children
  in that space. Otherwise, the user won't know
  * This could potentially be included in the status message widget,
    i.e., to the left of it.
* Need to update the status message widget properly to reflect the
  number of joined or matching rooms in the currently-selected space.
Merge branch 'main' into spaces_screen
@kevinaboos kevinaboos marked this pull request as ready for review December 17, 2025 00:58
@kevinaboos kevinaboos changed the title [WIP] SpaceScreen, SpaceLobby, space-only mode in RoomsList, etc Spaces: implement separate per-space views of rooms/dock tabs Dec 17, 2025
@kevinaboos kevinaboos merged commit c7ab709 into project-robius:main Dec 17, 2025
11 checks passed
@kevinaboos kevinaboos deleted the spaces_screen branch December 17, 2025 01:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant