@@ -138,6 +138,10 @@ export interface IFolderTreeService extends Component<IFolderTree> {
138
138
callback : ( treeNode : IFolderTreeNodeProps ) => void
139
139
) => void
140
140
) : void ;
141
+ /**
142
+ * Toggle whether to enable sorting, which is disabled by default.
143
+ */
144
+ toggleAutoSort ( ) : void ;
141
145
}
142
146
143
147
@singleton ( )
@@ -251,14 +255,16 @@ export class FolderTreeService
251
255
}
252
256
253
257
private addRootFolder ( folder : IFolderTreeNodeProps ) {
254
- const { folderTree } = this . state ;
258
+ const { folderTree, autoSort } = this . state ;
255
259
256
260
if ( folderTree ?. data ?. length ) {
257
261
// if root folder exists, then do nothing
258
262
return ;
259
263
}
260
264
261
- this . sortTree ( folder . children || [ ] ) ;
265
+ if ( autoSort ) {
266
+ this . sortTree ( folder . children || [ ] ) ;
267
+ }
262
268
this . setState ( {
263
269
folderTree : { ...folderTree , data : [ folder ] } ,
264
270
} ) ;
@@ -315,6 +321,7 @@ export class FolderTreeService
315
321
316
322
public add ( data : IFolderTreeNodeProps , id ?: UniqueId ) : void {
317
323
const isRootFolder = data . fileType === 'RootFolder' ;
324
+ const { autoSort } = this . state ;
318
325
319
326
if ( isRootFolder ) {
320
327
this . addRootFolder ( data ) ;
@@ -357,7 +364,9 @@ export class FolderTreeService
357
364
}
358
365
359
366
cloneData [ index ] = tree ! . obj ;
360
- this . sortTree ( cloneData [ index ] . children || [ ] ) ;
367
+ if ( autoSort ) {
368
+ this . sortTree ( cloneData [ index ] . children || [ ] ) ;
369
+ }
361
370
this . setState ( {
362
371
folderTree : {
363
372
...this . state . folderTree ,
@@ -388,7 +397,8 @@ export class FolderTreeService
388
397
389
398
public update ( data : IFolderTreeNodeProps ) {
390
399
const { id, ...restData } = data ;
391
- if ( ! id ) throw new Error ( 'Id is required in updating data' ) ;
400
+ const { autoSort } = this . state ;
401
+ if ( ! id && id !== 0 ) throw new Error ( 'Id is required in updating data' ) ;
392
402
const folderTree : IFolderTreeSubItem = cloneDeep (
393
403
this . getState ( ) . folderTree || { }
394
404
) ;
@@ -404,7 +414,9 @@ export class FolderTreeService
404
414
tree . updateNode ( id , restData ) ;
405
415
if ( index > - 1 ) {
406
416
nextData [ index ] = tree . obj ;
407
- this . sortTree ( nextData [ index ] . children || [ ] ) ;
417
+ if ( autoSort ) {
418
+ this . sortTree ( nextData [ index ] . children || [ ] ) ;
419
+ }
408
420
}
409
421
this . setState ( {
410
422
folderTree,
@@ -499,4 +511,8 @@ export class FolderTreeService
499
511
) => {
500
512
this . subscribe ( FolderTreeEvent . onLoadData , callback ) ;
501
513
} ;
514
+
515
+ public toggleAutoSort ( ) {
516
+ this . setState ( { autoSort : ! this . state . autoSort } ) ;
517
+ }
502
518
}
0 commit comments