|
|
- import { TIMELINE_SET, TIMELINE_UPDATE } from '../actions/timelines';
- import { REBLOG_SUCCESS, FAVOURITE_SUCCESS } from '../actions/interactions';
- import Immutable from 'immutable';
-
- const initialState = Immutable.Map();
-
- function updateMatchingStatuses(state, needle, callback) {
- return state.map(function (list) {
- return list.map(function (status) {
- if (status.get('id') === needle.get('id')) {
- return callback(status);
- } else if (status.getIn(['reblog', 'id'], null) === needle.get('id')) {
- return status.set('reblog', callback(status.get('reblog')));
- }
-
- return status;
- });
- });
- };
-
- export default function timelines(state = initialState, action) {
- switch(action.type) {
- case TIMELINE_SET:
- return state.set(action.timeline, Immutable.fromJS(action.statuses));
- case TIMELINE_UPDATE:
- return state.update(action.timeline, list => list.unshift(Immutable.fromJS(action.status)));
- case REBLOG_SUCCESS:
- case FAVOURITE_SUCCESS:
- return updateMatchingStatuses(state, action.status, () => Immutable.fromJS(action.response));
- default:
- return state;
- }
- }
|