From 4a9f549dd2ca410a36a8ec9072211f1bb25815cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Mon, 1 Apr 2024 08:26:30 +0900 Subject: [PATCH] =?UTF-8?q?Fix:=20#660=20=E7=B5=B5=E6=96=87=E5=AD=97?= =?UTF-8?q?=E3=83=AA=E3=82=A2=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=AE?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=83=AA=E3=83=BC=E3=83=9F=E3=83=B3=E3=82=B0?= =?UTF-8?q?=E3=82=92=E5=8F=97=E4=BF=A1=E3=81=97=E3=81=9F=E6=99=82=E7=82=B9?= =?UTF-8?q?=E3=81=A7=E6=8A=95=E7=A8=BF=E3=81=AE=E3=82=AB=E3=82=A6=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=81=8C=E6=9B=B4=E6=96=B0=E3=81=95=E3=82=8C=E3=81=AA?= =?UTF-8?q?=E3=81=84=20(#683)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mastodon/actions/notifications.js | 3 +-- app/javascript/mastodon/actions/streaming.js | 2 +- app/javascript/mastodon/reducers/statuses.js | 20 ++++++++++++------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 715b20700f..c8b1178d77 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -94,12 +94,11 @@ export const loadPending = () => ({ type: NOTIFICATIONS_LOAD_PENDING, }); -export function updateEmojiReactions(emoji_reaction, accountId) { +export function updateEmojiReactions(emoji_reaction) { return (dispatch) => dispatch({ type: STATUS_EMOJI_REACTION_UPDATE, emoji_reaction, - accountId, }); } diff --git a/app/javascript/mastodon/actions/streaming.js b/app/javascript/mastodon/actions/streaming.js index d430ae7acf..6517e5ad20 100644 --- a/app/javascript/mastodon/actions/streaming.js +++ b/app/javascript/mastodon/actions/streaming.js @@ -105,7 +105,7 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti break; case 'emoji_reaction': // @ts-expect-error - dispatch(updateEmojiReactions(JSON.parse(data.payload), getState().getIn(['meta', 'me']))); + dispatch(updateEmojiReactions(JSON.parse(data.payload))); break; case 'conversation': // @ts-expect-error diff --git a/app/javascript/mastodon/reducers/statuses.js b/app/javascript/mastodon/reducers/statuses.js index e589f246bf..1eeea77192 100644 --- a/app/javascript/mastodon/reducers/statuses.js +++ b/app/javascript/mastodon/reducers/statuses.js @@ -1,5 +1,7 @@ import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; +import { me } from 'mastodon/initial_state'; + import { BOOKMARK_CATEGORY_EDITOR_ADD_REQUEST, BOOKMARK_CATEGORY_EDITOR_ADD_FAIL, @@ -47,8 +49,8 @@ const deleteStatus = (state, id, references) => { return state.delete(id); }; -const updateStatusEmojiReaction = (state, emoji_reaction, myId) => { - emoji_reaction.me = emoji_reaction.account_ids ? emoji_reaction.account_ids.indexOf(myId) >= 0 : false; +const updateStatusEmojiReaction = (state, emoji_reaction) => { + emoji_reaction.me = emoji_reaction.account_ids ? emoji_reaction.account_ids.indexOf(me) >= 0 : false; const status = state.get(emoji_reaction.status_id); if (!status) return state; @@ -56,18 +58,22 @@ const updateStatusEmojiReaction = (state, emoji_reaction, myId) => { let emoji_reactions = Array.from(status.get('emoji_reactions') || []); if (emoji_reaction.count > 0) { - const old_emoji = emoji_reactions.find((er) => er.get('name') === emoji_reaction.name && (!er.get('domain') || er.get('domain') === emoji_reaction.domain)); + const old_emoji = emoji_reactions.find((er) => er.get('name') === emoji_reaction.name); if (old_emoji) { const index = emoji_reactions.indexOf(old_emoji); - emoji_reactions[index] = old_emoji.merge({ account_ids: emoji_reaction.account_ids, count: emoji_reaction.count, me: emoji_reaction.me }); + emoji_reactions[index] = old_emoji.merge({ account_ids: ImmutableList(emoji_reaction.account_ids), count: emoji_reaction.count, me: emoji_reaction.me }); } else { emoji_reactions.push(ImmutableMap(emoji_reaction)); } } else { - emoji_reactions = emoji_reactions.filter((er) => er.get('name') !== emoji_reaction.name || er.get('domain') !== emoji_reaction.domain); + emoji_reactions = emoji_reactions.filter((er) => er.get('name') !== emoji_reaction.name); } - return state.setIn([emoji_reaction.status_id, 'emoji_reactions'], ImmutableList(emoji_reactions)); + const emoji_reactions_count = emoji_reactions.reduce((prev, current) => prev + current.get('account_ids').count(), 0); + + return state + .setIn([emoji_reaction.status_id, 'emoji_reactions'], ImmutableList(emoji_reactions)) + .setIn([emoji_reaction.status_id, 'emoji_reactions_count'], emoji_reactions_count); }; const statusTranslateSuccess = (state, id, translation) => { @@ -160,7 +166,7 @@ export default function statuses(state = initialState, action) { case STATUS_TRANSLATE_UNDO: return statusTranslateUndo(state, action.id); case STATUS_EMOJI_REACTION_UPDATE: - return updateStatusEmojiReaction(state, action.emoji_reaction, action.accountId); + return updateStatusEmojiReaction(state, action.emoji_reaction); default: return state; }