diff --git a/src/frontend/src/CustomNodes/GenericNode/index.tsx b/src/frontend/src/CustomNodes/GenericNode/index.tsx
index 95ae9b1cf..e1206ecb7 100644
--- a/src/frontend/src/CustomNodes/GenericNode/index.tsx
+++ b/src/frontend/src/CustomNodes/GenericNode/index.tsx
@@ -7,6 +7,7 @@ import InputComponent from "../../components/inputComponent";
import { Button } from "../../components/ui/button";
import { Textarea } from "../../components/ui/textarea";
import { priorityFields } from "../../constants/constants";
+import { BuildStatus } from "../../constants/enums";
import NodeToolbarComponent from "../../pages/FlowPage/components/nodeToolbarComponent";
import useFlowStore from "../../stores/flowStore";
import useFlowsManagerStore from "../../stores/flowsManagerStore";
@@ -71,7 +72,6 @@ export default function GenericNode({
setHandles(count);
}
-
useEffect(() => {
countHandles();
}, [data, data.node]);
@@ -164,8 +164,6 @@ export default function GenericNode({
numberOfHandles={handles}
showNode={showNode}
openAdvancedModal={false}
- onCloseAdvancedModal={() => {
- }}
>
@@ -410,33 +408,44 @@ export default function GenericNode({
}
>
-
-
-
+ {data?.build_status === BuildStatus.TO_BUILD ? (
+ <>
+
+ >
+ ) : (
+ <>
+
+
+
+ >
+ )}
diff --git a/src/frontend/src/constants/enums.ts b/src/frontend/src/constants/enums.ts
index a7bed8fde..57476239c 100644
--- a/src/frontend/src/constants/enums.ts
+++ b/src/frontend/src/constants/enums.ts
@@ -6,3 +6,9 @@ export enum TypeModal {
TEXT = 1,
PROMPT = 2,
}
+
+export enum BuildStatus {
+ BUILDING = "BUILDING",
+ TO_BUILD = "TO_BUILD",
+ BUILDED = "BUILDED",
+}
diff --git a/src/frontend/src/modals/formModal/index.tsx b/src/frontend/src/modals/formModal/index.tsx
index c85e77a0d..80ab8c06b 100644
--- a/src/frontend/src/modals/formModal/index.tsx
+++ b/src/frontend/src/modals/formModal/index.tsx
@@ -205,7 +205,6 @@ export default function FormModal({
if (Array.isArray(data) && data.length > 0) {
//set chat history
setChatHistory((_) => {
- console.log(data);
let newChatHistory: ChatMessageType[] = [];
for (let i = 0; i < data.length; i++) {
if (data[i].type === "prompt" && data[i].prompt) {
diff --git a/src/frontend/src/stores/flowStore.ts b/src/frontend/src/stores/flowStore.ts
index 473c615b1..cdb9955a3 100644
--- a/src/frontend/src/stores/flowStore.ts
+++ b/src/frontend/src/stores/flowStore.ts
@@ -11,6 +11,7 @@ import {
} from "reactflow";
import { create } from "zustand";
import { INPUT_TYPES, OUTPUT_TYPES } from "../constants/constants";
+import { BuildStatus } from "../constants/enums";
import { getFlowPool, updateFlowInDatabase } from "../controllers/API";
import {
NodeDataType,
@@ -357,6 +358,7 @@ const useFlowStore = create((set, get) => ({
const setErrorData = useAlertStore.getState().setErrorData;
function handleBuildUpdate(data: any) {
get().addDataToFlowPool(data.data[data.id], data.id);
+ useFlowStore.getState().updateBuildStatus([data.id], BuildStatus.BUILDED);
}
await updateFlowInDatabase({
data: {
@@ -382,6 +384,9 @@ const useFlowStore = create((set, get) => ({
onBuildError: (title, list) => {
setErrorData({ list, title });
},
+ onBuildStart: (idList) => {
+ useFlowStore.getState().updateBuildStatus(idList, BuildStatus.BUILDING);
+ },
});
},
getFlow: () => {
@@ -391,6 +396,15 @@ const useFlowStore = create((set, get) => ({
viewport: get().reactFlowInstance?.getViewport()!,
};
},
+ updateBuildStatus: (nodeIdList: string[], status: BuildStatus) => {
+ nodeIdList.forEach((id) => {
+ const nodeToUpdate = get().nodes.find((node) => node.id === id);
+ if (nodeToUpdate) {
+ nodeToUpdate.data.build_status = status;
+ get().setNodes(get().nodes);
+ }
+ });
+ },
}));
export default useFlowStore;
diff --git a/src/frontend/src/types/api/index.ts b/src/frontend/src/types/api/index.ts
index 48db814cf..1286a90bc 100644
--- a/src/frontend/src/types/api/index.ts
+++ b/src/frontend/src/types/api/index.ts
@@ -1,4 +1,5 @@
import { Edge, Node, Viewport } from "reactflow";
+import { BuildStatus } from "../../constants/enums";
import { FlowType } from "../flow";
//kind and class are just representative names to represent the actual structure of the object received by the API
export type APIDataType = { [key: string]: APIKindType };
@@ -36,6 +37,7 @@ export type APIClassType = {
| CustomFieldsType
| boolean
| undefined;
+ build_status?: BuildStatus;
};
export type TemplateVariableType = {
diff --git a/src/frontend/src/types/components/index.ts b/src/frontend/src/types/components/index.ts
index c3128b3f5..3a8563cf1 100644
--- a/src/frontend/src/types/components/index.ts
+++ b/src/frontend/src/types/components/index.ts
@@ -625,7 +625,7 @@ export type crashComponentPropsType = {
export type validationStatusType = {
id: string;
- data: object;
+ data: object | any;
params: string;
progress: number;
valid: boolean;
diff --git a/src/frontend/src/types/flow/index.ts b/src/frontend/src/types/flow/index.ts
index 544e78a45..5f2ed1dc4 100644
--- a/src/frontend/src/types/flow/index.ts
+++ b/src/frontend/src/types/flow/index.ts
@@ -1,4 +1,5 @@
import { ReactFlowJsonObject, XYPosition } from "reactflow";
+import { BuildStatus } from "../../constants/enums";
import { APIClassType } from "../api/index";
export type FlowType = {
@@ -26,6 +27,7 @@ export type NodeDataType = {
node?: APIClassType;
id: string;
output_types?: string[];
+ build_status?: BuildStatus;
};
// FlowStyleType is the type of the style object that is used to style the
// Flow card with an emoji and a color.
diff --git a/src/frontend/src/types/zustand/flow/index.ts b/src/frontend/src/types/zustand/flow/index.ts
index 937197efd..3e56d49e2 100644
--- a/src/frontend/src/types/zustand/flow/index.ts
+++ b/src/frontend/src/types/zustand/flow/index.ts
@@ -7,6 +7,7 @@ import {
ReactFlowInstance,
Viewport,
} from "reactflow";
+import { BuildStatus } from "../../../constants/enums";
import { FlowState } from "../../tabs";
export type chatInputType = {
@@ -84,4 +85,5 @@ export type FlowStoreType = {
unselectAll: () => void;
buildFlow: (nodeId?: string) => Promise;
getFlow: () => { nodes: Node[]; edges: Edge[]; viewport: Viewport };
+ updateBuildStatus: (nodeId: string[], status: BuildStatus) => void;
};
diff --git a/src/frontend/src/utils/buildUtils.ts b/src/frontend/src/utils/buildUtils.ts
index d7cdf5538..1246caa8a 100644
--- a/src/frontend/src/utils/buildUtils.ts
+++ b/src/frontend/src/utils/buildUtils.ts
@@ -1,5 +1,7 @@
import { AxiosError } from "axios";
+import { BuildStatus } from "../constants/enums";
import { getVerticesOrder, postBuildVertex } from "../controllers/API";
+import useFlowStore from "../stores/flowStore";
import { VertexBuildTypeAPI } from "../types/api";
type BuildVerticesParams = {
@@ -9,6 +11,7 @@ type BuildVerticesParams = {
onBuildUpdate?: (data: any) => void; // Replace any with the actual type of data
onBuildComplete?: (allNodesValid: boolean) => void;
onBuildError?: (title, list) => void;
+ onBuildStart?: (idList: string[]) => void;
};
export async function buildVertices({
@@ -18,10 +21,12 @@ export async function buildVertices({
onBuildUpdate,
onBuildComplete,
onBuildError,
+ onBuildStart,
}: BuildVerticesParams) {
let orderResponse = await getVerticesOrder(flowId);
let verticesOrder: Array> = orderResponse.data.ids;
let vertices: Array> = [];
+
if (nodeId) {
for (let i = 0; i < verticesOrder.length; i += 1) {
const innerArray = verticesOrder[i];
@@ -40,10 +45,13 @@ export async function buildVertices({
vertices = verticesOrder;
}
- // Set each vertex state to building
+ const verticesIds = vertices.flatMap((v) => v);
+ useFlowStore.getState().updateBuildStatus(verticesIds, BuildStatus.TO_BUILD);
+ // Set each vertex state to building
const buildResults: Array = [];
for (let i = 0; i < vertices.length; i += 1) {
+ if (onBuildStart) onBuildStart(vertices[i]);
await Promise.all(
vertices[i].map(async (id) => {
try {