diff --git a/src/lib/openFolder.js b/src/lib/openFolder.js index b286535ac..11add0d1a 100644 --- a/src/lib/openFolder.js +++ b/src/lib/openFolder.js @@ -586,7 +586,7 @@ function execOperation(type, action, url, $target, name) { recents.removeFile(url); if (helpers.isFile(type)) { await fsOperation(url).delete(); - $target.remove(); + removeEntryFromOpenFolder(url); const file = editorManager.getFile(url, "uri"); if (file) file.uri = null; editorManager.onupdate("delete-file"); @@ -617,7 +617,7 @@ function execOperation(type, action, url, $target, name) { } recents.removeFolder(url); helpers.updateUriOfAllActiveFiles(url, null); - $target.parentElement.remove(); + removeEntryFromOpenFolder(url); editorManager.onupdate("delete-folder"); editorManager.emit("update", "delete-folder"); } @@ -1000,6 +1000,36 @@ function getLoadedFileTree($el) { ); } +/** + * Remove matching rendered entries from expanded folder views. + * This keeps FileTree's in-memory state aligned with the rendered tree. + * @param {string} entryUrl + */ +function removeEntryFromOpenFolder(entryUrl) { + const filesApp = sidebarApps.get("files"); + const $els = Array.from( + filesApp.getAll(`[data-url="${CSS.escape(entryUrl)}"]`), + ); + + $els.forEach(($el) => { + const ownerTree = + $el?.parentElement?._fileTree || + $el?.parentElement?.parentElement?._fileTree; + + if (ownerTree) { + ownerTree.removeEntry(entryUrl); + return; + } + + const type = $el.dataset.type; + if (helpers.isFile(type)) { + $el.remove(); + } else { + $el.parentElement?.remove(); + } + }); +} + /** * Update matching expanded folder views with a new entry. * @param {string} parentUrl @@ -1136,16 +1166,7 @@ openFolder.removeItem = (url) => { return; } - const filesApp = sidebarApps.get("files"); - const $el = filesApp.getAll(`[data-url="${url}"]`); - Array.from($el).forEach(($el) => { - const type = $el.dataset.type; - if (helpers.isFile(type)) { - $el.remove(); - } else { - $el.parentElement.remove(); - } - }); + removeEntryFromOpenFolder(url); }; openFolder.removeFolders = (url) => {