@@ -20,7 +20,7 @@ import { shallow } from "zustand/shallow";
2020import { getEdgesAndNodes , getMemory } from "./getEdgesAndNodes" ;
2121import ObjectNode , { ObjectNodeType } from "./ObjectNode" ;
2222import VariableNode from "./VariableNode" ;
23- import { useCallback , useState , DragEvent , useRef } from "react" ;
23+ import { useCallback , useState , DragEvent , useRef , useMemo } from "react" ;
2424import { Sidebar } from "./Sidebar" ;
2525import {
2626 Attribute ,
@@ -48,12 +48,6 @@ const selector = (state: RFState) => ({
4848 setRoute : state . setRoute ,
4949} ) ;
5050
51- const nodeTypes = {
52- object : ObjectNode ,
53- variable : VariableNode ,
54- "method-call" : MethodCallNode ,
55- } ;
56-
5751const edgeTypes = {
5852 reference : ReferenceEdge ,
5953} ;
@@ -132,6 +126,10 @@ export const MemoryView = () => {
132126 onConfirm : ( value : string ) => void ;
133127 } | null > ( null ) ;
134128
129+ // Local variable declaration dialog state
130+ const [ showLocalVarDialog , setShowLocalVarDialog ] = useState ( false ) ;
131+ const [ localVarDialogNodeId , setLocalVarDialogNodeId ] = useState < string | null > ( null ) ;
132+
135133 const methodCalls = nodes . filter ( isMethodCallNode ) ;
136134 let previousMethodCall = methodCalls [ 0 ] ;
137135 let lastMethodCall = methodCalls [ 0 ] ;
@@ -202,6 +200,50 @@ export const MemoryView = () => {
202200 return [ ...primitveDataTypes , ...Object . keys ( memory . klasses ) ] ;
203201 } ;
204202
203+ // Handler for declaring local variables
204+ const handleDeclareLocalVariable = ( nodeId : string ) => {
205+ setLocalVarDialogNodeId ( nodeId ) ;
206+ setShowLocalVarDialog ( true ) ;
207+ } ;
208+
209+ const handleLocalVarDialogConfirm = ( name : string ) => {
210+ if ( localVarDialogNodeId ) {
211+ setNodes ( ( nds ) =>
212+ nds . map ( ( n ) => {
213+ if ( n . id === localVarDialogNodeId && n . type === "method-call" ) {
214+ return {
215+ ...n ,
216+ data : {
217+ ...n . data ,
218+ localVariables : {
219+ ...n . data . localVariables ,
220+ [ name ] : {
221+ dataType : "object" ,
222+ } ,
223+ } ,
224+ } ,
225+ } ;
226+ }
227+ return n ;
228+ } )
229+ ) ;
230+ }
231+ setShowLocalVarDialog ( false ) ;
232+ setLocalVarDialogNodeId ( null ) ;
233+ } ;
234+
235+ // Create nodeTypes with access to handleDeclareLocalVariable
236+ const nodeTypes = useMemo (
237+ ( ) => ( {
238+ object : ObjectNode ,
239+ variable : VariableNode ,
240+ "method-call" : ( props : any ) => (
241+ < MethodCallNode { ...props } onDeclareVariable = { handleDeclareLocalVariable } />
242+ ) ,
243+ } ) ,
244+ [ handleDeclareLocalVariable ]
245+ ) ;
246+
205247 const onConnectEnd = useCallback < OnConnectEnd > (
206248 ( event , connectionState ) => {
207249 if ( ! connectingNode . current || ! memory . options . createNewOnEdgeDrop )
@@ -777,6 +819,18 @@ export const MemoryView = () => {
777819 } }
778820 />
779821 ) }
822+ { showLocalVarDialog && (
823+ < SimpleInputDialog
824+ title = "Declare Local Variable"
825+ label = "Variable Name"
826+ placeholder = "Enter variable name"
827+ onConfirm = { handleLocalVarDialogConfirm }
828+ onCancel = { ( ) => {
829+ setShowLocalVarDialog ( false ) ;
830+ setLocalVarDialogNodeId ( null ) ;
831+ } }
832+ />
833+ ) }
780834 </ div >
781835 ) ;
782836} ;
0 commit comments