|
|
|
|
@@ -38,29 +38,13 @@ function data (state = defaultDataMap(), action) {
|
|
|
|
|
if (note.isTrashed) {
|
|
|
|
|
state.trashedSet.add(uniqueKey)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let storageNoteList = state.storageNoteMap.get(note.storage)
|
|
|
|
|
if (storageNoteList == null) {
|
|
|
|
|
storageNoteList = new Set(storageNoteList)
|
|
|
|
|
state.storageNoteMap.set(note.storage, storageNoteList)
|
|
|
|
|
}
|
|
|
|
|
const storageNoteList = getOrInitItem(state.storageNoteMap, note.storage)
|
|
|
|
|
storageNoteList.add(uniqueKey)
|
|
|
|
|
|
|
|
|
|
let folderNoteSet = state.folderNoteMap.get(folderKey)
|
|
|
|
|
if (folderNoteSet == null) {
|
|
|
|
|
folderNoteSet = new Set(folderNoteSet)
|
|
|
|
|
state.folderNoteMap.set(folderKey, folderNoteSet)
|
|
|
|
|
}
|
|
|
|
|
const folderNoteSet = getOrInitItem(state.folderNoteMap, folderKey)
|
|
|
|
|
folderNoteSet.add(uniqueKey)
|
|
|
|
|
|
|
|
|
|
note.tags.forEach((tag) => {
|
|
|
|
|
let tagNoteList = state.tagNoteMap.get(tag)
|
|
|
|
|
if (tagNoteList == null) {
|
|
|
|
|
tagNoteList = new Set(tagNoteList)
|
|
|
|
|
state.tagNoteMap.set(tag, tagNoteList)
|
|
|
|
|
}
|
|
|
|
|
tagNoteList.add(uniqueKey)
|
|
|
|
|
})
|
|
|
|
|
assignToTags(note.tags, state, uniqueKey)
|
|
|
|
|
})
|
|
|
|
|
return state
|
|
|
|
|
case 'UPDATE_NOTE':
|
|
|
|
|
@@ -74,40 +58,18 @@ function data (state = defaultDataMap(), action) {
|
|
|
|
|
state.noteMap = new Map(state.noteMap)
|
|
|
|
|
state.noteMap.set(uniqueKey, note)
|
|
|
|
|
|
|
|
|
|
if (oldNote == null || oldNote.isStarred !== note.isStarred) {
|
|
|
|
|
state.starredSet = new Set(state.starredSet)
|
|
|
|
|
if (note.isStarred) {
|
|
|
|
|
state.starredSet.add(uniqueKey)
|
|
|
|
|
} else {
|
|
|
|
|
state.starredSet.delete(uniqueKey)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
updateStarredChange(oldNote, note, state, uniqueKey)
|
|
|
|
|
|
|
|
|
|
if (oldNote == null || oldNote.isTrashed !== note.isTrashed) {
|
|
|
|
|
state.trashedSet = new Set(state.trashedSet)
|
|
|
|
|
if (note.isTrashed) {
|
|
|
|
|
state.trashedSet.add(uniqueKey)
|
|
|
|
|
state.starredSet.delete(uniqueKey)
|
|
|
|
|
|
|
|
|
|
note.tags.forEach(tag => {
|
|
|
|
|
let tagNoteList = state.tagNoteMap.get(tag)
|
|
|
|
|
if (tagNoteList != null) {
|
|
|
|
|
tagNoteList = new Set(tagNoteList)
|
|
|
|
|
tagNoteList.delete(uniqueKey)
|
|
|
|
|
state.tagNoteMap.set(tag, tagNoteList)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
removeFromTags(note.tags, state, uniqueKey)
|
|
|
|
|
} else {
|
|
|
|
|
state.trashedSet.delete(uniqueKey)
|
|
|
|
|
|
|
|
|
|
note.tags.forEach(tag => {
|
|
|
|
|
let tagNoteList = state.tagNoteMap.get(tag)
|
|
|
|
|
if (tagNoteList != null) {
|
|
|
|
|
tagNoteList = new Set(tagNoteList)
|
|
|
|
|
tagNoteList.add(uniqueKey)
|
|
|
|
|
state.tagNoteMap.set(tag, tagNoteList)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
assignToTags(note.tags, state, uniqueKey)
|
|
|
|
|
|
|
|
|
|
if (note.isStarred) {
|
|
|
|
|
state.starredSet.add(uniqueKey)
|
|
|
|
|
@@ -125,54 +87,12 @@ function data (state = defaultDataMap(), action) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Update foldermap if folder changed or post created
|
|
|
|
|
if (oldNote == null || oldNote.folder !== note.folder) {
|
|
|
|
|
state.folderNoteMap = new Map(state.folderNoteMap)
|
|
|
|
|
let folderNoteSet = state.folderNoteMap.get(folderKey)
|
|
|
|
|
folderNoteSet = new Set(folderNoteSet)
|
|
|
|
|
folderNoteSet.add(uniqueKey)
|
|
|
|
|
state.folderNoteMap.set(folderKey, folderNoteSet)
|
|
|
|
|
|
|
|
|
|
if (oldNote != null) {
|
|
|
|
|
const oldFolderKey = oldNote.storage + '-' + oldNote.folder
|
|
|
|
|
let oldFolderNoteList = state.folderNoteMap.get(oldFolderKey)
|
|
|
|
|
oldFolderNoteList = new Set(oldFolderNoteList)
|
|
|
|
|
oldFolderNoteList.delete(uniqueKey)
|
|
|
|
|
state.folderNoteMap.set(oldFolderKey, oldFolderNoteList)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
updateFolderChange(oldNote, note, state, folderKey, uniqueKey)
|
|
|
|
|
|
|
|
|
|
if (oldNote != null) {
|
|
|
|
|
const discardedTags = _.difference(oldNote.tags, note.tags)
|
|
|
|
|
const addedTags = _.difference(note.tags, oldNote.tags)
|
|
|
|
|
if (discardedTags.length + addedTags.length > 0) {
|
|
|
|
|
state.tagNoteMap = new Map(state.tagNoteMap)
|
|
|
|
|
|
|
|
|
|
discardedTags.forEach((tag) => {
|
|
|
|
|
let tagNoteList = state.tagNoteMap.get(tag)
|
|
|
|
|
if (tagNoteList != null) {
|
|
|
|
|
tagNoteList = new Set(tagNoteList)
|
|
|
|
|
tagNoteList.delete(uniqueKey)
|
|
|
|
|
state.tagNoteMap.set(tag, tagNoteList)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
addedTags.forEach((tag) => {
|
|
|
|
|
let tagNoteList = state.tagNoteMap.get(tag)
|
|
|
|
|
tagNoteList = new Set(tagNoteList)
|
|
|
|
|
tagNoteList.add(uniqueKey)
|
|
|
|
|
|
|
|
|
|
state.tagNoteMap.set(tag, tagNoteList)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
updateTagChanges(oldNote, note, state, uniqueKey)
|
|
|
|
|
} else {
|
|
|
|
|
state.tagNoteMap = new Map(state.tagNoteMap)
|
|
|
|
|
note.tags.forEach((tag) => {
|
|
|
|
|
let tagNoteList = state.tagNoteMap.get(tag)
|
|
|
|
|
if (tagNoteList == null) {
|
|
|
|
|
tagNoteList = new Set(tagNoteList)
|
|
|
|
|
state.tagNoteMap.set(tag, tagNoteList)
|
|
|
|
|
}
|
|
|
|
|
tagNoteList.add(uniqueKey)
|
|
|
|
|
})
|
|
|
|
|
assignToTags(note.tags, state, uniqueKey)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return state
|
|
|
|
|
@@ -220,26 +140,10 @@ function data (state = defaultDataMap(), action) {
|
|
|
|
|
originFolderList.delete(originKey)
|
|
|
|
|
state.folderNoteMap.set(originFolderKey, originFolderList)
|
|
|
|
|
|
|
|
|
|
// From tagMap
|
|
|
|
|
if (originNote.tags.length > 0) {
|
|
|
|
|
state.tagNoteMap = new Map(state.tagNoteMap)
|
|
|
|
|
originNote.tags.forEach((tag) => {
|
|
|
|
|
let noteSet = state.tagNoteMap.get(tag)
|
|
|
|
|
noteSet = new Set(noteSet)
|
|
|
|
|
noteSet.delete(originKey)
|
|
|
|
|
state.tagNoteMap.set(tag, noteSet)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
removeFromTags(originNote.tags, state, originKey)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (oldNote == null || oldNote.isStarred !== note.isStarred) {
|
|
|
|
|
state.starredSet = new Set(state.starredSet)
|
|
|
|
|
if (note.isStarred) {
|
|
|
|
|
state.starredSet.add(uniqueKey)
|
|
|
|
|
} else {
|
|
|
|
|
state.starredSet.delete(uniqueKey)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
updateStarredChange(oldNote, note, state, uniqueKey)
|
|
|
|
|
|
|
|
|
|
if (oldNote == null || oldNote.isTrashed !== note.isTrashed) {
|
|
|
|
|
state.trashedSet = new Set(state.trashedSet)
|
|
|
|
|
@@ -260,55 +164,13 @@ function data (state = defaultDataMap(), action) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Update foldermap if folder changed or post created
|
|
|
|
|
if (oldNote == null || oldNote.folder !== note.folder) {
|
|
|
|
|
state.folderNoteMap = new Map(state.folderNoteMap)
|
|
|
|
|
let folderNoteList = state.folderNoteMap.get(folderKey)
|
|
|
|
|
folderNoteList = new Set(folderNoteList)
|
|
|
|
|
folderNoteList.add(uniqueKey)
|
|
|
|
|
state.folderNoteMap.set(folderKey, folderNoteList)
|
|
|
|
|
|
|
|
|
|
if (oldNote != null) {
|
|
|
|
|
const oldFolderKey = oldNote.storage + '-' + oldNote.folder
|
|
|
|
|
let oldFolderNoteList = state.folderNoteMap.get(oldFolderKey)
|
|
|
|
|
oldFolderNoteList = new Set(oldFolderNoteList)
|
|
|
|
|
oldFolderNoteList.delete(uniqueKey)
|
|
|
|
|
state.folderNoteMap.set(oldFolderKey, oldFolderNoteList)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
updateFolderChange(oldNote, note, state, folderKey, uniqueKey)
|
|
|
|
|
|
|
|
|
|
// Remove from old folder map
|
|
|
|
|
if (oldNote != null) {
|
|
|
|
|
const discardedTags = _.difference(oldNote.tags, note.tags)
|
|
|
|
|
const addedTags = _.difference(note.tags, oldNote.tags)
|
|
|
|
|
if (discardedTags.length + addedTags.length > 0) {
|
|
|
|
|
state.tagNoteMap = new Map(state.tagNoteMap)
|
|
|
|
|
|
|
|
|
|
discardedTags.forEach((tag) => {
|
|
|
|
|
let tagNoteList = state.tagNoteMap.get(tag)
|
|
|
|
|
if (tagNoteList != null) {
|
|
|
|
|
tagNoteList = new Set(tagNoteList)
|
|
|
|
|
tagNoteList.delete(uniqueKey)
|
|
|
|
|
state.tagNoteMap.set(tag, tagNoteList)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
addedTags.forEach((tag) => {
|
|
|
|
|
let tagNoteList = state.tagNoteMap.get(tag)
|
|
|
|
|
tagNoteList = new Set(tagNoteList)
|
|
|
|
|
tagNoteList.add(uniqueKey)
|
|
|
|
|
|
|
|
|
|
state.tagNoteMap.set(tag, tagNoteList)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
updateTagChanges(oldNote, note, state, uniqueKey)
|
|
|
|
|
} else {
|
|
|
|
|
state.tagNoteMap = new Map(state.tagNoteMap)
|
|
|
|
|
note.tags.forEach((tag) => {
|
|
|
|
|
let tagNoteList = state.tagNoteMap.get(tag)
|
|
|
|
|
if (tagNoteList == null) {
|
|
|
|
|
tagNoteList = new Set(tagNoteList)
|
|
|
|
|
state.tagNoteMap.set(tag, tagNoteList)
|
|
|
|
|
}
|
|
|
|
|
tagNoteList.add(uniqueKey)
|
|
|
|
|
})
|
|
|
|
|
assignToTags(note.tags, state, uniqueKey)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return state
|
|
|
|
|
@@ -347,16 +209,7 @@ function data (state = defaultDataMap(), action) {
|
|
|
|
|
folderSet.delete(uniqueKey)
|
|
|
|
|
state.folderNoteMap.set(folderKey, folderSet)
|
|
|
|
|
|
|
|
|
|
// From tagMap
|
|
|
|
|
if (targetNote.tags.length > 0) {
|
|
|
|
|
state.tagNoteMap = new Map(state.tagNoteMap)
|
|
|
|
|
targetNote.tags.forEach((tag) => {
|
|
|
|
|
let noteSet = state.tagNoteMap.get(tag)
|
|
|
|
|
noteSet = new Set(noteSet)
|
|
|
|
|
noteSet.delete(uniqueKey)
|
|
|
|
|
state.tagNoteMap.set(tag, noteSet)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
removeFromTags(targetNote.tags, state, uniqueKey)
|
|
|
|
|
}
|
|
|
|
|
state.noteMap = new Map(state.noteMap)
|
|
|
|
|
state.noteMap.delete(uniqueKey)
|
|
|
|
|
@@ -420,9 +273,7 @@ function data (state = defaultDataMap(), action) {
|
|
|
|
|
// 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)
|
|
|
|
|
const tagNoteSet = getOrInitItem(state.tagNoteMap, tag)
|
|
|
|
|
tagNoteSet.delete(noteKey)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
@@ -449,11 +300,7 @@ function data (state = defaultDataMap(), action) {
|
|
|
|
|
state.starredSet.add(uniqueKey)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let storageNoteList = state.storageNoteMap.get(note.storage)
|
|
|
|
|
if (storageNoteList == null) {
|
|
|
|
|
storageNoteList = new Set(storageNoteList)
|
|
|
|
|
state.storageNoteMap.set(note.storage, storageNoteList)
|
|
|
|
|
}
|
|
|
|
|
const storageNoteList = getOrInitItem(state.tagNoteMap, note.storage)
|
|
|
|
|
storageNoteList.add(uniqueKey)
|
|
|
|
|
|
|
|
|
|
let folderNoteSet = state.folderNoteMap.get(folderKey)
|
|
|
|
|
@@ -464,11 +311,7 @@ function data (state = defaultDataMap(), action) {
|
|
|
|
|
folderNoteSet.add(uniqueKey)
|
|
|
|
|
|
|
|
|
|
note.tags.forEach((tag) => {
|
|
|
|
|
let tagNoteSet = state.tagNoteMap.get(tag)
|
|
|
|
|
if (tagNoteSet == null) {
|
|
|
|
|
tagNoteSet = new Set(tagNoteSet)
|
|
|
|
|
state.tagNoteMap.set(tag, tagNoteSet)
|
|
|
|
|
}
|
|
|
|
|
const tagNoteSet = getOrInitItem(state.tagNoteMap, tag)
|
|
|
|
|
tagNoteSet.add(uniqueKey)
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
@@ -559,6 +402,73 @@ function status (state = defaultStatus, action) {
|
|
|
|
|
return state
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function updateStarredChange (oldNote, note, state, uniqueKey) {
|
|
|
|
|
if (oldNote == null || oldNote.isStarred !== note.isStarred) {
|
|
|
|
|
state.starredSet = new Set(state.starredSet)
|
|
|
|
|
if (note.isStarred) {
|
|
|
|
|
state.starredSet.add(uniqueKey)
|
|
|
|
|
} else {
|
|
|
|
|
state.starredSet.delete(uniqueKey)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function updateFolderChange (oldNote, note, state, folderKey, uniqueKey) {
|
|
|
|
|
if (oldNote == null || oldNote.folder !== note.folder) {
|
|
|
|
|
state.folderNoteMap = new Map(state.folderNoteMap)
|
|
|
|
|
let folderNoteList = state.folderNoteMap.get(folderKey)
|
|
|
|
|
folderNoteList = new Set(folderNoteList)
|
|
|
|
|
folderNoteList.add(uniqueKey)
|
|
|
|
|
state.folderNoteMap.set(folderKey, folderNoteList)
|
|
|
|
|
|
|
|
|
|
if (oldNote != null) {
|
|
|
|
|
const oldFolderKey = oldNote.storage + '-' + oldNote.folder
|
|
|
|
|
let oldFolderNoteList = state.folderNoteMap.get(oldFolderKey)
|
|
|
|
|
oldFolderNoteList = new Set(oldFolderNoteList)
|
|
|
|
|
oldFolderNoteList.delete(uniqueKey)
|
|
|
|
|
state.folderNoteMap.set(oldFolderKey, oldFolderNoteList)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function updateTagChanges (oldNote, note, state, uniqueKey) {
|
|
|
|
|
const discardedTags = _.difference(oldNote.tags, note.tags)
|
|
|
|
|
const addedTags = _.difference(note.tags, oldNote.tags)
|
|
|
|
|
if (discardedTags.length + addedTags.length > 0) {
|
|
|
|
|
removeFromTags(discardedTags, state, uniqueKey)
|
|
|
|
|
assignToTags(addedTags, state, uniqueKey)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function assignToTags (tags, state, uniqueKey) {
|
|
|
|
|
state.tagNoteMap = new Map(state.tagNoteMap)
|
|
|
|
|
tags.forEach((tag) => {
|
|
|
|
|
const tagNoteList = getOrInitItem(state.tagNoteMap, tag)
|
|
|
|
|
tagNoteList.add(uniqueKey)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function removeFromTags (tags, state, uniqueKey) {
|
|
|
|
|
state.tagNoteMap = new Map(state.tagNoteMap)
|
|
|
|
|
tags.forEach(tag => {
|
|
|
|
|
let tagNoteList = state.tagNoteMap.get(tag)
|
|
|
|
|
if (tagNoteList != null) {
|
|
|
|
|
tagNoteList = new Set(tagNoteList)
|
|
|
|
|
tagNoteList.delete(uniqueKey)
|
|
|
|
|
state.tagNoteMap.set(tag, tagNoteList)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getOrInitItem (target, key) {
|
|
|
|
|
let results = target.get(key)
|
|
|
|
|
if (results == null) {
|
|
|
|
|
results = new Set()
|
|
|
|
|
target.set(key, results)
|
|
|
|
|
}
|
|
|
|
|
return results
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const reducer = combineReducers({
|
|
|
|
|
data,
|
|
|
|
|
config,
|
|
|
|
|
|