From 792ca08d036aacbd3fd9f3ea2b1795672ce31a02 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 21 May 2020 23:52:10 -0500 Subject: [PATCH] Implement getReactForStatus(), start oneEmojiPerAccount() --- .../utils/__tests__/emoji_reacts-test.js | 12 +++++------ app/gabsocial/utils/emoji_reacts.js | 21 ++++++++++++++++--- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/app/gabsocial/utils/__tests__/emoji_reacts-test.js b/app/gabsocial/utils/__tests__/emoji_reacts-test.js index aad46335c..4e3cdd6f3 100644 --- a/app/gabsocial/utils/__tests__/emoji_reacts-test.js +++ b/app/gabsocial/utils/__tests__/emoji_reacts-test.js @@ -121,14 +121,14 @@ describe('oneEmojiPerAccount', () => { it('reduces to one react per account', () => { const emojiReacts = fromJS([ // Sorted - { 'count': 20, 'me': true, 'name': '👍', accounts: [{ id: '1' }, { id: '2' }] }, - { 'count': 15, 'me': true, 'name': '❤', accounts: [{ id: '1' }, { id: '2' }] }, - { 'count': 7, 'me': true, 'name': '😯', accounts: [{ id: '1' }] }, - { 'count': 7, 'me': false, 'name': '😂', accounts: [{ id: '3' }] }, + { 'count': 2, 'me': true, 'name': '👍', accounts: [{ id: '1' }, { id: '2' }] }, + { 'count': 2, 'me': true, 'name': '❤', accounts: [{ id: '1' }, { id: '2' }] }, + { 'count': 1, 'me': true, 'name': '😯', accounts: [{ id: '1' }] }, + { 'count': 1, 'me': false, 'name': '😂', accounts: [{ id: '3' }] }, ]); expect(oneEmojiPerAccount(emojiReacts)).toEqual(fromJS([ - { 'count': 20, 'me': true, 'name': '👍', accounts: [{ id: '1' }, { id: '2' }] }, - { 'count': 7, 'me': false, 'name': '😂', accounts: [{ id: '3' }] }, + { 'count': 2, 'me': true, 'name': '👍', accounts: [{ id: '1' }, { id: '2' }] }, + { 'count': 1, 'me': false, 'name': '😂', accounts: [{ id: '3' }] }, ])); }); }); diff --git a/app/gabsocial/utils/emoji_reacts.js b/app/gabsocial/utils/emoji_reacts.js index 4d49c0783..1f352c7e8 100644 --- a/app/gabsocial/utils/emoji_reacts.js +++ b/app/gabsocial/utils/emoji_reacts.js @@ -1,4 +1,7 @@ -import { Map as ImmutableMap } from 'immutable'; +import { + Map as ImmutableMap, + List as ImmutableList, +} from 'immutable'; // https://emojipedia.org/facebook/ export const ALLOWED_EMOJI = [ @@ -31,7 +34,13 @@ export const mergeEmojiFavourites = (emojiReacts, favouritesCount) => { }; export const oneEmojiPerAccount = emojiReacts => { - return; // TODO + emojiReacts = emojiReacts.reverse(); + return emojiReacts.reduce((acc, cur) => { + if (acc.filter( + e => e.get('me') && e.get('name') !== cur.get('name') + ).length > 0) return acc.delete(cur); // FIXME: Incomplete + return acc; + }, emojiReacts).reverse(); }; export const filterEmoji = emojiReacts => ( @@ -45,5 +54,11 @@ export const reduceEmoji = (emojiReacts, favouritesCount) => ( ))))); export const getReactForStatus = status => { - return; // TODO + const emojiReacts = status.getIn(['pleroma', 'emoji_reactions'], ImmutableList()); + const emojiReact = emojiReacts.reduce((acc, cur) => { + if (acc) return acc; + if (cur.get('me') === true) return cur.get('name'); + return acc; + }, false); + return emojiReact ? emojiReact : status.get('favourited') && '👍'; };