From 0e4eec10b94be88498a22405254709105a72751a Mon Sep 17 00:00:00 2001 From: zadam Date: Thu, 7 May 2020 23:34:13 +0200 Subject: [PATCH] added "restore this revision" button --- src/public/app/dialogs/note_revisions.js | 17 +++++++++++++++++ src/routes/api/note_revisions.js | 18 +++++++++++++++++- src/routes/routes.js | 1 + 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/public/app/dialogs/note_revisions.js b/src/public/app/dialogs/note_revisions.js index a448875fb..ad2e1c45f 100644 --- a/src/public/app/dialogs/note_revisions.js +++ b/src/public/app/dialogs/note_revisions.js @@ -82,6 +82,21 @@ async function setContentPane() { $title.html(revisionItem.title); + const $restoreRevisionButton = $(''); + + $restoreRevisionButton.on('click', async () => { + const confirmDialog = await import('../dialogs/confirm.js'); + const text = 'Do you want to restore this revision? This will overwrite current title/content of the note with this revision.'; + + if (await confirmDialog.confirm(text)) { + await server.put(`notes/${revisionItem.noteId}/restore-revision/${revisionItem.noteRevisionId}`); + + $dialog.modal('hide'); + + toastService.showMessage('Note revision has been restored.'); + } + }); + const $eraseRevisionButton = $(''); $eraseRevisionButton.on('click', async () => { @@ -98,6 +113,8 @@ async function setContentPane() { }); $titleButtons + .append($restoreRevisionButton) + .append('   ') .append($eraseRevisionButton) .append('   '); diff --git a/src/routes/api/note_revisions.js b/src/routes/api/note_revisions.js index 11131b83b..023ba30ee 100644 --- a/src/routes/api/note_revisions.js +++ b/src/routes/api/note_revisions.js @@ -3,6 +3,7 @@ const repository = require('../../services/repository'); const noteCacheService = require('../../services/note_cache'); const protectedSessionService = require('../../services/protected_session'); +const noteRevisionService = require('../../services/note_revisions'); const utils = require('../../services/utils'); const path = require('path'); @@ -109,6 +110,20 @@ async function eraseNoteRevision(req) { } } +async function restoreNoteRevision(req) { + const noteRevision = await repository.getNoteRevision(req.params.noteRevisionId); + + if (noteRevision && !noteRevision.isErased) { + const note = await noteRevision.getNote(); + + await noteRevisionService.createNoteRevision(note); + + note.title = noteRevision.title; + await note.setContent(await noteRevision.getContent()); + await note.save(); + } +} + async function getEditedNotesOnDate(req) { const date = utils.sanitizeSql(req.params.date); @@ -141,5 +156,6 @@ module.exports = { downloadNoteRevision, getEditedNotesOnDate, eraseAllNoteRevisions, - eraseNoteRevision + eraseNoteRevision, + restoreNoteRevision }; \ No newline at end of file diff --git a/src/routes/routes.js b/src/routes/routes.js index 439ae1201..1de0a7e29 100644 --- a/src/routes/routes.js +++ b/src/routes/routes.js @@ -145,6 +145,7 @@ function register(app) { apiRoute(GET, '/api/notes/:noteId/revisions/:noteRevisionId', noteRevisionsApiRoute.getNoteRevision); apiRoute(DELETE, '/api/notes/:noteId/revisions/:noteRevisionId', noteRevisionsApiRoute.eraseNoteRevision); route(GET, '/api/notes/:noteId/revisions/:noteRevisionId/download', [auth.checkApiAuthOrElectron], noteRevisionsApiRoute.downloadNoteRevision); + apiRoute(PUT, '/api/notes/:noteId/restore-revision/:noteRevisionId', noteRevisionsApiRoute.restoreNoteRevision); apiRoute(POST, '/api/notes/relation-map', notesApiRoute.getRelationMap); apiRoute(PUT, '/api/notes/:noteId/change-title', notesApiRoute.changeTitle); apiRoute(POST, '/api/notes/:noteId/duplicate/:parentNoteId', notesApiRoute.duplicateNote);