mirror of
https://github.com/roleypoly/roleypoly-v1.git
synced 2025-04-25 04:09:12 +00:00
66 lines
1.9 KiB
JavaScript
66 lines
1.9 KiB
JavaScript
import { Map, OrderedMap } from 'immutable'
|
|
|
|
const initialState = Map({
|
|
viewMap: OrderedMap({}),
|
|
originalSnapshot: OrderedMap({}),
|
|
hasAvailableRoles: true,
|
|
})
|
|
|
|
const reducer = (state = initialState, { type, data }) => {
|
|
switch (type) {
|
|
case Symbol.for('re: setup'):
|
|
const { viewMap, originalSnapshot, ...rest } = data
|
|
return state.merge({
|
|
viewMap: OrderedMap(viewMap),
|
|
originalSnapshot: OrderedMap(originalSnapshot),
|
|
...rest,
|
|
})
|
|
|
|
case Symbol.for('re: set category'):
|
|
return state.setIn(['viewMap', data.id], Map(data))
|
|
|
|
case Symbol.for('re: edit category'):
|
|
return state.setIn(['viewMap', data.id, data.key], data.value)
|
|
|
|
case Symbol.for('re: delete category'):
|
|
return state.deleteIn(['viewMap', data])
|
|
|
|
case Symbol.for('re: switch category mode'):
|
|
return state.setIn(['viewMap', data.id, 'mode'], data.mode)
|
|
|
|
case Symbol.for('re: add role to category'):
|
|
const category = state.getIn(['viewMap', data.id])
|
|
return state.setIn(
|
|
['viewMap', data.id],
|
|
category
|
|
.set('roles', category.get('roles').add(data.role.get('id')))
|
|
.set('roles_map', category.get('roles_map').add(data.role))
|
|
)
|
|
|
|
case Symbol.for('re: remove role from category'):
|
|
const rmCat = state.getIn(['viewMap', data.id])
|
|
return state.setIn(
|
|
['viewMap', data.id],
|
|
rmCat
|
|
.set(
|
|
'roles',
|
|
rmCat.get('roles').filterNot(r => r === data.role.get('id'))
|
|
)
|
|
.set(
|
|
'roles_map',
|
|
rmCat.get('roles_map').filterNot(r => r.get('id') === data.role.get('id'))
|
|
)
|
|
)
|
|
|
|
case Symbol.for('re: reset'):
|
|
return state.set('viewMap', state.get('originalSnapshot'))
|
|
|
|
case Symbol.for('re: swap original state'):
|
|
return state.set('originalSnapshot', state.get('viewMap'))
|
|
|
|
default:
|
|
return state
|
|
}
|
|
}
|
|
|
|
export default reducer
|