diff --git a/app/actions/navigation.jsx b/app/actions/navigation.jsx index 3b0997c..c9046a7 100644 --- a/app/actions/navigation.jsx +++ b/app/actions/navigation.jsx @@ -72,3 +72,10 @@ export function refreshNavigation(callback){ callback } } + +export function noteAdded(callback){ + return { + type: types.NOTE_ADDED, + callback + } +} diff --git a/app/constants/navigation.jsx b/app/constants/navigation.jsx index e8ec53f..2db6a0b 100644 --- a/app/constants/navigation.jsx +++ b/app/constants/navigation.jsx @@ -7,6 +7,7 @@ export const MENU_TYPE = 'MENU_TYPE' export const ADD_MENU_ITEM = 'ADD_MENU_ITEM' export const UPDATE_MENU_ITEM = 'UPDATE_MENU_ITEM' export const REMOVE_MENU_ITEM = 'REMOVE_MENU_ITEM' +export const MAX_MENU_ITEMS = 10 // Notebook item manipulation export const NOTEBOOK_TYPE = 'NOTEBOOK_TYPE' @@ -14,3 +15,4 @@ export const ADD_NOTEBOOK = 'ADD_NOTEBOOK' export const REMOVE_NOTEBOOK = 'REMOVE_NOTEBOOK' export const SORT_NOTEBOOKS = 'SORT_NOTEBOOKS' export const UPDATE_NOTEBOOK = 'UPDATE_NOTEBOOK' +export const NOTE_ADDED = 'NOTE_ADDED' diff --git a/app/reducers/navigation.jsx b/app/reducers/navigation.jsx index f30bd4c..6d381ba 100644 --- a/app/reducers/navigation.jsx +++ b/app/reducers/navigation.jsx @@ -6,8 +6,10 @@ import { ADD_NOTEBOOK, REMOVE_NOTEBOOK, UPDATE_NOTEBOOK, + NOTE_ADDED, SORT_NOTEBOOKS, NOTEBOOK_TYPE, + MAX_MENU_ITEMS, MENU_TYPE, REFRESH } from '../constants/navigation' @@ -65,9 +67,9 @@ function getInitialState(){ 'icon': , 'glob': '*.qvnotebook/*.qvnote', 'filter': (notes) => { - // Get the 10 most recent notes + // Get the most recent notes notes.sort(utils.compareNotes()) - return notes.slice(0, 10) + return notes.slice(0, MAX_MENU_ITEMS) } }, { @@ -130,6 +132,107 @@ function getInitialState(){ } +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