Skip to content

Commit a9c6ded

Browse files
authored
feat: folderTree support to loadData (#367)
* feat: folderTree support to loadData * fix: rename LoadEventData
1 parent 45fe3f6 commit a9c6ded

File tree

5 files changed

+26
-1
lines changed

5 files changed

+26
-1
lines changed

src/components/tree/index.tsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ import * as React from 'react';
22
import RcTree, { TreeNode as RcTreeNode, TreeProps } from 'rc-tree';
33
import { Icon } from 'mo/components/icon';
44
import { prefixClaName, classNames } from 'mo/common/className';
5-
import { DataNode } from 'rc-tree/lib/interface';
5+
import type { DataNode } from 'rc-tree/lib/interface';
66
import { FileTypes } from 'mo/model';
7+
import type { LoadEventData } from 'mo/controller';
78

89
export interface ITreeNodeItemProps {
910
disabled?: boolean;
@@ -26,6 +27,7 @@ export interface ITreeProps extends Partial<TreeProps> {
2627
isLeaf: boolean
2728
) => JSX.Element | string;
2829
onDropTree?(treeNode: ITreeNodeItemProps[]): void;
30+
onLoadData?: (treeNode: LoadEventData) => Promise<void>;
2931
}
3032

3133
const TreeView = ({
@@ -36,6 +38,7 @@ const TreeView = ({
3638
onRightClick,
3739
renderTitle, // custom title
3840
onSelectNode,
41+
onLoadData,
3942
...restProps
4043
}: ITreeProps) => {
4144
const [selectedKeys, setKeys] = React.useState<React.Key[]>([]);
@@ -220,6 +223,7 @@ const TreeView = ({
220223
switcherIcon={<Icon type="chevron-right" />}
221224
onSelect={handleSelect}
222225
onRightClick={handleRightClick}
226+
loadData={onLoadData}
223227
{...restProps}
224228
>
225229
{renderTreeNodes(data, 0)}

src/controller/explorer/folderTree.tsx

+10
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ import {
1616
FileType,
1717
} from 'mo/model';
1818
import { FolderTreeService, IFolderTreeService } from 'mo/services';
19+
import type { EventDataNode } from 'rc-tree/lib/interface';
20+
21+
export interface LoadEventData extends EventDataNode {
22+
data?: ITreeNodeItemProps;
23+
}
1924

2025
export interface IFolderTreeController {
2126
readonly createTreeNode: (type: FileType) => void;
@@ -26,6 +31,7 @@ export interface IFolderTreeController {
2631
readonly onUpdateFileName?: (file: ITreeNodeItemProps) => void;
2732
readonly onSelectFile: (file: ITreeNodeItemProps) => void;
2833
readonly onDropTree?: (treeNode: ITreeNodeItemProps[]) => void;
34+
readonly onLoadData?: (treeNode: LoadEventData) => Promise<void>;
2935

3036
onRightClick(treeNode: ITreeNodeItemProps): IMenuItemProps[];
3137
}
@@ -148,4 +154,8 @@ export class FolderTreeController
148154
private onDelete = (id: number) => {
149155
this.emit(FolderTreeEvent.onDelete, id);
150156
};
157+
158+
public onLoadData = async (treeNode: LoadEventData) => {
159+
await this.emit(FolderTreeEvent.onLoadData, treeNode);
160+
};
151161
}

src/model/workbench/explorer/folderTree.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export enum FolderTreeEvent {
2121
onRightClick = 'folderTree.onRightClick',
2222
onContextMenuClick = 'folderTree.onContextMenuClick',
2323
onCreate = 'folderTree.onCreate',
24+
onLoadData = 'folderTree.onLoadData',
2425
}
2526

2627
export interface IFolderInputEvent {

src/services/workbench/explorer/folderTreeService.ts

+8
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { ITreeNodeItemProps } from 'mo/components/tree';
1717
import { ExplorerService, IExplorerService } from './explorerService';
1818
import { SAMPLE_FOLDER_PANEL_ID } from 'mo/model';
1919
import { IMenuItemProps } from 'mo/components';
20+
import type { LoadEventData } from 'mo/controller';
2021

2122
export interface IFolderTreeService extends Component<IFolderTree> {
2223
/**
@@ -118,6 +119,7 @@ export interface IFolderTreeService extends Component<IFolderTree> {
118119
contextMenu: IMenuItemProps
119120
) => void
120121
): void;
122+
onLoadData(callback: (treeNode: LoadEventData) => Promise<void>): void;
121123
}
122124

123125
@singleton()
@@ -332,4 +334,10 @@ export class FolderTreeService
332334
) => {
333335
this.subscribe(FolderTreeEvent.onContextMenuClick, callback);
334336
};
337+
338+
public onLoadData = (
339+
callback: (treeNode: LoadEventData) => Promise<void>
340+
) => {
341+
this.subscribe(FolderTreeEvent.onLoadData, callback);
342+
};
335343
}

src/workbench/sidebar/explore/folderTree.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ const FolderTree: React.FunctionComponent<IFolderTreeProps> = (props) => {
7777
onDropTree,
7878
onClickContextMenu,
7979
onRightClick,
80+
onLoadData,
8081
createTreeNode,
8182
...restProps
8283
} = props;
@@ -229,6 +230,7 @@ const FolderTree: React.FunctionComponent<IFolderTreeProps> = (props) => {
229230
onSelectNode={onSelectFile}
230231
onRightClick={handleRightClick}
231232
renderTitle={renderTitle}
233+
onLoadData={onLoadData}
232234
{...restProps}
233235
/>
234236
</div>

0 commit comments

Comments
 (0)