Skip to content

Commit 4d13957

Browse files
zhangtengjinwewoor
authored andcommitted
feat: folder service test
folder service test
1 parent ccd213e commit 4d13957

File tree

8 files changed

+74
-19
lines changed

8 files changed

+74
-19
lines changed

src/components/tree/index.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@ export interface ITreeProps {
5050
expandedKeys?: Key[];
5151
defaultCheckedKeys?: Key[];
5252
checkedKeys?:
53-
| Key[]
54-
| {
55-
checked: Key[];
56-
halfChecked: Key[];
57-
};
53+
| Key[]
54+
| {
55+
checked: Key[];
56+
halfChecked: Key[];
57+
};
5858
defaultSelectedKeys?: Key[];
5959
selectedKeys?: Key[];
6060
titleRender?: (node: DataNode) => React.ReactNode;

src/controller/explorer/explorer.tsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
explorerService,
88
} from 'mo';
99
import * as React from 'react';
10-
import { ExplorerView, FolderTree } from 'mo/workbench/sidebar/explore';
10+
import { ExplorerView, FolderTreeView } from 'mo/workbench/sidebar/explore';
1111
import { IActionBarItem } from 'mo/components/actionBar';
1212

1313
export interface IExplorerController {
@@ -99,7 +99,7 @@ export class ExplorerController
9999
id: 'new_file',
100100
title: 'New File',
101101
iconName: 'codicon-new-file',
102-
onClick: () => {},
102+
onClick: () => { },
103103
},
104104
{
105105
id: 'new_folder',
@@ -118,7 +118,9 @@ export class ExplorerController
118118
},
119119
],
120120
renderPanel: () => (
121-
<FolderTree data={explorerState.folderTree?.data} />
121+
<FolderTreeView
122+
data={explorerState.folderTree?.data}
123+
contextMenu={explorerState.folderTree?.contextMenu} />
122124
),
123125
};
124126

src/controller/explorer/folderTree.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ export interface IFolderTreeController {
2828
menus: IMenuItem[],
2929
treeNode: IMenuItem
3030
) => IMenuItem[];
31+
32+
readonly onAddFolder?: (folder: ITreeNodeItem) => void;
3133
}
3234

3335
@singleton()
@@ -39,7 +41,7 @@ export class FolderTreeController
3941
this.initView();
4042
}
4143

42-
private initView() {}
44+
private initView() { }
4345

4446
public readonly onSelectFile = (file: ITreeNodeItem) => {
4547
const tabData = {
@@ -130,4 +132,8 @@ export class FolderTreeController
130132
) => {
131133
return menus;
132134
};
135+
136+
public readonly onAddFolder = (folder) => {
137+
explorerService.addFolder(folder);
138+
}
133139
}

src/controller/explorer/outline.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { singleton } from 'tsyringe';
33
import { explorerService } from 'mo';
44
import React from 'react';
55

6-
export interface IOutlineController {}
6+
export interface IOutlineController { }
77

88
@singleton()
99
export class OutlineController

src/model/workbench/explorer.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { IActionBarItem } from 'mo/components/actionBar';
44
import { ITreeNodeItem } from 'mo/components/tree';
55
import { IMenuItem } from 'mo/components/menu';
66

7-
export enum ExplorerEvent {}
7+
export enum ExplorerEvent { }
88
export interface IPanelItem<T = any> extends IActionBarItem {
99
renderPanel?: (props) => React.ReactNode | JSX.Element;
1010
toolbar?: T;
@@ -62,6 +62,7 @@ export class IExplorerModel implements IExplorer {
6262
public data: IPanelItem[] = [];
6363
public folderTree: IFolderTree = {
6464
contextMenu: folderContextMenu.concat(fileContextMenu),
65+
data: []
6566
};
6667
public headerToolBar: IActionBarItem[] = builtInHeaderToolbar;
6768
}

src/services/workbench/explorerService.ts

+34
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
IExplorerModel,
77
} from 'mo/model/workbench/explorer';
88
import { ITreeNodeItem, FileType, FileTypes } from 'mo/components/tree';
9+
import { searchById } from '../helper';
910
export interface IExplorerService extends Component<IExplorer> {
1011
addPanel(panel: IPanelItem | IPanelItem[]): void;
1112
createFile(
@@ -17,6 +18,8 @@ export interface IExplorerService extends Component<IExplorer> {
1718
rename(fileData: ITreeNodeItem, callback: Function): void;
1819
deleteFile(fileData: ITreeNodeItem): void;
1920
onDropTree(treeData: ITreeNodeItem[]): void;
21+
22+
addFolder(fileData?: ITreeNodeItem): void;
2023
}
2124

2225
@singleton()
@@ -304,4 +307,35 @@ export class ExplorerService
304307
}),
305308
});
306309
};
310+
311+
312+
// second version
313+
// 考虑操作 tree 数据结构的方法抽离出一个 tree 类
314+
315+
public addFolder(folder) {
316+
const { folderTree } = this.state;
317+
let next = [...folderTree?.data!];
318+
if (Array.isArray(folder)) {
319+
next = next?.concat(folder);
320+
} else {
321+
next?.push(folder);
322+
}
323+
console.log('next', next)
324+
this.setState({
325+
folderTree: { ...folderTree, data: next }
326+
});
327+
}
328+
// public deleteFolder(id) {
329+
// const { folderTree } = this.state;
330+
// let next = [...folderTree?.data!];
331+
// if (Array.isArray(folder)) {
332+
// next = next?.concat(folder);
333+
// } else {
334+
// next?.push(folder);
335+
// }
336+
// const current = searchById(id)
337+
// this.setState({
338+
// folderTree: { ...folderTree, data: next }
339+
// });
340+
// }
307341
}

src/workbench/sidebar/explore/folderTree.tsx

+15-4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ const FolderTree: React.FunctionComponent<IFolderTree> = (
2222
onDropTree,
2323
filterContextMenu,
2424
onClickContextMenu,
25+
onAddFolder,
2526
...restProps
2627
} = props;
2728

@@ -65,8 +66,8 @@ const FolderTree: React.FunctionComponent<IFolderTree> = (
6566
onBlur={handleInputBlur}
6667
/>
6768
) : (
68-
name
69-
);
69+
name
70+
);
7071
};
7172

7273
const renderByData = (
@@ -83,10 +84,20 @@ const FolderTree: React.FunctionComponent<IFolderTree> = (
8384
const renderInitial = (
8485
<span>
8586
you have not yet opened a folder
86-
<Button onClick={onCreateFile}>New Folder</Button>
87+
<Button onClick={() => {
88+
console.log('test')
89+
onAddFolder?.({
90+
name: 'qingyi',
91+
location: 'test',
92+
fileType: 'folder',
93+
children: [],
94+
id: '123',
95+
icon: '',
96+
modify: false
97+
});
98+
}}>Add Folder</Button>
8799
</span>
88100
);
89-
90101
return data?.length > 0 ? renderByData : renderInitial;
91102
};
92103
export default memo(FolderTree);
+5-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { ExplorerController } from 'mo/controller/explorer/explorer';
2+
import { FolderTreeController } from 'mo/controller/explorer/folderTree';
23
import { connect } from 'mo/react';
34
import { explorerService } from 'mo/services';
45
import { container } from 'tsyringe';
56
import { Explorer } from './explore';
6-
7-
export { default as FolderTree } from './folderTree';
7+
import FolderTree from './folderTree'
88

99
const explorerController = container.resolve(ExplorerController);
10+
const folderTreeController = container.resolve(FolderTreeController);
1011
const ExplorerView = connect(explorerService, Explorer, explorerController);
11-
12-
export { ExplorerView, Explorer };
12+
const FolderTreeView = connect(explorerService, FolderTree, folderTreeController);
13+
export { ExplorerView, Explorer, FolderTreeView, FolderTree };

0 commit comments

Comments
 (0)