@@ -70,9 +70,9 @@ define(['knockout', 'models/wkt-project', 'utils/wkt-logger'],
70
70
return result ? result . archiveUpdatePath : result ;
71
71
} ;
72
72
73
- this . removeFromArchive = ( archivePath ) => {
73
+ this . removeFromArchive = ( archivePath , deleteEmptyParents = false ) => {
74
74
if ( archivePath ) {
75
- this . _removeFromArchiveModel ( archivePath , this . project . wdtModel . archiveRoots ) ;
75
+ this . _removeFromArchiveModel ( archivePath , this . project . wdtModel . archiveRoots , deleteEmptyParents ) ;
76
76
this . _removeArchiveUpdate ( archivePath ) ;
77
77
}
78
78
} ;
@@ -159,20 +159,34 @@ define(['knockout', 'models/wkt-project', 'utils/wkt-logger'],
159
159
}
160
160
} ;
161
161
162
- this . _removeFromArchiveModel = ( archivePath , nodesObservable ) => {
162
+ this . _removeFromArchiveModel = ( archivePath , nodesObservable , deleteEmptyParents ) => {
163
163
for ( const node of nodesObservable ( ) ) {
164
+ wktLogger . debug ( 'node id = %s, deleteEmptyParents = %s' , node . id , deleteEmptyParents ) ;
164
165
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 ;
170
169
}
171
170
172
171
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 ;
174
180
}
175
181
}
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 ( ) ;
176
190
} ;
177
191
}
178
192
0 commit comments