From 759448c24c3359c761e32b9ed4cdc4e981d57e07 Mon Sep 17 00:00:00 2001 From: ThibG Date: Fri, 30 Aug 2019 01:57:38 +0200 Subject: [PATCH] [Glitch] Change detailed status child ordering to sort self-replies on top Port 6914482d0a6e7e654e17e7f2aa2f6a2acde6c59a to glitch-soc Signed-off-by: Thibaut Girka --- .../flavours/glitch/features/status/index.js | 46 +++++++++++-------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/app/javascript/flavours/glitch/features/status/index.js b/app/javascript/flavours/glitch/features/status/index.js index 40e100fd56..58b8a8cbb1 100644 --- a/app/javascript/flavours/glitch/features/status/index.js +++ b/app/javascript/flavours/glitch/features/status/index.js @@ -82,28 +82,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 (replies) { - replies.reverse().forEach(reply => { - ids.unshift(reply); - }); - } + if (statusId !== id) { + descendantsIds.push(id); } - }); - return descendantsIds; + 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 Immutable.List(descendantsIds); }); const mapStateToProps = (state, props) => {