|
|
|
@ -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) => {
|
|
|
|
|