diff --git a/browser/main/NoteList/index.js b/browser/main/NoteList/index.js
index 5d026486..399687c5 100644
--- a/browser/main/NoteList/index.js
+++ b/browser/main/NoteList/index.js
@@ -257,6 +257,11 @@ class NoteList extends React.Component {
return searchFromNotes(this.props.data, searchInputText)
}
+ if (location.pathname.match(/\/trashed/)) {
+ return data.trashedSet.toJS()
+ .map((uniqueKey) => data.noteMap.get(uniqueKey))
+ }
+
let storageKey = params.storageKey
let folderKey = params.folderKey
let storage = data.storageMap.get(storageKey)
@@ -411,6 +416,10 @@ class NoteList extends React.Component {
: sortByUpdatedAt
this.notes = notes = this.getNotes()
.sort(sortFunc)
+ .filter((note) => {
+ // this is for the trash box
+ if (note.isTrashed !== true || location.pathname === '/trashed') return true
+ })
let noteList = notes
.map(note => {
diff --git a/browser/main/SideNav/index.js b/browser/main/SideNav/index.js
index f31ae96c..909c6777 100644
--- a/browser/main/SideNav/index.js
+++ b/browser/main/SideNav/index.js
@@ -33,12 +33,18 @@ class SideNav extends React.Component {
})
}
+ handleTrashedButtonClick (e) {
+ let { router } = this.context
+ router.push('/trashed')
+ }
+
render () {
let { data, location, config, dispatch } = this.props
let isFolded = config.isSideNavFolded
let isHomeActive = !!location.pathname.match(/^\/home$/)
let isStarredActive = !!location.pathname.match(/^\/starred$/)
+ let isTrashedActive = !!location.pathname.match(/^\/trashed$/)
let storageList = data.storageMap.map((storage, key) => {
return
this.handleHomeButtonClick(e)}
isStarredActive={isStarredActive}
+ isTrashedActive={isTrashedActive}
handleStarredButtonClick={(e) => this.handleStarredButtonClick(e)}
+ handleTrashedButtonClick={(e) => this.handleTrashedButtonClick(e)}
/>
diff --git a/browser/main/index.js b/browser/main/index.js
index 07774fa6..d36a4c9e 100644
--- a/browser/main/index.js
+++ b/browser/main/index.js
@@ -60,6 +60,7 @@ ReactDOM.render((
+
diff --git a/browser/main/lib/dataApi/createNote.js b/browser/main/lib/dataApi/createNote.js
index 83ea85e4..e0acc74e 100644
--- a/browser/main/lib/dataApi/createNote.js
+++ b/browser/main/lib/dataApi/createNote.js
@@ -10,6 +10,7 @@ function validateInput (input) {
input.tags = input.tags.filter((tag) => _.isString(tag) && tag.trim().length > 0)
if (!_.isString(input.title)) input.title = ''
input.isStarred = !!input.isStarred
+ input.isTrashed = !!input.isTrashed
switch (input.type) {
case 'MARKDOWN_NOTE':
diff --git a/browser/main/lib/dataApi/updateNote.js b/browser/main/lib/dataApi/updateNote.js
index 7dc4c6c7..f1b1f232 100644
--- a/browser/main/lib/dataApi/updateNote.js
+++ b/browser/main/lib/dataApi/updateNote.js
@@ -21,6 +21,10 @@ function validateInput (input) {
validatedInput.isStarred = !!input.isStarred
}
+ if (input.isTrashed != null) {
+ validatedInput.isTrashed = !!input.isTrashed
+ }
+
validatedInput.type = input.type
switch (input.type) {
case 'MARKDOWN_NOTE':
@@ -101,6 +105,7 @@ function updateNote (storageKey, noteKey, input) {
noteData.createdAt = new Date()
noteData.updatedAt = new Date()
noteData.isStarred = false
+ noteData.isTrashed = false
noteData.tags = []
}
diff --git a/browser/main/store.js b/browser/main/store.js
index 628e297e..68c46876 100644
--- a/browser/main/store.js
+++ b/browser/main/store.js
@@ -11,7 +11,8 @@ function defaultDataMap () {
starredSet: new Set(),
storageNoteMap: new Map(),
folderNoteMap: new Map(),
- tagNoteMap: new Map()
+ tagNoteMap: new Map(),
+ trashedSet: new Set()
}
}
@@ -34,6 +35,10 @@ function data (state = defaultDataMap(), action) {
state.starredSet.add(uniqueKey)
}
+ if (note.isTrashed) {
+ state.trashedSet.add(uniqueKey)
+ }
+
let storageNoteList = state.storageNoteMap.get(note.storage)
if (storageNoteList == null) {
storageNoteList = new Set(storageNoteList)
@@ -78,6 +83,15 @@ function data (state = defaultDataMap(), action) {
}
}
+ if (oldNote == null || oldNote.isTrashed !== note.isTrashed) {
+ state.trashedSet = new Set(state.trashedSet)
+ if (note.isTrashed) {
+ state.trashedSet.add(uniqueKey)
+ } else {
+ state.trashedSet.delete(uniqueKey)
+ }
+ }
+
// Update storageNoteMap if oldNote doesn't exist
if (oldNote == null) {
state.storageNoteMap = new Map(state.storageNoteMap)
@@ -163,6 +177,11 @@ function data (state = defaultDataMap(), action) {
state.starredSet.delete(originKey)
}
+ if (originNote.isTrashed) {
+ state.trashedSet = new Set(state.trashedSet)
+ state.trashedSet.delete(originKey)
+ }
+
// From storageNoteMap
state.storageNoteMap = new Map(state.storageNoteMap)
let noteSet = state.storageNoteMap.get(originNote.storage)
@@ -199,6 +218,15 @@ function data (state = defaultDataMap(), action) {
}
}
+ if (oldNote == null || oldNote.isTrashed !== note.isTrashed) {
+ state.trashedSet = new Set(state.trashedSet)
+ if (note.isTrashed) {
+ state.trashedSet.add(uniqueKey)
+ } else {
+ state.trashedSet.delete(uniqueKey)
+ }
+ }
+
// Update storageNoteMap if oldNote doesn't exist
if (oldNote == null) {
state.storageNoteMap = new Map(state.storageNoteMap)
@@ -283,6 +311,11 @@ function data (state = defaultDataMap(), action) {
state.starredSet.delete(uniqueKey)
}
+ if (targetNote.isTrashed) {
+ state.trashedSet = new Set(state.trashedSet)
+ state.trashedSet.delete(uniqueKey)
+ }
+
// From folderNoteMap
let folderKey = targetNote.storage + '-' + targetNote.folder
state.folderNoteMap = new Map(state.folderNoteMap)
@@ -348,6 +381,11 @@ function data (state = defaultDataMap(), action) {
state.starredSet.delete(noteKey)
}
+ if (note.isTrashed) {
+ state.trashedSet = new Set(state.trashedSet)
+ state.trashedSet.delete(noteKey)
+ }
+
// Delete key from tag map
state.tagNoteMap = new Map(state.tagNoteMap)
note.tags.forEach((tag) => {