Open ashtonsix opened 8 years ago
Investigate this (see TODO comment):
import { createStore, combineReducers, createReducer, createSelector, applyMiddleware, compose, plus, } from 'redux-plus' import api from './api' import toTrees, {getMaxDepth, getNodes} from './toTrees' const reducer = combineReducers({ categories: createReducer({ GET_DATA: api('GET', '/categories'), GET_DATA_SUCCESS: (state, {payload: categories}) => categories, }, []), overview: createReducer({ SELECT: (state, {payload: _id}) => { const index = state.selected.findIndex(id => id === _id) let selected if (index === -1) selected = state.selected.concat(_id) else selected = state.selected.slice(0, index + 1) return {...state, selected} }, CLEAR_SELECTION: (state) => ({...state, selected: []}) }, {selected: [], sortBy: 'allocation'}), detailID: createReducer({ SET_DETAIL_VIEW: (state, {payload: id}) => id, CLEAR_DETAIL_VIEW: () => '', SELECT: () => '', CLEAR_SELECTION: () => '', }, ''), detail: createSelector( 'detailID', 'overview.selected', // TODO (redux-plus): investigate why dynamic selector doesn't work here 'dataTree.id', 'treeStats.nodes', (state, id1, selected, id3, nodes) => { console.log('1', id1, '2', selected.length, '3', id3) const id = id1 || selected.slice(-1)[0] || id3 if (!nodes || !id) return null return nodes.find(node => id === node.id) } ), dataTree: createSelector( 'categories', 'overview.sortBy', (state, categories, sortBy) => toTrees(categories, sortBy, ['desc'])[0] ), treeStats: createSelector( 'dataTree', (state, dataTree) => ({ maxDepth: !dataTree ? 0 : getMaxDepth(dataTree), leafNodes: !dataTree ? [] : getNodes(dataTree, ({children}) => !children.length), nodes: !dataTree ? [] : getNodes(dataTree), }) ) }) const logger = applyMiddleware(store => next => action => { const result = next(action) console.log(action, store.getState().detail) return result }) export const store = createStore(reducer, compose(plus, logger)) export default store
Also it seems like the detail selector isn't updating when the selectors it's watching update (only reacts to detailID)
detailID
Investigate this (see TODO comment):