42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
import {
|
|
SUGGESTIONS_FETCH_REQUEST,
|
|
SUGGESTIONS_FETCH_SUCCESS,
|
|
SUGGESTIONS_FETCH_FAIL,
|
|
SUGGESTIONS_DISMISS,
|
|
} from '../actions/suggestions'
|
|
import {
|
|
Map as ImmutableMap,
|
|
List as ImmutableList,
|
|
fromJS,
|
|
} from 'immutable'
|
|
|
|
const initialState = ImmutableMap({
|
|
related: ImmutableMap({
|
|
items: ImmutableList(),
|
|
isLoading: false,
|
|
}),
|
|
verified: ImmutableMap({
|
|
items: ImmutableList(),
|
|
isLoading: false,
|
|
}),
|
|
})
|
|
|
|
export default function suggestionsReducer(state = initialState, action) {
|
|
switch(action.type) {
|
|
case SUGGESTIONS_FETCH_REQUEST:
|
|
return state.setIn([action.suggestionType, 'isLoading'], true)
|
|
case SUGGESTIONS_FETCH_SUCCESS:
|
|
return state.withMutations((map) => {
|
|
const items = fromJS(action.accounts.map(x => x.id)).sortBy(Math.random)
|
|
map.setIn([action.suggestionType, 'items'], items)
|
|
map.setIn([action.suggestionType, 'isLoading'], false)
|
|
})
|
|
case SUGGESTIONS_FETCH_FAIL:
|
|
return state.setIn([action.suggestionType, 'isLoading'], false)
|
|
case SUGGESTIONS_DISMISS:
|
|
return state.updateIn([action.suggestionType, 'items'], list => list.filterNot(id => id === action.id))
|
|
default:
|
|
return state
|
|
}
|
|
}
|