From 42aa17b39ead3c6586edcf84c85a129d994254b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Tue, 20 Aug 2024 12:54:41 +0200 Subject: [PATCH] Handle reblogs counts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- src/actions/interactions.ts | 9 +++++---- src/reducers/statuses.ts | 8 ++++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/actions/interactions.ts b/src/actions/interactions.ts index 80ff50286..2e8a6be11 100644 --- a/src/actions/interactions.ts +++ b/src/actions/interactions.ts @@ -110,8 +110,8 @@ const unreblog = (status: Pick) => dispatch(unreblogRequest(status.id)); - return getClient(getState()).statuses.unreblogStatus(status.id).then(() => { - dispatch(unreblogSuccess(status.id)); + return getClient(getState()).statuses.unreblogStatus(status.id).then((status) => { + dispatch(unreblogSuccess(status)); }).catch(error => { dispatch(unreblogFail(status.id, error)); }); @@ -148,9 +148,10 @@ const unreblogRequest = (statusId: string) => ({ statusId, }); -const unreblogSuccess = (statusId: string) => ({ +const unreblogSuccess = (status: Status) => ({ type: UNREBLOG_SUCCESS, - statusId, + status, + statusId: status.id, }); const unreblogFail = (statusId: string, error: unknown) => ({ diff --git a/src/reducers/statuses.ts b/src/reducers/statuses.ts index 7b2923e04..d5a32e9ec 100644 --- a/src/reducers/statuses.ts +++ b/src/reducers/statuses.ts @@ -217,11 +217,15 @@ const statuses = (state = initialState, action: AnyAction): State => { case DISLIKE_FAIL: return state.get(action.statusId) === undefined ? state : state.setIn([action.statusId, 'disliked'], false); case REBLOG_REQUEST: - return state.setIn([action.statusId, 'reblogged'], true); + return state + .updateIn([action.statusId, 'reblogs_count'], 0, (count) => typeof count === 'number' ? count + 1 : 1) + .setIn([action.statusId, 'reblogged'], true); case REBLOG_FAIL: return state.get(action.statusId) === undefined ? state : state.setIn([action.statusId, 'reblogged'], false); case UNREBLOG_REQUEST: - return state.setIn([action.statusId, 'reblogged'], false); + return state + .updateIn([action.statusId, 'reblogs_count'], 0, (count) => typeof count === 'number' ? Math.max(0, count - 1) : 0) + .setIn([action.statusId, 'reblogged'], false); case UNREBLOG_FAIL: return state.get(action.statusId) === undefined ? state : state.setIn([action.statusId, 'reblogged'], true); case STATUS_MUTE_SUCCESS: