From 34121f85801b962056c89fe57da1107888b18a9c Mon Sep 17 00:00:00 2001 From: anovazzi1 Date: Thu, 9 Feb 2023 18:56:46 -0300 Subject: [PATCH] popup not working yet need to resolve bug --- space_flow/package-lock.json | 65 +++++++++++++++++++ space_flow/package.json | 1 + space_flow/src/App.tsx | 4 +- .../src/CustomNodes/PromptNode/index.tsx | 35 ++++++---- space_flow/src/components/sidebar.tsx | 13 +++- space_flow/src/flow/index.tsx | 57 +++++++++++++--- space_flow/tsconfig.json | 2 +- 7 files changed, 150 insertions(+), 27 deletions(-) diff --git a/space_flow/package-lock.json b/space_flow/package-lock.json index 091affaf5..b974cc791 100644 --- a/space_flow/package-lock.json +++ b/space_flow/package-lock.json @@ -8,6 +8,7 @@ "name": "space_flow", "version": "0.1.0", "dependencies": { + "@floating-ui/react": "^0.19.1", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", @@ -2199,6 +2200,45 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@floating-ui/core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.2.0.tgz", + "integrity": "sha512-GHUXPEhMEmTpnpIfesFA2KAoMJPb1SPQw964tToQwt+BbGXdhqTCWT1rOb0VURGylsxsYxiGMnseJ3IlclVpVA==" + }, + "node_modules/@floating-ui/dom": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.2.0.tgz", + "integrity": "sha512-QXzg57o1cjLz3cGETzKXjI3kx1xyS49DW9l7kV2jw2c8Yftd434t2hllX0sVGn2Q8MtcW/4pNm8bfE1/4n6mng==", + "dependencies": { + "@floating-ui/core": "^1.2.0" + } + }, + "node_modules/@floating-ui/react": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.19.1.tgz", + "integrity": "sha512-h7hr53rLp+VVvWvbu0dOBvGsLeeZwn1DTLIllIaLYjGWw20YhAgEqegHU+nc7BJ30ttxq4Sq6hqARm0ne6chXQ==", + "dependencies": { + "@floating-ui/react-dom": "^1.2.2", + "aria-hidden": "^1.1.3", + "tabbable": "^6.0.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-1.2.2.tgz", + "integrity": "sha512-DbmFBLwFrZhtXgCI2ra7wXYT8L2BN4/4AMQKyu05qzsVji51tXOfF36VE2gpMB6nhJGHa85PdEg75FB4+vnLFQ==", + "dependencies": { + "@floating-ui/dom": "^1.1.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -4843,6 +4883,26 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/aria-hidden": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.2.tgz", + "integrity": "sha512-6y/ogyDTk/7YAe91T3E2PR1ALVKyM2QbTio5HwM+N1Q6CMlCKhvClyIjkckBswa0f2xJhjsfzIGa1yVSe1UMVA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.9.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/aria-query": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", @@ -15749,6 +15809,11 @@ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, + "node_modules/tabbable": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.0.1.tgz", + "integrity": "sha512-SYJSIgeyXW7EuX1ytdneO5e8jip42oHWg9xl/o3oTYhmXusZVgiA+VlPvjIN+kHii9v90AmzTZEBcsEvuAY+TA==" + }, "node_modules/tailwindcss": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.6.tgz", diff --git a/space_flow/package.json b/space_flow/package.json index ab88c1ac1..cb6ad1c9b 100644 --- a/space_flow/package.json +++ b/space_flow/package.json @@ -3,6 +3,7 @@ "version": "0.1.0", "private": true, "dependencies": { + "@floating-ui/react": "^0.19.1", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", diff --git a/space_flow/src/App.tsx b/space_flow/src/App.tsx index 094c5ffe3..d502173f7 100644 --- a/space_flow/src/App.tsx +++ b/space_flow/src/App.tsx @@ -1,11 +1,9 @@ import Flow from "./flow"; import "./App.css"; -import { Sidebar } from "./components/sidebar"; function App() { return (
- - +
); } diff --git a/space_flow/src/CustomNodes/PromptNode/index.tsx b/space_flow/src/CustomNodes/PromptNode/index.tsx index cfa614a93..361633004 100644 --- a/space_flow/src/CustomNodes/PromptNode/index.tsx +++ b/space_flow/src/CustomNodes/PromptNode/index.tsx @@ -1,15 +1,22 @@ -import { Handle, Position } from 'reactflow'; +import { Handle, Position } from "reactflow"; - -export default function PromptNode({data}){ - console.log(data.template) - return( -
- - -
{data.template}
- -
- ) -} \ No newline at end of file +export default function PromptNode({ data }) { + console.log(data) + return ( +
data.onClick()} + className="prompt-Node relative bg-white h-16 w-40 border rounded-sm solid border-black flex flex-col justify-center" + > + + +
+ {" "} + {data.template} +
+ +
+ ); +} diff --git a/space_flow/src/components/sidebar.tsx b/space_flow/src/components/sidebar.tsx index 73e4445b2..26bdd8e32 100644 --- a/space_flow/src/components/sidebar.tsx +++ b/space_flow/src/components/sidebar.tsx @@ -1,5 +1,16 @@ +import { prompt } from "../data_assets/prompt"; + export function Sidebar(){ + + function onDragStart(event:React.DragEvent,nodeType){ + event.dataTransfer.setData('application/reactflow',nodeType) + event.dataTransfer.effectAllowed = 'move' + event.dataTransfer.setData('json',JSON.stringify(prompt)); + } + return( -
ablue blue
+
+
onDragStart(event,'promptNode')}> prompt Node
+
) } \ No newline at end of file diff --git a/space_flow/src/flow/index.tsx b/space_flow/src/flow/index.tsx index c13a84945..e7a412d28 100644 --- a/space_flow/src/flow/index.tsx +++ b/space_flow/src/flow/index.tsx @@ -1,44 +1,85 @@ import 'reactflow/dist/style.css'; -import { useState, useCallback } from 'react'; -import ReactFlow, { addEdge, applyEdgeChanges, applyNodeChanges, Background, Controls, Position } from 'reactflow'; +import { useState, useCallback, useRef } from 'react'; +import ReactFlow, { addEdge, applyEdgeChanges, applyNodeChanges, Background, Controls, Position, useNodesState, useEdgesState, ReactFlowProvider } from 'reactflow'; import type { Node, Edge } from 'reactflow'; import TextUpdaterNode from '../CustomNodes/inputTextFolder'; import '../CustomNodes/inputTextFolder/inputText.css' import PromptNode from '../CustomNodes/PromptNode'; import { prompt } from '../data_assets/prompt'; +import { Sidebar } from '../components/sidebar'; // outside component to avoid render trigger const nodeTypes = {textUpdater:TextUpdaterNode, promptNode:PromptNode} const rfStyle={ backgroundCOlor:"#B8CEFF" } + let id = 0; + const getId = () => `dndnode_${id++}`; export default function Flow(){ - - const [nodes,setNodes] = useState>([{id:'1', position:{x:0,y:0}, data:{label:"node"},style:{color:"blue", width:100, height:40},sourcePosition:Position.Left,targetPosition:Position.Right}, - {id:'2',data:{label:"world"},position:{x:100,y:100}}, {id:'4',data:prompt,position:{x:50,y:120},type:"promptNode"}]) - const [edges,setEdges] = useState>([]) + const reactFlowWrapper = useRef(null) + const [nodes,setNodes,onNodesChange] = useNodesState([]) + const [edges,setEdges, onEdgesChange] = useEdgesState([]) //allow iteractive with the react flow - const onNodesChange = useCallback( (changes) => setNodes((nds) => applyNodeChanges(changes, nds)),[] ); - const onEdgesChange = useCallback( (changes) => setEdges((eds) => applyEdgeChanges(changes, eds)),[] ); + // const onNodesChange = useCallback( (changes) => setNodes((nds) => applyNodeChanges(changes, nds)),[] ); + // const onEdgesChange = useCallback( (changes) => setEdges((eds) => applyEdgeChanges(changes, eds)),[] ); + const [reactFlowInstance,setReactFlowInstance] = useState(null) const onConnect = useCallback((params)=>setEdges((eds)=>addEdge(params,eds)),[]) + const onDragOver = useCallback((event) => { + event.preventDefault(); + event.dataTransfer.dropEffect = 'move'; + }, []); + const onDrop = useCallback( + (event)=>{ + event.preventDefault(); + + const reactflowBounds = reactFlowWrapper.current.getBoundingClientRect(); + const type = event.dataTransfer.getData('application/reactflow'); + let json = JSON.parse(event.dataTransfer.getData('json')) + const data = {...json} + data.onClick = console.log("clicked") + // check if the dropped element is valid + if (typeof type === 'undefined' || !type) { + return; + } + + const position = reactFlowInstance.project({x:event.clientX-reactflowBounds.top, y:event.clientY - reactflowBounds.top}) + const newNode = { + id:getId(), + type, + position, + data + } + setNodes((nds)=>nds.concat(newNode)) + + + + },[reactFlowInstance]) return ( //need parent component with width and height
+ + +
+
+
) } \ No newline at end of file diff --git a/space_flow/tsconfig.json b/space_flow/tsconfig.json index 41929ff7c..3a05105de 100644 --- a/space_flow/tsconfig.json +++ b/space_flow/tsconfig.json @@ -10,7 +10,7 @@ "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, - "strict": true, + "strict": false, "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, "module": "esnext",