mirror of
https://github.com/roleypoly/roleypoly-v1.git
synced 2025-06-17 02:29:10 +00:00
finish MVP
This commit is contained in:
parent
7806219464
commit
eaa1167f16
22 changed files with 486 additions and 116 deletions
|
@ -1,40 +1,50 @@
|
|||
import { Map, OrderedMap, fromJS } from 'immutable'
|
||||
|
||||
const initialState = Map({
|
||||
viewMap: OrderedMap({})
|
||||
viewMap: OrderedMap({}),
|
||||
originalSnapshot: OrderedMap({})
|
||||
})
|
||||
|
||||
const reducer = (state = initialState, { type, data }) => {
|
||||
switch (type) {
|
||||
case Symbol.for('re: setup'):
|
||||
const { viewMap, ...rest } = data
|
||||
return Map({ viewMap: OrderedMap(viewMap), ...rest })
|
||||
const { viewMap, originalSnapshot, ...rest } = data
|
||||
return Map({ viewMap: OrderedMap(viewMap), originalSnapshot: OrderedMap(originalSnapshot), ...rest })
|
||||
|
||||
case Symbol.for('re: set category'):
|
||||
return state.setIn(['viewMap', data.name], Map(data))
|
||||
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.name, 'mode'], data.mode)
|
||||
return state.setIn(['viewMap', data.id, 'mode'], data.mode)
|
||||
|
||||
case Symbol.for('re: add role to category'):
|
||||
const category = state.getIn(['viewMap', data.name])
|
||||
return state.setIn(['viewMap', data.name],
|
||||
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.name])
|
||||
return state.setIn(['viewMap', data.name],
|
||||
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
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ import { Map, OrderedMap } from 'immutable'
|
|||
const initialState = Map({
|
||||
hidden: true, // should the view be hidden?
|
||||
// emptyRoles: true, // helps derender roles so there's no visible element state change
|
||||
isEditingMessage: false,
|
||||
viewMap: OrderedMap({}), // roles in categories
|
||||
originalRolesSelected: Map({}), // Map<role id, bool> -- original roles for diffing against selected
|
||||
rolesSelected: Map({}) // Map<role id, bool> -- new roles for diffing
|
||||
|
@ -10,25 +11,29 @@ const initialState = Map({
|
|||
|
||||
export default (state = initialState, { type, data }) => {
|
||||
switch (type) {
|
||||
case Symbol.for('setup role picker'):
|
||||
case Symbol.for('rp: setup role picker'):
|
||||
return Map(data)
|
||||
|
||||
case Symbol.for('hide role picker ui'):
|
||||
case Symbol.for('rp: hide role picker ui'):
|
||||
return state.set('hidden', data)
|
||||
|
||||
case Symbol.for('reset role picker ui'):
|
||||
case Symbol.for('rp: reset role picker ui'):
|
||||
return state.set('emptyRoles', data)
|
||||
|
||||
case Symbol.for('update selected roles'):
|
||||
case Symbol.for('rp: update selected roles'):
|
||||
return state.mergeIn(['rolesSelected'], data)
|
||||
|
||||
case Symbol.for('sync selected roles'):
|
||||
case Symbol.for('rp: sync selected roles'):
|
||||
return state.set('originalRolesSelected', state.get('rolesSelected'))
|
||||
|
||||
case Symbol.for('reset selected'):
|
||||
case Symbol.for('rp: reset selected'):
|
||||
return state.set('rolesSelected', state.get('originalRolesSelected'))
|
||||
|
||||
// case Symbol.for('zero role picker'):
|
||||
case Symbol.for('rp: set message editor state'):
|
||||
console.log(state.set('isEditingMessage', data))
|
||||
return state.set('isEditingMessage', data)
|
||||
|
||||
// case Symbol.for('rp: zero role picker'):
|
||||
// return initialState
|
||||
|
||||
default:
|
||||
|
|
|
@ -32,6 +32,12 @@ export default (state = initialState, { type, data }) => {
|
|||
// return state.set(data.id,
|
||||
// state.get(data.id).set('roles', Set(data.roles))
|
||||
// )
|
||||
|
||||
case Symbol.for('server: set'):
|
||||
return state.set(data.id, fromJS(data))
|
||||
|
||||
case Symbol.for('server: edit message'):
|
||||
return state.setIn([data.id, 'message'], data.message)
|
||||
|
||||
case Symbol.for('add debug server'):
|
||||
return state.set('0', blankServer)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue