@@ -2,7 +2,6 @@ import 'reflect-metadata';
2
2
import * as React from 'react' ;
3
3
import { container , singleton } from 'tsyringe' ;
4
4
import { Controller } from 'mo/react/controller' ;
5
-
6
5
import { ITreeNodeItem , FileTypes } from 'mo/components/tree' ;
7
6
import { IMenuItem } from 'mo/components/menu' ;
8
7
import Modal from 'mo/components/dialog' ;
@@ -21,18 +20,11 @@ import {
21
20
ADD_ROOT_FOLDER_COMMAND_ID ,
22
21
FolderTreeEvent ,
23
22
} from 'mo/model' ;
24
- import {
25
- EditorService ,
26
- FolderTreeService ,
27
- IEditorService ,
28
- IFolderTreeService ,
29
- } from 'mo/services' ;
23
+ import { FolderTreeService , IFolderTreeService } from 'mo/services' ;
30
24
31
25
const confirm = Modal . confirm ;
32
26
33
27
export interface IFolderTreeController {
34
- readonly onSelectFile ?: ( file : ITreeNodeItem , isUpdate ?: boolean ) => void ;
35
- readonly onDropTree ?: ( treeNode : ITreeNodeItem [ ] ) => void ;
36
28
readonly onClickContextMenu ?: (
37
29
e : React . MouseEvent ,
38
30
item : IMenuItem ,
@@ -44,68 +36,70 @@ export interface IFolderTreeController {
44
36
treeNode : ITreeNodeItem
45
37
) => IMenuItem [ ] ;
46
38
readonly getInputEvent ?: ( events : IFolderInputEvent ) => IFolderInputEvent ;
39
+ readonly onNewFile ?: ( id : number ) => void ;
40
+ readonly onNewFolder ?: ( id : number ) => void ;
41
+ readonly onRename ?: ( id : number ) => void ;
42
+ readonly onDelete ?: ( id : number ) => void ;
43
+ readonly onUpdateFileName ?: ( file : ITreeNodeItem ) => void ;
44
+ readonly onUpdateFileContent ?: ( id : number , value ?: string ) => void ;
45
+ readonly onSelectFile ?: ( file : ITreeNodeItem , isUpdate ?: boolean ) => void ;
46
+ readonly onDropTree ?: ( treeNode : ITreeNodeItem [ ] ) => void ;
47
47
}
48
48
49
49
@singleton ( )
50
50
export class FolderTreeController
51
51
extends Controller
52
52
implements IFolderTreeController {
53
53
private readonly folderTreeService : IFolderTreeService ;
54
- private readonly editorService : IEditorService ;
55
54
constructor ( ) {
56
55
super ( ) ;
57
56
this . folderTreeService = container . resolve ( FolderTreeService ) ;
58
- this . editorService = container . resolve ( EditorService ) ;
59
57
this . initView ( ) ;
60
58
}
61
59
62
60
private initView ( ) { }
63
61
62
+ public readonly getInputEvent = (
63
+ events : IFolderInputEvent
64
+ ) : IFolderInputEvent => {
65
+ return events ;
66
+ } ;
67
+
68
+ public onRename = ( id : number ) => {
69
+ this . emit ( FolderTreeEvent . onRename , id ) ;
70
+ } ;
71
+
72
+ public onDelete = ( id : number ) => {
73
+ this . emit ( FolderTreeEvent . onDelete , id ) ;
74
+ } ;
75
+
76
+ public onNewFile = ( id : number ) => {
77
+ this . emit ( FolderTreeEvent . onNewFile , id ) ;
78
+ } ;
79
+
80
+ public onNewFolder = ( id : number ) => {
81
+ this . emit ( FolderTreeEvent . onNewFolder , id ) ;
82
+ } ;
83
+
84
+ public onUpdateFileName = ( file : ITreeNodeItem ) => {
85
+ this . emit ( FolderTreeEvent . onUpdateFileName , file ) ;
86
+ } ;
87
+
88
+ public onUpdateFileContent = ( id : number , value ?: string ) => {
89
+ this . emit ( FolderTreeEvent . onUpdateFileContent , id , value ) ;
90
+ } ;
91
+
64
92
public readonly onSelectFile = (
65
93
file : ITreeNodeItem ,
66
94
isUpdate ?: boolean
67
95
) => {
68
- const { fileType, isEditable } = file ;
69
- const isFile = fileType === FileTypes . file ;
70
- this . folderTreeService . setActive ( file ?. id ) ;
71
- if ( ! isFile || isEditable ) return ;
72
- const tabData = {
73
- ...file ,
74
- id : `${ file . id } ` ?. split ( '_' ) ?. [ 0 ] ,
75
- modified : false ,
76
- data : {
77
- value : file . content ,
78
- path : 'desktop/moslecule/editor1' ,
79
- language : 'sql' ,
80
- } ,
81
- } ;
82
-
83
- const { id, data = [ ] } =
84
- this . editorService . getState ( ) ?. current || ( { } as any ) ;
85
- if ( isUpdate ) {
86
- const tabId = file . id ;
87
- const index = data ?. findIndex ( ( tab ) => tab . id == tabId ) ;
88
- if ( index > - 1 ) {
89
- if ( id ) this . editorService . updateTab ( tabData , id ) ;
90
- } else {
91
- this . editorService . open ( tabData ) ;
92
- }
93
- } else {
94
- this . editorService . open ( tabData ) ;
95
- }
96
- this . emit ( FolderTreeEvent . onSelectFile , tabData , isUpdate ) ;
96
+ this . emit ( FolderTreeEvent . onSelectFile , file , isUpdate ) ;
97
97
} ;
98
98
99
99
public readonly onDropTree = ( treeNode : ITreeNodeItem [ ] ) => {
100
100
this . folderTreeService . onDropTree ( treeNode ) ;
101
101
} ;
102
102
103
- public readonly getInputEvent = (
104
- events : IFolderInputEvent
105
- ) : IFolderInputEvent => {
106
- return events ;
107
- } ;
108
-
109
103
public readonly onClickContextMenu = (
110
104
e : React . MouseEvent ,
111
105
item : IMenuItem ,
@@ -118,38 +112,25 @@ export class FolderTreeController
118
112
console . log ( 'onClickContextMenu => Item' , item ) ;
119
113
switch ( menuId ) {
120
114
case RENAME_COMMAND_ID : {
121
- this . folderTreeService . rename ( nodeId , ( ) => {
122
- events ?. setValue ?.( name ) ;
123
- events ?. onFocus ( ) ;
124
- } ) ;
115
+ this . onRename ( nodeId ) ;
125
116
break ;
126
117
}
127
118
case DELETE_COMMAND_ID : {
128
119
confirm ( {
129
120
title : `Are you sure you want to delete '${ name } ' ?` ,
130
121
content : 'This action is irreversible!' ,
131
122
onOk ( ) {
132
- ctx . folderTreeService . delete ( nodeId , ( ) => {
133
- // TODO Refactor the below, there needs listen to the CloseTab by the editorService
134
- // ctx.editorController!.onCloseTab(
135
- // `${nodeId}`,
136
- // ctx.editorService.getState()?.current?.id
137
- // );
138
- } ) ;
123
+ ctx . onDelete ( nodeId ) ;
139
124
} ,
140
125
} ) ;
141
126
break ;
142
127
}
143
128
case NEW_FILE_COMMAND_ID : {
144
- this . folderTreeService . newFile ( nodeId , ( ) => {
145
- events ?. onFocus ( ) ;
146
- } ) ;
129
+ this . onNewFile ( nodeId ) ;
147
130
break ;
148
131
}
149
132
case NEW_FOLDER_COMMAND_ID : {
150
- this . folderTreeService . newFolder ( nodeId , ( ) => {
151
- events ?. onFocus ( ) ;
152
- } ) ;
133
+ this . onNewFolder ( nodeId ) ;
153
134
break ;
154
135
}
155
136
case REMOVE_COMMAND_ID : {
0 commit comments