gab-social/app/javascript/gabsocial/reducers/group_lists.js

57 lines
1.5 KiB
JavaScript
Raw Normal View History

2020-05-04 19:44:37 +01:00
import { Map as ImmutableMap, List as ImmutableList } from 'immutable'
import {
GROUPS_FETCH_REQUEST,
GROUPS_FETCH_SUCCESS,
GROUPS_FETCH_FAIL,
} from '../actions/groups'
const tabs = ['new', 'featured', 'member', 'admin']
2019-07-15 14:47:05 +01:00
const initialState = ImmutableMap({
new: ImmutableMap({
fetched: false,
loading: false,
items: ImmutableList(),
}),
featured: ImmutableMap({
fetched: false,
loading: false,
items: ImmutableList(),
}),
member: ImmutableMap({
fetched: false,
loading: false,
items: ImmutableList(),
}),
admin: ImmutableMap({
fetched: false,
loading: false,
items: ImmutableList(),
}),
2020-05-04 19:44:37 +01:00
})
2019-07-15 14:47:05 +01:00
export default function groupLists(state = initialState, action) {
if (tabs.indexOf(action.tab) === -1) return state
2019-07-15 14:47:05 +01:00
switch(action.type) {
case GROUPS_FETCH_REQUEST:
return state.withMutations((mutable) => {
mutable.setIn([action.tab, 'loading'], true)
});
2019-07-15 14:47:05 +01:00
case GROUPS_FETCH_SUCCESS:
return state.withMutations((mutable) => {
mutable.setIn([action.tab, 'items'], ImmutableList(action.groups.map(item => item.id)))
mutable.setIn([action.tab, 'loading'], false)
mutable.setIn([action.tab, 'fetched'], true)
})
case GROUPS_FETCH_FAIL:
return state.withMutations((mutable) => {
mutable.setIn([action.tab, 'items'], ImmutableList())
mutable.setIn([action.tab, 'loading'], false)
mutable.setIn([action.tab, 'fetched'], true)
})
2019-07-15 14:47:05 +01:00
default:
2020-05-04 19:44:37 +01:00
return state
2019-07-15 14:47:05 +01:00
}
2020-05-04 19:44:37 +01:00
}