Improve handling of narrows (views) with no messages
neiljp opened this issue · 1 comments
Bug description
When selecting a new narrow (view) to show, via a hotkey, a button in either side panel, or using the message search (via /
), the message focus changes to a message in the resulting view.
When the message list for that narrow/view is empty, ie. no messages are found, there is no visible message to gain focus, and the UI behaves strangely.
This can occur for many narrows/views, including:
- streams (channels)
- searches which result in no results
- direct messages with a specific user (eg. if not messaged them before)
- starred messages
- topics (difficult, but possible via exiting compose to a new topic)
- mentions (if never mentioned?)
- all direct messages (?)
This results in
- no obvious focused UI element (#607)
- the 'Current message recipients' not updating (remaining that of the previously focused message)
- the message narrow potentially not updating (#1480, #259)
It is possible to navigate out of this state by moving sideways and down (#580), or using one of the 'global' hotkeys such as w
or q
, P/#/f (though not a
). However, these are workarounds.
This has been discussed variously in #zulip-terminal, and in at least the above linked issues, as well as early work on it in #278.
What did you expect to happen?
Certainly:
- Empty the current message recipients content, or hide that section entirely (as per another issue)
- Ensure the narrow title is properly updated (eg. starred, etc.)
In addition:
- Unlike the web app, we expect the focus to move somewhere after a new narrow is requested, so a placeholder in the message list may be the easiest short-term solution to use.
This was worked on historically in #278 as a fix for #259, where a 'fake message' was used as a placeholder. However, as demonstrated by the more complex logic we now support for searching/filtering the side panels, it should be reasonable to support a custom element for 'no results found' to be shown instead.
Even so, that solution would need to support various cases where messages 'arrive' in that empty narrow, and the placeholder is replaced by them.
-
Alternatively, focus could be retained in the previous location, if the resulting narrow is found to be empty. This would be convenient for message searches, where an empty set of results might be reasonably expected by a user to leave the focus in the search box to adjust the search.
-
Some combination of (1) and (2), since
- a placeholder shows that the narrow is empty (no messages)
- a placeholder can be focused, allowing easy movement horizontally across the app (left/right), such as from left panel to right panel.
Notes
- I'm closing many of the linked issues, since they are essentially duplicates, ie. examples of the symptoms from the underlying problem.
- This could unblock other features, such as #1049
Adding a few more related aspects.
-
Currently, it doesn't seem to be possible to open ZT with new bots (bots without any prior messages).
Error message:IndexError: Can't set focus, ListBox is empty
This must be because they have no messages and all their narrows are empty (A user would get a message from Welcome Bot and may be subscribed to some channels by default, a bot would not be). -
I've noticed that the recipient bar shows "DONT HIDE" when ZT launches, for some users and bots (mostly just new accounts?), but not in every case.
Edit: The bot issue is filed as #895.