fixed validation

This commit is contained in:
anovazzi1 2023-04-28 23:03:13 -03:00
commit f97586813c
2 changed files with 166 additions and 187 deletions

View file

@ -62,5 +62,5 @@
"last 1 safari version" "last 1 safari version"
] ]
}, },
"proxy": "http://backend:7860" "proxy": "http://127.0.0.1:7860"
} }

View file

@ -12,7 +12,7 @@ import { useContext, useState, useEffect, useRef } from "react";
import { NodeDataType } from "../../types/flow"; import { NodeDataType } from "../../types/flow";
import { alertContext } from "../../contexts/alertContext"; import { alertContext } from "../../contexts/alertContext";
import { useCallback } from "react"; import { useCallback } from "react";
import { TabsContext } from "../../contexts/tabsContext";
export default function GenericNode({ export default function GenericNode({
data, data,
selected, selected,
@ -26,71 +26,50 @@ export default function GenericNode({
const Icon = nodeIcons[types[data.type]]; const Icon = nodeIcons[types[data.type]];
const [validationStatus, setValidationStatus] = useState("idle"); const [validationStatus, setValidationStatus] = useState("idle");
// State for outline color // State for outline color
const [isGreenOutline, setIsGreenOutline] = useState(false); const [isValid, setIsValid] = useState(false);
const [isRedOutline, setIsRedOutline] = useState(false); const {save} = useContext(TabsContext)
const { reactFlowInstance } = useContext(typesContext); const { reactFlowInstance } = useContext(typesContext);
const [params, setParams] = useState([]); const [params, setParams] = useState([]);
console.log();
useEffect(() => { useEffect(() => {
if (reactFlowInstance) { if (reactFlowInstance) {
setParams(Object.values(reactFlowInstance.toObject())); setParams(Object.values(reactFlowInstance.toObject()));
} }
}, [reactFlowInstance]); }, [save]);
const debouncedValidateNode = useDebouncedCallback(async () => {
// Check if the validationStatus is "success"
// if (validationStatus === "success") return;
useEffect(() => {
try { try {
const response = await fetch(`/validate/node/${data.id}`, { fetch(`/validate/node/${data.id}`, {
method: "POST", method: "POST",
headers: { headers: {
"Content-Type": "application/json", "Content-Type": "application/json",
}, },
body: JSON.stringify(reactFlowInstance.toObject()), body: JSON.stringify(reactFlowInstance.toObject()),
}); }).then((response) => {
console.log(response.status, response.body);
if (response.status === 200) { if (response.status === 200) {
setValidationStatus("success"); setValidationStatus("success");
} else if (response.status === 500) { } else if (response.status === 500) {
setValidationStatus("error"); setValidationStatus("error");
} }
});
} catch (error) { } catch (error) {
console.error("Error validating node:", error); console.error("Error validating node:", error);
setValidationStatus("error"); setValidationStatus("error");
} }
}, 1000); }, [params]);
const validateNode = useCallback(() => {
debouncedValidateNode();
}, [debouncedValidateNode]);
useEffect(() => {
validateNode();
}, [validateNode, params]);
useEffect(() => { useEffect(() => {
if (validationStatus === "success") { if (validationStatus === "success") {
setIsGreenOutline(true); setIsValid(true);
setIsRedOutline(false);
setTimeout(() => {
setIsGreenOutline(false);
}, 1000);
} else if (validationStatus === "error") {
setIsRedOutline(true);
setIsGreenOutline(false);
} else { } else {
setIsGreenOutline(false); setIsValid(false);
setIsRedOutline(false);
} }
}, [validationStatus]); }, [validationStatus]);
const outlineColor = isGreenOutline
? "animate-pulse-green"
: isRedOutline
? "border-red-outline"
: "";
if (!Icon) { if (!Icon) {
if (showError.current) { if (showError.current) {
setErrorData({ setErrorData({
@ -107,7 +86,7 @@ export default function GenericNode({
return ( return (
<div <div
className={classNames( className={classNames(
outlineColor, isValid ? "animate-pulse-green" : "border-red-outline",
selected ? "border border-blue-500" : "border dark:border-gray-700", selected ? "border border-blue-500" : "border dark:border-gray-700",
"prompt-node relative bg-white dark:bg-gray-900 w-96 rounded-lg flex flex-col justify-center" "prompt-node relative bg-white dark:bg-gray-900 w-96 rounded-lg flex flex-col justify-center"
)} )}