stream-chat-react icon indicating copy to clipboard operation
stream-chat-react copied to clipboard

bug: User mention search does not function properly when typing quickly

Open nireld opened this issue 1 year ago • 7 comments

Describe the bug

User mention search does not function properly when typing quickly in the message input field.

To Reproduce

Set up the chat client with the following configuration:

<Chat client={client}>
    <Channel channel={channel} Attachment={CustomAttachment}>
        <Window>
            <ChannelHeader />
            <MessageList />
            <MessageInput 
                mentionAllAppUsers={true} 
                doImageUploadRequest={uploadFile} 
                doFileUploadRequest={uploadFile} 
            />
        </Window>
        <Thread />
    </Channel>
</Chat>

Note the use of mentionAllAppUsers={true} in the MessageInput component.

Ensure there are at least 10 users in the GetStream database.

Start mentioning a user by typing '@' followed by the user's name quickly.

Expected Behavior

The mention suggestions should update in real-time as each character is typed, displaying relevant user matches.

Observed Behavior

If the server returns the result after an additional character is typed in the textbox, the result is ignored. This leads to inconsistent or missing mention suggestions.

The specific ignoring line - https://github.com/GetStream/stream-chat-react/blob/bffcf77469629846a93590e2619917ac698ce24c/src/components/AutoCompleteTextarea/Textarea.jsx#L359C10-L359C11

The issue is related to the debounce mechanism in the queryUsers function. When typing quickly, the debounce causes incomplete text queries to be sent, leading to ignored results.

Attaching video

https://github.com/GetStream/stream-chat-react/assets/139216497/1a5b416f-28da-4600-bdad-d6e3e1c95894

nireld avatar May 28 '24 06:05 nireld

The reason, why the last typed characters are actually not used to query a new result is that the SDK is waiting, until the previous query finishes. The logic is embedded inside the query function that is throttled on top of that. The problem here, is that the throttle mechanism does not work, because the function is recreated on each new change event. So it seems that the purpose of waiting for the request to finish was to actually protect from the error of too many requests, that would otherwise be returned by the back-end.

MartinCupela avatar May 30 '24 12:05 MartinCupela

This issue is a symptom of a wider problem. The MessageInput component will need a refactor so that it is not re-rendered multiple times on every key stroke.

MartinCupela avatar May 30 '24 14:05 MartinCupela

Well, any workaround for now?

nireld avatar May 30 '24 15:05 nireld

Hey @nireld. Unfortunately we do not have workaround for this at the moment. This is an architectural problem of a monolith component that unnecessarily re-renders. We will discuss the issue with our product team to see, whether we can advance the solution.

MartinCupela avatar Jun 03 '24 11:06 MartinCupela

Hey @MartinCupela , we're facing the same issue on a larger scale, particularly with user search, which is very critical for us. It's causing a lot of friction as our users are reporting bugs related to this problem. Given that we rely on a chat partner like GetStream to minimize in-house development, this is a major blocker. I've also created a support ticket but haven't received any updates yet. Appreciate your feedback and any progress on this! (request #54638)

LoyerAmandine avatar Sep 06 '24 08:09 LoyerAmandine

Hey @LoyerAmandine , your request seems related to another component. We have replied to your request.

MartinCupela avatar Sep 09 '24 12:09 MartinCupela

Have there been any updates or workarounds since this was last discussed? We've been running into an issue where the suggestion list sometimes reopens after @ mentioning a user with just a first name, and this seems to be the cause.

espige avatar Sep 26 '25 18:09 espige