fix(web): reconcile unread mention counters in realtime
All checks were successful
CI / test (push) Successful in 20s
All checks were successful
CI / test (push) Successful in 20s
This commit is contained in:
@@ -73,7 +73,7 @@ interface ChatState {
|
||||
removeMessage: (chatId: number, messageId: number) => void;
|
||||
restoreMessages: (chatId: number, messages: Message[]) => void;
|
||||
clearChatMessages: (chatId: number) => void;
|
||||
incrementUnread: (chatId: number) => void;
|
||||
incrementUnread: (chatId: number, hasMention?: boolean) => void;
|
||||
clearUnread: (chatId: number) => void;
|
||||
setTypingUsers: (chatId: number, userIds: number[]) => void;
|
||||
setReplyToMessage: (chatId: number, message: Message | null) => void;
|
||||
@@ -123,7 +123,9 @@ export const useChatStore = create<ChatState>((set, get) => ({
|
||||
...state.loadingMoreByChat,
|
||||
[chatId]: false
|
||||
},
|
||||
chats: state.chats.map((chat) => (chat.id === chatId ? { ...chat, unread_count: 0 } : chat))
|
||||
chats: state.chats.map((chat) =>
|
||||
chat.id === chatId ? { ...chat, unread_count: 0, unread_mentions_count: 0 } : chat
|
||||
)
|
||||
}));
|
||||
const lastMessage = sorted[sorted.length - 1];
|
||||
if (lastMessage) {
|
||||
@@ -315,17 +317,29 @@ export const useChatStore = create<ChatState>((set, get) => ({
|
||||
...state.unreadBoundaryByChat,
|
||||
[chatId]: 0
|
||||
},
|
||||
chats: state.chats.map((chat) => (chat.id === chatId ? { ...chat, unread_count: 0 } : chat))
|
||||
chats: state.chats.map((chat) =>
|
||||
chat.id === chatId ? { ...chat, unread_count: 0, unread_mentions_count: 0 } : chat
|
||||
)
|
||||
})),
|
||||
incrementUnread: (chatId) =>
|
||||
incrementUnread: (chatId, hasMention = false) =>
|
||||
set((state) => ({
|
||||
chats: state.chats.map((chat) =>
|
||||
chat.id === chatId ? { ...chat, unread_count: (chat.unread_count ?? 0) + 1 } : chat
|
||||
chat.id === chatId
|
||||
? {
|
||||
...chat,
|
||||
unread_count: (chat.unread_count ?? 0) + 1,
|
||||
unread_mentions_count: hasMention
|
||||
? (chat.unread_mentions_count ?? 0) + 1
|
||||
: (chat.unread_mentions_count ?? 0)
|
||||
}
|
||||
: chat
|
||||
)
|
||||
})),
|
||||
clearUnread: (chatId) =>
|
||||
set((state) => ({
|
||||
chats: state.chats.map((chat) => (chat.id === chatId ? { ...chat, unread_count: 0 } : chat)),
|
||||
chats: state.chats.map((chat) =>
|
||||
chat.id === chatId ? { ...chat, unread_count: 0, unread_mentions_count: 0 } : chat
|
||||
),
|
||||
unreadBoundaryByChat: {
|
||||
...state.unreadBoundaryByChat,
|
||||
[chatId]: 0
|
||||
|
||||
Reference in New Issue
Block a user