From 59c18e04e54f273ab04c41bf168f179cbe5863ff Mon Sep 17 00:00:00 2001 From: Robert Patrick Date: Thu, 23 Mar 2023 12:06:44 -0500 Subject: [PATCH] making WRC delete app remove empty parents --- webui/src/js/utils/wdt-archive-helper.js | 32 +++++++++++++++++------- webui/src/js/utils/wrc-wdt-archive.js | 2 +- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/webui/src/js/utils/wdt-archive-helper.js b/webui/src/js/utils/wdt-archive-helper.js index 036261277..583305998 100644 --- a/webui/src/js/utils/wdt-archive-helper.js +++ b/webui/src/js/utils/wdt-archive-helper.js @@ -70,9 +70,9 @@ define(['knockout', 'models/wkt-project', 'utils/wkt-logger'], return result ? result.archiveUpdatePath : result; }; - this.removeFromArchive = (archivePath) => { + this.removeFromArchive = (archivePath, deleteEmptyParents = false) => { if (archivePath) { - this._removeFromArchiveModel(archivePath, this.project.wdtModel.archiveRoots); + this._removeFromArchiveModel(archivePath, this.project.wdtModel.archiveRoots, deleteEmptyParents); this._removeArchiveUpdate(archivePath); } }; @@ -159,20 +159,34 @@ define(['knockout', 'models/wkt-project', 'utils/wkt-logger'], } }; - this._removeFromArchiveModel = (archivePath, nodesObservable) => { + this._removeFromArchiveModel = (archivePath, nodesObservable, deleteEmptyParents) => { for (const node of nodesObservable()) { + wktLogger.debug('node id = %s, deleteEmptyParents = %s', node.id, deleteEmptyParents); if (node.id === archivePath) { - nodesObservable.remove(node); - - // this shouldn't be required, but resolves tree view problems with emptied lists - nodesObservable.sort(); - break; + wktLogger.debug('removing matching node %s', node.id); + this._removeNodeFromNodesObservable(nodesObservable, node); + return true; } if (node.children) { - this._removeFromArchiveModel(archivePath, node.children); + const result = this._removeFromArchiveModel(archivePath, node.children, deleteEmptyParents); + wktLogger.debug('nested call from node %s returned %s', node.id, result); + wktLogger.debug('XXX node %s children length = %s', node.id, node.children().length); + if (deleteEmptyParents && result && node.children().length === 0) { + wktLogger.debug('removing node %s from parent children list', node.id); + this._removeNodeFromNodesObservable(nodesObservable, node); + } + return result; } } + return false; + }; + + this._removeNodeFromNodesObservable = (nodesObservable, node) => { + nodesObservable.remove(node); + + // this shouldn't be required, but resolves tree view problems with emptied lists + nodesObservable.sort(); }; } diff --git a/webui/src/js/utils/wrc-wdt-archive.js b/webui/src/js/utils/wrc-wdt-archive.js index a9735f871..a25428fb8 100644 --- a/webui/src/js/utils/wrc-wdt-archive.js +++ b/webui/src/js/utils/wrc-wdt-archive.js @@ -64,7 +64,7 @@ define(['models/wkt-project', 'utils/i18n', 'utils/wdt-archive-helper', 'utils/w const updatedArchivePath = this._convertWrcArchivePath(archivePath); wktLogger.debug('calling archiveHelper.removeFromArchive(%s)', updatedArchivePath); - archiveHelper.removeFromArchive(updatedArchivePath); + archiveHelper.removeFromArchive(updatedArchivePath, true); resolve(); } catch (err) { const errorMessage = window.api.utils.getErrorMessage(err);