@@ -19,15 +19,15 @@ import {trans, transToNode} from "i18n";
19
19
import { draggingUtils } from "layout/draggingUtils" ;
20
20
import React , { CSSProperties , useContext , useEffect , useState } from "react" ;
21
21
import { useDispatch , useSelector } from "react-redux" ;
22
- import { fetchAllModules , recycleApplication } from "redux/reduxActions/applicationActions" ;
22
+ import { fetchAllModules , recycleApplication , updateAppMetaAction } from "redux/reduxActions/applicationActions" ;
23
23
import styled from "styled-components" ;
24
24
import CreateAppButton from "components/CreateAppButton" ;
25
25
import { TransparentImg } from "util/commonUtils" ;
26
26
import { ComListTitle } from "./styledComponent" ;
27
27
import { folderElementsSelector } from "@lowcoder-ee/redux/selectors/folderSelector" ;
28
28
import { DraggableTree } from "@lowcoder-ee/components/DraggableTree/DraggableTree" ;
29
29
import { EditorContext } from "lowcoder-sdk" ;
30
- import { showAppSnapshotSelector } from "@lowcoder-ee/redux/selectors/appSnapshotSelector" ;
30
+ import { getSelectedAppSnapshot , showAppSnapshotSelector } from "@lowcoder-ee/redux/selectors/appSnapshotSelector" ;
31
31
import { DraggableTreeNode , DraggableTreeNodeItemRenderProps } from "@lowcoder-ee/components/DraggableTree/types" ;
32
32
import RefTreeComp from "@lowcoder-ee/comps/comps/refTreeComp" ;
33
33
import { EmptyContent } from "components/EmptyContent" ;
@@ -168,11 +168,65 @@ function buildTree(elementRecord: Record<string, Array<ApplicationMeta | FolderM
168
168
interface ModuleItemProps {
169
169
meta : ApplicationMeta ;
170
170
onDrag : ( type : string ) => void ;
171
+ isOverlay : boolean ;
172
+ selectedID : string ;
173
+ setSelectedID : ( id : string ) => void ;
174
+ selectedType : boolean ;
175
+ setSelectedType : ( id : boolean ) => void ;
176
+ resComp : NodeType ;
177
+ id : string ;
171
178
}
172
179
173
180
function ModuleItem ( props : ModuleItemProps ) {
174
181
const compType = "module" ;
175
- const { meta } = props ;
182
+ const {
183
+ meta ,
184
+ isOverlay,
185
+ selectedID,
186
+ setSelectedID,
187
+ selectedType,
188
+ setSelectedType,
189
+ resComp,
190
+ id
191
+ } = props ;
192
+ const dispatch = useDispatch ( ) ;
193
+ const type = resComp . isFolder ;
194
+ const name = resComp . name ;
195
+ const [ error , setError ] = useState < string | undefined > ( undefined ) ;
196
+ const [ editing , setEditing ] = useState ( false ) ;
197
+ const editorState = useContext ( EditorContext ) ;
198
+ const readOnly = useSelector ( showAppSnapshotSelector ) ;
199
+ const isSelected = type === selectedType && id === selectedID ;
200
+ const handleFinishRename = ( value : string ) => {
201
+ let success = false ;
202
+ let compId = name ;
203
+ if ( resComp . rename ) {
204
+ compId = resComp . rename ( value ) ;
205
+ success = ! ! compId ;
206
+ } else {
207
+ compId = name ;
208
+ success = true ;
209
+ }
210
+ if ( success ) {
211
+ console . log ( selectedID , value ) ;
212
+ setSelectedID ( compId ) ;
213
+ setSelectedType ( type ) ;
214
+ setError ( undefined ) ;
215
+ try {
216
+ dispatch ( updateAppMetaAction ( {
217
+ applicationId : selectedID ,
218
+ name : value
219
+ } ) ) ;
220
+ } catch ( error ) {
221
+ console . error ( "Error: Delete module in extension:" , error ) ;
222
+ throw error ;
223
+ }
224
+ }
225
+ } ;
226
+
227
+ const handleNameChange = ( value : string ) => {
228
+ value === "" ? setError ( "Cannot Be Empty" ) : setError ( "" ) ;
229
+ } ;
176
230
return (
177
231
< ItemWrapper
178
232
draggable
@@ -198,8 +252,22 @@ function ModuleItem(props: ModuleItemProps) {
198
252
< div className = "module-icon" >
199
253
< ModuleDocIcon width = "19px" height = "19px" />
200
254
</ div >
201
- < div className = "module-content" >
202
- < div className = "module-name" > { props . meta . name } </ div >
255
+
256
+ < div style = { { flexGrow : 1 , marginRight : "8px" , width : "calc(100% - 62px)" } } >
257
+ < EditText
258
+ text = { meta . name }
259
+ forceClickIcon = { false }
260
+ disabled = { ! isSelected || readOnly || isOverlay }
261
+ onFinish = { handleFinishRename }
262
+ onChange = { handleNameChange }
263
+ onEditStateChange = { ( editing ) => setEditing ( editing ) }
264
+ />
265
+ < PopupCard
266
+ editorFocus = { ! ! error && editing }
267
+ title = { error ? trans ( "error" ) : "" }
268
+ content = { error }
269
+ hasError = { ! ! error }
270
+ />
203
271
</ div >
204
272
</ div >
205
273
</ ItemWrapper >
@@ -368,7 +436,13 @@ function ModuleSidebarItem(props: ModuleSidebarItemProps) {
368
436
setSelectedID ( compId ) ;
369
437
setSelectedType ( type ) ;
370
438
setError ( undefined ) ;
371
- dispatch ( updateFolder ( { id : selectedID , name : value } ) ) ;
439
+ try {
440
+ dispatch ( updateFolder ( { id : selectedID , name : value } ) ) ;
441
+ } catch ( error ) {
442
+ console . error ( "Error: Delete module in extension:" , error ) ;
443
+ throw error ;
444
+ }
445
+
372
446
}
373
447
} ;
374
448
@@ -407,7 +481,17 @@ function ModuleSidebarItem(props: ModuleSidebarItemProps) {
407
481
/>
408
482
</ div >
409
483
</ > :
410
- < ModuleItem onDrag = { onDrag } key = { id } meta = { resComp . module ! } /> }
484
+ < ModuleItem onDrag = { onDrag }
485
+ key = { id }
486
+ meta = { resComp . module ! }
487
+ isOverlay = { isOverlay }
488
+ selectedID = { selectedID }
489
+ setSelectedID = { setSelectedID }
490
+ selectedType = { selectedType }
491
+ setSelectedType = { setSelectedType }
492
+ resComp = { resComp }
493
+ id = { id }
494
+ /> }
411
495
{ ! readOnly && ! isOverlay && (
412
496
< EditPopover copy = { ! isFolder ? onCopy : undefined } del = { ( ) => onDelete ( ) } >
413
497
< Icon tabIndex = { - 1 } />
@@ -421,7 +505,6 @@ function ModuleSidebarItem(props: ModuleSidebarItemProps) {
421
505
export default function ModulePanel ( ) {
422
506
const dispatch = useDispatch ( ) ;
423
507
let elements = useSelector ( folderElementsSelector ) ;
424
- // const reload = () => elements = useSelector(folderElementsSelector);
425
508
const { onDrag, searchValue } = useContext ( RightContext ) ;
426
509
const [ deleteFlag , setDeleteFlag ] = useState ( false ) ;
427
510
const [ selectedID , setSelectedID ] = useState ( "" ) ;
0 commit comments