1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-13 17:56:25 +00:00
Files
Boostnote/browser/main/store.js
2016-05-12 19:53:21 +09:00

135 lines
3.1 KiB
JavaScript

import { combineReducers, createStore } from 'redux'
import _ from 'lodash'
import { syncHistoryWithStore, routerReducer } from 'react-router-redux'
/**
* Repositories
* ```
* repositories = [{
* key: String,
* name: String,
* path: String, // path of repository
* status: String, // status of repository [IDLE, LOADING, READY, ERROR]
* folders: {
* name: String,
* color: String
* },
* notes: [{
* key: String,
* title: String,
* content: String,
* folder: String,
* tags: [String],
* createdAt: Date,
* updatedAt: Date
* }]
* }]
* ```
*/
const initialRepositories = []
function repositories (state = initialRepositories, action) {
console.log(action)
switch (action.type) {
case 'INIT_ALL':
return action.data.slice()
case 'ADD_REPOSITORY':
{
let repos = state.slice()
repos.push(action.repository)
return repos
}
case 'REMOVE_REPOSITORY':
{
let repos = state.slice()
let targetIndex = _.findIndex(repos, {key: action.key})
if (targetIndex > -1) {
repos.splice(targetIndex, 1)
}
return repos
}
case 'ADD_FOLDER':
{
let repos = state.slice()
let targetRepo = _.find(repos, {key: action.key})
if (targetRepo == null) return state
let targetFolderIndex = _.findIndex(targetRepo.folders, {key: action.folder.key})
if (targetFolderIndex < 0) {
targetRepo.folders.push(action.folder)
} else {
targetRepo.folders.splice(targetFolderIndex, 1, action.folder)
}
return repos
}
case 'EDIT_FOLDER':
{
let repos = state.slice()
let targetRepo = _.find(repos, {key: action.key})
if (targetRepo == null) return state
let targetFolderIndex = _.findIndex(targetRepo.folders, {key: action.folder.key})
if (targetFolderIndex < 0) {
targetRepo.folders.push(action.folder)
} else {
targetRepo.folders.splice(targetFolderIndex, 1, action.folder)
}
return repos
}
/**
* Remove a folder from the repository
* {
* type: 'REMOVE_FOLDER',
* repository: repositoryKey,
* folder: folderKey
* }
*/
case 'REMOVE_FOLDER':
{
let repos = state.slice()
let targetRepo = _.find(repos, {key: action.repository})
if (targetRepo == null) return state
let targetFolderIndex = _.findIndex(targetRepo.folders, {key: action.folder})
if (targetFolderIndex > -1) {
targetRepo.folders.splice(targetFolderIndex, 1)
}
return repos
}
}
return state
}
const defaultStatus = {
sideNavExpand: false
}
function status (state = defaultStatus, action) {
switch (action.type) {
case 'TOGGLE_SIDENAV':
state.sideNavExpand = !state.sideNavExpand
return Object.assign({}, state)
}
return state
}
let reducer = combineReducers({
repositories,
status,
routing: routerReducer
})
let store = createStore(reducer)
export default store