mirror of
https://github.com/discourse/discourse.git
synced 2025-04-17 09:09:05 +08:00
add threading unread state to chat launcher
This commit is contained in:
parent
493ec8f177
commit
5aa7170866
@ -6,6 +6,10 @@ import ChannelTitle from "discourse/plugins/chat/discourse/components/channel-ti
|
||||
export default class Channel extends Component {
|
||||
@service currentUser;
|
||||
|
||||
get tracking() {
|
||||
return this.args.item.tracking;
|
||||
}
|
||||
|
||||
get isUrgent() {
|
||||
return this.args.item.model.isDirectMessageChannel
|
||||
? this.hasUnreads || this.hasUrgent
|
||||
@ -13,18 +17,22 @@ export default class Channel extends Component {
|
||||
}
|
||||
|
||||
get hasUnreads() {
|
||||
return this.args.item.tracking.unreadCount > 0;
|
||||
return this.tracking?.unreadCount > 0;
|
||||
}
|
||||
|
||||
get hasUrgent() {
|
||||
return (
|
||||
this.args.item.tracking.mentionCount > 0 ||
|
||||
this.args.item.tracking.watchedThreadsUnreadCount > 0
|
||||
this.tracking?.mentionCount > 0 ||
|
||||
this.tracking?.watchedThreadsUnreadCount > 0
|
||||
);
|
||||
}
|
||||
|
||||
get hasUnreadThreads() {
|
||||
return this.args.item.unread_thread_count > 0;
|
||||
}
|
||||
|
||||
get showIndicator() {
|
||||
return this.hasUnreads || this.isUrgent;
|
||||
return this.hasUnreads || this.hasUnreadThreads || this.hasUrgent;
|
||||
}
|
||||
|
||||
<template>
|
||||
|
@ -59,7 +59,14 @@ export default class ChatablesLoader {
|
||||
]
|
||||
.map((item) => {
|
||||
const chatable = ChatChatable.create(item);
|
||||
chatable.tracking = this.#injectTracking(chatable);
|
||||
const channel = this.#findChannel(chatable);
|
||||
|
||||
if (channel) {
|
||||
chatable.tracking = channel.tracking;
|
||||
chatable.unread_thread_count =
|
||||
channel.unreadThreadsCountSinceLastViewed;
|
||||
}
|
||||
|
||||
return chatable;
|
||||
})
|
||||
.slice(0, MAX_RESULTS);
|
||||
@ -74,26 +81,32 @@ export default class ChatablesLoader {
|
||||
let chatable;
|
||||
if (channel.chatable?.users?.length === 1) {
|
||||
chatable = ChatChatable.createUser(channel.chatable.users[0]);
|
||||
chatable.unread_thread_count =
|
||||
channel.threadsManager.unreadThreadCount;
|
||||
} else {
|
||||
chatable = ChatChatable.createChannel(channel);
|
||||
}
|
||||
|
||||
chatable.tracking = channel.tracking;
|
||||
chatable.unread_thread_count =
|
||||
channel.unreadThreadsCountSinceLastViewed;
|
||||
return chatable;
|
||||
})
|
||||
.filter(Boolean)
|
||||
.slice(0, MAX_RESULTS);
|
||||
}
|
||||
|
||||
#injectTracking(chatable) {
|
||||
if (!chatable.type === "channel") {
|
||||
#findChannel(chatable) {
|
||||
if (!["user", "channel"].includes(chatable.type)) {
|
||||
return;
|
||||
}
|
||||
|
||||
return this.chatChannelsManager.allChannels.find(
|
||||
(channel) => channel.id === chatable.model.id
|
||||
)?.tracking;
|
||||
const { allChannels } = this.chatChannelsManager;
|
||||
if (chatable.type === "user") {
|
||||
return allChannels.find(
|
||||
({ chatable: { users } }) =>
|
||||
users?.length === 1 && users[0].id === chatable.model.id
|
||||
);
|
||||
} else if (chatable.type === "channel") {
|
||||
return allChannels.find(({ id }) => id === chatable.model.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -28,10 +28,9 @@ export default class ChatableUser extends Component {
|
||||
|
||||
get isUrgent() {
|
||||
return (
|
||||
this.args.item.tracking.unreadCount +
|
||||
this.args.item.tracking.mentionCount +
|
||||
this.args.item.tracking.watchedThreadsUnreadCount >
|
||||
0
|
||||
this.args.item.tracking?.unreadCount > 0 ||
|
||||
this.args.item.tracking?.mentionCount > 0 ||
|
||||
this.args.item.tracking?.watchedThreadsUnreadCount > 0
|
||||
);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user