update build state logic (#1468)
This commit is contained in:
commit
7bd113dfaf
4 changed files with 52 additions and 18 deletions
|
|
@ -1,7 +1,6 @@
|
||||||
import { useCallback, useEffect, useState } from "react";
|
import { useCallback, useEffect, useState } from "react";
|
||||||
import { NodeToolbar } from "reactflow";
|
import { NodeToolbar } from "reactflow";
|
||||||
import ShadTooltip from "../../components/ShadTooltipComponent";
|
import ShadTooltip from "../../components/ShadTooltipComponent";
|
||||||
import Tooltip from "../../components/TooltipComponent";
|
|
||||||
import IconComponent from "../../components/genericIconComponent";
|
import IconComponent from "../../components/genericIconComponent";
|
||||||
import InputComponent from "../../components/inputComponent";
|
import InputComponent from "../../components/inputComponent";
|
||||||
import { Button } from "../../components/ui/button";
|
import { Button } from "../../components/ui/button";
|
||||||
|
|
@ -44,6 +43,7 @@ export default function GenericNode({
|
||||||
const [nodeDescription, setNodeDescription] = useState(
|
const [nodeDescription, setNodeDescription] = useState(
|
||||||
data.node?.description!
|
data.node?.description!
|
||||||
);
|
);
|
||||||
|
const buildStatus = useFlowStore((state) => state.flowBuildStatus[data.id]);
|
||||||
const [validationStatus, setValidationStatus] =
|
const [validationStatus, setValidationStatus] =
|
||||||
useState<validationStatusType | null>(null);
|
useState<validationStatusType | null>(null);
|
||||||
const [handles, setHandles] = useState<number>(0);
|
const [handles, setHandles] = useState<number>(0);
|
||||||
|
|
@ -280,7 +280,7 @@ export default function GenericNode({
|
||||||
className={getNodeBorderClassName(
|
className={getNodeBorderClassName(
|
||||||
selected,
|
selected,
|
||||||
showNode,
|
showNode,
|
||||||
data?.buildStatus,
|
buildStatus,
|
||||||
validationStatus
|
validationStatus
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
|
|
@ -468,26 +468,54 @@ export default function GenericNode({
|
||||||
variant="secondary"
|
variant="secondary"
|
||||||
className={"group h-9 px-1.5"}
|
className={"group h-9 px-1.5"}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
if (data?.buildStatus === BuildStatus.BUILDING || isBuilding)
|
if (buildStatus === BuildStatus.BUILDING || isBuilding)
|
||||||
return;
|
return;
|
||||||
buildFlow(data.id);
|
buildFlow(data.id);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<Tooltip title={"Build"}>
|
<ShadTooltip
|
||||||
|
styleClasses="cursor-default"
|
||||||
|
content={
|
||||||
|
buildStatus === BuildStatus.BUILDING ? (
|
||||||
|
<span>Building...</span>
|
||||||
|
) : !validationStatus ? (
|
||||||
|
<span className="flex">
|
||||||
|
Build{" "}
|
||||||
|
<IconComponent
|
||||||
|
name="Play"
|
||||||
|
className=" h-5 stroke-status-green stroke-2"
|
||||||
|
/>{" "}
|
||||||
|
flow to validate status.
|
||||||
|
</span>
|
||||||
|
) : (
|
||||||
|
<div className="max-h-96 overflow-auto">
|
||||||
|
{typeof validationStatus.params === "string"
|
||||||
|
? `${durationString}\n${validationStatus.params}`
|
||||||
|
.split("\n")
|
||||||
|
.map((line, index) => (
|
||||||
|
<div key={index}>{line}</div>
|
||||||
|
))
|
||||||
|
: durationString}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
side="bottom"
|
||||||
|
>
|
||||||
<div className="generic-node-status-position flex items-center justify-center">
|
<div className="generic-node-status-position flex items-center justify-center">
|
||||||
{renderIconPlayOrPauseComponents(
|
{renderIconPlayOrPauseComponents(
|
||||||
data?.buildStatus,
|
buildStatus,
|
||||||
validationStatus
|
validationStatus
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</Tooltip>
|
</ShadTooltip>
|
||||||
</div>
|
</div>
|
||||||
</Button>
|
</Button>
|
||||||
)}
|
)}
|
||||||
<div className="">
|
<div className="">
|
||||||
<Tooltip
|
<ShadTooltip
|
||||||
title={
|
styleClasses="cursor-default"
|
||||||
|
content={
|
||||||
data?.buildStatus === BuildStatus.BUILDING ? (
|
data?.buildStatus === BuildStatus.BUILDING ? (
|
||||||
<span>Building...</span>
|
<span>Building...</span>
|
||||||
) : !validationStatus ? (
|
) : !validationStatus ? (
|
||||||
|
|
@ -502,6 +530,7 @@ export default function GenericNode({
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
side="bottom"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
{renderIconStatusComponents(
|
{renderIconStatusComponents(
|
||||||
|
|
@ -509,7 +538,7 @@ export default function GenericNode({
|
||||||
validationStatus
|
validationStatus
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</Tooltip>
|
</ShadTooltip>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -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
|
// this is our useStore hook that we can use in our components to get parts of the store and call actions
|
||||||
const useFlowStore = create<FlowStoreType>((set, get) => ({
|
const useFlowStore = create<FlowStoreType>((set, get) => ({
|
||||||
flowState: undefined,
|
flowState: undefined,
|
||||||
|
flowBuildStatus:{},
|
||||||
nodes: [],
|
nodes: [],
|
||||||
edges: [],
|
edges: [],
|
||||||
isBuilding: false,
|
isBuilding: false,
|
||||||
|
|
@ -438,21 +439,19 @@ const useFlowStore = create<FlowStoreType>((set, get) => ({
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
updateBuildStatus: (nodeIdList: string[], status: BuildStatus) => {
|
updateBuildStatus: (nodeIdList: string[], status: BuildStatus) => {
|
||||||
|
const newFlowBuildStatus = { ...get().flowBuildStatus };
|
||||||
nodeIdList.forEach((id) => {
|
nodeIdList.forEach((id) => {
|
||||||
const nodeToUpdate = get().nodes.find((node) => node.id === id);
|
newFlowBuildStatus[id] = status;
|
||||||
if (nodeToUpdate) {
|
|
||||||
nodeToUpdate.data.buildStatus = status;
|
|
||||||
set({ nodes: get().nodes });
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
set({ flowBuildStatus: newFlowBuildStatus });
|
||||||
},
|
},
|
||||||
revertBuiltStatusFromBuilding: () => {
|
revertBuiltStatusFromBuilding: () => {
|
||||||
get().nodes.forEach((node) => {
|
const newFlowBuildStatus = { ...get().flowBuildStatus };
|
||||||
if (node.data.buildStatus === BuildStatus.BUILDING) {
|
Object.keys(newFlowBuildStatus).forEach((id) => {
|
||||||
node.data.buildStatus = BuildStatus.TO_BUILD;
|
if (newFlowBuildStatus[id] === BuildStatus.BUILDING) {
|
||||||
|
newFlowBuildStatus[id] = BuildStatus.BUILT;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
set({ nodes: get().nodes });
|
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -524,6 +524,11 @@ export type chatMessagePropsType = {
|
||||||
chat: ChatMessageType;
|
chat: ChatMessageType;
|
||||||
lockChat: boolean;
|
lockChat: boolean;
|
||||||
lastMessage: boolean;
|
lastMessage: boolean;
|
||||||
|
updateChat?: (
|
||||||
|
chat: ChatMessageType,
|
||||||
|
message: string,
|
||||||
|
stream_url: string | null
|
||||||
|
) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type formModalPropsType = {
|
export type formModalPropsType = {
|
||||||
|
|
|
||||||
|
|
@ -91,4 +91,5 @@ export type FlowStoreType = {
|
||||||
verticesBuild: string[];
|
verticesBuild: string[];
|
||||||
updateBuildStatus: (nodeId: string[], status: BuildStatus) => void;
|
updateBuildStatus: (nodeId: string[], status: BuildStatus) => void;
|
||||||
revertBuiltStatusFromBuilding: () => void;
|
revertBuiltStatusFromBuilding: () => void;
|
||||||
|
flowBuildStatus: { [key: string]: BuildStatus };
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue