From d0e33f8aaacc8f9bdecd306540ed44df23c68477 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 19 Mar 2025 23:06:16 +0200 Subject: [PATCH] chore(client/ts): port more dialogs --- src/public/app/types.d.ts | 7 ++++ .../{jump_to_note.js => jump_to_note.ts} | 26 ++++++++------ ...{markdown_import.js => markdown_import.ts} | 23 ++++++++++--- .../dialogs/{move_to.js => move_to.ts} | 34 +++++++++++++++---- 4 files changed, 69 insertions(+), 21 deletions(-) rename src/public/app/widgets/dialogs/{jump_to_note.js => jump_to_note.ts} (82%) rename src/public/app/widgets/dialogs/{markdown_import.js => markdown_import.ts} (82%) rename src/public/app/widgets/dialogs/{move_to.js => move_to.ts} (76%) diff --git a/src/public/app/types.d.ts b/src/public/app/types.d.ts index cab82d103..942d10f4b 100644 --- a/src/public/app/types.d.ts +++ b/src/public/app/types.d.ts @@ -283,6 +283,7 @@ declare global { getLastPosition(): undefined | TextPosition; } }, + insertContent(modelFragment: any, selection: any); change(cb: (writer: Writer) => void) }, editing: { @@ -311,6 +312,12 @@ declare global { plugins: { get(command: string) }, + data: { + processor: { + toView(html: string); + }; + toModel(viewFeragment: any); + }, getData(): string; setData(data: string): void; getSelectedHtml(): string; diff --git a/src/public/app/widgets/dialogs/jump_to_note.js b/src/public/app/widgets/dialogs/jump_to_note.ts similarity index 82% rename from src/public/app/widgets/dialogs/jump_to_note.js rename to src/public/app/widgets/dialogs/jump_to_note.ts index f57acb4f7..1fbb67a57 100644 --- a/src/public/app/widgets/dialogs/jump_to_note.js +++ b/src/public/app/widgets/dialogs/jump_to_note.ts @@ -28,6 +28,13 @@ const TPL = ` `; +interface RenderMarkdownResponse { + htmlContent: string; +} + export default class MarkdownImportDialog extends BasicWidget { + + private lastOpenedTs: number; + private modal!: bootstrap.Modal; + private $importTextarea!: JQuery; + private $importButton!: JQuery; + constructor() { super(); @@ -36,7 +46,7 @@ export default class MarkdownImportDialog extends BasicWidget { doRender() { this.$widget = $(TPL); - this.modal = Modal.getOrCreateInstance(this.$widget); + this.modal = Modal.getOrCreateInstance(this.$widget[0]); this.$importTextarea = this.$widget.find(".markdown-import-textarea"); this.$importButton = this.$widget.find(".markdown-import-button"); @@ -47,10 +57,13 @@ export default class MarkdownImportDialog extends BasicWidget { shortcutService.bindElShortcut(this.$widget, "ctrl+return", () => this.sendForm()); } - async convertMarkdownToHtml(markdownContent) { - const { htmlContent } = await server.post("other/render-markdown", { markdownContent }); + async convertMarkdownToHtml(markdownContent: string) { + const { htmlContent } = await server.post("other/render-markdown", { markdownContent }); - const textEditor = await appContext.tabManager.getActiveContext().getTextEditor(); + const textEditor = await appContext.tabManager.getActiveContext()?.getTextEditor(); + if (!textEditor) { + return; + } const viewFragment = textEditor.data.processor.toView(htmlContent); const modelFragment = textEditor.data.toModel(viewFragment); @@ -80,7 +93,7 @@ export default class MarkdownImportDialog extends BasicWidget { } async sendForm() { - const text = this.$importTextarea.val(); + const text = String(this.$importTextarea.val()); this.modal.hide(); diff --git a/src/public/app/widgets/dialogs/move_to.js b/src/public/app/widgets/dialogs/move_to.ts similarity index 76% rename from src/public/app/widgets/dialogs/move_to.js rename to src/public/app/widgets/dialogs/move_to.ts index 061af25db..af4adfe1d 100644 --- a/src/public/app/widgets/dialogs/move_to.js +++ b/src/public/app/widgets/dialogs/move_to.ts @@ -6,6 +6,7 @@ import branchService from "../../services/branches.js"; import treeService from "../../services/tree.js"; import BasicWidget from "../basic_widget.js"; import { t } from "../../services/i18n.js"; +import type { EventData } from "../../components/app_context.js"; const TPL = ` `; export default class MoveToDialog extends BasicWidget { + + private movedBranchIds: string[] | null; + private $form!: JQuery; + private $noteAutoComplete!: JQuery; + private $noteList!: JQuery; + constructor() { super(); @@ -58,7 +65,13 @@ export default class MoveToDialog extends BasicWidget { this.$widget.modal("hide"); const { noteId, parentNoteId } = treeService.getNoteIdAndParentIdFromUrl(notePath); - froca.getBranchId(parentNoteId, noteId).then((branchId) => this.moveNotesTo(branchId)); + if (parentNoteId) { + froca.getBranchId(parentNoteId, noteId).then((branchId) => { + if (branchId) { + this.moveNotesTo(branchId); + } + }); + } } else { logError(t("move_to.error_no_path")); } @@ -67,7 +80,7 @@ export default class MoveToDialog extends BasicWidget { }); } - async moveBranchIdsToEvent({ branchIds }) { + async moveBranchIdsToEvent({ branchIds }: EventData<"moveBranchIdsTo">) { this.movedBranchIds = branchIds; utils.openDialog(this.$widget); @@ -78,7 +91,14 @@ export default class MoveToDialog extends BasicWidget { for (const branchId of this.movedBranchIds) { const branch = froca.getBranch(branchId); + if (!branch) { + continue; + } + const note = await froca.getNote(branch.noteId); + if (!note) { + continue; + } this.$noteList.append($("
  • ").text(note.title)); } @@ -87,12 +107,14 @@ export default class MoveToDialog extends BasicWidget { noteAutocompleteService.showRecentNotes(this.$noteAutoComplete); } - async moveNotesTo(parentBranchId) { - await branchService.moveToParentNote(this.movedBranchIds, parentBranchId); + async moveNotesTo(parentBranchId: string) { + if (this.movedBranchIds) { + await branchService.moveToParentNote(this.movedBranchIds, parentBranchId); + } const parentBranch = froca.getBranch(parentBranchId); - const parentNote = await parentBranch.getNote(); + const parentNote = await parentBranch?.getNote(); - toastService.showMessage(`${t("move_to.move_success_message")} ${parentNote.title}`); + toastService.showMessage(`${t("move_to.move_success_message")} ${parentNote?.title}`); } }