From 3804a746df521c7ff3414c63a0d5d8cdc3f623a7 Mon Sep 17 00:00:00 2001 From: Matus Benko Date: Fri, 8 Sep 2017 12:07:59 +0200 Subject: [PATCH] connected sortable folder list to data api --- browser/main/lib/dataApi/index.js | 1 + browser/main/lib/dataApi/reorderFolder.js | 46 +++++++++++++++++++ .../modals/PreferencesModal/FolderList.js | 13 +++++- browser/main/store.js | 7 +++ package.json | 1 + yarn.lock | 6 +++ 6 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 browser/main/lib/dataApi/reorderFolder.js diff --git a/browser/main/lib/dataApi/index.js b/browser/main/lib/dataApi/index.js index bad6f527..768dfe32 100644 --- a/browser/main/lib/dataApi/index.js +++ b/browser/main/lib/dataApi/index.js @@ -6,6 +6,7 @@ const dataApi = { createFolder: require('./createFolder'), updateFolder: require('./updateFolder'), deleteFolder: require('./deleteFolder'), + reorderFolder: require('./reorderFolder'), createNote: require('./createNote'), updateNote: require('./updateNote'), deleteNote: require('./deleteNote'), diff --git a/browser/main/lib/dataApi/reorderFolder.js b/browser/main/lib/dataApi/reorderFolder.js new file mode 100644 index 00000000..3f54358b --- /dev/null +++ b/browser/main/lib/dataApi/reorderFolder.js @@ -0,0 +1,46 @@ +const _ = require('lodash') +_.move = require('lodash-move').default +const path = require('path') +const resolveStorageData = require('./resolveStorageData') +const CSON = require('@rokt33r/season') + +/** + * @param {String} storageKey + * @param {number} oldIndex + * @param {number} newIndex + * + * @return {Object} + * ``` + * { + * storage: Object + * } + * ``` + */ +function reorderFolder (storageKey, oldIndex, newIndex) { + let rawStorages + let targetStorage + try { + if (!_.isNumber(oldIndex)) throw new Error('oldIndex must be a number.') + if (!_.isNumber(newIndex)) throw new Error('newIndex must be a number.') + + rawStorages = JSON.parse(localStorage.getItem('storages')) + if (!_.isArray(rawStorages)) throw new Error('Target storage doesn\'t exist.') + + targetStorage = _.find(rawStorages, {key: storageKey}) + if (targetStorage == null) throw new Error('Target storage doesn\'t exist.') + } catch (e) { + return Promise.reject(e) + } + + return resolveStorageData(targetStorage) + .then(function reorderFolder (storage) { + storage.folders = _.move(storage.folders, oldIndex, newIndex) + CSON.writeFileSync(path.join(storage.path, 'boostnote.json'), _.pick(storage, ['folders', 'version'])) + + return { + storage + } + }) +} + +module.exports = reorderFolder diff --git a/browser/main/modals/PreferencesModal/FolderList.js b/browser/main/modals/PreferencesModal/FolderList.js index d603d146..5dd31702 100644 --- a/browser/main/modals/PreferencesModal/FolderList.js +++ b/browser/main/modals/PreferencesModal/FolderList.js @@ -1,6 +1,8 @@ import React, { PropTypes } from 'react' import CSSModules from 'browser/lib/CSSModules' +import dataApi from 'browser/main/lib/dataApi' import styles from './FolderList.styl' +import store from 'browser/main/store' import FolderItem from './FolderItem' import { SortableContainer, arrayMove } from 'react-sortable-hoc' @@ -57,8 +59,15 @@ class SortableFolderListComponent extends React.Component { super(props) this.onSortEnd = ({oldIndex, newIndex}) => { let { storage } = this.props - storage.folders = arrayMove(storage.folders, oldIndex, newIndex) - this.setState() + dataApi + .reorderFolder(storage.key, oldIndex, newIndex) + .then((data) => { + store.dispatch({ + type: 'REORDER_FOLDER', + storage: data.storage + }) + this.setState() + }) } } diff --git a/browser/main/store.js b/browser/main/store.js index 68c46876..ac41b1d0 100644 --- a/browser/main/store.js +++ b/browser/main/store.js @@ -346,6 +346,13 @@ function data (state = defaultDataMap(), action) { state.storageMap.set(action.storage.key, action.storage) } return state + case 'REORDER_FOLDER': + { + state = Object.assign({}, state) + state.storageMap = new Map(state.storageMap) + state.storageMap.set(action.storage.key, action.storage) + } + return state case 'DELETE_FOLDER': { state = Object.assign({}, state) diff --git a/package.json b/package.json index 03652a9b..e2948050 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "js-sequence-diagrams": "^1000000.0.6", "katex": "^0.7.1", "lodash": "^4.11.1", + "lodash-move": "^1.1.1", "markdown-it": "^6.0.1", "markdown-it-checkbox": "^1.1.0", "markdown-it-emoji": "^1.1.1", diff --git a/yarn.lock b/yarn.lock index b3e2dc36..19f219fd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3909,6 +3909,12 @@ lodash-es@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" +lodash-move@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/lodash-move/-/lodash-move-1.1.1.tgz#59f76e0f1ac57e6d8683f531bec07c5b6ea4e348" + dependencies: + lodash "^4.6.1" + lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"