diff --git a/app/src/asset/index.ts b/app/src/asset/index.ts index a0690c20b..546ec64ff 100644 --- a/app/src/asset/index.ts +++ b/app/src/asset/index.ts @@ -18,20 +18,7 @@ export class Asset extends Model { public pdfObject: any; constructor(options: { tab: Tab, path: string, page?: number | string }) { - super({ - id: options.tab.id, - msgCallback(data) { - if (data) { - switch (data.cmd) { - case "remove": - if (data.data.path === this.path) { - this.parent.parent.removeTab(this.parent.id); - } - break; - } - } - } - }); + super({id: options.tab.id}); if (window.siyuan.config.fileTree.openFilesUseCurrentTab) { options.tab.headElement.classList.add("item--unupdate"); } diff --git a/app/src/editor/deleteFile.ts b/app/src/editor/deleteFile.ts index cd8e0f078..7db5eba13 100644 --- a/app/src/editor/deleteFile.ts +++ b/app/src/editor/deleteFile.ts @@ -50,7 +50,7 @@ export const deleteFiles = (liElements: Element[]) => { const paths: string[] = [] liElements.forEach(item => { const dataPath = item.getAttribute("data-path") - if(dataPath !== "/") { + if (dataPath !== "/") { paths.push(item.getAttribute("data-path")); } }) diff --git a/app/src/layout/dock/Backlink.ts b/app/src/layout/dock/Backlink.ts index 665f2ceb2..90e56e59f 100644 --- a/app/src/layout/dock/Backlink.ts +++ b/app/src/layout/dock/Backlink.ts @@ -53,17 +53,17 @@ export class Backlink extends Model { if (data && this.type === "local") { switch (data.cmd) { case "rename": - if (this.blockId === data.data.id) { + if (this.rootId === data.data.id) { this.parent.updateTitle(data.data.title); } break; case "unmount": - if (this.notebookId === data.data.box) { + if (this.notebookId === data.data.box && this.type === "local") { this.parent.parent.removeTab(this.parent.id); } break; - case "remove": - if (this.path?.indexOf(getDisplayName(data.data.path, false, true)) === 0) { + case "removeDoc": + if (data.data.ids.includes(this.rootId) && this.type === "local") { this.parent.parent.removeTab(this.parent.id); } break; diff --git a/app/src/layout/dock/Bookmark.ts b/app/src/layout/dock/Bookmark.ts index c9886661e..93c007ad8 100644 --- a/app/src/layout/dock/Bookmark.ts +++ b/app/src/layout/dock/Bookmark.ts @@ -38,7 +38,7 @@ export class Bookmark extends Model { }); break; case "unmount": - case "remove": + case "removeDoc": case "mount": if (data.cmd !== "mount" || data.code !== 1) { fetchPost("/api/bookmark/getBookmark", {}, response => { diff --git a/app/src/layout/dock/Files.ts b/app/src/layout/dock/Files.ts index 7d4d79c99..effa0ac91 100644 --- a/app/src/layout/dock/Files.ts +++ b/app/src/layout/dock/Files.ts @@ -42,7 +42,7 @@ export class Files extends Model { this.element.insertAdjacentHTML("beforeend", this.genNotebook(data.data.box)); break; case "unmount": - case "remove": + case "removeDoc": this.onRemove(data); break; case "createdailynote": @@ -579,9 +579,9 @@ export class Files extends Model { private onRemove(data: IWebSocketData) { // "doc2heading" 后删除文件或挂载帮助文档前的 unmount - const targetElement = this.element.querySelector(`ul[data-url="${data.data.box}"] li[data-path="${data.data.path || "/"}"]`); if (data.cmd === "unmount") { setNoteBook((notebooks) => { + const targetElement = this.element.querySelector(`ul[data-url="${data.data.box}"] li[data-path="${"/"}"]`); if (targetElement) { targetElement.parentElement.remove(); if (Constants.CB_MOUNT_REMOVE !== data.callback) { @@ -601,28 +601,33 @@ export class Files extends Model { removeElement.remove(); } } - } else if (targetElement) { - // 子节点展开则删除 - if (targetElement.nextElementSibling?.tagName === "UL") { - targetElement.nextElementSibling.remove(); - } - // 移除当前节点 - const parentElement = targetElement.parentElement.previousElementSibling as HTMLElement; - if (targetElement.parentElement.childElementCount === 1) { - if (parentElement) { - const iconElement = parentElement.querySelector("svg"); - iconElement.classList.remove("b3-list-item__arrow--open"); - iconElement.parentElement.classList.add("fn__hidden"); - const emojiElement = iconElement.parentElement.nextElementSibling; - if (emojiElement.innerHTML === unicode2Emoji(Constants.SIYUAN_IMAGE_FOLDER)) { - emojiElement.innerHTML = unicode2Emoji(Constants.SIYUAN_IMAGE_FILE); - } - } - targetElement.parentElement.remove(); - } else { - targetElement.remove(); - } + return; } + data.data.ids.forEach((item: string) => { + const targetElement = this.element.querySelector(`li.b3-list-item[data-node-id="${item}"]`); + if (targetElement) { + // 子节点展开则删除 + if (targetElement.nextElementSibling?.tagName === "UL") { + targetElement.nextElementSibling.remove(); + } + // 移除当前节点 + const parentElement = targetElement.parentElement.previousElementSibling as HTMLElement; + if (targetElement.parentElement.childElementCount === 1) { + if (parentElement) { + const iconElement = parentElement.querySelector("svg"); + iconElement.classList.remove("b3-list-item__arrow--open"); + iconElement.parentElement.classList.add("fn__hidden"); + const emojiElement = iconElement.parentElement.nextElementSibling; + if (emojiElement.innerHTML === unicode2Emoji(Constants.SIYUAN_IMAGE_FOLDER)) { + emojiElement.innerHTML = unicode2Emoji(Constants.SIYUAN_IMAGE_FILE); + } + } + targetElement.parentElement.remove(); + } else { + targetElement.remove(); + } + } + }) } private onMount(data: { data: { box: INotebook, existed?: boolean }, callback?: string }) { diff --git a/app/src/layout/dock/Graph.ts b/app/src/layout/dock/Graph.ts index 591b091d8..f20a7a9a8 100644 --- a/app/src/layout/dock/Graph.ts +++ b/app/src/layout/dock/Graph.ts @@ -2,7 +2,6 @@ import {Tab} from "../Tab"; import {getDockByType, setPanelFocus} from "../util"; import {Model} from "../Model"; import {Constants} from "../../constants"; -import {getDisplayName} from "../../util/pathName"; import {addScript} from "../../protyle/util/addScript"; import {BlockPanel} from "../../block/Panel"; import {fullscreen} from "../../protyle/breadcrumb/action"; @@ -54,7 +53,7 @@ export class Graph extends Model { } break; case "rename": - if (this.graphData && data.data.box === this.graphData.box && this.path === data.data.path) { + if (this.graphData && data.data.box === this.graphData.box && this.rootId === data.data.id) { this.searchGraph(false); if (this.type === "local") { this.parent.updateTitle(data.data.title); @@ -64,22 +63,13 @@ export class Graph extends Model { this.searchGraph(false); } break; - case "moveDoc": - if (this.type === "global") { - this.searchGraph(false); - } else if (this.graphData && (data.data.fromNotebook === this.graphData.box || data.data.toNotebook === this.graphData.box) && - this.path === data.data.fromPath) { - this.path = data.data.newPath; - this.graphData.box = data.data.toNotebook; - this.searchGraph(false); + case "unmount": + if (this.type === "local" && this.graphData && this.graphData.box === data.data.box) { + this.parent.parent.removeTab(this.parent.id); } break; - case "unmount": - case "remove": - if (this.type === "global") { - this.searchGraph(false); - } else if (this.graphData && this.graphData.box === data.data.box && - (!data.data.path || this.path.indexOf(getDisplayName(data.data.path, false, true)) === 0)) { + case "removeDoc": + if (this.type === "local" && data.data.ids.includes(this.rootId)) { this.parent.parent.removeTab(this.parent.id); } break; @@ -453,6 +443,7 @@ export class Graph extends Model { }); } else { fetchPost("/api/graph/getLocalGraph", { + type: this.type, // 用于如下场景:当打开文档A的关系图、关系图、文档A后刷新,由于防止请求重复处理,文档A关系图无法渲染。 k: this.inputElement.value, id: id || this.blockId, conf: { diff --git a/app/src/layout/dock/Outline.ts b/app/src/layout/dock/Outline.ts index 41297d05d..c12c8230c 100644 --- a/app/src/layout/dock/Outline.ts +++ b/app/src/layout/dock/Outline.ts @@ -61,6 +61,11 @@ export class Outline extends Model { }); } break; + case "removeDoc": + if (data.data.ids.includes(this.blockId) && this.type === "local") { + this.parent.parent.removeTab(this.parent.id); + } + break; } } } diff --git a/app/src/layout/dock/Tag.ts b/app/src/layout/dock/Tag.ts index 52f679493..56b7b6c95 100644 --- a/app/src/layout/dock/Tag.ts +++ b/app/src/layout/dock/Tag.ts @@ -35,7 +35,7 @@ export class Tag extends Model { }); break; case "unmount": - case "remove": + case "removeDoc": case "mount": if (data.cmd !== "mount" || data.code !== 1) { this.update(); diff --git a/app/src/mobile/util/MobileFiles.ts b/app/src/mobile/util/MobileFiles.ts index 942d738db..c15b35363 100644 --- a/app/src/mobile/util/MobileFiles.ts +++ b/app/src/mobile/util/MobileFiles.ts @@ -38,7 +38,7 @@ export class MobileFiles extends Model { this.element.insertAdjacentHTML("beforeend", this.genNotebook(data.data.box)); break; case "unmount": - case "remove": + case "removeDoc": this.onRemove(data); break; case "createdailynote": diff --git a/app/src/protyle/index.ts b/app/src/protyle/index.ts index 87c4d7252..324f30e88 100644 --- a/app/src/protyle/index.ts +++ b/app/src/protyle/index.ts @@ -148,9 +148,8 @@ export class Protyle { this.protyle.model.parent.parent.removeTab(this.protyle.model.parent.id, false, false); } break; - case "remove": - if (this.protyle.model && (this.protyle.notebookId === data.data.box && - (!data.data.path || this.protyle.path.indexOf(getDisplayName(data.data.path, false, true)) === 0))) { + case "removeDoc": + if (this.protyle.model && data.data.ids.includes(this.protyle.block.rootID)) { this.protyle.model.parent.parent.removeTab(this.protyle.model.parent.id, false, false); } break; diff --git a/app/src/util/fetch.ts b/app/src/util/fetch.ts index 2ef1500ce..f1127c556 100644 --- a/app/src/util/fetch.ts +++ b/app/src/util/fetch.ts @@ -12,7 +12,11 @@ export const fetchPost = (url: string, data?: any, cb?: (response: IWebSocketDat if (data) { if (["/api/search/searchRefBlock", "/api/graph/getGraph", "/api/graph/getLocalGraph"].includes(url)) { window.siyuan.reqIds[url] = new Date().getTime(); - data.reqId = window.siyuan.reqIds[url]; + if (data.type === "local" && url === "/api/graph/getLocalGraph") { + // 当打开文档A的关系图、关系图、文档A后刷新,由于防止请求重复处理,文档A关系图无法渲染。 + } else { + data.reqId = window.siyuan.reqIds[url]; + } } if (data instanceof FormData) { init.body = data;