@ -1,6 +1,6 @@
"use client" ;
import { useCallback , useState , useEffect } from "react" ;
import { useCallback , useState , useEffect , useMemo } from "react" ;
import { Handle , Position , NodeProps , Node } from "@xyflow/react" ;
import { BaseNode } from "./BaseNode" ;
import { useWorkflowStore } from "@/store/workflowStore" ;
@ -14,8 +14,29 @@ export function SplitGridNode({ id, data, selected }: NodeProps<SplitGridNodeTyp
const updateNodeData = useWorkflowStore ( ( state ) = > state . updateNodeData ) ;
const regenerateNode = useWorkflowStore ( ( state ) = > state . regenerateNode ) ;
const isRunning = useWorkflowStore ( ( state ) = > state . isRunning ) ;
const getConnectedInputs = useWorkflowStore ( ( state ) = > state . getConnectedInputs ) ;
const edges = useWorkflowStore ( ( state ) = > state . edges ) ;
const nodes = useWorkflowStore ( ( state ) = > state . nodes ) ;
const [ showSettings , setShowSettings ] = useState ( false ) ;
// Reactively track the connected source image
const hasIncomingImageConnection = useMemo ( ( ) = > {
return edges . some ( ( edge ) = > edge . target === id && edge . targetHandle === "image" ) ;
} , [ edges , id ] ) ;
const connectedSourceImage = useMemo ( ( ) = > {
if ( ! hasIncomingImageConnection ) return null ;
const { images } = getConnectedInputs ( id ) ;
return images [ 0 ] || null ;
// eslint-disable-next-line react-hooks/exhaustive-deps
} , [ hasIncomingImageConnection , id , getConnectedInputs , nodes ] ) ;
useEffect ( ( ) = > {
if ( connectedSourceImage !== nodeData . sourceImage ) {
updateNodeData ( id , { sourceImage : connectedSourceImage } ) ;
}
} , [ connectedSourceImage , id , updateNodeData , nodeData . sourceImage ] ) ;
// Show settings modal on first creation (when not configured)
useEffect ( ( ) = > {
if ( ! nodeData . isConfigured && ( ! nodeData . childNodeIds || nodeData . childNodeIds . length === 0 ) ) {