Skip to content

Commit e9a8cdd

Browse files
authored
feat: support to set the expandKeys (#664)
* feat: support to set the expandKeys * test: update tests
1 parent 3317aee commit e9a8cdd

File tree

8 files changed

+70
-3
lines changed

8 files changed

+70
-3
lines changed

src/components/tree/index.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export interface ITreeProps {
5555
data?: ITreeNodeItemProps[];
5656
className?: string;
5757
draggable?: boolean;
58-
expandKeys?: string[];
58+
expandKeys?: UniqueId[];
5959
onExpand?: (expandedKeys: React.Key[], node: ITreeNodeItemProps) => void;
6060
onSelect?: (node: ITreeNodeItemProps, isUpdate?) => void;
6161
onTreeClick?: () => void;

src/controller/__tests__/folderTree.test.ts

+10
Original file line numberDiff line numberDiff line change
@@ -238,4 +238,14 @@ describe('The folder tree controller', () => {
238238
expect(mockFn).toBeCalled();
239239
expect(folderTreeService.get(2)?.children).toHaveLength(1);
240240
});
241+
242+
test('Should support to execute the onExpandKeys method', () => {
243+
expectFnCalled((fn) => {
244+
const mockExpandKeys = [1, 2];
245+
folderTreeService.onExpandKeys(fn);
246+
folderTreeController.onExpandKeys(mockExpandKeys);
247+
248+
expect(fn.mock.calls[0][0]).toBe(mockExpandKeys);
249+
});
250+
});
241251
});

src/controller/explorer/folderTree.tsx

+6-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export interface IFolderTreeController extends Partial<Controller> {
3030
target: IFolderTreeNodeProps
3131
) => void;
3232
readonly onLoadData?: (treeNode: IFolderTreeNodeProps) => Promise<void>;
33+
readonly onExpandKeys?: (expandKeys: UniqueId[]) => void;
3334
readonly onRightClick?: (
3435
treeNode: IFolderTreeNodeProps
3536
) => IMenuItemProps[];
@@ -99,6 +100,7 @@ export class FolderTreeController
99100
current: null,
100101
folderPanelContextMenu: FOLDER_PANEL_CONTEXT_MENU || [],
101102
data: [],
103+
expandKeys: [],
102104
},
103105
});
104106
}
@@ -172,7 +174,6 @@ export class FolderTreeController
172174
source: IFolderTreeNodeProps,
173175
target: IFolderTreeNodeProps
174176
) => {
175-
// this.folderTreeService.onDropTree(treeNode);
176177
this.emit(FolderTreeEvent.onDrop, source, target);
177178
};
178179

@@ -217,4 +218,8 @@ export class FolderTreeController
217218
return Promise.resolve();
218219
}
219220
};
221+
222+
public onExpandKeys = (expandedKeys: UniqueId[]) => {
223+
this.emit(FolderTreeEvent.onExpandKeys, expandedKeys);
224+
};
220225
}

src/extensions/folderTree/index.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ export const ExtendsFolderTree: IExtension = {
5656
}
5757
}
5858
});
59+
60+
molecule.folderTree.onExpandKeys((expandKeys) => {
61+
molecule.folderTree.setExpandKeys(expandKeys);
62+
});
5963
},
6064
dispose() {},
6165
};

src/model/workbench/explorer/folderTree.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export enum FolderTreeEvent {
2222
onCreate = 'folderTree.onCreate',
2323
onLoadData = 'folderTree.onLoadData',
2424
onDrop = 'folderTree.onDrop',
25+
onExpandKeys = 'folderTree.onExpandKeys',
2526
}
2627

2728
export interface IFolderInputEvent {
@@ -34,6 +35,7 @@ export interface IFolderTreeSubItem {
3435
contextMenu?: IMenuItemProps[];
3536
folderPanelContextMenu?: IMenuItemProps[];
3637
current?: IFolderTreeNodeProps | null;
38+
expandKeys?: UniqueId[];
3739
}
3840
export interface IFolderTree {
3941
folderTree?: IFolderTreeSubItem;
@@ -98,6 +100,7 @@ export class IFolderTreeModel implements IFolderTree {
98100
current: null,
99101
folderPanelContextMenu: [],
100102
data: [],
103+
expandKeys: [],
101104
},
102105
autoSort: Boolean = false,
103106
entry?: React.ReactNode

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

+14
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,13 @@ describe('Test StatusBarService', () => {
6666
expect(folderTreeService.getFolderContextMenu()).toEqual(mockMenuProps);
6767
});
6868

69+
test('Should support to set expandKeys', () => {
70+
expect(folderTreeService.getExpandKeys()).toEqual([]);
71+
72+
folderTreeService.setExpandKeys([1, 2]);
73+
expect(folderTreeService.getExpandKeys()).toEqual([1, 2]);
74+
});
75+
6976
test('Should support to set active node', () => {
7077
const mockRootTree: IFolderTreeNodeProps = {
7178
id: 0,
@@ -480,4 +487,11 @@ describe('Test StatusBarService', () => {
480487
folderTreeService.emit(FolderTreeEvent.onDrop);
481488
});
482489
});
490+
491+
test('Should support to onExpandKey', () => {
492+
expectFnCalled((fn) => {
493+
folderTreeService.onExpandKeys(fn);
494+
folderTreeService.emit(FolderTreeEvent.onExpandKeys);
495+
});
496+
});
483497
});

src/services/workbench/explorer/folderTreeService.ts

+28
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ export interface IFolderTreeService extends Component<IFolderTree> {
5252
* Get the context menus for folder
5353
*/
5454
getFolderContextMenu: () => IMenuItemProps[];
55+
/**
56+
* Get the expandKeys in folderTree
57+
*/
58+
getExpandKeys: () => UniqueId[];
59+
/**
60+
* Set the expandKeys for folderTree
61+
*/
62+
setExpandKeys: (expandKeys: UniqueId[]) => void;
5563
/**
5664
* Active specific node,
5765
* or unactive any node in folder tree
@@ -138,6 +146,11 @@ export interface IFolderTreeService extends Component<IFolderTree> {
138146
callback: (treeNode: IFolderTreeNodeProps) => void
139147
) => void
140148
): void;
149+
/**
150+
* Callback for expanding tree node
151+
* @param callback
152+
*/
153+
onExpandKeys(callback: (expandKeys: UniqueId[]) => void): void;
141154
/**
142155
* Toggle whether to enable sorting, which is disabled by default.
143156
*/
@@ -226,6 +239,17 @@ export class FolderTreeService
226239
this.folderContextMenu = menus;
227240
}
228241

242+
public getExpandKeys() {
243+
return this.state.folderTree?.expandKeys || [];
244+
}
245+
246+
public setExpandKeys(expandKeys: UniqueId[]) {
247+
const { folderTree } = this.state;
248+
this.setState({
249+
folderTree: { ...folderTree, expandKeys },
250+
});
251+
}
252+
229253
private setCurrentFolderLocation(data: IFolderTreeNodeProps, id: UniqueId) {
230254
const children = data.children;
231255
const { tree } = this.getCurrentRootFolderInfo(id);
@@ -513,6 +537,10 @@ export class FolderTreeService
513537
this.subscribe(FolderTreeEvent.onLoadData, callback);
514538
};
515539

540+
public onExpandKeys = (callback: (expandKeys: UniqueId[]) => void) => {
541+
this.subscribe(FolderTreeEvent.onExpandKeys, callback);
542+
};
543+
516544
public toggleAutoSort() {
517545
this.setState({ autoSort: !this.state.autoSort });
518546
}

src/workbench/sidebar/explore/folderTree.tsx

+4-1
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,11 @@ const FolderTree: React.FunctionComponent<IFolderTreeProps> = (props) => {
7878
onRightClick,
7979
onLoadData,
8080
createTreeNode,
81+
onExpandKeys,
8182
...restProps
8283
} = props;
8384

84-
const { data = [], folderPanelContextMenu = [] } = folderTree;
85+
const { data = [], folderPanelContextMenu = [], expandKeys } = folderTree;
8586

8687
const handleAddRootFolder = () => {
8788
createTreeNode?.('RootFolder');
@@ -227,6 +228,7 @@ const FolderTree: React.FunctionComponent<IFolderTreeProps> = (props) => {
227228
<div data-content={panel.id} style={{ height: '100%' }}>
228229
<Tree
229230
// root folder do not render
231+
expandKeys={expandKeys}
230232
data={data[0]?.children || []}
231233
className={classNames(
232234
folderTreeClassName,
@@ -239,6 +241,7 @@ const FolderTree: React.FunctionComponent<IFolderTreeProps> = (props) => {
239241
onRightClick={handleRightClick}
240242
renderTitle={renderTitle}
241243
onLoadData={onLoadData}
244+
onExpand={onExpandKeys}
242245
{...restProps}
243246
/>
244247
</div>

0 commit comments

Comments
 (0)