diff --git a/src/frontend/src/contexts/tabsContext.tsx b/src/frontend/src/contexts/tabsContext.tsx index d12fa18ba..30df2a8bd 100644 --- a/src/frontend/src/contexts/tabsContext.tsx +++ b/src/frontend/src/contexts/tabsContext.tsx @@ -20,7 +20,7 @@ import { import { APIClassType, APITemplateType } from "../types/api"; import { FlowType, NodeType } from "../types/flow"; import { TabsContextType, TabsState } from "../types/tabs"; -import { updateIds, updateTemplate } from "../utils/reactflowUtils"; +import { addVersionToDuplicates, updateIds, updateTemplate } from "../utils/reactflowUtils"; import { getRandomDescription, getRandomName } from "../utils/utils"; import { alertContext } from "./alertContext"; import { typesContext } from "./typesContext"; @@ -448,6 +448,10 @@ export function TabsProvider({ children }: { children: ReactNode }) { processFlowEdges(newFlow); processFlowNodes(newFlow); + const flowName = addVersionToDuplicates(newFlow, flows); + + newFlow.name = flowName; + try { const { id } = await saveFlowToDatabase(newFlow); // Change the id to the new id. diff --git a/src/frontend/src/utils/reactflowUtils.ts b/src/frontend/src/utils/reactflowUtils.ts index c4bec22c9..583526167 100644 --- a/src/frontend/src/utils/reactflowUtils.ts +++ b/src/frontend/src/utils/reactflowUtils.ts @@ -219,3 +219,16 @@ export function validateNodes(reactFlowInstance: ReactFlowInstance) { .getNodes() .flatMap((n: NodeType) => validateNode(n, reactFlowInstance)); } + +export function addVersionToDuplicates(flow: FlowType, flows: FlowType[]) { + const existingNames = flows.map((item) => item.name); + let newName = flow.name; + let count = 1; + + while (existingNames.includes(newName)) { + newName = `${flow.name} (${count})`; + count++; + } + + return newName; +} \ No newline at end of file