diff --git a/app/src/menus/navigation.ts b/app/src/menus/navigation.ts index 54b884dbc..7c5792dc8 100644 --- a/app/src/menus/navigation.ts +++ b/app/src/menus/navigation.ts @@ -638,75 +638,81 @@ export const initFileMenu = (app: App, notebookId: string, pathString: string, l }; export const genImportMenu = (notebookId: string, pathString: string) => { - if (!window.siyuan.config.readonly) { - /// #if !BROWSER - const importstdmd = (label: string, isDoc?: boolean) => { - return { - icon: isDoc ? "iconMarkdown" : "iconFolder", - label, - click: async () => { - let filters: FileFilter[] = []; - if (isDoc) { - filters = [{name: "Markdown", extensions: ["md", "markdown"]}]; - } - const localPath = await ipcRenderer.invoke(Constants.SIYUAN_GET, { - cmd: "showOpenDialog", - defaultPath: window.siyuan.config.system.homeDir, - filters, - properties: [isDoc ? "openFile" : "openDirectory"], - }); - if (localPath.filePaths.length === 0) { - return; - } - fetchPost("/api/import/importStdMd", { - notebook: notebookId, - localPath: localPath.filePaths[0], - toPath: pathString, - }); - } - }; - }; - /// #endif - window.siyuan.menus.menu.append(new MenuItem({ - icon: "iconDownload", - label: window.siyuan.languages.import, - submenu: [{ - icon: "iconSiYuan", - label: 'SiYuan .sy.zip', - bind: (element) => { - element.querySelector(".b3-form__upload").addEventListener("change", (event: InputEvent & { - target: HTMLInputElement - }) => { - const formData = new FormData(); - formData.append("file", event.target.files[0]); - formData.append("notebook", notebookId); - formData.append("toPath", pathString); - fetchPost("/api/import/importSY", formData, () => { - let files; - /// #if MOBILE - files = window.siyuan.mobile.files; - /// #else - files = (getDockByType("file").data["file"] as Files); - /// #endif - const liElement = files.element.querySelector(`[data-path="${pathString}"]`); - const toggleElement = liElement.querySelector(".b3-list-item__arrow--open"); - if (toggleElement) { - toggleElement.classList.remove("b3-list-item__arrow--open"); - liElement.nextElementSibling?.remove(); - } - files.getLeaf(liElement, notebookId); - window.siyuan.menus.menu.remove(); - }); - }); - } - }, - /// #if !BROWSER - importstdmd("Markdown " + window.siyuan.languages.doc, true), - importstdmd("Markdown " + window.siyuan.languages.folder) - /// #endif - ], - }).element); + if (window.siyuan.config.readonly) { + return; } + const reloadDocTree = () => { + let files; + /// #if MOBILE + files = window.siyuan.mobile.files; + /// #else + files = (getDockByType("file").data["file"] as Files); + /// #endif + const liElement = files.element.querySelector(`[data-path="${pathString}"]`); + const toggleElement = liElement.querySelector(".b3-list-item__arrow--open"); + if (toggleElement) { + toggleElement.classList.remove("b3-list-item__arrow--open"); + liElement.nextElementSibling?.remove(); + } + files.getLeaf(liElement, notebookId); + window.siyuan.menus.menu.remove(); + } + /// #if !BROWSER + const importstdmd = (label: string, isDoc?: boolean) => { + return { + icon: isDoc ? "iconMarkdown" : "iconFolder", + label, + click: async () => { + let filters: FileFilter[] = []; + if (isDoc) { + filters = [{name: "Markdown", extensions: ["md", "markdown"]}]; + } + const localPath = await ipcRenderer.invoke(Constants.SIYUAN_GET, { + cmd: "showOpenDialog", + defaultPath: window.siyuan.config.system.homeDir, + filters, + properties: [isDoc ? "openFile" : "openDirectory"], + }); + if (localPath.filePaths.length === 0) { + return; + } + fetchPost("/api/import/importStdMd", { + notebook: notebookId, + localPath: localPath.filePaths[0], + toPath: pathString, + }, () => { + reloadDocTree(); + }); + } + }; + }; + /// #endif + window.siyuan.menus.menu.append(new MenuItem({ + icon: "iconDownload", + label: window.siyuan.languages.import, + submenu: [{ + icon: "iconSiYuan", + label: 'SiYuan .sy.zip', + bind: (element) => { + element.querySelector(".b3-form__upload").addEventListener("change", (event: InputEvent & { + target: HTMLInputElement + }) => { + const formData = new FormData(); + formData.append("file", event.target.files[0]); + formData.append("notebook", notebookId); + formData.append("toPath", pathString); + fetchPost("/api/import/importSY", formData, () => { + reloadDocTree(); + }); + }); + } + }, + /// #if !BROWSER + importstdmd("Markdown " + window.siyuan.languages.doc, true), + importstdmd("Markdown " + window.siyuan.languages.folder) + /// #endif + ], + }).element); }; export const sortMenu = (type: "notebooks" | "notebook", sortMode: number, clickEvent: (sort: number) => void) => {