diff --git a/src/frontend/src/CustomNodes/GenericNode/index.tsx b/src/frontend/src/CustomNodes/GenericNode/index.tsx index 5368f2523..c71f401dc 100644 --- a/src/frontend/src/CustomNodes/GenericNode/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/index.tsx @@ -1,7 +1,6 @@ import { useCallback, useEffect, useState } from "react"; import { NodeToolbar } from "reactflow"; import ShadTooltip from "../../components/ShadTooltipComponent"; -import Tooltip from "../../components/TooltipComponent"; import IconComponent from "../../components/genericIconComponent"; import InputComponent from "../../components/inputComponent"; import { Button } from "../../components/ui/button"; @@ -44,6 +43,7 @@ export default function GenericNode({ const [nodeDescription, setNodeDescription] = useState( data.node?.description! ); + const buildStatus = useFlowStore((state) => state.flowBuildStatus[data.id]); const [validationStatus, setValidationStatus] = useState(null); const [handles, setHandles] = useState(0); @@ -280,7 +280,7 @@ export default function GenericNode({ className={getNodeBorderClassName( selected, showNode, - data?.buildStatus, + buildStatus, validationStatus )} > @@ -468,26 +468,54 @@ export default function GenericNode({ variant="secondary" className={"group h-9 px-1.5"} onClick={() => { - if (data?.buildStatus === BuildStatus.BUILDING || isBuilding) + if (buildStatus === BuildStatus.BUILDING || isBuilding) return; buildFlow(data.id); }} >
- + Building... + ) : !validationStatus ? ( + + Build{" "} + {" "} + flow to validate status. + + ) : ( +
+ {typeof validationStatus.params === "string" + ? `${durationString}\n${validationStatus.params}` + .split("\n") + .map((line, index) => ( +
{line}
+ )) + : durationString} +
+ ) + } + side="bottom" + >
{renderIconPlayOrPauseComponents( - data?.buildStatus, + buildStatus, validationStatus )}
-
+
)}
- Building... ) : !validationStatus ? ( @@ -502,6 +530,7 @@ export default function GenericNode({
) } + side="bottom" >
{renderIconStatusComponents( @@ -509,7 +538,7 @@ export default function GenericNode({ validationStatus )}
- + diff --git a/src/frontend/src/stores/flowStore.ts b/src/frontend/src/stores/flowStore.ts index f9fa0197b..66f3f8184 100644 --- a/src/frontend/src/stores/flowStore.ts +++ b/src/frontend/src/stores/flowStore.ts @@ -35,6 +35,7 @@ import useFlowsManagerStore from "./flowsManagerStore"; // this is our useStore hook that we can use in our components to get parts of the store and call actions const useFlowStore = create((set, get) => ({ flowState: undefined, + flowBuildStatus:{}, nodes: [], edges: [], isBuilding: false, @@ -438,21 +439,19 @@ const useFlowStore = create((set, get) => ({ }); }, updateBuildStatus: (nodeIdList: string[], status: BuildStatus) => { + const newFlowBuildStatus = { ...get().flowBuildStatus }; nodeIdList.forEach((id) => { - const nodeToUpdate = get().nodes.find((node) => node.id === id); - if (nodeToUpdate) { - nodeToUpdate.data.buildStatus = status; - set({ nodes: get().nodes }); - } + newFlowBuildStatus[id] = status; }); + set({ flowBuildStatus: newFlowBuildStatus }); }, revertBuiltStatusFromBuilding: () => { - get().nodes.forEach((node) => { - if (node.data.buildStatus === BuildStatus.BUILDING) { - node.data.buildStatus = BuildStatus.TO_BUILD; + const newFlowBuildStatus = { ...get().flowBuildStatus }; + Object.keys(newFlowBuildStatus).forEach((id) => { + if (newFlowBuildStatus[id] === BuildStatus.BUILDING) { + newFlowBuildStatus[id] = BuildStatus.BUILT; } }); - set({ nodes: get().nodes }); }, })); diff --git a/src/frontend/src/types/components/index.ts b/src/frontend/src/types/components/index.ts index 3a8563cf1..0a0da32ad 100644 --- a/src/frontend/src/types/components/index.ts +++ b/src/frontend/src/types/components/index.ts @@ -524,6 +524,11 @@ export type chatMessagePropsType = { chat: ChatMessageType; lockChat: boolean; lastMessage: boolean; + updateChat?: ( + chat: ChatMessageType, + message: string, + stream_url: string | null + ) => void; }; export type formModalPropsType = { diff --git a/src/frontend/src/types/zustand/flow/index.ts b/src/frontend/src/types/zustand/flow/index.ts index 2b4e8f251..cf6e786e0 100644 --- a/src/frontend/src/types/zustand/flow/index.ts +++ b/src/frontend/src/types/zustand/flow/index.ts @@ -91,4 +91,5 @@ export type FlowStoreType = { verticesBuild: string[]; updateBuildStatus: (nodeId: string[], status: BuildStatus) => void; revertBuiltStatusFromBuilding: () => void; + flowBuildStatus: { [key: string]: BuildStatus }; };