Files
Jarek RadoszandGitHub 5d8ddf8f4b DEV: Clean up imports (#28060)
* `@ember/owner` instead of `@ember/application`
* `discourse-i18n` instead of `I18n`
* `{ service } from "@ember/service"` instead of `inject as service`
2024-07-25 15:09:06 +02:00

75 lines
1.6 KiB
JavaScript

import { cached, tracked } from "@glimmer/tracking";
import { setOwner } from "@ember/owner";
export default class ChatMessagesManager {
@tracked messages = [];
constructor(owner) {
setOwner(this, owner);
}
@cached
get stagedMessages() {
return this.messages.filterBy("staged");
}
@cached
get selectedMessages() {
return this.messages.filterBy("selected");
}
clearSelectedMessages() {
this.selectedMessages.forEach((message) => (message.selected = false));
}
clear() {
this.messages = [];
}
addMessages(messages = []) {
this.messages = this.messages
.concat(messages)
.uniqBy("id")
.sort((a, b) => a.createdAt - b.createdAt);
}
findMessage(messageId) {
return this.messages.find(
(message) => message.id === parseInt(messageId, 10)
);
}
findFirstMessageOfDay(a) {
return this.messages.find(
(b) =>
a.getFullYear() === b.createdAt.getFullYear() &&
a.getMonth() === b.createdAt.getMonth() &&
a.getDate() === b.createdAt.getDate()
);
}
removeMessage(message) {
return this.messages.removeObject(message);
}
findStagedMessage(stagedMessageId) {
return this.stagedMessages.find(
(message) => message.id === stagedMessageId
);
}
findIndexOfMessage(id) {
return this.messages.findIndex((m) => m.id === id);
}
findLastMessage() {
return this.messages.findLast((message) => !message.deletedAt);
}
findLastUserMessage(user) {
return this.messages.findLast(
(message) => message.user.id === user.id && !message.deletedAt
);
}
}