Changed every flowsContext to useFlow
This commit is contained in:
parent
0bc74b5251
commit
75326cad27
18 changed files with 65 additions and 98 deletions
|
|
@ -31,6 +31,7 @@ import { FlowsContext } from "../../../../contexts/flowsContext";
|
||||||
import { typesContext } from "../../../../contexts/typesContext";
|
import { typesContext } from "../../../../contexts/typesContext";
|
||||||
import { undoRedoContext } from "../../../../contexts/undoRedoContext";
|
import { undoRedoContext } from "../../../../contexts/undoRedoContext";
|
||||||
import { postCustomComponentUpdate } from "../../../../controllers/API";
|
import { postCustomComponentUpdate } from "../../../../controllers/API";
|
||||||
|
import useFlow from "../../../../stores/flowManagerStore";
|
||||||
import { APIClassType } from "../../../../types/api";
|
import { APIClassType } from "../../../../types/api";
|
||||||
import { ParameterComponentType } from "../../../../types/components";
|
import { ParameterComponentType } from "../../../../types/components";
|
||||||
import { NodeDataType } from "../../../../types/flow";
|
import { NodeDataType } from "../../../../types/flow";
|
||||||
|
|
@ -70,7 +71,8 @@ export default function ParameterComponent({
|
||||||
const { setErrorData, modalContextOpen } = useContext(alertContext);
|
const { setErrorData, modalContextOpen } = useContext(alertContext);
|
||||||
const updateNodeInternals = useUpdateNodeInternals();
|
const updateNodeInternals = useUpdateNodeInternals();
|
||||||
const [position, setPosition] = useState(0);
|
const [position, setPosition] = useState(0);
|
||||||
const { tabId, flows, nodes, edges, setNode } = useContext(FlowsContext);
|
const { tabId, flows } = useContext(FlowsContext);
|
||||||
|
const { nodes, edges, setNode } = useFlow();
|
||||||
|
|
||||||
const flow = flows.find((flow) => flow.id === tabId)?.data?.nodes ?? null;
|
const flow = flows.find((flow) => flow.id === tabId)?.data?.nodes ?? null;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ import InputComponent from "../../components/inputComponent";
|
||||||
import { Textarea } from "../../components/ui/textarea";
|
import { Textarea } from "../../components/ui/textarea";
|
||||||
import { priorityFields } from "../../constants/constants";
|
import { priorityFields } from "../../constants/constants";
|
||||||
import { useSSE } from "../../contexts/SSEContext";
|
import { useSSE } from "../../contexts/SSEContext";
|
||||||
import { FlowsContext } from "../../contexts/flowsContext";
|
|
||||||
import { typesContext } from "../../contexts/typesContext";
|
import { typesContext } from "../../contexts/typesContext";
|
||||||
import { undoRedoContext } from "../../contexts/undoRedoContext";
|
import { undoRedoContext } from "../../contexts/undoRedoContext";
|
||||||
import NodeToolbarComponent from "../../pages/FlowPage/components/nodeToolbarComponent";
|
import NodeToolbarComponent from "../../pages/FlowPage/components/nodeToolbarComponent";
|
||||||
|
|
@ -17,6 +16,7 @@ import { handleKeyDown, scapedJSONStringfy } from "../../utils/reactflowUtils";
|
||||||
import { nodeColors, nodeIconsLucide } from "../../utils/styleUtils";
|
import { nodeColors, nodeIconsLucide } from "../../utils/styleUtils";
|
||||||
import { classNames, cn, getFieldTitle } from "../../utils/utils";
|
import { classNames, cn, getFieldTitle } from "../../utils/utils";
|
||||||
import ParameterComponent from "./components/parameterComponent";
|
import ParameterComponent from "./components/parameterComponent";
|
||||||
|
import useFlow from "../../stores/flowManagerStore";
|
||||||
|
|
||||||
export default function GenericNode({
|
export default function GenericNode({
|
||||||
data,
|
data,
|
||||||
|
|
@ -30,7 +30,7 @@ export default function GenericNode({
|
||||||
yPos: number;
|
yPos: number;
|
||||||
}): JSX.Element {
|
}): JSX.Element {
|
||||||
const { types } = useContext(typesContext);
|
const { types } = useContext(typesContext);
|
||||||
const { deleteNode, setNode } = useContext(FlowsContext);
|
const { deleteNode, setNode } = useFlow();
|
||||||
const name = nodeIconsLucide[data.type] ? data.type : types[data.type];
|
const name = nodeIconsLucide[data.type] ? data.type : types[data.type];
|
||||||
const [inputName, setInputName] = useState(false);
|
const [inputName, setInputName] = useState(false);
|
||||||
const [nodeName, setNodeName] = useState(data.node!.display_name);
|
const [nodeName, setNodeName] = useState(data.node!.display_name);
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import { FlowsState } from "../../../types/tabs";
|
||||||
import { validateNodes } from "../../../utils/reactflowUtils";
|
import { validateNodes } from "../../../utils/reactflowUtils";
|
||||||
import RadialProgressComponent from "../../RadialProgress";
|
import RadialProgressComponent from "../../RadialProgress";
|
||||||
import IconComponent from "../../genericIconComponent";
|
import IconComponent from "../../genericIconComponent";
|
||||||
|
import useFlow from "../../../stores/flowManagerStore";
|
||||||
|
|
||||||
export default function BuildTrigger({
|
export default function BuildTrigger({
|
||||||
open,
|
open,
|
||||||
|
|
@ -24,7 +25,8 @@ export default function BuildTrigger({
|
||||||
isBuilt: boolean;
|
isBuilt: boolean;
|
||||||
}): JSX.Element {
|
}): JSX.Element {
|
||||||
const { updateSSEData, isBuilding, setIsBuilding, sseData } = useSSE();
|
const { updateSSEData, isBuilding, setIsBuilding, sseData } = useSSE();
|
||||||
const { setTabsState, saveFlow, nodes, edges } = useContext(FlowsContext);
|
const { setTabsState, saveFlow } = useContext(FlowsContext);
|
||||||
|
const { nodes, edges } = useFlow();
|
||||||
const { setErrorData, setSuccessData } = useContext(alertContext);
|
const { setErrorData, setSuccessData } = useContext(alertContext);
|
||||||
const [isIconTouched, setIsIconTouched] = useState(false);
|
const [isIconTouched, setIsIconTouched] = useState(false);
|
||||||
const eventClick = isBuilding ? "pointer-events-none" : "";
|
const eventClick = isBuilding ? "pointer-events-none" : "";
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,13 @@ import { FlowsContext } from "../../contexts/flowsContext";
|
||||||
import { getBuildStatus } from "../../controllers/API";
|
import { getBuildStatus } from "../../controllers/API";
|
||||||
import FormModal from "../../modals/formModal";
|
import FormModal from "../../modals/formModal";
|
||||||
import { NodeType } from "../../types/flow";
|
import { NodeType } from "../../types/flow";
|
||||||
|
import useFlow from "../../stores/flowManagerStore";
|
||||||
|
|
||||||
export default function Chat({ flow }: ChatType): JSX.Element {
|
export default function Chat({ flow }: ChatType): JSX.Element {
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
const [canOpen, setCanOpen] = useState(false);
|
const [canOpen, setCanOpen] = useState(false);
|
||||||
const { tabsState, isBuilt, setIsBuilt, isPending } =
|
const { isBuilt, setIsBuilt, isPending } = useFlow();
|
||||||
|
const { tabsState } =
|
||||||
useContext(FlowsContext);
|
useContext(FlowsContext);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,6 @@ import {
|
||||||
TabsTrigger,
|
TabsTrigger,
|
||||||
} from "../../components/ui/tabs";
|
} from "../../components/ui/tabs";
|
||||||
import { LANGFLOW_SUPPORTED_TYPES } from "../../constants/constants";
|
import { LANGFLOW_SUPPORTED_TYPES } from "../../constants/constants";
|
||||||
import { FlowsContext } from "../../contexts/flowsContext";
|
|
||||||
import { useDarkStore } from "../../stores/darkStore";
|
import { useDarkStore } from "../../stores/darkStore";
|
||||||
import { codeTabsPropsType } from "../../types/components";
|
import { codeTabsPropsType } from "../../types/components";
|
||||||
import {
|
import {
|
||||||
|
|
@ -41,6 +40,7 @@ import { classNames } from "../../utils/utils";
|
||||||
import DictComponent from "../dictComponent";
|
import DictComponent from "../dictComponent";
|
||||||
import IconComponent from "../genericIconComponent";
|
import IconComponent from "../genericIconComponent";
|
||||||
import KeypairListComponent from "../keypairListComponent";
|
import KeypairListComponent from "../keypairListComponent";
|
||||||
|
import useFlow from "../../stores/flowManagerStore";
|
||||||
|
|
||||||
export default function CodeTabsComponent({
|
export default function CodeTabsComponent({
|
||||||
flow,
|
flow,
|
||||||
|
|
@ -55,7 +55,7 @@ export default function CodeTabsComponent({
|
||||||
const [openAccordion, setOpenAccordion] = useState<string[]>([]);
|
const [openAccordion, setOpenAccordion] = useState<string[]>([]);
|
||||||
const {dark} = useDarkStore();
|
const {dark} = useDarkStore();
|
||||||
|
|
||||||
const { setNodes } = useContext(FlowsContext);
|
const { setNodes } = useFlow();
|
||||||
const [errorDuplicateKey, setErrorDuplicateKey] = useState(false);
|
const [errorDuplicateKey, setErrorDuplicateKey] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ export default function PageLayout({
|
||||||
description: string;
|
description: string;
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
button?: React.ReactNode;
|
button?: React.ReactNode;
|
||||||
betaIcon: boolean;
|
betaIcon?: boolean;
|
||||||
}) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<div className="flex h-screen w-full flex-col">
|
<div className="flex h-screen w-full flex-col">
|
||||||
|
|
|
||||||
|
|
@ -75,40 +75,16 @@ const FlowsContextInitialValue: FlowsContextType = {
|
||||||
flowData?: FlowType,
|
flowData?: FlowType,
|
||||||
override?: boolean
|
override?: boolean
|
||||||
) => "",
|
) => "",
|
||||||
deleteNode: () => {},
|
|
||||||
deleteEdge: () => {},
|
|
||||||
incrementNodeId: () => uid(),
|
|
||||||
downloadFlow: (flow: FlowType) => {},
|
downloadFlow: (flow: FlowType) => {},
|
||||||
downloadFlows: () => {},
|
downloadFlows: () => {},
|
||||||
uploadFlows: () => {},
|
uploadFlows: () => {},
|
||||||
uploadFlow: async () => "",
|
uploadFlow: async () => "",
|
||||||
isBuilt: false,
|
|
||||||
setIsBuilt: (state: boolean) => {},
|
|
||||||
saveFlow: async (flow?: FlowType, silent?: boolean) => {},
|
saveFlow: async (flow?: FlowType, silent?: boolean) => {},
|
||||||
lastCopiedSelection: null,
|
|
||||||
setLastCopiedSelection: (selection: any) => {},
|
|
||||||
isPending: false,
|
|
||||||
setPending: (pending: boolean) => {},
|
|
||||||
tabsState: {},
|
tabsState: {},
|
||||||
setTabsState: () => {},
|
setTabsState: () => {},
|
||||||
getNodeId: (nodeType: string) => "",
|
|
||||||
setTweak: (tweak: any) => {},
|
|
||||||
getTweak: [],
|
|
||||||
paste: (
|
|
||||||
selection: { nodes: any; edges: any },
|
|
||||||
position: { x: number; y: number; paneX?: number; paneY?: number }
|
|
||||||
) => {},
|
|
||||||
saveComponent: async (component: NodeDataType, override: boolean) => "",
|
saveComponent: async (component: NodeDataType, override: boolean) => "",
|
||||||
deleteComponent: (key: string) => {},
|
deleteComponent: (key: string) => {},
|
||||||
version: "",
|
version: "",
|
||||||
nodes: [],
|
|
||||||
setNodes: () => {},
|
|
||||||
setNode: () => {},
|
|
||||||
getNode: () => undefined,
|
|
||||||
onNodesChange: () => {},
|
|
||||||
edges: [],
|
|
||||||
setEdges: () => {},
|
|
||||||
onEdgesChange: () => {},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const FlowsContext = createContext<FlowsContextType>(
|
export const FlowsContext = createContext<FlowsContextType>(
|
||||||
|
|
@ -779,42 +755,21 @@ export function FlowsProvider({ children }: { children: ReactNode }) {
|
||||||
<FlowsContext.Provider
|
<FlowsContext.Provider
|
||||||
value={{
|
value={{
|
||||||
version,
|
version,
|
||||||
|
flows,
|
||||||
saveFlow,
|
saveFlow,
|
||||||
isBuilt,
|
|
||||||
setIsBuilt,
|
|
||||||
lastCopiedSelection,
|
|
||||||
setLastCopiedSelection,
|
|
||||||
tabId,
|
tabId,
|
||||||
setTabId,
|
setTabId,
|
||||||
flows,
|
|
||||||
incrementNodeId,
|
|
||||||
removeFlow,
|
removeFlow,
|
||||||
addFlow,
|
addFlow,
|
||||||
downloadFlow,
|
downloadFlow,
|
||||||
downloadFlows,
|
downloadFlows,
|
||||||
uploadFlows,
|
uploadFlows,
|
||||||
uploadFlow,
|
uploadFlow,
|
||||||
getNodeId,
|
|
||||||
deleteNode,
|
|
||||||
deleteEdge,
|
|
||||||
isPending,
|
|
||||||
setPending,
|
|
||||||
tabsState,
|
tabsState,
|
||||||
setTabsState,
|
setTabsState,
|
||||||
paste,
|
|
||||||
getTweak,
|
|
||||||
setTweak,
|
|
||||||
isLoading,
|
isLoading,
|
||||||
saveComponent,
|
saveComponent,
|
||||||
deleteComponent,
|
deleteComponent,
|
||||||
nodes,
|
|
||||||
setNodes,
|
|
||||||
setNode,
|
|
||||||
getNode,
|
|
||||||
onNodesChange,
|
|
||||||
edges,
|
|
||||||
setEdges,
|
|
||||||
onEdgesChange,
|
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{children}
|
{children}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import {
|
||||||
} from "../types/typesContext";
|
} from "../types/typesContext";
|
||||||
import { isWrappedWithClass } from "../utils/utils";
|
import { isWrappedWithClass } from "../utils/utils";
|
||||||
import { FlowsContext } from "./flowsContext";
|
import { FlowsContext } from "./flowsContext";
|
||||||
|
import useFlow from "../stores/flowManagerStore";
|
||||||
|
|
||||||
const initialValue = {
|
const initialValue = {
|
||||||
undo: () => {},
|
undo: () => {},
|
||||||
|
|
@ -28,9 +29,11 @@ const defaultOptions: UseUndoRedoOptions = {
|
||||||
export const undoRedoContext = createContext<undoRedoContextType>(initialValue);
|
export const undoRedoContext = createContext<undoRedoContextType>(initialValue);
|
||||||
|
|
||||||
export function UndoRedoProvider({ children }) {
|
export function UndoRedoProvider({ children }) {
|
||||||
const { tabId, flows, setNodes, setEdges, nodes, edges } =
|
const { tabId, flows } =
|
||||||
useContext(FlowsContext);
|
useContext(FlowsContext);
|
||||||
|
|
||||||
|
const {setNodes, setEdges, nodes, edges} = useFlow();
|
||||||
|
|
||||||
const [past, setPast] = useState<HistoryItem[][]>(flows.map(() => []));
|
const [past, setPast] = useState<HistoryItem[][]>(flows.map(() => []));
|
||||||
const [future, setFuture] = useState<HistoryItem[][]>(flows.map(() => []));
|
const [future, setFuture] = useState<HistoryItem[][]>(flows.map(() => []));
|
||||||
const [tabIndex, setTabIndex] = useState(
|
const [tabIndex, setTabIndex] = useState(
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,8 @@ const ApiModal = forwardRef(
|
||||||
const [activeTab, setActiveTab] = useState("0");
|
const [activeTab, setActiveTab] = useState("0");
|
||||||
const tweak = useRef<tweakType>([]);
|
const tweak = useRef<tweakType>([]);
|
||||||
const tweaksList = useRef<string[]>([]);
|
const tweaksList = useRef<string[]>([]);
|
||||||
const { setTweak, getTweak, tabsState } = useContext(FlowsContext);
|
const { tabsState } = useContext(FlowsContext);
|
||||||
|
const [getTweak, setTweak] = useState<tweakType>([]);
|
||||||
const pythonApiCode = getPythonApiCode(
|
const pythonApiCode = getPythonApiCode(
|
||||||
flow,
|
flow,
|
||||||
autoLogin,
|
autoLogin,
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ import {
|
||||||
limitScrollFieldsModal,
|
limitScrollFieldsModal,
|
||||||
} from "../../constants/constants";
|
} from "../../constants/constants";
|
||||||
import { alertContext } from "../../contexts/alertContext";
|
import { alertContext } from "../../contexts/alertContext";
|
||||||
import { FlowsContext } from "../../contexts/flowsContext";
|
|
||||||
import { NodeDataType } from "../../types/flow";
|
import { NodeDataType } from "../../types/flow";
|
||||||
import {
|
import {
|
||||||
convertObjToArray,
|
convertObjToArray,
|
||||||
|
|
@ -39,6 +38,7 @@ import {
|
||||||
} from "../../utils/reactflowUtils";
|
} from "../../utils/reactflowUtils";
|
||||||
import { classNames } from "../../utils/utils";
|
import { classNames } from "../../utils/utils";
|
||||||
import BaseModal from "../baseModal";
|
import BaseModal from "../baseModal";
|
||||||
|
import useFlow from "../../stores/flowManagerStore";
|
||||||
|
|
||||||
const EditNodeModal = forwardRef(
|
const EditNodeModal = forwardRef(
|
||||||
(
|
(
|
||||||
|
|
@ -57,7 +57,7 @@ const EditNodeModal = forwardRef(
|
||||||
) => {
|
) => {
|
||||||
const [myData, setMyData] = useState(data);
|
const [myData, setMyData] = useState(data);
|
||||||
|
|
||||||
const { setPending, edges, setNode } = useContext(FlowsContext);
|
const { setPending, edges, setNode } = useFlow();
|
||||||
const { setModalContextOpen } = useContext(alertContext);
|
const { setModalContextOpen } = useContext(alertContext);
|
||||||
|
|
||||||
function changeAdvanced(n) {
|
function changeAdvanced(n) {
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import { CHAT_FORM_DIALOG_SUBTITLE } from "../../constants/constants";
|
||||||
import { AuthContext } from "../../contexts/authContext";
|
import { AuthContext } from "../../contexts/authContext";
|
||||||
import { FlowsContext } from "../../contexts/flowsContext";
|
import { FlowsContext } from "../../contexts/flowsContext";
|
||||||
import { getBuildStatus } from "../../controllers/API";
|
import { getBuildStatus } from "../../controllers/API";
|
||||||
|
import useFlow from "../../stores/flowManagerStore";
|
||||||
import { FlowsState } from "../../types/tabs";
|
import { FlowsState } from "../../types/tabs";
|
||||||
import { validateNodes } from "../../utils/reactflowUtils";
|
import { validateNodes } from "../../utils/reactflowUtils";
|
||||||
|
|
||||||
|
|
@ -37,7 +38,8 @@ export default function FormModal({
|
||||||
setOpen: (open: boolean) => void;
|
setOpen: (open: boolean) => void;
|
||||||
flow: FlowType;
|
flow: FlowType;
|
||||||
}): JSX.Element {
|
}): JSX.Element {
|
||||||
const { tabsState, setTabsState, nodes, edges } = useContext(FlowsContext);
|
const { tabsState, setTabsState } = useContext(FlowsContext);
|
||||||
|
const { nodes, edges } = useFlow();
|
||||||
const [chatValue, setChatValue] = useState(() => {
|
const [chatValue, setChatValue] = useState(() => {
|
||||||
try {
|
try {
|
||||||
const { formKeysData } = tabsState[flow.id];
|
const { formKeysData } = tabsState[flow.id];
|
||||||
|
|
|
||||||
|
|
@ -221,10 +221,6 @@ export default function Page({
|
||||||
if (event.dataTransfer.types.some((types) => types === "nodedata")) {
|
if (event.dataTransfer.types.some((types) => types === "nodedata")) {
|
||||||
takeSnapshot();
|
takeSnapshot();
|
||||||
|
|
||||||
// Get the current bounds of the ReactFlow wrapper element
|
|
||||||
const reactflowBounds =
|
|
||||||
reactFlowWrapper.current?.getBoundingClientRect();
|
|
||||||
|
|
||||||
// Extract the data from the drag event and parse it as a JSON object
|
// Extract the data from the drag event and parse it as a JSON object
|
||||||
let data: { type: string; node?: APIClassType } = JSON.parse(
|
let data: { type: string; node?: APIClassType } = JSON.parse(
|
||||||
event.dataTransfer.getData("nodedata")
|
event.dataTransfer.getData("nodedata")
|
||||||
|
|
@ -356,7 +352,7 @@ export default function Page({
|
||||||
const onMove = useCallback(() => {
|
const onMove = useCallback(() => {
|
||||||
if (!isPending) setPending(true);
|
if (!isPending) setPending(true);
|
||||||
}, [setPending]);
|
}, [setPending]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex h-full overflow-hidden">
|
<div className="flex h-full overflow-hidden">
|
||||||
{!view && <ExtraSidebar />}
|
{!view && <ExtraSidebar />}
|
||||||
|
|
|
||||||
|
|
@ -24,12 +24,14 @@ import {
|
||||||
} from "../../../../utils/utils";
|
} from "../../../../utils/utils";
|
||||||
import DisclosureComponent from "../DisclosureComponent";
|
import DisclosureComponent from "../DisclosureComponent";
|
||||||
import SidebarDraggableComponent from "./sideBarDraggableComponent";
|
import SidebarDraggableComponent from "./sideBarDraggableComponent";
|
||||||
|
import useFlow from "../../../../stores/flowManagerStore";
|
||||||
|
|
||||||
export default function ExtraSidebar(): JSX.Element {
|
export default function ExtraSidebar(): JSX.Element {
|
||||||
const { data, templates, getFilterEdge, setFilterEdge } =
|
const { data, templates, getFilterEdge, setFilterEdge } =
|
||||||
useContext(typesContext);
|
useContext(typesContext);
|
||||||
const { flows, tabId, uploadFlow, tabsState, saveFlow, isBuilt, isPending } =
|
const { flows, tabId, uploadFlow, tabsState, saveFlow } =
|
||||||
useContext(FlowsContext);
|
useContext(FlowsContext);
|
||||||
|
const { isBuilt, isPending } = useFlow();
|
||||||
const { hasApiKey, validApiKey, hasStore } = useContext(StoreContext);
|
const { hasApiKey, validApiKey, hasStore } = useContext(StoreContext);
|
||||||
const { setErrorData } = useContext(alertContext);
|
const { setErrorData } = useContext(alertContext);
|
||||||
const [dataFilter, setFilterData] = useState(data);
|
const [dataFilter, setFilterData] = useState(data);
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import { APIClassType } from "../../../../../types/api";
|
||||||
import {
|
import {
|
||||||
createFlowComponent,
|
createFlowComponent,
|
||||||
downloadNode,
|
downloadNode,
|
||||||
|
getNodeId,
|
||||||
} from "../../../../../utils/reactflowUtils";
|
} from "../../../../../utils/reactflowUtils";
|
||||||
import { removeCountFromString } from "../../../../../utils/utils";
|
import { removeCountFromString } from "../../../../../utils/utils";
|
||||||
|
|
||||||
|
|
@ -35,7 +36,7 @@ export default function SidebarDraggableComponent({
|
||||||
official: boolean;
|
official: boolean;
|
||||||
}) {
|
}) {
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
const { getNodeId, deleteComponent, version } = useContext(FlowsContext);
|
const { deleteComponent, version } = useContext(FlowsContext);
|
||||||
const { autoLogin, userData } = useContext(AuthContext);
|
const { autoLogin, userData } = useContext(AuthContext);
|
||||||
const [cursorPos, setCursorPos] = useState({ x: 0, y: 0 });
|
const [cursorPos, setCursorPos] = useState({ x: 0, y: 0 });
|
||||||
const popoverRef = useRef<HTMLDivElement>(null);
|
const popoverRef = useRef<HTMLDivElement>(null);
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import {
|
||||||
updateFlowPosition,
|
updateFlowPosition,
|
||||||
} from "../../../../utils/reactflowUtils";
|
} from "../../../../utils/reactflowUtils";
|
||||||
import { classNames } from "../../../../utils/utils";
|
import { classNames } from "../../../../utils/utils";
|
||||||
|
import useFlow from "../../../../stores/flowManagerStore";
|
||||||
|
|
||||||
export default function NodeToolbarComponent({
|
export default function NodeToolbarComponent({
|
||||||
data,
|
data,
|
||||||
|
|
@ -49,7 +50,6 @@ export default function NodeToolbarComponent({
|
||||||
data.node.template[templateField].type === "NestedDict")
|
data.node.template[templateField].type === "NestedDict")
|
||||||
).length
|
).length
|
||||||
);
|
);
|
||||||
const { getNodeId } = useContext(FlowsContext);
|
|
||||||
const { hasApiKey, validApiKey, hasStore } = useContext(StoreContext);
|
const { hasApiKey, validApiKey, hasStore } = useContext(StoreContext);
|
||||||
|
|
||||||
function canMinimize() {
|
function canMinimize() {
|
||||||
|
|
@ -65,13 +65,16 @@ export default function NodeToolbarComponent({
|
||||||
|
|
||||||
const {
|
const {
|
||||||
paste,
|
paste,
|
||||||
saveComponent,
|
|
||||||
version,
|
|
||||||
flows,
|
|
||||||
nodes,
|
nodes,
|
||||||
edges,
|
edges,
|
||||||
setNodes,
|
setNodes,
|
||||||
setEdges,
|
setEdges,
|
||||||
|
} = useFlow();
|
||||||
|
|
||||||
|
const {
|
||||||
|
saveComponent,
|
||||||
|
flows,
|
||||||
|
version,
|
||||||
} = useContext(FlowsContext);
|
} = useContext(FlowsContext);
|
||||||
const { takeSnapshot } = useContext(undoRedoContext);
|
const { takeSnapshot } = useContext(undoRedoContext);
|
||||||
const [showModalAdvanced, setShowModalAdvanced] = useState(false);
|
const [showModalAdvanced, setShowModalAdvanced] = useState(false);
|
||||||
|
|
@ -120,7 +123,7 @@ export default function NodeToolbarComponent({
|
||||||
case "ungroup":
|
case "ungroup":
|
||||||
takeSnapshot();
|
takeSnapshot();
|
||||||
updateFlowPosition(position, data.node?.flow!);
|
updateFlowPosition(position, data.node?.flow!);
|
||||||
expandGroupNode(data, getNodeId, nodes, edges, setNodes, setEdges);
|
expandGroupNode(data, nodes, edges, setNodes, setEdges);
|
||||||
break;
|
break;
|
||||||
case "override":
|
case "override":
|
||||||
setShowOverrideModal(true);
|
setShowOverrideModal(true);
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,8 @@ type RFState = {
|
||||||
onEdgesChange: OnEdgesChange;
|
onEdgesChange: OnEdgesChange;
|
||||||
setNodes: (update: Node[] | ((oldState: Node[]) => Node[])) => void;
|
setNodes: (update: Node[] | ((oldState: Node[]) => Node[])) => void;
|
||||||
setEdges: (update: Edge[] | ((oldState: Edge[]) => Edge[])) => void;
|
setEdges: (update: Edge[] | ((oldState: Edge[]) => Edge[])) => void;
|
||||||
|
setNode: (id: string, update: Node | ((oldState: Node) => Node)) => void;
|
||||||
|
getNode: (id: string) => Node | undefined;
|
||||||
onConnect: OnConnect;
|
onConnect: OnConnect;
|
||||||
deleteNode: (nodeId: string | Array<string>) => void;
|
deleteNode: (nodeId: string | Array<string>) => void;
|
||||||
deleteEdge: (edgeId: string | Array<string>) => void;
|
deleteEdge: (edgeId: string | Array<string>) => void;
|
||||||
|
|
@ -45,6 +47,7 @@ type RFState = {
|
||||||
position: { x: number; y: number; paneX?: number; paneY?: number }
|
position: { x: number; y: number; paneX?: number; paneY?: number }
|
||||||
) => void;
|
) => void;
|
||||||
isBuilt: boolean;
|
isBuilt: boolean;
|
||||||
|
setIsBuilt: (isBuilt: boolean) => void;
|
||||||
isPending: boolean;
|
isPending: boolean;
|
||||||
setPending: (pending: boolean) => void;
|
setPending: (pending: boolean) => void;
|
||||||
};
|
};
|
||||||
|
|
@ -58,6 +61,9 @@ const useFlow = create<RFState>((set, get) => ({
|
||||||
nodes: [],
|
nodes: [],
|
||||||
edges: [],
|
edges: [],
|
||||||
isBuilt: false,
|
isBuilt: false,
|
||||||
|
setIsBuilt: (isBuilt) => {
|
||||||
|
set({ isBuilt });
|
||||||
|
},
|
||||||
onNodesChange: (changes: NodeChange[]) => {
|
onNodesChange: (changes: NodeChange[]) => {
|
||||||
set({
|
set({
|
||||||
nodes: applyNodeChanges(changes, get().nodes),
|
nodes: applyNodeChanges(changes, get().nodes),
|
||||||
|
|
@ -82,6 +88,24 @@ const useFlow = create<RFState>((set, get) => ({
|
||||||
|
|
||||||
set({ edges: newChange });
|
set({ edges: newChange });
|
||||||
},
|
},
|
||||||
|
setNode: (id: string, change: Node | ((oldState: Node) => Node)) => {
|
||||||
|
let newChange =
|
||||||
|
typeof change === "function"
|
||||||
|
? change(get().nodes.find((node) => node.id === id)!)
|
||||||
|
: change;
|
||||||
|
|
||||||
|
get().setNodes((oldNodes) =>
|
||||||
|
oldNodes.map((node) => {
|
||||||
|
if (node.id === id) {
|
||||||
|
return newChange;
|
||||||
|
}
|
||||||
|
return node;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
},
|
||||||
|
getNode: (id: string) => {
|
||||||
|
return get().nodes.find((node) => node.id === id);
|
||||||
|
},
|
||||||
onConnect: (connection: Connection) => {
|
onConnect: (connection: Connection) => {
|
||||||
set({
|
set({
|
||||||
edges: addEdge(
|
edges: addEdge(
|
||||||
|
|
|
||||||
|
|
@ -12,10 +12,6 @@ export type FlowsContextType = {
|
||||||
isLoading: boolean;
|
isLoading: boolean;
|
||||||
setTabId: (index: string) => void;
|
setTabId: (index: string) => void;
|
||||||
//keep
|
//keep
|
||||||
flows: Array<FlowType>;
|
|
||||||
deleteNode: (idx: string | Array<string>) => void;
|
|
||||||
deleteEdge: (idx: string | Array<string>) => void;
|
|
||||||
//keep
|
|
||||||
removeFlow: (id: string) => void;
|
removeFlow: (id: string) => void;
|
||||||
//keep
|
//keep
|
||||||
addFlow: (
|
addFlow: (
|
||||||
|
|
@ -24,7 +20,6 @@ export type FlowsContextType = {
|
||||||
override?: boolean,
|
override?: boolean,
|
||||||
position?: XYPosition
|
position?: XYPosition
|
||||||
) => Promise<String | undefined>;
|
) => Promise<String | undefined>;
|
||||||
incrementNodeId: () => string;
|
|
||||||
downloadFlow: (
|
downloadFlow: (
|
||||||
flow: FlowType,
|
flow: FlowType,
|
||||||
flowName: string,
|
flowName: string,
|
||||||
|
|
@ -34,8 +29,6 @@ export type FlowsContextType = {
|
||||||
downloadFlows: () => void;
|
downloadFlows: () => void;
|
||||||
//keep
|
//keep
|
||||||
uploadFlows: () => void;
|
uploadFlows: () => void;
|
||||||
isBuilt: boolean;
|
|
||||||
setIsBuilt: (state: boolean) => void;
|
|
||||||
uploadFlow: ({
|
uploadFlow: ({
|
||||||
newProject,
|
newProject,
|
||||||
file,
|
file,
|
||||||
|
|
@ -47,35 +40,17 @@ export type FlowsContextType = {
|
||||||
isComponent?: boolean;
|
isComponent?: boolean;
|
||||||
position?: XYPosition;
|
position?: XYPosition;
|
||||||
}) => Promise<String | never>;
|
}) => Promise<String | never>;
|
||||||
getNodeId: (nodeType: string) => string;
|
|
||||||
isPending: boolean;
|
|
||||||
setPending: (pending: boolean) => void;
|
|
||||||
tabsState: FlowsState;
|
tabsState: FlowsState;
|
||||||
setTabsState: (
|
setTabsState: (
|
||||||
update: FlowsState | ((oldState: FlowsState) => FlowsState)
|
update: FlowsState | ((oldState: FlowsState) => FlowsState)
|
||||||
) => void;
|
) => void;
|
||||||
paste: (
|
|
||||||
selection: { nodes: any; edges: any },
|
|
||||||
position: { x: number; y: number; paneX?: number; paneY?: number }
|
|
||||||
) => void;
|
|
||||||
lastCopiedSelection: { nodes: any; edges: any } | null;
|
|
||||||
setLastCopiedSelection: (selection: { nodes: any; edges: any }) => void;
|
|
||||||
setTweak: (tweak: tweakType) => tweakType | void;
|
|
||||||
getTweak: tweakType;
|
|
||||||
saveComponent: (
|
saveComponent: (
|
||||||
component: NodeDataType,
|
component: NodeDataType,
|
||||||
override: boolean
|
override: boolean
|
||||||
) => Promise<String | undefined>;
|
) => Promise<String | undefined>;
|
||||||
deleteComponent: (key: string) => void;
|
deleteComponent: (key: string) => void;
|
||||||
version: string;
|
version: string;
|
||||||
nodes: Array<Node>;
|
flows: Array<FlowType>;
|
||||||
setNodes: (update: Node[] | ((oldState: Node[]) => Node[])) => void;
|
|
||||||
setNode: (id: string, update: Node | ((oldState: Node) => Node)) => void;
|
|
||||||
getNode: (id: string) => Node | undefined;
|
|
||||||
onNodesChange: OnChange<NodeChange>;
|
|
||||||
edges: Array<Edge>;
|
|
||||||
setEdges: (update: Edge[] | ((oldState: Edge[]) => Edge[])) => void;
|
|
||||||
onEdgesChange: OnChange<EdgeChange>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export type FlowsState = {
|
export type FlowsState = {
|
||||||
|
|
|
||||||
|
|
@ -924,7 +924,6 @@ function updateEdgesIds(edges: Edge[], idsMap: { [key: string]: string }) {
|
||||||
|
|
||||||
export function expandGroupNode(
|
export function expandGroupNode(
|
||||||
groupNode: NodeDataType,
|
groupNode: NodeDataType,
|
||||||
getNodeId: (type: string) => string,
|
|
||||||
nodes: Node[],
|
nodes: Node[],
|
||||||
edges: Edge[],
|
edges: Edge[],
|
||||||
setNodes: (update: Node[] | ((oldState: Node[]) => Node[])) => void,
|
setNodes: (update: Node[] | ((oldState: Node[]) => Node[])) => void,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue