1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-13 01:36:22 +00:00

UPDATE_FOLDER & DELETE_FOLDER

fix store bug when creating note
This commit is contained in:
Dick Choi
2016-09-02 09:33:01 +09:00
parent 4ee49d5991
commit a391ac682d
5 changed files with 88 additions and 31 deletions

View File

@@ -58,7 +58,7 @@ class MutableSet {
} }
forEach (...args) { forEach (...args) {
return this._map.forEach(...args) return this._set.forEach(...args)
} }
[Symbol.iterator] () { [Symbol.iterator] () {

View File

@@ -178,8 +178,11 @@ class NoteList extends React.Component {
let folderNoteKeyList = data.folderNoteMap let folderNoteKeyList = data.folderNoteMap
.get(storage.key + '-' + folder.key) .get(storage.key + '-' + folder.key)
return folderNoteKeyList
.map((uniqueKey) => data.noteMap.get(uniqueKey)) return folderNoteKeyList != null
? folderNoteKeyList
.map((uniqueKey) => data.noteMap.get(uniqueKey))
: []
} }
handleNoteClick (uniqueKey) { handleNoteClick (uniqueKey) {

View File

@@ -7,8 +7,7 @@ import dataApi from 'browser/main/lib/dataApi'
import store from 'browser/main/store' import store from 'browser/main/store'
const electron = require('electron') const electron = require('electron')
const { shell, remote } = electron const { shell } = electron
const { Menu, MenuItem } = remote
import { SketchPicker } from 'react-color' import { SketchPicker } from 'react-color'
class UnstyledFolderItem extends React.Component { class UnstyledFolderItem extends React.Component {
@@ -42,10 +41,10 @@ class UnstyledFolderItem extends React.Component {
color: this.state.folder.color, color: this.state.folder.color,
name: this.state.folder.name name: this.state.folder.name
}) })
.then((storage) => { .then((data) => {
store.dispatch({ store.dispatch({
type: 'UPDATE_STORAGE', type: 'UPDATE_FOLDER',
storage: storage storage: data.storage
}) })
this.setState({ this.setState({
status: 'IDLE' status: 'IDLE'
@@ -146,12 +145,12 @@ class UnstyledFolderItem extends React.Component {
handleDeleteConfirmButtonClick (e) { handleDeleteConfirmButtonClick (e) {
let { storage, folder } = this.props let { storage, folder } = this.props
dataApi dataApi
.removeFolder(storage.key, folder.key) .deleteFolder(storage.key, folder.key)
.then((storage) => { .then((data) => {
store.dispatch({ store.dispatch({
type: 'REMOVE_FOLDER', type: 'DELETE_FOLDER',
key: folder.key, storage: data.storage,
storage: storage folderKey: data.folderKey
}) })
}) })
} }
@@ -257,10 +256,10 @@ class StorageItem extends React.Component {
} }
dataApi.createFolder(storage.key, input) dataApi.createFolder(storage.key, input)
.then((storage) => { .then((data) => {
store.dispatch({ store.dispatch({
type: 'ADD_FOLDER', type: 'UPDATE_FOLDER',
storage: storage storage: data.storage
}) })
}) })
.catch((err) => { .catch((err) => {

View File

@@ -51,10 +51,10 @@ class StoragesTab extends React.Component {
} }
renderList () { renderList () {
let { storages, boundingBox } = this.props let { data, boundingBox } = this.props
if (!boundingBox) { return null } if (!boundingBox) { return null }
let storageList = storages.map((storage) => { let storageList = data.storageMap.map((storage) => {
return <StorageItem return <StorageItem
key={storage.key} key={storage.key}
storage={storage} storage={storage}

View File

@@ -40,12 +40,12 @@ function data (state = defaultDataMap(), action) {
} }
storageNoteList.add(uniqueKey) storageNoteList.add(uniqueKey)
let folderNoteList = state.folderNoteMap.get(folderKey) let folderNoteSet = state.folderNoteMap.get(folderKey)
if (folderNoteList == null) { if (folderNoteSet == null) {
folderNoteList = new Set(folderNoteList) folderNoteSet = new Set(folderNoteSet)
state.folderNoteMap.set(folderKey, folderNoteList) state.folderNoteMap.set(folderKey, folderNoteSet)
} }
folderNoteList.add(uniqueKey) folderNoteSet.add(uniqueKey)
note.tags.forEach((tag) => { note.tags.forEach((tag) => {
let tagNoteList = state.tagNoteMap.get(tag) let tagNoteList = state.tagNoteMap.get(tag)
@@ -80,19 +80,19 @@ function data (state = defaultDataMap(), action) {
// Update storageNoteMap if oldNote doesn't exist // Update storageNoteMap if oldNote doesn't exist
if (oldNote == null) { if (oldNote == null) {
state.storeageNoteMap = new Map(state.storeageNoteMap) state.storeageNoteMap = new Map(state.storeageNoteMap)
let noteSet = state.storeageNoteMap.get(note.storage) let storageNoteSet = state.storeageNoteMap.get(note.storage)
noteSet = new Set(noteSet) storageNoteSet = new Set(storageNoteSet)
noteSet.add(uniqueKey) storageNoteSet.add(uniqueKey)
state.folderNoteMap.set(folderKey, noteSet) state.storeageNoteMap.set(note.storage, storageNoteSet)
} }
// Update foldermap if folder changed or post created // Update foldermap if folder changed or post created
if (oldNote == null || oldNote.folder !== note.folder) { if (oldNote == null || oldNote.folder !== note.folder) {
state.folderNoteMap = new Map(state.folderNoteMap) state.folderNoteMap = new Map(state.folderNoteMap)
let folderNoteList = state.folderNoteMap.get(folderKey) let folderNoteSet = state.folderNoteMap.get(folderKey)
folderNoteList = new Set(folderNoteList) folderNoteSet = new Set(folderNoteSet)
folderNoteList.add(uniqueKey) folderNoteSet.add(uniqueKey)
state.folderNoteMap.set(folderKey, folderNoteList) state.folderNoteMap.set(folderKey, folderNoteSet)
if (oldNote != null) { if (oldNote != null) {
let oldFolderKey = oldNote.storage + '-' + oldNote.folder let oldFolderKey = oldNote.storage + '-' + oldNote.folder
@@ -305,6 +305,61 @@ function data (state = defaultDataMap(), action) {
state.noteMap.delete(uniqueKey) state.noteMap.delete(uniqueKey)
return state return state
} }
case 'UPDATE_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)
state.storageMap = new Map(state.storageMap)
state.storageMap.set(action.storage.key, action.storage)
// Get note list from folder-note map
// and delete note set from folder-note map
let folderKey = action.storage.key + '-' + action.folderKey
let noteSet = state.folderNoteMap.get(folderKey)
state.folderNoteMap = new Map(state.folderNoteMap)
state.folderNoteMap.delete(folderKey)
state.noteMap = new Map(state.noteMap)
state.storageNoteMap = new Map(state.storageNoteMap)
let storageNoteSet = state.storageNoteMap.get(action.storage.key)
storageNoteSet = new Set(storageNoteSet)
storageNoteSet.delete()
noteSet.forEach(function handleNoteKey (noteKey) {
// Get note from noteMap
let note = state.noteMap.get(noteKey)
if (note != null) {
state.noteMap.delete(noteKey)
// From storageSet
let storageNoteSet = state.storageNoteMap.get(note.storage)
storageNoteSet = new Set(storageNoteSet)
state.storageNoteMap.set(note.storage, storageNoteSet)
storageNoteSet.delete(noteKey)
// From starredSet
if (note.isStarred) {
state.starredSet = new Set(state.starredSet)
state.starredSet.delete(noteKey)
}
// Delete key from tag map
state.tagNoteMap = new Map(state.tagNoteMap)
note.tags.forEach((tag) => {
let tagNoteSet = state.tagNoteMap.get(tag)
tagNoteSet = new Set(tagNoteSet)
state.tagNoteMap.set(tag, tagNoteSet)
tagNoteSet.delete(noteKey)
})
}
})
}
return state
} }
return state return state
} }