2018-09-11 07:14:03 -05:00
|
|
|
import { Action, ActionTypes } from 'app/core/actions/navModel';
|
|
|
|
import { NavIndex, NavModelItem } from 'app/types';
|
2018-08-31 06:24:36 -05:00
|
|
|
import config from 'app/core/config';
|
|
|
|
|
2018-09-02 12:36:36 -05:00
|
|
|
export function buildInitialState(): NavIndex {
|
|
|
|
const navIndex: NavIndex = {};
|
|
|
|
const rootNodes = config.bootData.navTree as NavModelItem[];
|
|
|
|
buildNavIndex(navIndex, rootNodes);
|
|
|
|
return navIndex;
|
2018-08-31 06:24:36 -05:00
|
|
|
}
|
|
|
|
|
2018-09-02 12:36:36 -05:00
|
|
|
function buildNavIndex(navIndex: NavIndex, children: NavModelItem[], parentItem?: NavModelItem) {
|
|
|
|
for (const node of children) {
|
|
|
|
navIndex[node.id] = {
|
|
|
|
...node,
|
|
|
|
parentItem: parentItem,
|
|
|
|
};
|
2018-08-31 06:24:36 -05:00
|
|
|
|
2018-09-02 12:36:36 -05:00
|
|
|
if (node.children) {
|
|
|
|
buildNavIndex(navIndex, node.children, node);
|
2018-08-31 06:24:36 -05:00
|
|
|
}
|
|
|
|
}
|
2018-09-02 12:36:36 -05:00
|
|
|
}
|
2018-08-31 06:24:36 -05:00
|
|
|
|
2018-09-02 12:36:36 -05:00
|
|
|
export const initialState: NavIndex = buildInitialState();
|
|
|
|
|
|
|
|
export const navIndexReducer = (state = initialState, action: Action): NavIndex => {
|
2018-09-11 07:14:03 -05:00
|
|
|
switch (action.type) {
|
|
|
|
case ActionTypes.UpdateNavIndex:
|
|
|
|
const newPages = {};
|
|
|
|
const payload = action.payload;
|
|
|
|
|
|
|
|
for (const node of payload.children) {
|
|
|
|
newPages[node.id] = {
|
|
|
|
...node,
|
|
|
|
parentItem: payload,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
return { ...state, ...newPages };
|
|
|
|
}
|
2018-08-31 06:24:36 -05:00
|
|
|
return state;
|
|
|
|
};
|