import { UPDATE_SELECTION, ADD_MENU_ITEM, UPDATE_MENU_ITEM, REMOVE_MENU_ITEM, ADD_NOTEBOOK, REMOVE_NOTEBOOK, UPDATE_NOTEBOOK, NOTE_ADDED, SORT_NOTEBOOKS, NOTEBOOK_TYPE, MAX_MENU_ITEMS, MENU_TYPE, REFRESH } from '../constants/navigation' import React from 'react' import Styles from 'material-ui/lib/styles' import ActionGrade from 'material-ui/lib/svg-icons/action/grade' import History from 'material-ui/lib/svg-icons/action/history' import Folder from 'material-ui/lib/svg-icons/file/folder' import Delete from 'material-ui/lib/svg-icons/action/delete' import * as utils from '../utils' import glob from 'glob' import jsfile from 'jsonfile' import path from 'path-extra' import mkdirp from 'mkdirp' const Colors = Styles.Colors const initialState = getInitialState() var emptyFunc = () => {} function initDefaultNotebookPath(notebook){ var nbPath = utils.getNotebookPath(notebook) var dir = mkdirp.sync(nbPath) var notePath = utils.getNotebookPath(notebook) var meta = { 'name': notebook.title, 'uuid': notebook.uuid } var metaPath = path.join(nbPath, 'meta.json') jsfile.writeFileSync(metaPath, meta) } function getInitialState(){ var menuItems = [ { 'name': 'Entries', 'isNotebook': true, 'icon': , }, { 'name': 'Starred', 'notes': 0, 'icon': , }, { 'name': 'Recents', 'notes': 0, 'icon': , 'glob': '*.qvnotebook/*.qvnote', 'filter': (notes) => { // Get the most recent notes notes.sort(utils.compareNotes()) return notes.slice(0, MAX_MENU_ITEMS) } }, { 'name': 'Trash', 'isNotebook': true, 'icon': , }, { 'name': 'All Notes', 'notes': 0, 'glob': '*.qvnotebook/*.qvnote', 'icon': , } ] for(var i=0; i {} } return state } export default function navigation(state = initialState, action){ switch (action.type) { case UPDATE_SELECTION: var selectionDetails = findIndex(state, action.selection) return Object.assign({}, state, { selection: action.selection, selectionType: selectionDetails.type, selectionIndex: selectionDetails.index, callback: action.callback || emptyFunc }) case ADD_MENU_ITEM: state.menuItems.push(action.item) return Object.assign({}, state, { menuItems: state.menuItems, callback: action.callback || emptyFunc }) case REMOVE_MENU_ITEM: state.menuItems.splice(action.index, 1) return Object.assign({}, state, { menuItems: state.menuItems, callback: action.callback || emptyFunc }) case ADD_NOTEBOOK: state.notebooks.splice(0, 0, action.notebook) return Object.assign({}, state, { notebooks: state.notebooks, callback: action.callback || emptyFunc }) case REMOVE_NOTEBOOK: state.notebooks.splice(action.index, 1) return Object.assign({}, state, { notebooks: state.notebooks, callback: action.callback || emptyFunc }) case UPDATE_MENU_ITEM: state.menuItems[action.index] = action.item return Object.assign({}, state, { menuItems: state.menuItems, callback: action.callback || emptyFunc }) case UPDATE_NOTEBOOK: state.notebooks[action.index] = action.notebook return Object.assign({}, state, { notebooks: state.notebooks, callback: action.callback || emptyFunc }) case SORT_NOTEBOOKS: state.notebooks.sort(action.sortFunc) return Object.assign({}, state, { notebooks: state.notebooks, callback: action.callback || emptyFunc }) case REFRESH: var menuItems = refreshMenuItems(state) var newNotebooks = refreshNotebooks() return Object.assign({}, state, { notebooks: newNotebooks, menuItems: menuItems, callback: action.callback || emptyFunc }) case NOTE_ADDED: var notebookIndex = state.selectionIndex if(state.selectionType == MENU_TYPE){ var menuItem = state.menuItems[notebookIndex] menuItem.notes += 1 } else if(state.selectionType == NOTEBOOK_TYPE){ var notebook = state.notebooks[notebookIndex] notebook.notes += 1 } for(var i=0; i