Setting up preliminary "detailed" routes in the UI, new API end-point for fetching status context

This commit is contained in:
Eugen Rochko 2016-09-16 00:21:51 +02:00
parent 2e7aac793a
commit 5b0cef9781
13 changed files with 400 additions and 12 deletions

View file

@ -1,6 +1,7 @@
import { TIMELINE_SET, TIMELINE_UPDATE, TIMELINE_DELETE } from '../actions/timelines';
import { REBLOG_SUCCESS, FAVOURITE_SUCCESS } from '../actions/interactions';
import { ACCOUNT_SET_SELF } from '../actions/accounts';
import { ACCOUNT_SET_SELF, ACCOUNT_FETCH_SUCCESS } from '../actions/accounts';
import { STATUS_FETCH_SUCCESS } from '../actions/statuses';
import Immutable from 'immutable';
const initialState = Immutable.Map({
@ -8,7 +9,9 @@ const initialState = Immutable.Map({
mentions: Immutable.List([]),
statuses: Immutable.Map(),
accounts: Immutable.Map(),
me: null
me: null,
ancestors: Immutable.Map(),
descendants: Immutable.Map()
});
function statusToMaps(state, status) {
@ -54,6 +57,29 @@ function deleteStatus(state, id) {
return state.deleteIn(['statuses', id]);
};
function accountToMaps(state, account) {
return state.setIn(['accounts', account.get('id')], account);
};
function contextToMaps(state, status, ancestors, descendants) {
state = statusToMaps(state, status);
let ancestorsIds = ancestors.map(ancestor => {
state = statusToMaps(state, ancestor);
return ancestor.get('id');
});
let descendantsIds = descendants.map(descendant => {
state = statusToMaps(state, descendant);
return descendant.get('id');
});
return state.withMutations(map => {
map.setIn(['ancestors', status.get('id')], ancestorsIds);
map.setIn(['descendants', status.get('id')], descendantsIds);
});
};
export default function timelines(state = initialState, action) {
switch(action.type) {
case TIMELINE_SET:
@ -70,6 +96,10 @@ export default function timelines(state = initialState, action) {
map.setIn(['accounts', action.account.id], Immutable.fromJS(action.account));
map.set('me', action.account.id);
});
case ACCOUNT_FETCH_SUCCESS:
return accountToMaps(state, Immutable.fromJS(action.account));
case STATUS_FETCH_SUCCESS:
return contextToMaps(state, Immutable.fromJS(action.status), Immutable.fromJS(action.context.ancestors), Immutable.fromJS(action.context.descendants));
default:
return state;
}