Skip to content

Commit 8c4096a

Browse files
authored
feat: folderTree support to set entry page (#209)
* feat: folderTree support to set entry page * fix: remove unuseless code
1 parent 7ae4310 commit 8c4096a

File tree

5 files changed

+46
-35
lines changed

5 files changed

+46
-35
lines changed

src/controller/explorer/explorer.tsx

+1-10
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,9 @@ import {
2626
IExplorerService,
2727
ISidebarService,
2828
IActivityBarService,
29-
IFolderTreeService,
3029
ActivityBarService,
3130
SidebarService,
3231
ExplorerService,
33-
FolderTreeService,
3432
} from 'mo/services';
3533
import { FolderTreeController, IFolderTreeController } from './folderTree';
3634

@@ -54,15 +52,13 @@ export class ExplorerController
5452
private readonly activityBarService: IActivityBarService;
5553
private readonly sidebarService: ISidebarService;
5654
private readonly explorerService: IExplorerService;
57-
private readonly folderTreeService: IFolderTreeService;
5855
private readonly folderTreeController: IFolderTreeController;
5956

6057
constructor() {
6158
super();
6259
this.activityBarService = container.resolve(ActivityBarService);
6360
this.sidebarService = container.resolve(SidebarService);
6461
this.explorerService = container.resolve(ExplorerService);
65-
this.folderTreeService = container.resolve(FolderTreeService);
6662
this.folderTreeController = container.resolve(FolderTreeController);
6763

6864
this.initView();
@@ -153,12 +149,7 @@ export class ExplorerController
153149
};
154150

155151
public renderFolderTree = () => {
156-
return (
157-
<FolderTreeView
158-
{...this.folderTreeService.getState()?.folderTree}
159-
{...this.folderTreeController}
160-
/>
161-
);
152+
return <FolderTreeView />;
162153
};
163154
}
164155

src/model/workbench/explorer/explorer.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ export function builtInExplorerFolderPanel() {
141141
id: SAMPLE_FOLDER_PANEL_ID,
142142
sortIndex: 8,
143143
name: localize('menu.defaultProjectName', 'No Open Folder'),
144-
className: 'samplefolder',
145144
toolbar: [
146145
{
147146
id: NEW_FILE_COMMAND_ID,

src/model/workbench/explorer/folderTree.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export interface IFolderTreeSubItem {
3737
}
3838
export interface IFolderTree {
3939
folderTree?: IFolderTreeSubItem;
40+
entry?: React.ReactNode;
4041
}
4142

4243
export const NEW_FILE_COMMAND_ID = 'explorer.newFile';
@@ -138,8 +139,13 @@ const builtInFolderTree = {
138139

139140
export class IFolderTreeModel implements IFolderTree {
140141
public folderTree: IFolderTreeSubItem;
142+
public entry: React.ReactNode;
141143

142-
constructor(folderTree: IFolderTreeSubItem = builtInFolderTree) {
144+
constructor(
145+
folderTree: IFolderTreeSubItem = builtInFolderTree,
146+
entry?: React.ReactNode
147+
) {
143148
this.folderTree = folderTree;
149+
this.entry = entry;
144150
}
145151
}

src/services/workbench/explorer/folderTreeService.ts

+7
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export interface IFolderTreeService extends Component<IFolderTree> {
5050
addRootFolder(folder?: ITreeNodeItemProps): void;
5151
removeRootFolder(id: number): void;
5252
setActive(id?: number): void;
53+
setEntry(entry: React.ReactNode): void;
5354
onDropTree(treeData: ITreeNodeItemProps[]): void;
5455
getFileIconByExtensionName(name: string, fileType: FileType): string;
5556
/**
@@ -213,6 +214,12 @@ export class FolderTreeService
213214
});
214215
}
215216

217+
public setEntry(entry: React.ReactNode) {
218+
this.setState({
219+
entry,
220+
});
221+
}
222+
216223
public onRename(callback: (id: number) => void) {
217224
this.subscribe(FolderTreeEvent.onRename, callback);
218225
}

src/workbench/sidebar/explore/folderTree.tsx

+31-23
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ import React, {
66
useCallback,
77
useLayoutEffect,
88
} from 'react';
9-
import { IFolderTreeSubItem } from 'mo/model';
9+
import { IFolderTree, IFolderTreeSubItem } from 'mo/model';
1010
import { select, getEventPosition } from 'mo/common/dom';
1111
import Tree, { ITreeNodeItemProps } from 'mo/components/tree';
1212
import { IMenuItemProps, Menu } from 'mo/components/menu';
1313
import { Button } from 'mo/components/button';
14-
import { IFolderTreeController } from 'mo/controller/explorer/folderTree';
14+
import { FolderTreeController } from 'mo/controller/explorer/folderTree';
1515
import { useContextView } from 'mo/components/contextView';
1616
import { useContextMenu } from 'mo/components/contextMenu';
1717
import {
@@ -66,13 +66,12 @@ const Input = React.forwardRef(
6666
}
6767
);
6868

69-
const FolderTree: React.FunctionComponent<IFolderTreeSubItem> = (
70-
props: IFolderTreeSubItem & IFolderTreeController
71-
) => {
69+
const FolderTree: React.FunctionComponent<
70+
FolderTreeController & IFolderTree
71+
> = (props) => {
7272
const {
73-
data = [],
74-
contextMenu: rawContextMenu = [],
75-
folderPanelContextMenu = [],
73+
folderTree = {},
74+
entry,
7675
onUpdateFileName,
7776
onSelectFile,
7877
onDropTree,
@@ -82,6 +81,28 @@ const FolderTree: React.FunctionComponent<IFolderTreeSubItem> = (
8281
getInputEvent,
8382
...restProps
8483
} = props;
84+
85+
const {
86+
data = [],
87+
contextMenu: rawContextMenu = [],
88+
folderPanelContextMenu = [],
89+
} = folderTree;
90+
91+
const handleAddRootFolder = () => {
92+
onNewRootFolder?.();
93+
};
94+
95+
const welcomePage = entry ? (
96+
<>{entry}</>
97+
) : (
98+
<div style={{ padding: '10px 5px' }}>
99+
you have not yet opened a folder
100+
<Button onClick={handleAddRootFolder}>Add Folder</Button>
101+
</div>
102+
);
103+
104+
if (!data.length) return welcomePage;
105+
85106
const inputRef = useRef<HTMLInputElement>(null);
86107
// tree context view
87108
const contextMenu = useRef<ReturnType<typeof useContextMenu>>();
@@ -164,10 +185,6 @@ const FolderTree: React.FunctionComponent<IFolderTreeSubItem> = (
164185
}
165186
};
166187

167-
const handleAddRootFolder = () => {
168-
onNewRootFolder?.();
169-
};
170-
171188
const renderTitle = (node: ITreeNodeItemProps) => {
172189
const { isEditable, name } = node;
173190

@@ -194,9 +211,9 @@ const FolderTree: React.FunctionComponent<IFolderTreeSubItem> = (
194211
return () => {
195212
contextMenu.current?.dispose();
196213
};
197-
}, [data?.length]);
214+
}, [data.length]);
198215

199-
const renderByData = (
216+
return (
200217
<Tree
201218
// root folder do not render
202219
data={data[0]?.children || []}
@@ -211,14 +228,5 @@ const FolderTree: React.FunctionComponent<IFolderTreeSubItem> = (
211228
{...restProps}
212229
/>
213230
);
214-
215-
const renderInitial = (
216-
<div style={{ padding: '10px 5px' }}>
217-
you have not yet opened a folder
218-
<Button onClick={handleAddRootFolder}>Add Folder</Button>
219-
</div>
220-
);
221-
222-
return data?.length > 0 ? renderByData : renderInitial;
223231
};
224232
export default memo(FolderTree);

0 commit comments

Comments
 (0)