Refactor layout .show/.isShown to handle branch nodes
This commit is contained in:
@@ -37,17 +37,3 @@ export function changeMode(thing, mode="") {
|
|||||||
payload: {thing, mode}
|
payload: {thing, mode}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// export function onlyShow(thing, shown=true) {
|
|
||||||
// thing = normalizeArray(thing)
|
|
||||||
// if(thing.length < 2)
|
|
||||||
// throw new Error("layoutActions.onlyShow only works, when `thing` is an array with length > 1")
|
|
||||||
// return {
|
|
||||||
// type: ONLY_SHOW,
|
|
||||||
// payload: {thing, shown}
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { fromJS } from "immutable"
|
||||||
import {
|
import {
|
||||||
UPDATE_LAYOUT,
|
UPDATE_LAYOUT,
|
||||||
UPDATE_FILTER,
|
UPDATE_FILTER,
|
||||||
@@ -12,9 +13,14 @@ export default {
|
|||||||
[UPDATE_FILTER]: (state, action) => state.set("filter", action.payload),
|
[UPDATE_FILTER]: (state, action) => state.set("filter", action.payload),
|
||||||
|
|
||||||
[SHOW]: (state, action) => {
|
[SHOW]: (state, action) => {
|
||||||
let thing = action.payload.thing
|
const isShown = action.payload.shown
|
||||||
let shown = action.payload.shown
|
// This is one way to serialize an array, another (preferred) is to convert to json-pointer
|
||||||
return state.setIn(["shown"].concat(thing), shown)
|
// TODO: use json-pointer serilization instead of fromJS(...), for performance
|
||||||
|
const thingToShow = fromJS(action.payload.thing)
|
||||||
|
// This is a map of paths to bools
|
||||||
|
// eg: [one, two] => true
|
||||||
|
// eg: [one] => false
|
||||||
|
return state.update("shown", fromJS({}), a => a.set(thingToShow, isShown))
|
||||||
},
|
},
|
||||||
|
|
||||||
[UPDATE_MODE]: (state, action) => {
|
[UPDATE_MODE]: (state, action) => {
|
||||||
@@ -24,4 +30,3 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { createSelector } from "reselect"
|
import { createSelector } from "reselect"
|
||||||
import { normalizeArray } from "core/utils"
|
import { normalizeArray } from "core/utils"
|
||||||
|
import { fromJS } from "immutable"
|
||||||
|
|
||||||
const state = state => state
|
const state = state => state
|
||||||
|
|
||||||
@@ -9,7 +10,7 @@ export const currentFilter = state => state.get("filter")
|
|||||||
|
|
||||||
export const isShown = (state, thing, def) => {
|
export const isShown = (state, thing, def) => {
|
||||||
thing = normalizeArray(thing)
|
thing = normalizeArray(thing)
|
||||||
return Boolean(state.getIn(["shown", ...thing], def))
|
return state.get("shown", fromJS({})).get(fromJS(thing), def)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const whatMode = (state, thing, def="") => {
|
export const whatMode = (state, thing, def="") => {
|
||||||
@@ -21,4 +22,3 @@ export const showSummary = createSelector(
|
|||||||
state,
|
state,
|
||||||
state => !isShown(state, "editor")
|
state => !isShown(state, "editor")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user