@@ -70,9 +70,9 @@ define(['knockout', 'models/wkt-project', 'utils/wkt-logger'],
7070 return result ? result . archiveUpdatePath : result ;
7171 } ;
7272
73- this . removeFromArchive = ( archivePath ) => {
73+ this . removeFromArchive = ( archivePath , deleteEmptyParents = false ) => {
7474 if ( archivePath ) {
75- this . _removeFromArchiveModel ( archivePath , this . project . wdtModel . archiveRoots ) ;
75+ this . _removeFromArchiveModel ( archivePath , this . project . wdtModel . archiveRoots , deleteEmptyParents ) ;
7676 this . _removeArchiveUpdate ( archivePath ) ;
7777 }
7878 } ;
@@ -159,20 +159,34 @@ define(['knockout', 'models/wkt-project', 'utils/wkt-logger'],
159159 }
160160 } ;
161161
162- this . _removeFromArchiveModel = ( archivePath , nodesObservable ) => {
162+ this . _removeFromArchiveModel = ( archivePath , nodesObservable , deleteEmptyParents ) => {
163163 for ( const node of nodesObservable ( ) ) {
164+ wktLogger . debug ( 'node id = %s, deleteEmptyParents = %s' , node . id , deleteEmptyParents ) ;
164165 if ( node . id === archivePath ) {
165- nodesObservable . remove ( node ) ;
166-
167- // this shouldn't be required, but resolves tree view problems with emptied lists
168- nodesObservable . sort ( ) ;
169- break ;
166+ wktLogger . debug ( 'removing matching node %s' , node . id ) ;
167+ this . _removeNodeFromNodesObservable ( nodesObservable , node ) ;
168+ return true ;
170169 }
171170
172171 if ( node . children ) {
173- this . _removeFromArchiveModel ( archivePath , node . children ) ;
172+ const result = this . _removeFromArchiveModel ( archivePath , node . children , deleteEmptyParents ) ;
173+ wktLogger . debug ( 'nested call from node %s returned %s' , node . id , result ) ;
174+ wktLogger . debug ( 'XXX node %s children length = %s' , node . id , node . children ( ) . length ) ;
175+ if ( deleteEmptyParents && result && node . children ( ) . length === 0 ) {
176+ wktLogger . debug ( 'removing node %s from parent children list' , node . id ) ;
177+ this . _removeNodeFromNodesObservable ( nodesObservable , node ) ;
178+ }
179+ return result ;
174180 }
175181 }
182+ return false ;
183+ } ;
184+
185+ this . _removeNodeFromNodesObservable = ( nodesObservable , node ) => {
186+ nodesObservable . remove ( node ) ;
187+
188+ // this shouldn't be required, but resolves tree view problems with emptied lists
189+ nodesObservable . sort ( ) ;
176190 } ;
177191 }
178192
0 commit comments