import server from "../../services/server.js"; import froca from "../../services/froca.js"; import linkService from "../../services/link.js"; import utils from "../../services/utils.js"; import BasicWidget from "../basic_widget.js"; const TPL = ` `; export default class DeleteNotesDialog extends BasicWidget { constructor() { super(); this.branchIds = null; this.resolve = null; } doRender() { this.$widget = $(TPL); this.$content = this.$widget.find(".recent-changes-content"); this.$dialog = this.$widget.find(".delete-notes-dialog"); this.$okButton = this.$widget.find(".delete-notes-dialog-ok-button"); this.$cancelButton = this.$widget.find(".delete-notes-dialog-cancel-button"); this.$deleteNotesList = this.$widget.find(".delete-notes-list"); this.$brokenRelationsList = this.$widget.find(".broken-relations-list"); this.$deletedNotesCount = this.$widget.find(".deleted-notes-count"); this.$noNoteToDeleteWrapper = this.$widget.find(".no-note-to-delete-wrapper"); this.$deleteNotesListWrapper = this.$widget.find(".delete-notes-list-wrapper"); this.$brokenRelationsListWrapper = this.$widget.find(".broken-relations-wrapper"); this.$brokenRelationsCount = this.$widget.find(".broke-relations-count"); this.$deleteAllClones = this.$widget.find(".delete-all-clones"); this.$eraseNotes = this.$widget.find(".erase-notes"); this.$dialog.on('shown.bs.modal', () => this.$okButton.trigger("focus")); this.$cancelButton.on('click', () => { utils.closeActiveDialog(); this.resolve({proceed: false}); }); this.$okButton.on('click', () => { utils.closeActiveDialog(); this.resolve({ proceed: true, deleteAllClones: this.isDeleteAllClonesChecked(), eraseNotes: this.isEraseNotesChecked() }); }); this.$deleteAllClones.on('click', () => this.renderDeletePreview()); } async renderDeletePreview() { const response = await server.post('delete-notes-preview', { branchIdsToDelete: this.branchIds, deleteAllClones: this.isDeleteAllClonesChecked() }); this.$deleteNotesList.empty(); this.$brokenRelationsList.empty(); this.$deleteNotesListWrapper.toggle(response.noteIdsToBeDeleted.length > 0); this.$noNoteToDeleteWrapper.toggle(response.noteIdsToBeDeleted.length === 0); for (const note of await froca.getNotes(response.noteIdsToBeDeleted)) { this.$deleteNotesList.append( $("
  • ").append( await linkService.createNoteLink(note.noteId, {showNotePath: true}) ) ); } this.$deletedNotesCount.text(response.noteIdsToBeDeleted.length); this.$brokenRelationsListWrapper.toggle(response.brokenRelations.length > 0); this.$brokenRelationsCount.text(response.brokenRelations.length); await froca.getNotes(response.brokenRelations.map(br => br.noteId)); for (const attr of response.brokenRelations) { this.$brokenRelationsList.append( $("
  • ") .append(`Note `) .append(await linkService.createNoteLink(attr.value)) .append(` (to be deleted) is referenced by relation ${attr.name} originating from `) .append(await linkService.createNoteLink(attr.noteId)) ); } } async showDeleteNotesDialogEvent({branchIdsToDelete, callback}) { this.branchIds = branchIdsToDelete; await this.renderDeletePreview(); utils.openDialog(this.$widget); this.$deleteAllClones.prop("checked", false); this.$eraseNotes.prop("checked", false); this.resolve = callback; } isDeleteAllClonesChecked() { return this.$deleteAllClones.is(":checked"); } isEraseNotesChecked() { return this.$eraseNotes.is(":checked"); } }