summaryrefslogtreecommitdiffstats
path: root/front/odiparpack/app/redux/modules/ui.js
diff options
context:
space:
mode:
Diffstat (limited to 'front/odiparpack/app/redux/modules/ui.js')
-rw-r--r--front/odiparpack/app/redux/modules/ui.js95
1 files changed, 95 insertions, 0 deletions
diff --git a/front/odiparpack/app/redux/modules/ui.js b/front/odiparpack/app/redux/modules/ui.js
new file mode 100644
index 0000000..a0fa4e6
--- /dev/null
+++ b/front/odiparpack/app/redux/modules/ui.js
@@ -0,0 +1,95 @@
+import { fromJS, List } from 'immutable';
+import MenuContent from 'ba-api/menu';
+import {
+ TOGGLE_SIDEBAR,
+ OPEN_SUBMENU,
+ CHANGE_THEME,
+ LOAD_PAGE
+} from 'ba-actions/actionTypes';
+
+const initialState = {
+ sidebarOpen: true,
+ theme: 'purpleRedTheme',
+ pageLoaded: false,
+ palette: List([
+ { name: 'Purple Red', value: 'purpleRedTheme' },
+ { name: 'Natural Green Orange', value: 'greenTheme' },
+ { name: 'Blue Ocean', value: 'blueTheme' },
+ { name: 'Blue Sky', value: 'skyBlueTheme' },
+ { name: 'Sweet Magenta Cyan', value: 'magentaTheme' },
+ { name: 'Violet Green', value: 'purpleTheme' },
+ { name: 'Vintage Yellow', value: 'yellowCyanTheme' },
+ { name: 'Orange Violet', value: 'orangeTheme' },
+ { name: 'Cyan Green', value: 'cyanTheme' },
+ { name: 'Red Silver', value: 'redTheme' },
+ { name: 'Grey', value: 'greyTheme' },
+ { name: 'Green Nature', value: 'greenNatureTheme' },
+ ]),
+ subMenuOpen: []
+};
+
+const getMenus = menuArray => menuArray.map(item => {
+ if (item.child) {
+ return item.child;
+ }
+ return false;
+});
+
+const setNavCollapse = (arr, curRoute) => {
+ let headMenu = 'not found';
+ for (let i = 0; i < arr.length; i += 1) {
+ for (let j = 0; j < arr[i].length; j += 1) {
+ if (arr[i][j].link === curRoute) {
+ headMenu = MenuContent[i].key;
+ }
+ }
+ }
+ return headMenu;
+};
+
+const initialImmutableState = fromJS(initialState);
+
+export default function reducer(state = initialImmutableState, action = {}) {
+ switch (action.type) {
+ case TOGGLE_SIDEBAR:
+ return state.withMutations((mutableState) => {
+ mutableState.set('sidebarOpen', !state.get('sidebarOpen'));
+ });
+ case OPEN_SUBMENU:
+ return state.withMutations((mutableState) => {
+ // Set initial open parent menu
+ const activeParent = setNavCollapse(
+ getMenus(MenuContent),
+ action.initialLocation
+ );
+
+ // Once page loaded will expand the parent menu
+ if (action.initialLocation) {
+ mutableState.set('subMenuOpen', List([activeParent]));
+ return;
+ }
+
+ // Expand / Collapse parent menu
+ const menuList = state.get('subMenuOpen');
+ if (menuList.indexOf(action.key) > -1) {
+ if (action.keyParent) {
+ mutableState.set('subMenuOpen', List([action.keyParent]));
+ } else {
+ mutableState.set('subMenuOpen', List([]));
+ }
+ } else {
+ mutableState.set('subMenuOpen', List([action.key, action.keyParent]));
+ }
+ });
+ case CHANGE_THEME:
+ return state.withMutations((mutableState) => {
+ mutableState.set('theme', action.theme);
+ });
+ case LOAD_PAGE:
+ return state.withMutations((mutableState) => {
+ mutableState.set('pageLoaded', action.isLoaded);
+ });
+ default:
+ return state;
+ }
+}