feat(canvas): Add file browser, introspection, and improve node flow
Phase 1-7 of Canvas V4 Ralph Loop implementation: Backend: - Add /api/files routes for browsing model files - Add /api/nx routes for NX model introspection - Add NXIntrospector service to discover expressions and extractors - Add health check with database status Frontend: - Add FileBrowser component for selecting .sim/.prt/.fem files - Add IntrospectionPanel to discover expressions and extractors - Update NodeConfigPanel with browse and introspect buttons - Update schema with NODE_HANDLES for proper flow direction - Update validation for correct DesignVar -> Model -> Solver flow - Update useCanvasStore.addNode() to accept custom data Flow correction: Design Variables now connect TO Model (as source), not FROM Model. This matches the actual data flow in optimization. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -15,7 +15,7 @@ interface CanvasState {
|
||||
onNodesChange: (changes: NodeChange[]) => void;
|
||||
onEdgesChange: (changes: EdgeChange[]) => void;
|
||||
onConnect: (connection: Connection) => void;
|
||||
addNode: (type: NodeType, position: { x: number; y: number }) => void;
|
||||
addNode: (type: NodeType, position: { x: number; y: number }, data?: Partial<CanvasNodeData>) => void;
|
||||
updateNodeData: (nodeId: string, data: Partial<CanvasNodeData>) => void;
|
||||
selectNode: (nodeId: string | null) => void;
|
||||
selectEdge: (edgeId: string | null) => void;
|
||||
@@ -112,12 +112,14 @@ export const useCanvasStore = create<CanvasState>((set, get) => ({
|
||||
set({ edges: addEdge(connection, get().edges) });
|
||||
},
|
||||
|
||||
addNode: (type, position) => {
|
||||
addNode: (type, position, customData) => {
|
||||
const newNode: Node<CanvasNodeData> = {
|
||||
id: getNodeId(),
|
||||
type,
|
||||
position,
|
||||
data: getDefaultData(type),
|
||||
data: customData
|
||||
? { ...getDefaultData(type), ...customData } as CanvasNodeData
|
||||
: getDefaultData(type),
|
||||
};
|
||||
set({ nodes: [...get().nodes, newNode] });
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user