@@ -19,15 +19,15 @@ import {trans, transToNode} from "i18n";
1919import { draggingUtils } from "layout/draggingUtils" ;
2020import React , { CSSProperties , useContext , useEffect , useState } from "react" ;
2121import { useDispatch , useSelector } from "react-redux" ;
22- import { fetchAllModules , recycleApplication } from "redux/reduxActions/applicationActions" ;
22+ import { fetchAllModules , recycleApplication , updateAppMetaAction } from "redux/reduxActions/applicationActions" ;
2323import styled from "styled-components" ;
2424import CreateAppButton from "components/CreateAppButton" ;
2525import { TransparentImg } from "util/commonUtils" ;
2626import { ComListTitle } from "./styledComponent" ;
2727import { folderElementsSelector } from "@lowcoder-ee/redux/selectors/folderSelector" ;
2828import { DraggableTree } from "@lowcoder-ee/components/DraggableTree/DraggableTree" ;
2929import { EditorContext } from "lowcoder-sdk" ;
30- import { showAppSnapshotSelector } from "@lowcoder-ee/redux/selectors/appSnapshotSelector" ;
30+ import { getSelectedAppSnapshot , showAppSnapshotSelector } from "@lowcoder-ee/redux/selectors/appSnapshotSelector" ;
3131import { DraggableTreeNode , DraggableTreeNodeItemRenderProps } from "@lowcoder-ee/components/DraggableTree/types" ;
3232import RefTreeComp from "@lowcoder-ee/comps/comps/refTreeComp" ;
3333import { EmptyContent } from "components/EmptyContent" ;
@@ -168,11 +168,65 @@ function buildTree(elementRecord: Record<string, Array<ApplicationMeta | FolderM
168168interface ModuleItemProps {
169169 meta : ApplicationMeta ;
170170 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 ;
171178}
172179
173180function ModuleItem ( props : ModuleItemProps ) {
174181 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+ } ;
176230 return (
177231 < ItemWrapper
178232 draggable
@@ -198,8 +252,22 @@ function ModuleItem(props: ModuleItemProps) {
198252 < div className = "module-icon" >
199253 < ModuleDocIcon width = "19px" height = "19px" />
200254 </ 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+ />
203271 </ div >
204272 </ div >
205273 </ ItemWrapper >
@@ -368,7 +436,13 @@ function ModuleSidebarItem(props: ModuleSidebarItemProps) {
368436 setSelectedID ( compId ) ;
369437 setSelectedType ( type ) ;
370438 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+
372446 }
373447 } ;
374448
@@ -407,7 +481,17 @@ function ModuleSidebarItem(props: ModuleSidebarItemProps) {
407481 />
408482 </ div >
409483 </ > :
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+ /> }
411495 { ! readOnly && ! isOverlay && (
412496 < EditPopover copy = { ! isFolder ? onCopy : undefined } del = { ( ) => onDelete ( ) } >
413497 < Icon tabIndex = { - 1 } />
@@ -421,7 +505,6 @@ function ModuleSidebarItem(props: ModuleSidebarItemProps) {
421505export default function ModulePanel ( ) {
422506 const dispatch = useDispatch ( ) ;
423507 let elements = useSelector ( folderElementsSelector ) ;
424- // const reload = () => elements = useSelector(folderElementsSelector);
425508 const { onDrag, searchValue } = useContext ( RightContext ) ;
426509 const [ deleteFlag , setDeleteFlag ] = useState ( false ) ;
427510 const [ selectedID , setSelectedID ] = useState ( "" ) ;
0 commit comments