mirror of
https://github.com/discourse/discourse.git
synced 2025-06-06 13:06:56 +08:00
FIX: correctly syncs current user message in multiple sessions (#20584)
This commit is contained in:
@ -517,7 +517,8 @@ export default class ChatLivePane extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handleMessage(data) {
|
@bind
|
||||||
|
onMessage(data) {
|
||||||
switch (data.type) {
|
switch (data.type) {
|
||||||
case "sent":
|
case "sent":
|
||||||
this.handleSentMessage(data);
|
this.handleSentMessage(data);
|
||||||
@ -555,9 +556,7 @@ export default class ChatLivePane extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_handleOwnSentMessage(data) {
|
_handleStagedMessage(stagedMessage, data) {
|
||||||
const stagedMessage = this.args.channel.findStagedMessage(data.staged_id);
|
|
||||||
if (stagedMessage) {
|
|
||||||
stagedMessage.error = null;
|
stagedMessage.error = null;
|
||||||
stagedMessage.id = data.chat_message.id;
|
stagedMessage.id = data.chat_message.id;
|
||||||
stagedMessage.staged = false;
|
stagedMessage.staged = false;
|
||||||
@ -579,7 +578,6 @@ export default class ChatLivePane extends Component {
|
|||||||
stagedMessage.cooked = data.chat_message.cooked;
|
stagedMessage.cooked = data.chat_message.cooked;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
handleSentMessage(data) {
|
handleSentMessage(data) {
|
||||||
if (this.args.channel.isFollowing) {
|
if (this.args.channel.isFollowing) {
|
||||||
@ -587,7 +585,10 @@ export default class ChatLivePane extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (data.chat_message.user.id === this.currentUser.id && data.staged_id) {
|
if (data.chat_message.user.id === this.currentUser.id && data.staged_id) {
|
||||||
return this._handleOwnSentMessage(data);
|
const stagedMessage = this.args.channel.findStagedMessage(data.staged_id);
|
||||||
|
if (stagedMessage) {
|
||||||
|
return this._handleStagedMessage(stagedMessage, data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.args.channel.canLoadMoreFuture) {
|
if (this.args.channel.canLoadMoreFuture) {
|
||||||
@ -1138,13 +1139,6 @@ export default class ChatLivePane extends Component {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@bind
|
|
||||||
onMessage(busData) {
|
|
||||||
if (!this.args.channel.canLoadMoreFuture || busData.type !== "sent") {
|
|
||||||
this.handleMessage(busData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@bind
|
@bind
|
||||||
_forceBodyScroll() {
|
_forceBodyScroll() {
|
||||||
// when keyboard is visible this will ensure body
|
// when keyboard is visible this will ensure body
|
||||||
|
@ -33,6 +33,24 @@ RSpec.describe "Chat channel", type: :system, js: true do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with two sessions opened on same channel" do
|
||||||
|
it "syncs the messages" do
|
||||||
|
using_session(:tab_1) do
|
||||||
|
sign_in(current_user)
|
||||||
|
chat.visit_channel(channel_1)
|
||||||
|
end
|
||||||
|
|
||||||
|
using_session(:tab_2) do
|
||||||
|
sign_in(current_user)
|
||||||
|
chat.visit_channel(channel_1)
|
||||||
|
end
|
||||||
|
|
||||||
|
using_session(:tab_1) { channel.send_message("test_message") }
|
||||||
|
|
||||||
|
using_session(:tab_2) { expect(channel).to have_message(text: "test_message") }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "allows to edit this message once persisted" do
|
it "allows to edit this message once persisted" do
|
||||||
chat.visit_channel(channel_1)
|
chat.visit_channel(channel_1)
|
||||||
channel.send_message("aaaaaaaaaaaaaaaaaaaa")
|
channel.send_message("aaaaaaaaaaaaaaaaaaaa")
|
||||||
|
Reference in New Issue
Block a user