From 1ab24b5bf88232545a24381b2d844efdaa8a5a10 Mon Sep 17 00:00:00 2001 From: korelstar Date: Sat, 26 Oct 2019 22:11:28 +0200 Subject: [PATCH] add undo for deleted notes --- src/App.vue | 7 +++++-- src/NotesService.js | 11 +++++++++- src/components/NavigationNoteItem.vue | 30 ++++++++++++++++++++++----- 3 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/App.vue b/src/App.vue index bb1ede6ba..32181906c 100644 --- a/src/App.vue +++ b/src/App.vue @@ -71,12 +71,15 @@ export default { const search = this.filter.search.toLowerCase() const notes = this.notes.filter(note => { - const searchFields = [ 'title', 'category' ] + if (note.deleting === 'deleting') { + return false + } if (this.filter.category !== null && this.filter.category !== note.category && !note.category.startsWith(this.filter.category + '/')) { return false } + const searchFields = [ 'title', 'category' ] if (search !== '') { return searchFields.some( searchField => note[searchField].toLowerCase().indexOf(search) !== -1 @@ -144,7 +147,7 @@ export default { }, routeFirst() { - const availableNotes = this.filteredNotes.filter(note => !note.error) + const availableNotes = this.filteredNotes.filter(note => !note.error && !note.deleting) if (availableNotes.length > 0) { this.routeToNote(availableNotes[0].id) } else { diff --git a/src/NotesService.js b/src/NotesService.js index 8edbb43b5..a8b6c7c26 100644 --- a/src/NotesService.js +++ b/src/NotesService.js @@ -107,8 +107,16 @@ export default { }) }, + prepareDeleteNote(noteId) { + store.commit('setNoteAttribute', { noteId: noteId, attribute: 'deleting', value: 'prepare' }) + }, + + undoDeleteNote(noteId) { + store.commit('setNoteAttribute', { noteId: noteId, attribute: 'deleting', value: null }) + }, + deleteNote(noteId) { - store.commit('setNoteAttribute', { noteId: noteId, attribute: 'deleting', value: true }) + store.commit('setNoteAttribute', { noteId: noteId, attribute: 'deleting', value: 'deleting' }) return axios .delete(this.url('/notes/' + noteId)) .then(() => { @@ -117,6 +125,7 @@ export default { .catch(err => { console.error(err) this.handleSyncError(this.t('notes', 'Deleting note {id} has failed.', { id: noteId })) + this.undoDeleteNote(noteId) throw err }) }, diff --git a/src/components/NavigationNoteItem.vue b/src/components/NavigationNoteItem.vue index 4b508146e..691ce9a87 100644 --- a/src/components/NavigationNoteItem.vue +++ b/src/components/NavigationNoteItem.vue @@ -5,8 +5,10 @@ :menu-open.sync="actionsOpen" :to="{ name: 'note', params: { noteId: note.id.toString() } }" :class="{ actionsOpen }" + :undo="isPrepareDeleting" + @undo="onUndoDeleteNote" > -