From 70e66a51ec141be8435b68eb81f4d24660e287b6 Mon Sep 17 00:00:00 2001 From: Lucas Oliveira Date: Wed, 31 May 2023 13:29:58 -0300 Subject: [PATCH] Node edit modal done, bugs with handle and table --- .../src/modals/EditNodeModal/index.tsx | 316 ++++++++++++++++++ .../components/nodeToolbarComponent/index.tsx | 4 + 2 files changed, 320 insertions(+) create mode 100644 src/frontend/src/modals/EditNodeModal/index.tsx diff --git a/src/frontend/src/modals/EditNodeModal/index.tsx b/src/frontend/src/modals/EditNodeModal/index.tsx new file mode 100644 index 000000000..33aa252ac --- /dev/null +++ b/src/frontend/src/modals/EditNodeModal/index.tsx @@ -0,0 +1,316 @@ +import { Dialog, Transition } from "@headlessui/react"; +import { + ChevronDoubleLeftIcon, + ChevronDoubleRightIcon, + PencilSquareIcon, + XMarkIcon, +} from "@heroicons/react/24/outline"; +import { Fragment, useContext, useEffect, useRef, useState } from "react"; +import { PopUpContext } from "../../contexts/popUpContext"; +import { NodeDataType } from "../../types/flow"; +import { + classNames, + limitScrollFieldsModal, + nodeColors, + nodeIcons, + toNormalCase, + toTitleCase, +} from "../../utils"; +import { typesContext } from "../../contexts/typesContext"; +const people = [ + { + name: "Lindsay Walton", + title: "Front-end Developer", + email: "lindsay.walton@example.com", + role: "Member", + }, + // More people... +]; + +export default function EditNodeModal({ data }: { data: NodeDataType }) { + const [open, setOpen] = useState(true); + const { closePopUp } = useContext(PopUpContext); + const { types } = useContext(typesContext); + const ref = useRef(); + function setModalOpen(x: boolean) { + setOpen(x); + if (x === false) { + setTimeout(() => { + closePopUp(); + }, 300); + } + } + const [advanced, setAdvanced] = useState([]); + const [parameters, setParameters] = useState([]); + const updateAdvancedParameters = () => { + setAdvanced( + Object.keys(data.node.template).filter( + (t) => + t.charAt(0) !== "_" && + data.node.template[t].advanced && + data.node.template[t].show + ) + ); + setParameters( + Object.keys(data.node.template).filter( + (t) => + t.charAt(0) !== "_" && + !data.node.template[t].advanced && + data.node.template[t].show && + (data.node.template[t].type === "str" || + data.node.template[t].type === "bool" || + data.node.template[t].type === "float" || + data.node.template[t].type === "code" || + data.node.template[t].type === "prompt" || + data.node.template[t].type === "file" || + data.node.template[t].type === "int") + ) + ); + }; + useEffect(() => { + updateAdvancedParameters(); + }, [data.node.template]); + const Icon = nodeIcons[types[data.type]]; + return ( + + + +
+ + +
+
+ + +
+ +
+
+
+
+
+
+ + Edit Node + +
+
+
+
+
+ t.charAt(0) !== "_" && + data.node.template[t].advanced && + data.node.template[t].show + ).length > limitScrollFieldsModal || + Object.keys(data.node.template).filter( + (t) => + t.charAt(0) !== "_" && + !data.node.template[t].advanced && + data.node.template[t].show + ).length > limitScrollFieldsModal + ? "overflow-scroll overflow-x-hidden custom-scroll" + : "overflow-hidden" + )} + > +
+ + + + + + + + + {advanced.length > parameters.length + ? advanced.map((t, idx) => ( + + + + + )) + : parameters.map((t, idx) => ( + + + + + ))} + +
+ Parameters + + Advanced +
+ {data.node.template[parameters[idx]] ? ( + + ) : ( + <> + )} + + +
+ + + {data.node.template[advanced[idx]] ? ( + + ) : ( + <> + )} +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ ); +} diff --git a/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx index f30de16f7..96ef44502 100644 --- a/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx +++ b/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx @@ -14,6 +14,7 @@ import { Fragment } from "react"; import NodeModal from "../../../../modals/NodeModal"; import { TabsContext } from "../../../../contexts/tabsContext"; import { useReactFlow } from "reactflow"; +import EditNodeModal from "../../../../modals/EditNodeModal"; const NodeToolbarComponent = (props) => { const { setLastCopiedSelection, paste } = useContext(TabsContext); @@ -109,6 +110,9 @@ const NodeToolbarComponent = (props) => {