@@ -7,24 +7,23 @@ import { IMenuItemProps } from 'mo/components/menu';
7
7
import { Modal } from 'mo/components/dialog' ;
8
8
import {
9
9
IFolderInputEvent ,
10
- TreeNodeModel ,
11
10
BASE_CONTEXT_MENU ,
12
11
ROOT_FOLDER_CONTEXT_MENU ,
13
12
FILE_CONTEXT_MENU ,
14
13
NEW_FILE_COMMAND_ID ,
15
14
NEW_FOLDER_COMMAND_ID ,
16
15
RENAME_COMMAND_ID ,
17
- REMOVE_COMMAND_ID ,
18
16
DELETE_COMMAND_ID ,
19
17
OPEN_TO_SIDE_COMMAND_ID ,
20
- ADD_ROOT_FOLDER_COMMAND_ID ,
21
18
FolderTreeEvent ,
22
19
FileTypes ,
23
20
} from 'mo/model' ;
24
21
import { FolderTreeService , IFolderTreeService } from 'mo/services' ;
22
+ import { randomId } from 'mo/common/utils' ;
25
23
26
24
const confirm = Modal . confirm ;
27
25
export interface IFolderTreeController {
26
+ readonly createFileOrFolder ?: ( type : keyof typeof FileTypes ) => void ;
28
27
readonly onClickContextMenu ?: (
29
28
e : React . MouseEvent ,
30
29
item : IMenuItemProps ,
@@ -38,6 +37,10 @@ export interface IFolderTreeController {
38
37
readonly getInputEvent ?: ( events : IFolderInputEvent ) => IFolderInputEvent ;
39
38
readonly onNewFile ?: ( id : number ) => void ;
40
39
readonly onNewFolder ?: ( id : number ) => void ;
40
+ /**
41
+ * If not provide id, it will use a random id
42
+ */
43
+ readonly onNewRootFolder ?: ( id ?: number ) => void ;
41
44
readonly onRename ?: ( id : number ) => void ;
42
45
readonly onDelete ?: ( id : number ) => void ;
43
46
readonly onUpdateFileName ?: ( file : ITreeNodeItemProps ) => void ;
@@ -63,6 +66,15 @@ export class FolderTreeController
63
66
64
67
private initView ( ) { }
65
68
69
+ public createFileOrFolder = ( type : keyof typeof FileTypes ) => {
70
+ const folderTreeState = this . folderTreeService . getState ( ) ;
71
+ const { data, current } = folderTreeState ?. folderTree || { } ;
72
+ // The current selected node id or the first root node
73
+ const nodeId = current ?. id || data ?. [ 0 ] ?. id ;
74
+ // emit onNewFile or onNewFolder event
75
+ this . emit ( FolderTreeEvent [ `onNew${ type } ` ] , nodeId ) ;
76
+ } ;
77
+
66
78
public readonly getInputEvent = (
67
79
events : IFolderInputEvent
68
80
) : IFolderInputEvent => {
@@ -85,6 +97,10 @@ export class FolderTreeController
85
97
this . emit ( FolderTreeEvent . onNewFolder , id ) ;
86
98
} ;
87
99
100
+ public onNewRootFolder = ( id ?: number ) => {
101
+ this . emit ( FolderTreeEvent . onNewRootFolder , id || randomId ( ) ) ;
102
+ } ;
103
+
88
104
public onUpdateFileName = ( file : ITreeNodeItemProps ) => {
89
105
this . emit ( FolderTreeEvent . onUpdateFileName , file ) ;
90
106
} ;
@@ -107,12 +123,11 @@ export class FolderTreeController
107
123
public readonly onClickContextMenu = (
108
124
e : React . MouseEvent ,
109
125
item : IMenuItemProps ,
110
- node = { }
126
+ node ?: ITreeNodeItemProps
111
127
) => {
112
128
const menuId = item . id ;
113
129
const ctx = this ;
114
- const { id : nodeId , name } = node as any ;
115
- console . log ( 'onClickContextMenu => Item' , item ) ;
130
+ const { id : nodeId , name } = node || { } ;
116
131
switch ( menuId ) {
117
132
case RENAME_COMMAND_ID : {
118
133
this . onRename ( nodeId ) ;
@@ -129,30 +144,16 @@ export class FolderTreeController
129
144
break ;
130
145
}
131
146
case NEW_FILE_COMMAND_ID : {
132
- this . onNewFile ( nodeId ) ;
147
+ this . createFileOrFolder ( FileTypes . File ) ;
133
148
break ;
134
149
}
135
150
case NEW_FOLDER_COMMAND_ID : {
136
- this . onNewFolder ( nodeId ) ;
137
- break ;
138
- }
139
- case REMOVE_COMMAND_ID : {
140
- this . folderTreeService . removeRootFolder ( nodeId ) ;
141
- break ;
142
- }
143
- case ADD_ROOT_FOLDER_COMMAND_ID : {
144
- this . folderTreeService . addRootFolder ?.(
145
- new TreeNodeModel ( {
146
- title : `molecule_temp${ Math . random ( ) } ` ,
147
- fileType : 'rootFolder' ,
148
- } )
149
- ) ;
151
+ this . createFileOrFolder ( FileTypes . Folder ) ;
150
152
break ;
151
153
}
152
154
case OPEN_TO_SIDE_COMMAND_ID : {
153
- console . log ( 'OpenTab' ) ;
155
+ this . onSelectFile ( node ! , false ) ;
154
156
break ;
155
- // editorService.open();
156
157
}
157
158
}
158
159
} ;
0 commit comments