This PR is introducing glimmer usage in the chat-live-pane, for components but also for models. RestModel usage has been dropped in favor of native classes. Other changes/additions in this PR: - sticky dates, scrolling will now keep the date separator of the current section at the top of the screen - better unread management, marking a channel as unread will correctly mark the correct message and not mark the whole channel as read. Tracking state will also now correctly return unread count and unread mentions. - adds an animation on bottom arrow - better scrolling behavior, we should now always correctly keep the scroll position while loading more - reactions are now more reactive, and will update their tooltip without needed to close/reopen it - skeleton has been improved with placeholder images and reactions - when making a reaction on the desktop message actions, the menu won't move anymore - simplify logic and stop maintaining a list of unloaded messages
63 lines
1.2 KiB
JavaScript
63 lines
1.2 KiB
JavaScript
import { tracked } from "@glimmer/tracking";
|
|
|
|
export default class ChatMessageDraft {
|
|
static create(args = {}) {
|
|
return new ChatMessageDraft(args ?? {});
|
|
}
|
|
|
|
@tracked uploads;
|
|
@tracked message;
|
|
@tracked _replyToMsg;
|
|
|
|
constructor(args = {}) {
|
|
this.message = args.message ?? "";
|
|
this.uploads = args.uploads ?? [];
|
|
this.replyToMsg = args.replyToMsg;
|
|
}
|
|
|
|
get replyToMsg() {
|
|
return this._replyToMsg;
|
|
}
|
|
|
|
set replyToMsg(message) {
|
|
this._replyToMsg = message
|
|
? {
|
|
id: message.id,
|
|
excerpt: message.excerpt,
|
|
user: {
|
|
id: message.user.id,
|
|
name: message.user.name,
|
|
avatar_template: message.user.avatar_template,
|
|
username: message.user.username,
|
|
},
|
|
}
|
|
: null;
|
|
}
|
|
|
|
toJSON() {
|
|
if (
|
|
this.message?.length === 0 &&
|
|
this.uploads?.length === 0 &&
|
|
!this.replyToMsg
|
|
) {
|
|
return null;
|
|
}
|
|
|
|
const data = {};
|
|
|
|
if (this.uploads?.length > 0) {
|
|
data.uploads = this.uploads;
|
|
}
|
|
|
|
if (this.message?.length > 0) {
|
|
data.message = this.message;
|
|
}
|
|
|
|
if (this.replyToMsg) {
|
|
data.replyToMsg = this.replyToMsg;
|
|
}
|
|
|
|
return JSON.stringify(data);
|
|
}
|
|
}
|