@@ -12,23 +12,35 @@ let SIZE_CRITERIA = "frequency",
12
12
updateCallbacks = [ ] ;
13
13
14
14
function fold ( tree ) {
15
- if ( ! tree . children || tree . children . length <= MAX_CHILDREN )
16
- return tree ;
17
15
for ( let cld of tree . children ) {
18
16
fold ( cld ) ;
19
17
}
20
- let rest = tree . children . splice ( MAX_CHILDREN ) ;
21
- tree . children . push ( {
22
- label : `${ rest . length } more` ,
23
- type : "folder" ,
24
- edgeType : rest [ 0 ] . edgeType ,
25
- _children : rest ,
26
- children : [ ] ,
27
- radius : 10 ,
28
- entities : [ ] ,
29
- id : additionalNodeId -- ,
30
- parent : tree
31
- } ) ;
18
+ if ( tree . children && tree . children . length > MAX_CHILDREN ) {
19
+ let rest = tree . children . splice ( MAX_CHILDREN ) ;
20
+ tree . _children = rest ;
21
+ tree . children . push ( {
22
+ label : `${ rest . length } more` ,
23
+ type : "folder" ,
24
+ edgeType : rest [ 0 ] . edgeType ,
25
+ children : [ ] ,
26
+ radius : 10 ,
27
+ entities : [ ] ,
28
+ id : additionalNodeId -- ,
29
+ parent : tree
30
+ } ) ;
31
+ }
32
+ // let rest = tree.children.splice(MAX_CHILDREN);
33
+ // tree.children.push({
34
+ // label: `${ rest.length } more`,
35
+ // type: "folder",
36
+ // edgeType: rest[0].edgeType,
37
+ // _children: rest,
38
+ // children: [],
39
+ // radius: 10,
40
+ // entities: [],
41
+ // id: additionalNodeId--,
42
+ // parent: tree
43
+ // });
32
44
return tree ;
33
45
}
34
46
@@ -232,21 +244,23 @@ function resetChildrenPosition (parent, children = []) {
232
244
233
245
/**
234
246
* Unfold the folder by specified amount of nodes.
247
+ * @param folderNode - Node representing a folder
235
248
* @param node - Node to unfold
236
249
* @param [children=20] - Number of nodes to unfold
237
250
* @returns {number } - Number of nodes left to unfold
238
251
*/
239
- export function unfold ( node , children = 20 ) {
240
- if ( node . type !== "folder" || ! node . _children || ! node . _children . length )
252
+ export function unfold ( folderNode , node , children = 20 ) {
253
+ if ( folderNode . type !== "folder" || ! node . _children || ! node . _children . length )
241
254
return 0 ;
242
255
let newId = additionalNodeId -- ,
243
- oldId = node . id ,
256
+ oldId = folderNode . id ,
244
257
f = ( ) => {
245
- let next = node . _children . splice ( 0 , children ) ,
246
- left = node . _children . length ;
247
- node . id = newId ;
258
+ let next = node . _children . slice ( 0 , children ) ;
259
+ node . _children = node . _children . slice ( children ) ;
260
+ let left = node . _children . length ;
261
+ folderNode . id = newId ;
248
262
node . children = node . children . concat ( next ) ;
249
- node . label = left > 0 ? `${ left } more` : `Others` ;
263
+ folderNode . label = left > 0 ? `${ left } more` : `Others` ;
250
264
resetChildrenPosition ( node , next ) ;
251
265
dataUpdated ( ) ;
252
266
return {
@@ -258,10 +272,12 @@ export function unfold (node, children = 20) {
258
272
history . createState ( {
259
273
redo : f ,
260
274
undo : ( ) => {
261
- let part = node . children . splice ( - res . unfolded ) ;
275
+ let part = node . children . slice ( - res . unfolded ) ;
276
+ node . children = node . children . slice ( 0 , node . children . length - part . length ) ;
262
277
node . _children = part . concat ( node . _children ) ;
263
- node . id = oldId ;
264
- node . label = node . _children . length > 0 ? `${ node . _children . length } more` : `Others` ;
278
+ folderNode . id = oldId ;
279
+ folderNode . label =
280
+ node . _children . length > 0 ? `${ node . _children . length } more` : `Others` ;
265
281
dataUpdated ( ) ;
266
282
}
267
283
} ) ;
0 commit comments