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;
}
const nodeTitles = $("<ul>").append(...nodes.map(node => $("<li>").text(node.title)));
const confirmText = $("<div>").text('This will delete the following notes and their sub-notes: ').append(nodeTitles);
const $deleteClonesCheckbox = $('<div class="form-check">')
.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');
if (!await confirmDialog.confirm(confirmText)) {
if (!await confirmDialog.confirm($confirmText)) {
return false;
}
for (const node of nodes) {
const {noteDeleted} = await server.remove('branches/' + node.data.branchId);
const deleteClones = $deleteClonesCheckbox.find("input").is(":checked");
for (const node of nodes) {
if (deleteClones) {
await server.remove('notes/' + node.data.noteId);
if (noteDeleted) {
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

View file

@ -103,7 +103,7 @@ async function deleteBranch(req) {
const branch = await repository.getBranch(req.params.branchId);
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);
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]);
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 */
async function deleteNote(branch) {
async function deleteBranch(branch) {
if (!branch || branch.isDeleted) {
return false;
}
@ -407,7 +407,7 @@ async function deleteNote(branch) {
await note.save();
for (const childBranch of await note.getChildBranches()) {
await deleteNote(childBranch);
await deleteBranch(childBranch);
}
for (const attribute of await note.getOwnedAttributes()) {
@ -461,7 +461,7 @@ module.exports = {
createNewNote,
createNote,
updateNote,
deleteNote,
deleteBranch,
protectNoteRecursively,
scanForLinks
};