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"; import { t } from "../../services/i18n.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.$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.$widget.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.forceDeleteAllClones || 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.forceDeleteAllClones || 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.createLink(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(`${t('delete_notes.note')} `) .append(await linkService.createLink(attr.value)) .append(` ${t('delete_notes.to_be_deleted', {attrName: attr.name})} `) .append(await linkService.createLink(attr.noteId)) ); } } async showDeleteNotesDialogEvent({branchIdsToDelete, callback, forceDeleteAllClones}) { this.branchIds = branchIdsToDelete; this.forceDeleteAllClones = forceDeleteAllClones; await this.renderDeletePreview(); utils.openDialog(this.$widget); this.$deleteAllClones .prop("checked", !!forceDeleteAllClones) .prop("disabled", !!forceDeleteAllClones); this.$eraseNotes.prop("checked", false); this.resolve = callback; } isDeleteAllClonesChecked() { return this.$deleteAllClones.is(":checked"); } isEraseNotesChecked() { return this.$eraseNotes.is(":checked"); } }