FIX: ensures chat channel metadata date is updated (#19314)

This commit is contained in:
Joffrey JAFFEUX 2022-12-05 14:47:01 +01:00 committed by GitHub
parent 3c6bd97efe
commit 105f38c04a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44 additions and 19 deletions

View File

@ -1,16 +1,18 @@
import Component from "@glimmer/component";
export default class ChatChannelMetadata extends Component {
unreadIndicator = false;
get lastMessageFormatedDate() {
return moment(this.args.channel.last_message_sent_at).calendar(null, {
sameDay: "LT",
nextDay: "[Tomorrow]",
nextWeek: "dddd",
lastDay: "[Yesterday]",
lastWeek: "dddd",
sameElse: "l",
});
return moment(this.args.channel.get("last_message_sent_at")).calendar(
null,
{
sameDay: "LT",
nextDay: "[Tomorrow]",
nextWeek: "dddd",
lastDay: "[Yesterday]",
lastWeek: "dddd",
sameElse: "l",
}
);
}
}

View File

@ -748,16 +748,11 @@ export default class Chat extends Service {
}
}
this.userChatChannelTrackingStateChanged();
channel.set("last_message_sent_at", new Date());
// Update last_message_sent_at timestamp for channel if direct message
const dmChatChannel = (this.directMessageChannels || []).findBy(
"id",
parseInt(channel.id, 10)
);
if (dmChatChannel) {
dmChatChannel.set("last_message_sent_at", new Date());
this.reSortDirectMessageChannels();
}
(this.directMessageChannels || [])
.findBy("id", parseInt(channel.id, 10))
?.reSortDirectMessageChannels?.();
},
channel.message_bus_last_ids.new_messages
);

View File

@ -9,12 +9,18 @@ module("Discourse Chat | Component | chat-channel-metadata", function (hooks) {
setupRenderingTest(hooks);
test("displays last message sent at", async function (assert) {
const lastMessageSentAt = moment();
let lastMessageSentAt = moment().subtract(1, "day");
this.channel = fabricators.directMessageChatChannel({
last_message_sent_at: lastMessageSentAt,
});
await render(hbs`<ChatChannelMetadata @channel={{this.channel}} />`);
assert.dom(".chat-channel-metadata__date").hasText("Yesterday");
lastMessageSentAt = moment();
this.channel.set("last_message_sent_at", lastMessageSentAt);
await render(hbs`<ChatChannelMetadata @channel={{this.channel}} />`);
assert
.dom(".chat-channel-metadata__date")
.hasText(lastMessageSentAt.format("LT"));

View File

@ -134,6 +134,28 @@ acceptance("Discourse Chat | Unit | Service | chat", function (needs) {
);
});
test("new message", async function (assert) {
setupMockPresenceChannel(this.chatService);
await this.chatService.forceRefreshChannels();
await publishToMessageBus("/chat/1/new-messages", {
user_id: this.currentUser.id,
username: this.currentUser.username,
message_id: 124,
});
assert.equal(
this.currentUser.chat_channel_tracking_state[1].chat_message_id,
124,
"updates tracking state last message id to the message id sent by current user"
);
assert.equal(
this.currentUser.chat_channel_tracking_state[1].unread_count,
2,
"does not increment unread count"
);
});
test("/chat/:channelId/new-messages - message from current user", async function (assert) {
setupMockPresenceChannel(this.chatService);
await this.chatService.forceRefreshChannels();