diff options
author | ThibG <thib@sitedethib.com> | 2019-08-30 01:57:38 +0200 |
---|---|---|
committer | Thibaut Girka <thib@sitedethib.com> | 2019-08-30 13:45:46 +0200 |
commit | 759448c24c3359c761e32b9ed4cdc4e981d57e07 (patch) | |
tree | a50b89adca8e9e54f6baff99144c5a03a176acb8 /app/javascript | |
parent | 9044a2b051da18e9f70fd4fae55c2bd232891d1f (diff) |
[Glitch] Change detailed status child ordering to sort self-replies on top
Port 6914482d0a6e7e654e17e7f2aa2f6a2acde6c59a to glitch-soc Signed-off-by: Thibaut Girka <thib@sitedethib.com>
Diffstat (limited to 'app/javascript')
-rw-r--r-- | app/javascript/flavours/glitch/features/status/index.js | 44 |
1 files changed, 27 insertions, 17 deletions
diff --git a/app/javascript/flavours/glitch/features/status/index.js b/app/javascript/flavours/glitch/features/status/index.js index 40e100fd5..58b8a8cbb 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 (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) => { |