From 6914482d0a6e7e654e17e7f2aa2f6a2acde6c59a Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 30 Aug 2019 01:57:38 +0200 Subject: Change detailed status child ordering to sort self-replies on top (#11686) Fixes #11679 --- app/javascript/mastodon/features/status/index.js | 44 +++++++++++++++--------- 1 file changed, 27 insertions(+), 17 deletions(-) (limited to 'app') diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js index ad4f75820..f78a9489a 100644 --- a/app/javascript/mastodon/features/status/index.js +++ b/app/javascript/mastodon/features/status/index.js @@ -84,28 +84,38 @@ const makeMapStateToProps = () => { const getDescendantsIds = createSelector([ (_, { id }) => id, state => state.getIn(['contexts', 'replies']), - ], (statusId, contextReplies) => { - let descendantsIds = Immutable.List(); - descendantsIds = descendantsIds.withMutations(mutable => { - const ids = [statusId]; + state => state.get('statuses'), + ], (statusId, contextReplies, statuses) => { + let descendantsIds = []; + const ids = [statusId]; - while (ids.length > 0) { - let id = ids.shift(); - const replies = contextReplies.get(id); + while (ids.length > 0) { + let id = ids.shift(); + const replies = contextReplies.get(id); - if (statusId !== id) { - mutable.push(id); - } + if (statusId !== id) { + descendantsIds.push(id); + } - if (replies) { - replies.reverse().forEach(reply => { - ids.unshift(reply); - }); - } + if (replies) { + replies.reverse().forEach(reply => { + ids.unshift(reply); + }); } - }); + } + + let insertAt = descendantsIds.findIndex((id) => statuses.get(id).get('in_reply_to_account_id') !== statuses.get(id).get('account')); + if (insertAt !== -1) { + descendantsIds.forEach((id, idx) => { + if (idx > insertAt && statuses.get(id).get('in_reply_to_account_id') === statuses.get(id).get('account')) { + descendantsIds.splice(idx, 1); + descendantsIds.splice(insertAt, 0, id); + insertAt += 1; + } + }); + } - return descendantsIds; + return Immutable.List(descendantsIds); }); const mapStateToProps = (state, props) => { -- cgit