Setting up preliminary "detailed" routes in the UI, new API end-point for fetching status context
This commit is contained in:
		
							parent
							
								
									2e7aac793a
								
							
						
					
					
						commit
						5b0cef9781
					
				
					 13 changed files with 400 additions and 12 deletions
				
			
		|  | @ -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; | ||||
|   } | ||||
|  |  | |||
		Reference in a new issue