From aef7c39809ae4c7f41063315b70c97d3f32e0d2e Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Thu, 27 Mar 2025 19:03:24 +0100 Subject: [PATCH] Chat: Fix read chat action (#5774) Co-authored-by: zubiden <19638254+zubiden@users.noreply.github.com> --- src/components/left/main/ChatBadge.scss | 4 ++++ src/global/actions/api/chats.ts | 16 +++++++++++++++- src/global/types/actions.ts | 1 + src/hooks/useChatContextActions.ts | 4 ++-- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/components/left/main/ChatBadge.scss b/src/components/left/main/ChatBadge.scss index 3cf97e57c..707670720 100644 --- a/src/components/left/main/ChatBadge.scss +++ b/src/components/left/main/ChatBadge.scss @@ -14,6 +14,10 @@ &.closing { transition: transform 0.2s ease-out, opacity 0.2s ease-out; } + + body.is-macos & { + height: 1.375rem; + } } .ChatBadge-wrapper { diff --git a/src/global/actions/api/chats.ts b/src/global/actions/api/chats.ts index 018ea1e68..b1ff8db35 100644 --- a/src/global/actions/api/chats.ts +++ b/src/global/actions/api/chats.ts @@ -1178,7 +1178,7 @@ addActionHandler('markChatUnread', (global, actions, payload): ActionReturnType }); }); -addActionHandler('markChatRead', async (global, actions, payload): Promise => { +addActionHandler('markChatMessagesRead', async (global, actions, payload): Promise => { const { id } = payload; const chat = selectChat(global, id); if (!chat) return; @@ -1186,6 +1186,9 @@ addActionHandler('markChatRead', async (global, actions, payload): Promise await callApi('markMessageListRead', { chat, threadId: MAIN_THREAD_ID }); actions.readAllMentions({ chatId: id }); actions.readAllReactions({ chatId: id }); + if (chat.hasUnreadMark) { + actions.markChatRead({ id }); + } return; } @@ -1213,6 +1216,17 @@ addActionHandler('markChatRead', async (global, actions, payload): Promise } }); +addActionHandler('markChatRead', (global, actions, payload): ActionReturnType => { + const { id } = payload; + const chat = selectChat(global, id); + if (!chat) return; + + callApi('toggleDialogUnread', { + chat, + hasUnreadMark: !chat.hasUnreadMark, + }); +}); + addActionHandler('markTopicRead', (global, actions, payload): ActionReturnType => { const { chatId, topicId } = payload; const chat = selectChat(global, chatId); diff --git a/src/global/types/actions.ts b/src/global/types/actions.ts index 9a6041d3b..0305f5509 100644 --- a/src/global/types/actions.ts +++ b/src/global/types/actions.ts @@ -368,6 +368,7 @@ export interface ActionPayloads { }; markChatUnread: { id: string }; markChatRead: { id: string }; + markChatMessagesRead: { id: string }; loadChatFolders: undefined; loadRecommendedChatFolders: undefined; editChatFolder: { diff --git a/src/hooks/useChatContextActions.ts b/src/hooks/useChatContextActions.ts index fdffd6386..6e1000bdc 100644 --- a/src/hooks/useChatContextActions.ts +++ b/src/hooks/useChatContextActions.ts @@ -79,7 +79,7 @@ const useChatContextActions = ({ toggleSavedDialogPinned, updateChatMutedState, toggleChatArchived, - markChatRead, + markChatMessagesRead, markChatUnread, openChatInNewTab, } = getActions(); @@ -150,7 +150,7 @@ const useChatContextActions = ({ } const actionMaskAsRead = (chat.unreadCount || chat.hasUnreadMark) - ? { title: lang('MarkAsRead'), icon: 'readchats', handler: () => markChatRead({ id: chat.id }) } + ? { title: lang('MarkAsRead'), icon: 'readchats', handler: () => markChatMessagesRead({ id: chat.id }) } : undefined; const actionMarkAsUnread = !(chat.unreadCount || chat.hasUnreadMark) && !chat.isForum ? { title: lang('MarkAsUnread'), icon: 'unread', handler: () => markChatUnread({ id: chat.id }) }