allow deleting notes including all the clones, closes #629

This commit is contained in:
zadam 2019-09-01 20:57:25 +02:00
parent c614bc3263
commit 8dadc7e518
5 changed files with 35 additions and 12 deletions

View File

@ -86,21 +86,44 @@ async function deleteNodes(nodes) {
return false; return false;
} }
const nodeTitles = $("<ul>").append(...nodes.map(node => $("<li>").text(node.title))); const $deleteClonesCheckbox = $('<div class="form-check">')
const confirmText = $("<div>").text('This will delete the following notes and their sub-notes: ').append(nodeTitles); .append($('<input type="checkbox" class="form-check-input" id="delete-clones-checkbox">'))
.append($('<label for="delete-clones-checkbox">')
.text("delete also all note clones")
.attr("title", "all clones of selected notes will be deleted and as such the whole note will be deleted."));
const $nodeTitles = $("<ul>").append(...nodes.map(node => $("<li>").text(node.title)));
const $confirmText = $("<div>")
.append($("<p>").text('This will delete the following notes and their sub-notes: '))
.append($nodeTitles)
.append($deleteClonesCheckbox);
const confirmDialog = await import('../dialogs/confirm.js'); const confirmDialog = await import('../dialogs/confirm.js');
if (!await confirmDialog.confirm(confirmText)) { if (!await confirmDialog.confirm($confirmText)) {
return false; return false;
} }
for (const node of nodes) { const deleteClones = $deleteClonesCheckbox.find("input").is(":checked");
const {noteDeleted} = await server.remove('branches/' + node.data.branchId);
for (const node of nodes) {
if (deleteClones) {
await server.remove('notes/' + node.data.noteId);
if (noteDeleted) {
noteDetailService.noteDeleted(node.data.noteId); noteDetailService.noteDeleted(node.data.noteId);
} }
else {
const {noteDeleted} = await server.remove('branches/' + node.data.branchId);
if (noteDeleted) {
noteDetailService.noteDeleted(node.data.noteId);
}
}
}
if (deleteClones) {
// if clones are also deleted we give up with targeted cleanup of the tree
treeService.reload();
return true;
} }
// following code assumes that nodes contain only top-most selected nodes - getSelectedNodes has been // following code assumes that nodes contain only top-most selected nodes - getSelectedNodes has been

View File

@ -103,7 +103,7 @@ async function deleteBranch(req) {
const branch = await repository.getBranch(req.params.branchId); const branch = await repository.getBranch(req.params.branchId);
return { return {
noteDeleted: await notes.deleteNote(branch) noteDeleted: await notes.deleteBranch(branch)
}; };
} }

View File

@ -77,7 +77,7 @@ async function deleteNote(req) {
const note = await repository.getNote(noteId); const note = await repository.getNote(noteId);
for (const branch of await note.getBranches()) { for (const branch of await note.getBranches()) {
await noteService.deleteNote(branch); await noteService.deleteBranch(branch);
} }
} }

View File

@ -53,7 +53,7 @@ async function ensureNoteIsAbsentFromParent(noteId, parentNoteId) {
const branch = await repository.getEntity(`SELECT * FROM branches WHERE noteId = ? AND parentNoteId = ? AND isDeleted = 0`, [noteId, parentNoteId]); const branch = await repository.getEntity(`SELECT * FROM branches WHERE noteId = ? AND parentNoteId = ? AND isDeleted = 0`, [noteId, parentNoteId]);
if (branch) { if (branch) {
await noteService.deleteNote(branch); await noteService.deleteBranch(branch);
} }
} }

View File

@ -384,7 +384,7 @@ async function updateNote(noteId, noteUpdates) {
} }
/** @return {boolean} - true if note has been deleted, false otherwise */ /** @return {boolean} - true if note has been deleted, false otherwise */
async function deleteNote(branch) { async function deleteBranch(branch) {
if (!branch || branch.isDeleted) { if (!branch || branch.isDeleted) {
return false; return false;
} }
@ -407,7 +407,7 @@ async function deleteNote(branch) {
await note.save(); await note.save();
for (const childBranch of await note.getChildBranches()) { for (const childBranch of await note.getChildBranches()) {
await deleteNote(childBranch); await deleteBranch(childBranch);
} }
for (const attribute of await note.getOwnedAttributes()) { for (const attribute of await note.getOwnedAttributes()) {
@ -461,7 +461,7 @@ module.exports = {
createNewNote, createNewNote,
createNote, createNote,
updateNote, updateNote,
deleteNote, deleteBranch,
protectNoteRecursively, protectNoteRecursively,
scanForLinks scanForLinks
}; };