Skip to content

Commit 74f8976

Browse files
authored
fix: improve unreasonable design (#232)
1 parent 5ef6a82 commit 74f8976

File tree

6 files changed

+73
-41
lines changed

6 files changed

+73
-41
lines changed

src/components/menu/menuItem.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ export interface IMenuItemProps extends HTMLElementProps {
3131
render?: (data: IMenuItemProps) => ReactNode;
3232
onClick?: (e: React.MouseEvent, item?: IMenuItemProps) => void;
3333
sortIndex?: number;
34+
35+
[key: string]: any;
3436
}
3537

3638
export function MenuItem(props: React.PropsWithChildren<IMenuItemProps>) {

src/controller/editor.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,9 @@ export class EditorController extends Controller implements IEditorController {
101101
this.onCloseToLeft(tabItem!, groupId);
102102
break;
103103
}
104+
default: {
105+
this.emit(EditorEvent.onActionsClick, menuId, current);
106+
}
104107
}
105108
};
106109

src/extensions/folderTree/index.tsx

+1-39
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,10 @@
11
import molecule from 'mo';
22
import { IExtension } from 'mo/model/extension';
33
import { ITreeNodeItemProps } from 'mo/components/tree';
4-
import { FileTypes, TreeNodeModel } from 'mo/model';
5-
import { randomId } from 'mo/common/utils';
4+
import { FileTypes } from 'mo/model';
65

76
export const ExtendsFolderTree: IExtension = {
87
activate() {
9-
molecule.folderTree.onNewFile((id: number) => {
10-
// work through addNode function
11-
molecule.folderTree.addNode(
12-
id,
13-
new TreeNodeModel({
14-
id: randomId(),
15-
name: '',
16-
fileType: FileTypes.File,
17-
isEditable: true,
18-
})
19-
);
20-
});
21-
22-
molecule.folderTree.onNewFolder((id: number) => {
23-
// work through addNode function
24-
molecule.folderTree.addNode(
25-
id,
26-
new TreeNodeModel({
27-
id: randomId(),
28-
name: '',
29-
fileType: FileTypes.Folder,
30-
isEditable: true,
31-
})
32-
);
33-
});
34-
35-
molecule.folderTree.onNewRootFolder((id: number) => {
36-
molecule.folderTree.addRootFolder?.(
37-
new TreeNodeModel({
38-
id,
39-
name: 'molecule',
40-
location: 'molecule',
41-
fileType: FileTypes.RootFolder,
42-
})
43-
);
44-
});
45-
468
molecule.folderTree.onDelete((id: number) => {
479
const { folderTree } = molecule.folderTree.getState();
4810
const cloneData: ITreeNodeItemProps[] = folderTree?.data || [];

src/model/workbench/editor.ts

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export enum EditorEvent {
1414
OpenTab = 'editor.openTab',
1515
OnSelectTab = 'editor.selectTab',
1616
OnUpdateTab = 'editor.updateTab',
17+
onActionsClick = 'editor.actionsClick',
1718
OnSplitEditorRight = 'editor.splitEditorRight',
1819
}
1920
interface BuiltInEditorTabDataType {

src/services/workbench/editorService.ts

+27-1
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ import {
99
IEditorGroup,
1010
IEditorTab,
1111
EditorEvent,
12+
getEditorInitialActions,
1213
} from 'mo/model';
1314
import { searchById } from '../helper';
1415
import { editor as monacoEditor, Uri } from 'mo/monaco';
16+
import { IMenuItemProps } from 'mo/components';
1517

1618
export interface IEditorService extends Component<IEditor> {
1719
/**
@@ -50,13 +52,20 @@ export interface IEditorService extends Component<IEditor> {
5052
onCloseOthers(callback: (tabItem: IEditorTab, groupId?: number) => void);
5153
onCloseToLeft(callback: (tabItem: IEditorTab, groupId?: number) => void);
5254
onCloseToRight(callback: (tabItem: IEditorTab, groupId?: number) => void);
55+
onActionsClick(
56+
callback: (menuId: string, currentGroup: IEditorGroup) => void
57+
): void;
5358
/**
5459
* Set active group and tab
5560
* @param groupId Target group ID
5661
* @param tabId Target tab ID
5762
*/
5863
setActive(groupId: number, tabId: string);
5964
updateGroup(groupId, groupValues: IEditorGroup): void;
65+
/**
66+
* Update actions in group
67+
*/
68+
updateGroupActions(actions: IMenuItemProps[]): void;
6069
updateCurrentGroup(currentValues): void;
6170
/**
6271
* The Instance of Editor
@@ -68,9 +77,11 @@ export class EditorService
6877
extends Component<IEditor>
6978
implements IEditorService {
7079
protected state: IEditor;
80+
protected groupActions: IMenuItemProps[];
7181
constructor() {
7282
super();
7383
this.state = container.resolve(EditorModel);
84+
this.groupActions = getEditorInitialActions();
7485
}
7586

7687
private disposeModel(tabs: IEditorTab | IEditorTab[]) {
@@ -80,6 +91,10 @@ export class EditorService
8091
});
8192
}
8293

94+
public updateGroupActions(actions: IMenuItemProps[]): void {
95+
this.groupActions = actions;
96+
}
97+
8398
public setEntry(component: React.ReactNode) {
8499
this.setState({
85100
entry: component,
@@ -323,7 +338,12 @@ export class EditorService
323338
groups[groupIndex] = { ...currentGroup, tab, activeTab: tabId };
324339
} else {
325340
// if group isn't exist, open a new group
326-
group = new EditorGroupModel(groups.length + 1, tab, [tab]);
341+
group = new EditorGroupModel(
342+
groups.length + 1,
343+
tab,
344+
[tab],
345+
this.groupActions
346+
);
327347
groups.push(group);
328348
}
329349

@@ -422,4 +442,10 @@ export class EditorService
422442
) {
423443
this.subscribe(EditorEvent.OnCloseToRight, callback);
424444
}
445+
446+
public onActionsClick(
447+
callback: (menuId: string, currentGroup: IEditorGroup) => void
448+
) {
449+
this.subscribe(EditorEvent.onActionsClick, callback);
450+
}
425451
}

stories/extensions/test/index.tsx

+39-1
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ import {
55
MENU_VIEW_MENUBAR,
66
MENU_VIEW_STATUSBAR,
77
} from 'mo/model/workbench/menuBar';
8-
import { IExtension } from 'mo/model';
8+
import { FileTypes, IExtension, TreeNodeModel } from 'mo/model';
99

1010
import TestPane from './testPane';
1111
import { Entry } from './entry';
1212
import { Position } from 'mo/model/workbench/layout';
13+
import { randomId } from 'mo/common/utils';
1314

1415
export const ExtendTestPane: IExtension = {
1516
activate() {
@@ -83,5 +84,42 @@ export const ExtendTestPane: IExtension = {
8384
});
8485
}
8586
});
87+
88+
molecule.folderTree.onNewFile((id: number) => {
89+
// work through addNode function
90+
molecule.folderTree.addNode(
91+
id,
92+
new TreeNodeModel({
93+
id: randomId(),
94+
name: '',
95+
fileType: FileTypes.File,
96+
isEditable: true,
97+
})
98+
);
99+
});
100+
101+
molecule.folderTree.onNewFolder((id: number) => {
102+
// work through addNode function
103+
molecule.folderTree.addNode(
104+
id,
105+
new TreeNodeModel({
106+
id: randomId(),
107+
name: '',
108+
fileType: FileTypes.Folder,
109+
isEditable: true,
110+
})
111+
);
112+
});
113+
114+
molecule.folderTree.onNewRootFolder((id: number) => {
115+
molecule.folderTree.addRootFolder?.(
116+
new TreeNodeModel({
117+
id,
118+
name: 'molecule',
119+
location: 'molecule',
120+
fileType: FileTypes.RootFolder,
121+
})
122+
);
123+
});
86124
},
87125
};

0 commit comments

Comments
 (0)