diff --git a/space_flow/src/contexts/tabsContext.tsx b/space_flow/src/contexts/tabsContext.tsx index d09be6de5..fb8de09f7 100644 --- a/space_flow/src/contexts/tabsContext.tsx +++ b/space_flow/src/contexts/tabsContext.tsx @@ -1,6 +1,6 @@ import { createContext, useState } from "react"; -type flow={name:string,id:string,flow:any} +type flow={name:string,id:string,data:any} type TabsContextType={ tabIndex:number; @@ -8,6 +8,7 @@ type TabsContextType={ flows:Array removeFlow:(index:number)=>void; addFlow:(newFlow:flow)=>void; + updateFlow:(newFLow:flow)=>void; } const TabsContextInitialValue = { @@ -15,7 +16,9 @@ const TabsContextInitialValue = { setTabIndex:(index:number)=>{}, flows:[], removeFlow:(index:number)=>{}, - addFlow:(newFlow:flow)=>{} + addFlow:(newFlow:flow)=>{}, + updateFlow:(newFLow:flow)=>{} + } @@ -37,9 +40,20 @@ export function TabsProvider({children}){ return newFlows; }); } + function updateFlow(newFlow:flow){ + setFlows(prevState=>{ + const newFlows = [...prevState]; + const index = newFlows.findIndex(flow=>flow.id===newFlow.id) + if(index!==-1){ + newFlows[index].data = newFlow.data + } + window.sessionStorage.setItem('tabs', JSON.stringify(newFlows)); + return newFlows; + }); + } return( - + {children} ) diff --git a/space_flow/src/pages/FlowPage/flowManager/index.tsx b/space_flow/src/pages/FlowPage/flowManager/index.tsx index 48393ffa4..22ff57a3e 100644 --- a/space_flow/src/pages/FlowPage/flowManager/index.tsx +++ b/space_flow/src/pages/FlowPage/flowManager/index.tsx @@ -1,38 +1,44 @@ -import { useContext, useEffect, useState } from 'react'; -import { Tab, Tabs, TabList, TabPanel } from 'react-tabs'; -import FlowPage from '..'; -import { TabsContext } from '../../../contexts/tabsContext'; -import TabComponent from './tabComponent'; +import { useContext, useEffect, useState } from "react"; +import { Tab, Tabs, TabList, TabPanel } from "react-tabs"; +import { ReactFlowProvider } from "reactflow"; +import FlowPage from ".."; +import { TabsContext } from "../../../contexts/tabsContext"; +import TabComponent from "./tabComponent"; var _ = require("lodash"); -export function TabsManager(){ - const {flows,addFlow,tabIndex,setTabIndex} = useContext(TabsContext); - useEffect(()=>{ - if(flows.length===0){ - addFlow({name:"untitled",flow:null,id:_.uniqueId()}) - addFlow({name:"untitle",flow:null,id:_.uniqueId()}) - } - },[]) - - return( -
-
- {flows.map((flow,index)=>{ - return(
setTabIndex(index)}>{flow.name}
) - })} -
-
- {flows.map((flow,index)=>{ - return( -
- - -
- ) - })} -
-
- ) +export function TabsManager() { + const { flows, addFlow, tabIndex, setTabIndex } = useContext(TabsContext); + useEffect(() => { + if (flows.length === 0) { + addFlow({ name: "untitled", data: null, id: _.uniqueId() }); + addFlow({ name: "untitle", data: null, id: _.uniqueId() }); + } + }, []); + + useEffect(() => { + // Do something when the tabIndex or flow state changes + // For example, log a message to the console + console.log("Tab index or flow state changed"); + }, [tabIndex, flows]); + + return ( +
+
+ {flows.map((flow, index) => { + return ( + +
setTabIndex(index)}>{flow.name}
+
+ ); + })} +
+
+ + + +
+
+ ); } /* diff --git a/space_flow/src/pages/FlowPage/index.tsx b/space_flow/src/pages/FlowPage/index.tsx index 6024bcde9..0497378ee 100644 --- a/space_flow/src/pages/FlowPage/index.tsx +++ b/space_flow/src/pages/FlowPage/index.tsx @@ -6,6 +6,7 @@ import ReactFlow, { useEdgesState, useNodesState, ReactFlowProvider, + useReactFlow, } from "reactflow"; import { locationContext } from "../../contexts/locationContext"; import ExtraSidebar from "./components/extraSidebarComponent"; @@ -17,6 +18,7 @@ import ChatOutputNode from "../../CustomNodes/ChatOutputNode"; import InputNode from "../../CustomNodes/InputNode"; import BooleanNode from "../../CustomNodes/BooleanNode"; import { alertContext } from "../../contexts/alertContext"; +import { TabsContext } from "../../contexts/tabsContext"; const nodeTypes = { genericNode: GenericNode, @@ -28,7 +30,10 @@ const nodeTypes = { var _ = require("lodash"); -export default function FlowPage() { +export default function FlowPage({flow}) { + console.log(flow?.data) + + const {updateFlow} = useContext(TabsContext) const reactFlowWrapper = useRef(null); const getId = () => `dndnode_${_.uniqueId()}`; @@ -36,9 +41,20 @@ export default function FlowPage() { const { setExtraComponent, setExtraNavigation } = useContext(locationContext); const { setErrorData } = useContext(alertContext); - const [nodes, setNodes, onNodesChange] = useNodesState([]); - const [edges, setEdges, onEdgesChange] = useEdgesState([]); + const [nodes, setNodes, onNodesChange] = useNodesState(flow?.data?.nodes || []); + const [edges, setEdges, onEdgesChange] = useEdgesState(flow?.data?.edges || []); const [reactFlowInstance, setReactFlowInstance] = useState(null); + const { setViewport } = useReactFlow(); + + if(flow?.data && reactFlowInstance){ + setViewport(flow.data.viewport) + } + useEffect(()=>{ + if(reactFlowInstance){ + flow.data =reactFlowInstance.toObject() + updateFlow(flow) + } + },[nodes,edges]) useEffect(() => { setExtraComponent(); @@ -129,7 +145,6 @@ export default function FlowPage() { return (
- -
); }