Skip to content

Commit 99754f9

Browse files
kiwiwongjiming
and
jiming
authored
feat: support to set the folderTree nodes whether to sort by default (#614)
* fix: folderTree sort * docs: add description about FolderTree's sorting function * fix: folderTree.update supports updating the node whose id is 0 Co-authored-by: jiming <jiming@dtstack.com>
1 parent bfdf0bb commit 99754f9

File tree

5 files changed

+46
-6
lines changed

5 files changed

+46
-6
lines changed

src/model/workbench/explorer/folderTree.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export interface IFolderTreeSubItem {
3838
export interface IFolderTree {
3939
folderTree?: IFolderTreeSubItem;
4040
entry?: React.ReactNode;
41+
autoSort?: Boolean;
4142
}
4243

4344
export interface IFolderTreeNodeProps extends ITreeNodeItemProps<any> {
@@ -89,6 +90,7 @@ export class TreeNodeModel implements IFolderTreeNodeProps {
8990
export class IFolderTreeModel implements IFolderTree {
9091
public folderTree: IFolderTreeSubItem;
9192
public entry: React.ReactNode;
93+
public autoSort: Boolean;
9294

9395
constructor(
9496
folderTree: IFolderTreeSubItem = {
@@ -97,9 +99,11 @@ export class IFolderTreeModel implements IFolderTree {
9799
folderPanelContextMenu: [],
98100
data: [],
99101
},
102+
autoSort: Boolean = false,
100103
entry?: React.ReactNode
101104
) {
102105
this.folderTree = folderTree;
103106
this.entry = entry;
107+
this.autoSort = autoSort;
104108
}
105109
}

src/services/workbench/__tests__/folderTreeService.test.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ describe('Test StatusBarService', () => {
272272
const children = data[0].children!;
273273
expect(children).toHaveLength(2);
274274
expect(children[0]).toEqual({
275-
...fileNode,
275+
...pendingNode,
276276
});
277277
});
278278

@@ -312,6 +312,7 @@ describe('Test StatusBarService', () => {
312312
isLeaf: false,
313313
children: [ignoreFile, normalFile, normalFolder, ignoreFolder],
314314
});
315+
folderTreeService.toggleAutoSort();
315316
folderTreeService.add(root);
316317

317318
// let data = folderTreeService.getState().folderTree?.data || [];
@@ -389,6 +390,11 @@ describe('Test StatusBarService', () => {
389390
'.prettierignore',
390391
'file',
391392
]);
393+
394+
// update tree node when autoSort is true
395+
root.name = 'new-root';
396+
folderTreeService.update(root);
397+
expect(folderTreeService.get(root.id)?.name).toBe('new-root');
392398
});
393399

394400
test('Should support to set entry', () => {

src/services/workbench/explorer/folderTreeService.ts

+21-5
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@ export interface IFolderTreeService extends Component<IFolderTree> {
138138
callback: (treeNode: IFolderTreeNodeProps) => void
139139
) => void
140140
): void;
141+
/**
142+
* Toggle whether to enable sorting, which is disabled by default.
143+
*/
144+
toggleAutoSort(): void;
141145
}
142146

143147
@singleton()
@@ -251,14 +255,16 @@ export class FolderTreeService
251255
}
252256

253257
private addRootFolder(folder: IFolderTreeNodeProps) {
254-
const { folderTree } = this.state;
258+
const { folderTree, autoSort } = this.state;
255259

256260
if (folderTree?.data?.length) {
257261
// if root folder exists, then do nothing
258262
return;
259263
}
260264

261-
this.sortTree(folder.children || []);
265+
if (autoSort) {
266+
this.sortTree(folder.children || []);
267+
}
262268
this.setState({
263269
folderTree: { ...folderTree, data: [folder] },
264270
});
@@ -315,6 +321,7 @@ export class FolderTreeService
315321

316322
public add(data: IFolderTreeNodeProps, id?: UniqueId): void {
317323
const isRootFolder = data.fileType === 'RootFolder';
324+
const { autoSort } = this.state;
318325

319326
if (isRootFolder) {
320327
this.addRootFolder(data);
@@ -357,7 +364,9 @@ export class FolderTreeService
357364
}
358365

359366
cloneData[index] = tree!.obj;
360-
this.sortTree(cloneData[index].children || []);
367+
if (autoSort) {
368+
this.sortTree(cloneData[index].children || []);
369+
}
361370
this.setState({
362371
folderTree: {
363372
...this.state.folderTree,
@@ -388,7 +397,8 @@ export class FolderTreeService
388397

389398
public update(data: IFolderTreeNodeProps) {
390399
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');
392402
const folderTree: IFolderTreeSubItem = cloneDeep(
393403
this.getState().folderTree || {}
394404
);
@@ -404,7 +414,9 @@ export class FolderTreeService
404414
tree.updateNode(id, restData);
405415
if (index > -1) {
406416
nextData[index] = tree.obj;
407-
this.sortTree(nextData[index].children || []);
417+
if (autoSort) {
418+
this.sortTree(nextData[index].children || []);
419+
}
408420
}
409421
this.setState({
410422
folderTree,
@@ -499,4 +511,8 @@ export class FolderTreeService
499511
) => {
500512
this.subscribe(FolderTreeEvent.onLoadData, callback);
501513
};
514+
515+
public toggleAutoSort() {
516+
this.setState({ autoSort: !this.state.autoSort });
517+
}
502518
}

website/docs/guides/extend-builtin-ui.md

+7
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,13 @@ molecule.folderTree.onSelectFile((file: IFolderTreeNodeProps) => {
105105
});
106106
```
107107

108+
Enable sorting
109+
110+
```ts
111+
// Toggle whether to enable sorting, which is disabled by default.
112+
molecule.folderTree.toggleAutoSort();
113+
```
114+
108115
For more information about the use of FolderTree, please refer to the [API](../api/classes/molecule.FolderTreeService) documentation.
109116

110117
## [EditorTree](../api/interfaces/molecule.IEditorTreeService)

website/i18n/zh-CN/docusaurus-plugin-content-docs/current/guides/extend-builtin-ui.md

+7
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,13 @@ molecule.folderTree.onSelectFile((file: IFolderTreeNodeProps) => {
106106
});
107107
```
108108

109+
启用排序功能
110+
111+
```ts
112+
// Toggle whether to enable sorting, which is disabled by default.
113+
molecule.folderTree.toggleAutoSort();
114+
```
115+
109116
更多关于 FolderTree 的使用,请参考 [API](../api/classes/molecule.FolderTreeService) 文档。
110117

111118
## [编辑器树(EditorTree)](../api/interfaces/molecule.IEditorTreeService)

0 commit comments

Comments
 (0)