1
1
import { singleton } from 'tsyringe' ;
2
2
import { Controller } from 'mo/react/controller' ;
3
3
4
- import { ITreeNodeItem , FileType , FileTypes } from 'mo/components/tree' ;
4
+ import { ITreeNodeItem , FileTypes } from 'mo/components/tree' ;
5
5
6
6
import { editorService , explorerService } from 'mo' ;
7
+ import { EditorController } from 'mo/controller/editor' ;
7
8
import { IMenuItem } from 'mo/components/menu' ;
8
9
import Modal from 'mo/components/dialog' ;
9
10
const confirm = Modal . confirm ;
10
11
11
12
export interface IFolderTreeController {
12
13
readonly onSelectFile ?: ( file : ITreeNodeItem ) => void ;
13
- readonly onCreateFile ?: ( e : React . MouseEvent ) => void ;
14
- readonly onUpdateFile ?: (
15
- file : ITreeNodeItem ,
16
- newName : string ,
17
- index : number
18
- ) => void ;
19
- readonly onRename ?: ( file : ITreeNodeItem , callback : Function ) => void ;
20
- readonly onDeleteFile ?: ( file : ITreeNodeItem ) => void ;
21
14
readonly onDropTree ?: ( treeNode : ITreeNodeItem [ ] ) => void ;
22
15
readonly onClickContextMenu ?: (
23
16
e : React . MouseEvent ,
24
17
item : IMenuItem ,
25
- node : ITreeNodeItem
18
+ node : ITreeNodeItem ,
19
+ callback ?: Function
26
20
) => void ;
27
21
readonly filterContextMenu ?: (
28
22
menus : IMenuItem [ ] ,
29
- treeNode : IMenuItem
23
+ treeNode : ITreeNodeItem
30
24
) => IMenuItem [ ] ;
31
25
32
- readonly onAddFolder ?: ( folder : ITreeNodeItem ) => void ;
33
26
}
34
27
35
28
@singleton ( )
@@ -44,39 +37,17 @@ export class FolderTreeController
44
37
private initView ( ) { }
45
38
46
39
public readonly onSelectFile = ( file : ITreeNodeItem ) => {
47
- const tabData = {
40
+ const tabData : any = {
48
41
...file ,
49
- activeTab : file . id ,
50
42
modified : false ,
43
+ data : {
44
+ value : `hello tree ${ file . id } ` ,
45
+ path : 'desktop/molecule/editor1' ,
46
+ language : 'ini' ,
47
+ } ,
48
+ breadcrumb : [ { id : `${ file . id } ` , name : 'editor.js' } ] ,
51
49
} ;
52
- editorService . open ( tabData , Number ( tabData . activeTab ! ) ) ;
53
- } ;
54
-
55
- public readonly onCreateFile = ( e : React . MouseEvent ) => {
56
- const file : ITreeNodeItem = {
57
- id : '1' ,
58
- name : '' ,
59
- fileType : 'folder' ,
60
- modify : true ,
61
- } ;
62
- const fileType = FileTypes . FOLDER as FileType ;
63
- explorerService . createFile ( file , fileType ) ;
64
- } ;
65
-
66
- public readonly onUpdateFile = (
67
- file : ITreeNodeItem ,
68
- newName : string ,
69
- index : number
70
- ) => {
71
- explorerService . updateFile ( file , newName , index ) ;
72
- } ;
73
-
74
- public readonly onRename = ( file : ITreeNodeItem , callback : Function ) => {
75
- explorerService . rename ( file , callback ) ;
76
- } ;
77
-
78
- public readonly onDeleteFile = ( file : ITreeNodeItem ) => {
79
- explorerService . deleteFile ( file ) ;
50
+ editorService . open ( tabData ) ;
80
51
} ;
81
52
82
53
public readonly onDropTree = ( treeNode : ITreeNodeItem [ ] ) => {
@@ -86,54 +57,101 @@ export class FolderTreeController
86
57
public readonly onClickContextMenu = (
87
58
e : React . MouseEvent ,
88
59
item : IMenuItem ,
89
- node : ITreeNodeItem
60
+ node : ITreeNodeItem ,
61
+ callback ?: Function
90
62
) => {
91
63
const menuId = item . id ;
92
- const ctx = this ;
93
-
64
+ const { id : nodeId , name } = node as any ;
94
65
switch ( menuId ) {
95
66
case 'rename' : {
96
- this . onRename ( node , ( ) => {
97
- console . log ( 'Rename file item:' , node ) ;
67
+ explorerService . rename ( nodeId , ( ) => {
68
+ if ( callback ) callback ( )
98
69
} ) ;
70
+ break ;
99
71
}
100
72
case 'delete' : {
101
73
confirm ( {
102
- title : `Are you sure you want to delete '${ node ?. name } ' ?` ,
74
+ title : `Are you sure you want to delete '${ name } ' ?` ,
103
75
content : 'This action is irreversible!' ,
104
76
onOk ( ) {
105
- ctx . onDeleteFile ( node ) ;
77
+ explorerService . delete ( nodeId , ( ) => {
78
+ new EditorController ( ) . onCloseTab ( nodeId )
79
+ } ) ;
106
80
} ,
107
81
} ) ;
82
+ break ;
108
83
}
109
84
case 'newFile' : {
110
- this . onCreateFile ( e ) ;
85
+ explorerService . newFile ( nodeId , ( ) => {
86
+ if ( callback ) callback ( )
87
+ } ) ;
88
+ break ;
111
89
}
112
90
case 'newFolder' : {
113
- const file : ITreeNodeItem = {
114
- id : '1' ,
115
- name : '' ,
116
- fileType : 'folder' ,
117
- modify : true ,
118
- } ;
119
- const fileType = FileTypes . FOLDER as FileType ;
120
- explorerService . createFile ( file , fileType ) ;
91
+ explorerService . newFolder ( nodeId , ( ) => {
92
+ if ( callback ) callback ( )
93
+ } ) ;
94
+ break ;
95
+ }
96
+ case 'remove' : {
97
+ explorerService . removeRootFolder ( nodeId ) ;
98
+ break ;
121
99
}
122
100
case 'openTab' : {
123
101
console . log ( 'OpenTab' ) ;
102
+ break ;
124
103
// editorService.open();
125
104
}
126
105
}
127
106
} ;
128
107
129
- public readonly filterContextMenu = (
130
- menus : IMenuItem [ ] ,
131
- menuItem : IMenuItem
132
- ) => {
133
- return menus ;
108
+ public readonly filterContextMenu = ( menus , node ) => {
109
+ let menu ;
110
+ const baseContextMenu = [
111
+ {
112
+ id : 'newFile' ,
113
+ name : 'New File' ,
114
+ } ,
115
+ {
116
+ id : 'newFolder' ,
117
+ name : 'New Folder' ,
118
+ }
119
+ ] ;
120
+
121
+ const rootFolderContextMenu = [
122
+ {
123
+ id : 'remove' ,
124
+ name : 'Remove Folder' ,
125
+ }
126
+ ]
127
+
128
+ const folderContextMenu : any = baseContextMenu . concat ( menus ) ;
129
+
130
+ const fileContextMenu = [
131
+ {
132
+ id : 'openToSide' ,
133
+ name : 'Open to the side' ,
134
+ }
135
+ ] . concat ( menus ) ;
136
+
137
+ const rootFodlerContextMenu = baseContextMenu . concat ( rootFolderContextMenu ) ;
138
+
139
+ switch ( node . fileType ) {
140
+ case FileTypes . FILE : {
141
+ menu = fileContextMenu ;
142
+ break ;
143
+ }
144
+ case FileTypes . FOLDER : {
145
+ menu = folderContextMenu ;
146
+ break ;
147
+ } ;
148
+ case FileTypes . ROOT : {
149
+ menu = rootFodlerContextMenu ;
150
+ break ;
151
+ } ;
152
+ default : menu = menus
153
+ }
154
+ return menu ;
134
155
} ;
135
156
136
- public readonly onAddFolder = ( folder ) => {
137
- explorerService . addFolder ( folder ) ;
138
- }
139
157
}
0 commit comments