diff --git a/src/frontend/src/components/AccordionComponent/index.tsx b/src/frontend/src/components/AccordionComponent/index.tsx index e19bd3d29..e00932c76 100644 --- a/src/frontend/src/components/AccordionComponent/index.tsx +++ b/src/frontend/src/components/AccordionComponent/index.tsx @@ -32,13 +32,6 @@ export default function AccordionComponent({ value === "" ? setValue(keyValue!) : setValue(""); } - const handleKeyDown = (event) => { - if (event.key === "Backspace") { - event.preventDefault(); - event.stopPropagation(); - } - }; - return ( <> ([]); const { dark } = useContext(darkContext); + const { reactFlowInstance } = useContext(typesContext); + const { isTweakPage, setIsTweakPage } = useContext(alertContext); useEffect(() => { if (flow && flow["data"]!["nodes"]) { @@ -52,6 +57,19 @@ export default function CodeTabsComponent({ } }, [flow]); + useEffect(() => { + unselectAllNodes({ + data, + updateNodes: (nodes) => { + reactFlowInstance?.setNodes(nodes); + }, + }); + + return () => { + if (isTweakPage) setIsTweakPage(false); + }; + }, []); + const copyToClipboard = () => { if (!navigator.clipboard || !navigator.clipboard.writeText) { return; @@ -159,13 +177,13 @@ export default function CodeTabsComponent({ )} - {tabs.map((tab, index) => ( + {tabs.map((tab, idx) => ( - {index < 4 ? ( + {idx < 4 ? ( <> {tab.description && (
- ) : index === 4 ? ( + ) : idx === 4 ? ( <>
- {data?.map((node: any, index) => ( -
+ {data?.map((node: any, i) => ( +
{tweaks?.tweaksList!.current.includes( node["data"]["id"] ) && ( @@ -236,10 +254,10 @@ export default function CodeTabsComponent({ node.data.node.template[templateField] .type === "int") ) - .map((templateField, index) => { + .map((templateField, indx) => { return ( @@ -277,13 +295,9 @@ export default function CodeTabsComponent({ setData((old) => { let newInputList = cloneDeep(old); - newInputList!.find( - (obj) => - obj.data.node - .template[ - templateField - ] - )!.data.node.template[ + newInputList![ + i + ].data.node.template[ templateField ].value = target; return newInputList; @@ -330,13 +344,9 @@ export default function CodeTabsComponent({ setData((old) => { let newInputList = cloneDeep(old); - newInputList!.find( - (obj) => - obj.data.node - .template[ - templateField - ] - )!.data.node.template[ + newInputList![ + i + ].data.node.template[ templateField ].value = target; return newInputList; @@ -379,13 +389,9 @@ export default function CodeTabsComponent({ setData((old) => { let newInputList = cloneDeep(old); - newInputList!.find( - (obj) => - obj.data.node - .template[ - templateField - ] - )!.data.node.template[ + newInputList![ + i + ].data.node.template[ templateField ].value = target; return newInputList; @@ -416,13 +422,9 @@ export default function CodeTabsComponent({ setData((old) => { let newInputList = cloneDeep(old); - newInputList!.find( - (obj) => - obj.data.node - .template[ - templateField - ] - )!.data.node.template[ + newInputList![ + i + ].data.node.template[ templateField ].value = e; return newInputList; @@ -511,13 +513,9 @@ export default function CodeTabsComponent({ setData((old) => { let newInputList = cloneDeep(old); - newInputList!.find( - (obj) => - obj.data.node - .template[ - templateField - ] - )!.data.node.template[ + newInputList![ + i + ].data.node.template[ templateField ].value = target; return newInputList; @@ -551,13 +549,9 @@ export default function CodeTabsComponent({ setData((old) => { let newInputList = cloneDeep(old); - newInputList!.find( - (obj) => - obj.data.node - .template[ - templateField - ] - )!.data.node.template[ + newInputList![ + i + ].data.node.template[ templateField ].value = target; return newInputList; @@ -607,14 +601,9 @@ export default function CodeTabsComponent({ setData((old) => { let newInputList = cloneDeep(old); - - newInputList!.find( - (obj) => - obj.data.node - .template[ - templateField - ] - )!.data.node.template[ + newInputList![ + i + ].data.node.template[ templateField ].value = target; return newInputList; @@ -667,13 +656,9 @@ export default function CodeTabsComponent({ setData((old) => { let newInputList = cloneDeep(old); - newInputList!.find( - (obj) => - obj.data.node - .template[ - templateField - ] - )!.data.node.template[ + newInputList![ + i + ].data.node.template[ templateField ].value = target; return newInputList; @@ -726,13 +711,9 @@ export default function CodeTabsComponent({ setData((old) => { let newInputList = cloneDeep(old); - newInputList!.find( - (obj) => - obj.data.node - .template[ - templateField - ] - )!.data.node.template[ + newInputList![ + i + ].data.node.template[ templateField ].value = target; return newInputList; diff --git a/src/frontend/src/contexts/alertContext.tsx b/src/frontend/src/contexts/alertContext.tsx index 1741b88b6..98b2fdef8 100644 --- a/src/frontend/src/contexts/alertContext.tsx +++ b/src/frontend/src/contexts/alertContext.tsx @@ -26,6 +26,8 @@ const initialValue: alertContextType = { pushNotificationList: () => {}, clearNotificationList: () => {}, removeFromNotificationList: () => {}, + isTweakPage: false, + setIsTweakPage: () => {}, }; export const alertContext = createContext(initialValue); @@ -48,6 +50,7 @@ export function AlertProvider({ children }: { children: ReactNode }) { const [successOpen, setSuccessOpen] = useState(false); const [notificationCenter, setNotificationCenter] = useState(false); const [notificationList, setNotificationList] = useState([]); + const [isTweakPage, setIsTweakPage] = useState(false); const pushNotificationList = (notification: AlertItemType) => { setNotificationList((old) => { let newNotificationList = _.cloneDeep(old); @@ -120,6 +123,8 @@ export function AlertProvider({ children }: { children: ReactNode }) { return ( (null); - const { setErrorData, setSuccessData } = useContext(alertContext); + const { setErrorData, setSuccessData, isTweakPage } = + useContext(alertContext); const [error, setError] = useState<{ detail: { error: string | undefined; traceback: string | undefined }; } | null>(null); @@ -39,7 +40,7 @@ export default function CodeAreaModal({ if (dynamic && Object.keys(nodeClass!.template).length > 2) { return; } - processCode(); + if (!isTweakPage) processCode(); }, []); function processNonDynamicField() { diff --git a/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx index d4d3ee832..c506975ae 100644 --- a/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx +++ b/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx @@ -21,7 +21,8 @@ export default function ExtraSidebar(): JSX.Element { const { data, templates } = useContext(typesContext); const { flows, tabId, uploadFlow, tabsState, saveFlow, isBuilt } = useContext(TabsContext); - const { setErrorData } = useContext(alertContext); + const { setSuccessData, setErrorData, setIsTweakPage } = + useContext(alertContext); const [dataFilter, setFilterData] = useState(data); const [search, setSearch] = useState(""); const isPending = tabsState[tabId]?.isPending; @@ -100,7 +101,10 @@ export default function ExtraSidebar(): JSX.Element {
{flow && flow.data && ( -
+
setIsTweakPage(true)} + > void; loading: boolean; setLoading: (newState: boolean) => void; + isTweakPage: boolean; + setIsTweakPage: (newState: boolean) => void; }; export type darkContextType = { diff --git a/src/frontend/src/types/utils/reactflowUtils.ts b/src/frontend/src/types/utils/reactflowUtils.ts index ecbbda4e4..9944fdba4 100644 --- a/src/frontend/src/types/utils/reactflowUtils.ts +++ b/src/frontend/src/types/utils/reactflowUtils.ts @@ -1,4 +1,4 @@ -import { Edge } from "reactflow"; +import { Edge, Node } from "reactflow"; import { NodeType } from "../flow"; export type cleanEdgesType = { @@ -8,3 +8,8 @@ export type cleanEdgesType = { }; updateEdge: (edge: Edge[]) => void; }; + +export type unselectAllNodesType = { + updateNodes: (nodes: Node[]) => void; + data: Node[] | null; +}; diff --git a/src/frontend/src/utils/reactflowUtils.ts b/src/frontend/src/utils/reactflowUtils.ts index 13c3973f1..87971ef9b 100644 --- a/src/frontend/src/utils/reactflowUtils.ts +++ b/src/frontend/src/utils/reactflowUtils.ts @@ -2,13 +2,17 @@ import _ from "lodash"; import { Connection, Edge, + Node, ReactFlowInstance, ReactFlowJsonObject, } from "reactflow"; import { specialCharsRegex } from "../constants/constants"; import { APITemplateType } from "../types/api"; import { FlowType, NodeType } from "../types/flow"; -import { cleanEdgesType } from "../types/utils/reactflowUtils"; +import { + cleanEdgesType, + unselectAllNodesType, +} from "../types/utils/reactflowUtils"; import { toNormalCase } from "./utils"; export function cleanEdges({ @@ -55,6 +59,14 @@ export function cleanEdges({ updateEdge(newEdges); } +export function unselectAllNodes({ updateNodes, data }: unselectAllNodesType) { + let newNodes = _.cloneDeep(data); + newNodes!.forEach((node: Node) => { + node.selected = false; + }); + updateNodes(newNodes!); +} + export function isValidConnection( { source, target, sourceHandle, targetHandle }: Connection, reactFlowInstance: ReactFlowInstance @@ -247,7 +259,6 @@ export function handleKeyDown( inputValue: string | string[] | null, block: string ) { - console.log(e, inputValue, block); //condition to fix bug control+backspace on Windows/Linux if ( (typeof inputValue === "string" &&