From bd9c53bf14fe950d600b98f6eb12145aca74e9a6 Mon Sep 17 00:00:00 2001 From: Cristhian Zanforlin Lousa Date: Thu, 14 Sep 2023 20:11:48 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(EditNodeModal):=20fix=20stat?= =?UTF-8?q?e=20mutation=20issue=20by=20using=20useRef=20instead=20of=20use?= =?UTF-8?q?State=20for=20myData=20variable=20=E2=9C=A8=20feat(EditNodeModa?= =?UTF-8?q?l):=20add=20onChangeOpenModal=20prop=20to=20BaseModal=20compone?= =?UTF-8?q?nt=20to=20reset=20myData=20to=20original=20data=20when=20modal?= =?UTF-8?q?=20is=20closed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🔧 chore: fix indentation in setTabsState function call for better code readability 🔧 fix(baseModal): import useEffect from react to fix missing dependency warning 🔧 fix(baseModal): add missing onChangeOpenModal prop to BaseModal component 🔧 fix(baseModal): call onChangeOpenModal prop in useEffect to notify parent component of modal open state change 🔧 fix(genericModal): add empty onChangeOpenModal prop to BaseModal component to fix prop type error --- .../src/modals/EditNodeModal/index.tsx | 176 +++++++++++------- src/frontend/src/modals/baseModal/index.tsx | 10 +- .../src/modals/genericModal/index.tsx | 6 +- 3 files changed, 127 insertions(+), 65 deletions(-) diff --git a/src/frontend/src/modals/EditNodeModal/index.tsx b/src/frontend/src/modals/EditNodeModal/index.tsx index 4b4b55568..4d8ae2507 100644 --- a/src/frontend/src/modals/EditNodeModal/index.tsx +++ b/src/frontend/src/modals/EditNodeModal/index.tsx @@ -1,5 +1,12 @@ import { cloneDeep } from "lodash"; -import { ReactNode, forwardRef, useContext, useEffect, useState } from "react"; +import { + ReactNode, + forwardRef, + useContext, + useEffect, + useRef, + useState, +} from "react"; import CodeAreaComponent from "../../components/codeAreaComponent"; import Dropdown from "../../components/dropdownComponent"; import FloatComponent from "../../components/floatComponent"; @@ -44,40 +51,44 @@ const EditNodeModal = forwardRef( ref ) => { const [modalOpen, setModalOpen] = useState(false); - const [myData, setMyData] = useState(data); const { setTabsState, tabId } = useContext(TabsContext); const { reactFlowInstance } = useContext(typesContext); + const myData = useRef(data); let disabled = reactFlowInstance?.getEdges().some((e) => e.targetHandle === data.id) ?? false; function changeAdvanced(n) { - setMyData((old) => { - let newData = cloneDeep(old); - newData.node.template[n].advanced = !newData.node.template[n].advanced; - return newData; - }); + let newData = cloneDeep(data); + newData.node.template[n].advanced = !newData.node.template[n].advanced; + myData.current = newData; } const handleOnNewValue = (newValue: any, name) => { - setMyData((old) => { - let newData = cloneDeep(old); - newData.node.template[name].value = newValue; - return newData; - }); + let newData = cloneDeep(data); + newData.node.template[name].value = newValue; + myData.current = newData; }; useEffect(() => { - setMyData(data); // reset data to what it is on node when opening modal + myData.current = data; }, [modalOpen]); return ( - + { + let newData = cloneDeep(data); + myData.current = newData; + }} + > {children} - - {myData.type} - ID: {myData.id} + + {myData.current.type} + ID: {myData.current.id}
@@ -110,50 +121,57 @@ const EditNodeModal = forwardRef( - {Object.keys(myData.node.template) + {Object.keys(myData.current.node.template) .filter( (t) => t.charAt(0) !== "_" && - myData.node.template[t].show && - (myData.node.template[t].type === "str" || - myData.node.template[t].type === "bool" || - myData.node.template[t].type === "float" || - myData.node.template[t].type === "code" || - myData.node.template[t].type === "prompt" || - myData.node.template[t].type === "file" || - myData.node.template[t].type === "int") + myData.current.node.template[t].show && + (myData.current.node.template[t].type === "str" || + myData.current.node.template[t].type === "bool" || + myData.current.node.template[t].type === + "float" || + myData.current.node.template[t].type === "code" || + myData.current.node.template[t].type === + "prompt" || + myData.current.node.template[t].type === "file" || + myData.current.node.template[t].type === "int") ) .map((n, i) => ( - {myData.node.template[n].name - ? myData.node.template[n].name - : myData.node.template[n].display_name} + {myData.current.node.template[n].name + ? myData.current.node.template[n].name + : myData.current.node.template[n].display_name} - {myData.node.template[n].type === "str" && - !myData.node.template[n].options ? ( + {myData.current.node.template[n].type === "str" && + !myData.current.node.template[n].options ? (
- {myData.node.template[n].list ? ( + {myData.current.node.template[n].list ? ( { handleOnNewValue(t, n); }} /> - ) : myData.node.template[n].multiline ? ( + ) : myData.current.node.template[n] + .multiline ? ( { handleOnNewValue(t, n); @@ -164,11 +182,12 @@ const EditNodeModal = forwardRef( editNode={true} disabled={disabled} password={ - myData.node.template[n].password ?? - false + myData.current.node.template[n] + .password ?? false } value={ - myData.node.template[n].value ?? "" + myData.current.node.template[n].value ?? + "" } onChange={(t) => { handleOnNewValue(t, n); @@ -176,89 +195,114 @@ const EditNodeModal = forwardRef( /> )}
- ) : myData.node.template[n].type === "bool" ? ( + ) : myData.current.node.template[n].type === + "bool" ? (
{" "} { handleOnNewValue(t, n); }} size="small" />
- ) : myData.node.template[n].type === "float" ? ( + ) : myData.current.node.template[n].type === + "float" ? (
{ handleOnNewValue(t, n); }} />
- ) : myData.node.template[n].type === "str" && - myData.node.template[n].options ? ( + ) : myData.current.node.template[n].type === + "str" && + myData.current.node.template[n].options ? (
handleOnNewValue(t, n)} value={ - myData.node.template[n].value ?? + myData.current.node.template[n].value ?? "Choose an option" } >
- ) : myData.node.template[n].type === "int" ? ( + ) : myData.current.node.template[n].type === + "int" ? (
{ handleOnNewValue(t, n); }} />
- ) : myData.node.template[n].type === "file" ? ( + ) : myData.current.node.template[n].type === + "file" ? (
{ handleOnNewValue(t, n); }} fileTypes={ - myData.node.template[n].fileTypes + myData.current.node.template[n].fileTypes + } + suffixes={ + myData.current.node.template[n].suffixes } - suffixes={myData.node.template[n].suffixes} onFileChange={(t: string) => { data.node.template[n].file_path = t; }} >
- ) : myData.node.template[n].type === "prompt" ? ( + ) : myData.current.node.template[n].type === + "prompt" ? (
{ - myData.node = nodeClass; + myData.current.node = nodeClass; }} - value={myData.node.template[n].value ?? ""} + value={ + myData.current.node.template[n].value ?? + "" + } onChange={(t: string) => { handleOnNewValue(t, n); }} />
- ) : myData.node.template[n].type === "code" ? ( + ) : myData.current.node.template[n].type === + "code" ? (
{ handleOnNewValue(t, n); }} />
- ) : myData.node.template[n].type === "Any" ? ( + ) : myData.current.node.template[n].type === + "Any" ? ( "-" ) : (
@@ -285,7 +333,9 @@ const EditNodeModal = forwardRef(
changeAdvanced(n)} disabled={disabled} size="small" @@ -306,7 +356,7 @@ const EditNodeModal = forwardRef(