Make oneEmojiPerAccount() work
This commit is contained in:
parent
0ed867f7bd
commit
b4f5321c0f
|
@ -123,12 +123,12 @@ describe('oneEmojiPerAccount', () => {
|
||||||
// Sorted
|
// Sorted
|
||||||
{ 'count': 2, 'me': true, 'name': '👍', accounts: [{ id: '1' }, { id: '2' }] },
|
{ 'count': 2, 'me': true, 'name': '👍', accounts: [{ id: '1' }, { id: '2' }] },
|
||||||
{ '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': true, 'name': '😯', accounts: [{ id: '1' }] },
|
||||||
{ 'count': 1, 'me': false, 'name': '😂', accounts: [{ id: '3' }] },
|
{ 'count': 1, 'me': false, 'name': '😂', accounts: [{ id: '3' }] },
|
||||||
]);
|
]);
|
||||||
expect(oneEmojiPerAccount(emojiReacts)).toEqual(fromJS([
|
expect(oneEmojiPerAccount(emojiReacts, '1')).toEqual(fromJS([
|
||||||
{ 'count': 2, 'me': true, 'name': '👍', accounts: [{ id: '1' }, { id: '2' }] },
|
{ 'count': 2, 'me': true, 'name': '👍', accounts: [{ id: '1' }, { id: '2' }] },
|
||||||
{ 'count': 1, 'me': false, 'name': '😂', accounts: [{ id: '3' }] },
|
{ 'count': 1, 'me': false, 'name': '😂', accounts: [{ id: '3' }] },
|
||||||
]));
|
]));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -33,14 +33,33 @@ export const mergeEmojiFavourites = (emojiReacts, favouritesCount) => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const oneEmojiPerAccount = emojiReacts => {
|
const hasMultiReactions = (emojiReacts, account) => (
|
||||||
|
emojiReacts.filter(
|
||||||
|
e => e.get('accounts').filter(
|
||||||
|
a => a.get('id') === account.get('id')
|
||||||
|
).count() > 0
|
||||||
|
).count() > 1
|
||||||
|
);
|
||||||
|
|
||||||
|
const inAccounts = (accounts, id) => (
|
||||||
|
accounts.filter(a => a.get('id') === id).count() > 0
|
||||||
|
);
|
||||||
|
|
||||||
|
export const oneEmojiPerAccount = (emojiReacts, me) => {
|
||||||
emojiReacts = emojiReacts.reverse();
|
emojiReacts = emojiReacts.reverse();
|
||||||
return emojiReacts.reduce((acc, cur) => {
|
|
||||||
if (acc.filter(
|
return emojiReacts.reduce((acc, cur, idx) => {
|
||||||
e => e.get('me') && e.get('name') !== cur.get('name')
|
const accounts = cur.get('accounts', ImmutableList())
|
||||||
).length > 0) return acc.delete(cur); // FIXME: Incomplete
|
.filter(a => !hasMultiReactions(acc, a));
|
||||||
return acc;
|
|
||||||
}, emojiReacts).reverse();
|
return acc.set(idx, cur.merge({
|
||||||
|
accounts: accounts,
|
||||||
|
count: accounts.count(),
|
||||||
|
me: inAccounts(accounts, me),
|
||||||
|
}));
|
||||||
|
}, emojiReacts)
|
||||||
|
.filter(e => e.get('count') > 0)
|
||||||
|
.reverse();
|
||||||
};
|
};
|
||||||
|
|
||||||
export const filterEmoji = emojiReacts => (
|
export const filterEmoji = emojiReacts => (
|
||||||
|
|
Loading…
Reference in New Issue