diff --git a/src/public/app/services/import.ts b/src/public/app/services/import.ts
index d33ad09fb..035bed6a6 100644
--- a/src/public/app/services/import.ts
+++ b/src/public/app/services/import.ts
@@ -5,13 +5,15 @@ import utils from "./utils.js";
import appContext from "../components/app_context.js";
import { t } from "./i18n.js";
-interface UploadFilesOptions {
- safeImport?: boolean;
- shrinkImages: boolean | "true" | "false";
- textImportedAsText?: boolean;
- codeImportedAsCode?: boolean;
- explodeArchives?: boolean;
- replaceUnderscoresWithSpaces?: boolean;
+type BooleanLike = boolean | "true" | "false";
+
+export interface UploadFilesOptions {
+ safeImport?: BooleanLike;
+ shrinkImages: BooleanLike;
+ textImportedAsText?: BooleanLike;
+ codeImportedAsCode?: BooleanLike;
+ explodeArchives?: BooleanLike;
+ replaceUnderscoresWithSpaces?: BooleanLike;
}
export async function uploadFiles(entityType: string, parentNoteId: string, files: string[] | File[], options: UploadFilesOptions) {
diff --git a/src/public/app/widgets/dialogs/import.js b/src/public/app/widgets/dialogs/import.ts
similarity index 84%
rename from src/public/app/widgets/dialogs/import.js
rename to src/public/app/widgets/dialogs/import.ts
index 4f06208f5..558f2084c 100644
--- a/src/public/app/widgets/dialogs/import.js
+++ b/src/public/app/widgets/dialogs/import.ts
@@ -1,10 +1,11 @@
import utils, { escapeQuotes } from "../../services/utils.js";
import treeService from "../../services/tree.js";
-import importService from "../../services/import.js";
+import importService, { type UploadFilesOptions } from "../../services/import.js";
import options from "../../services/options.js";
import BasicWidget from "../basic_widget.js";
import { t } from "../../services/i18n.js";
import { Modal, Tooltip } from "bootstrap";
+import type { EventData } from "../../components/app_context.js";
const TPL = `
@@ -79,6 +80,20 @@ const TPL = `
`;
export default class ImportDialog extends BasicWidget {
+
+ private parentNoteId: string | null;
+
+ private $form!: JQuery;
+ private $noteTitle!: JQuery;
+ private $fileUploadInput!: JQuery;
+ private $importButton!: JQuery;
+ private $safeImportCheckbox!: JQuery;
+ private $shrinkImagesCheckbox!: JQuery;
+ private $textImportedAsTextCheckbox!: JQuery;
+ private $codeImportedAsCodeCheckbox!: JQuery;
+ private $explodeArchivesCheckbox!: JQuery;
+ private $replaceUnderscoresWithSpacesCheckbox!: JQuery;
+
constructor() {
super();
@@ -87,7 +102,7 @@ export default class ImportDialog extends BasicWidget {
doRender() {
this.$widget = $(TPL);
- Modal.getOrCreateInstance(this.$widget);
+ Modal.getOrCreateInstance(this.$widget[0]);
this.$form = this.$widget.find(".import-form");
this.$noteTitle = this.$widget.find(".import-note-title");
@@ -104,7 +119,9 @@ export default class ImportDialog extends BasicWidget {
// disabling so that import is not triggered again.
this.$importButton.attr("disabled", "disabled");
- this.importIntoNote(this.parentNoteId);
+ if (this.parentNoteId) {
+ this.importIntoNote(this.parentNoteId);
+ }
return false;
});
@@ -124,7 +141,7 @@ export default class ImportDialog extends BasicWidget {
});
}
- async showImportDialogEvent({ noteId }) {
+ async showImportDialogEvent({ noteId }: EventData<"showImportDialog">) {
this.parentNoteId = noteId;
this.$fileUploadInput.val("").trigger("change"); // to trigger Import button disabling listener below
@@ -141,12 +158,12 @@ export default class ImportDialog extends BasicWidget {
utils.openDialog(this.$widget);
}
- async importIntoNote(parentNoteId) {
- const files = Array.from(this.$fileUploadInput[0].files); // shallow copy since we're resetting the upload button below
+ async importIntoNote(parentNoteId: string) {
+ const files = Array.from(this.$fileUploadInput[0].files ?? []); // shallow copy since we're resetting the upload button below
- const boolToString = ($el) => ($el.is(":checked") ? "true" : "false");
+ const boolToString = ($el: JQuery) => ($el.is(":checked") ? "true" : "false");
- const options = {
+ const options: UploadFilesOptions = {
safeImport: boolToString(this.$safeImportCheckbox),
shrinkImages: boolToString(this.$shrinkImagesCheckbox),
textImportedAsText: boolToString(this.$textImportedAsTextCheckbox),