From ae584cf970311f3058288da39190bf0fd8e94a77 Mon Sep 17 00:00:00 2001 From: MXerFix Date: Fri, 26 Jul 2024 10:16:24 +0300 Subject: [PATCH] feat: text response improvements --- frontend/src/modals/NodeModal/NodeModal.tsx | 2 + .../modals/ResponseModal/ResponseModal.tsx | 30 ++++++---- .../ResponseModal/components/TextResponse.tsx | 55 +++++++++++++++++++ 3 files changed, 76 insertions(+), 11 deletions(-) create mode 100644 frontend/src/modals/ResponseModal/components/TextResponse.tsx diff --git a/frontend/src/modals/NodeModal/NodeModal.tsx b/frontend/src/modals/NodeModal/NodeModal.tsx index c87437f..f4721dd 100644 --- a/frontend/src/modals/NodeModal/NodeModal.tsx +++ b/frontend/src/modals/NodeModal/NodeModal.tsx @@ -115,6 +115,7 @@ const NodeModal = ({ data, isOpen, onClose, size = "3xl" }: NodeModalProps) => { placeholder="Enter node's response here" name='response' variant='bordered' + disabled value={nodeDataState.response?.data[0].text ?? "No text response"} onChange={setTextResponseValue} /> @@ -171,6 +172,7 @@ const NodeModal = ({ data, isOpen, onClose, size = "3xl" }: NodeModalProps) => { > response: responseType size?: ModalProps["size"] isOpen: boolean onClose: () => void } -const ResponseModal = ({ isOpen, onClose, data, response, size = "3xl" }: ResponseModalProps) => { +const ResponseModal = ({ isOpen, onClose, data, setData, response, size = "3xl" }: ResponseModalProps) => { const { getNode, setNodes, getNodes } = useReactFlow() - const { flows, quietSaveFlows } = useContext(flowContext) + const { flows, quietSaveFlows, updateFlow } = useContext(flowContext) const { flowId } = useParams() - const [selected, setSelected] = useState("python") + const [selected, setSelected] = useState(response.type ?? "python") // const [nodeDataState, setNodeDataState] = useState(data) const [currentResponse, setCurrentResponse] = useState(response) const setSelectedHandler = (key: responseTypeType) => { @@ -45,17 +47,17 @@ const ResponseModal = ({ isOpen, onClose, data, response, size = "3xl" }: Respon value: responseTypeType }[] = useMemo( () => [ - { - title: "Using LLM", - value: "llm", - }, { title: "Python code", value: "python", }, { - title: "Custom", - value: "custom", + title: "Text", + value: "text", + }, + { + title: "Using LLM", + value: "llm", }, ], [] @@ -71,7 +73,12 @@ const ResponseModal = ({ isOpen, onClose, data, response, size = "3xl" }: Respon /> ), custom:
Custom
, - text:
text
, + text: ( + + ), }), // eslint-disable-next-line react-hooks/exhaustive-deps [currentResponse] @@ -91,6 +98,7 @@ const ResponseModal = ({ isOpen, onClose, data, response, size = "3xl" }: Respon } const new_nodes = nodes.map((node) => (node.id === data.id ? new_node : node)) setNodes(() => new_nodes) + setData(new_node.data) // currentFlow.data.nodes = nodes.map((node) => (node.id === data.id ? new_node : node)) // updateFlow(currentFlow) quietSaveFlows() diff --git a/frontend/src/modals/ResponseModal/components/TextResponse.tsx b/frontend/src/modals/ResponseModal/components/TextResponse.tsx new file mode 100644 index 0000000..7bd1c47 --- /dev/null +++ b/frontend/src/modals/ResponseModal/components/TextResponse.tsx @@ -0,0 +1,55 @@ +import { Textarea } from "@nextui-org/react" +import { useEffect } from "react" +import { responseType } from "../../../types/ResponseTypes" + +const TextResponse = ({ + response, + setData, +}: { + response: responseType + setData: React.Dispatch> +}) => { + useEffect(() => { + if (!response.data[0].text) { + setData({ + ...response, + type: "text", + data: [ + { + priority: 1, + text: "", + }, + ], + }) + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) + + const changeResponseValue = (value: string) => { + setData({ + ...response, + type: "text", + data: [ + { + priority: 1, + text: value, + }, + ], + }) + } + + return ( +
+