-
-
Notifications
You must be signed in to change notification settings - Fork 173
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
fix: message list being empty on chat double click #4647
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6998067
to
27faa8b
Compare
nicodh
approved these changes
Feb 18, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed by testing & Reading & (mostly) understanding
;-)
...and logging. And handle a very rare edge case where we'd want to jump to a message that got deleted recently.
To reproduce, simply double click on a chat in the chat list really fast. Or: ```javascript item = document.querySelector( '.chat-list-item:not(.archive-link-item):not(.selected)' ); chatListItem.click(); // Let React re-render, then click again. setTimeout(() => chatListItem.click()); ``` The problem is, in `selectChat` we have code that is supposed to jump to the last message when the currently selected chat gets clicked again. However, if the chat has not loaded yet, and thus a new instance of `MessageListStore` has not been created yet, and thus its `loadChat()` has not been called yet, then, when `loadChat()` does get called eventually, it will see that `__internal_jump_to_message_asap` is set, and so it will call `__jumpToMessage`, with `msgId: undefined`. But, it turns out, `__jumpToMessage` cannot handle this case. It would try to look up the last message in `this.state.messageListItems`, but it is empty (see the `items.length <= 0` line), so `__jumpToMessage()` would simply return and do nothing, resulting in an empty chat. But `messageListItems` is empty not because there are really no messages in the chat, but because `MessageListStore` has not loaded anything yet, because, as you remember, `loadChat()` delegated its responsibility to `__jumpToMessage()`. This commit ensures that `__jumpToMessage()` handles the case where `MessageListStore` has not loaded anything yet, and where `msgId === undefined`. It appears that the reproduction steps above is the only way this bug can occur, because it's pretty much the only way to have `msgId: undefined` (except for the "jump down" button). So this commit probably doesn't fix any other current bugs. The issue that this commit fixes was likely introduced in #4562 (637497c).
dfcfda6
to
859b268
Compare
There is another bug that this MR fixes:
The messages list will be empty. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
jumpToMessage
The important commit is the last one. Reviewing commit-by-commit should be easier for full understanding.
To reproduce, simply double click on a chat in the chat list
really fast.
Or:
2025-02-15-PC6uVIAd2n.mp4
The problem is, in
selectChat
we have code that is supposed tojump to the last message when the currently selected chat
gets clicked again.
However, if the chat has not loaded yet, and thus a new instance
of
MessageListStore
has not been created yet, and thus itsloadChat()
has not been called yet,then, when
loadChat()
does get called eventually,it will see that
__internal_jump_to_message_asap
is set,and so it will call
__jumpToMessage
, withmsgId: undefined
.But, it turns out,
__jumpToMessage
cannot handle this case.It would try to look up the last message in
this.state.messageListItems
, but it is empty(see the
items.length <= 0
line), so__jumpToMessage()
would simply return and do nothing, resulting in an empty chat.
But
messageListItems
is empty not becausethere are really no messages in the chat,
but because
MessageListStore
has not loaded anything yet,because, as you remember,
loadChat()
delegated its responsibilityto
__jumpToMessage()
.This commit ensures that
__jumpToMessage()
handles the case whereMessageListStore
has not loaded anything yet,and where
msgId === undefined
.It appears that the reproduction steps above is the only way
this bug can occur, because it's pretty much the only way
to have
msgId: undefined
(except for the "jump down" button).So this commit probably doesn't fix any other current bugs.
The issue that this commit fixes was likely introduced in
#4562
(637497c).