added uids to allow duplicate-named nodes

pull/33/head
Khwaja 3 months ago
parent d80f956a42
commit b095e4bbbe

@ -9,7 +9,7 @@ import Header from "./Header";
import "tabulator-tables/dist/css/tabulator.min.css"; import "tabulator-tables/dist/css/tabulator.min.css";
import "../Common/Forms/Tables.css"; import "../Common/Forms/Tables.css";
import Footer from "./Footer"; import Footer from "./Footer";
import React, { useState } from "react"; import React, { useState,useRef } from "react";
import {CircularData} from "./CircularData"; import {CircularData} from "./CircularData";
import { defaultPlant, defaultProduct, defaultCenter } from "./defaults"; import { defaultPlant, defaultProduct, defaultCenter } from "./defaults";
import PipelineBlock from "./PipelineBlock"; import PipelineBlock from "./PipelineBlock";
@ -23,15 +23,18 @@ declare global {
} }
const CaseBuilder = () => { const CaseBuilder = () => {
const nextUid= useRef(1);
const [circularData, setCircularData] = useState<CircularData> ( { const [circularData, setCircularData] = useState<CircularData> ( {
plants: {}, plants: {},
products: {}, products: {},
centers: {} centers: {},
}); });
const onClear = () => {}; const onClear = () => {};
const onSave = () => {}; const onSave = () => {};
const onLoad = () => {}; const onLoad = () => {};
@ -52,24 +55,27 @@ const CaseBuilder = () => {
const promptName = (prevData:CircularData): string | undefined => { const promptName = (prevData:CircularData): string | undefined => {
const name = prompt("Name"); const name = prompt("Name");
if (!name || name.length ===0) return; if (!name || name.length ===0) return;
if (name in prevData.products || name in prevData.plants) return;
return name; return name;
}; };
const onAddPlant = () => { const onAddPlant = () => {
setCircularData((prevData) => { setCircularData((prevData) => {
const id = promptName(prevData); const name = promptName(prevData);
if (id ===undefined) return prevData; if (name ===undefined) return prevData;
const uid = `${name}-${nextUid.current++}`;
const [x,y] = randomPosition(); const [x,y] = randomPosition();
const newData: CircularData = { const newData: CircularData = {
...prevData, ...prevData,
plants: { plants: {
...prevData.plants, ...prevData.plants,
[id]: { [uid]: {
...defaultPlant, ...defaultPlant,
x, x,
y, y,
name,
uid
} }
} }
}; };
@ -79,17 +85,20 @@ const CaseBuilder = () => {
const onAddProduct = () => { const onAddProduct = () => {
setCircularData((prevData) => { setCircularData((prevData) => {
const id = promptName(prevData); const name = promptName(prevData);
if (id ===undefined) return prevData; if (name ===undefined) return prevData;
const uid = `${name}-${nextUid.current++}`;
const [x,y] = randomPosition(); const [x,y] = randomPosition();
const newData: CircularData = { const newData: CircularData = {
...prevData, ...prevData,
products: { products: {
...prevData.products, ...prevData.products,
[id]: { [uid]: {
...defaultProduct, ...defaultProduct,
x, x,
y, y,
name,
uid
} }
} }
}; };
@ -99,22 +108,26 @@ const CaseBuilder = () => {
}; };
const onAddCenter = () => { const onAddCenter = () => {
setCircularData(prev => { setCircularData((prevData) => {
const name = prompt("Center name"); const name = promptName(prevData);
if (!name || name in prev.centers) return prev; if (name ===undefined) return prevData;
const uid = `${name}-${nextUid.current++}`;
const [x,y] = randomPosition(); const [x,y] = randomPosition();
const next = { const newData: CircularData = {
...prev, ...prevData,
centers: { centers: {
...prev.centers, ...prevData.centers,
[name]: { ...defaultCenter, id:name, x, y, outputs: []} [uid]: {
...defaultCenter,
} x,
}; y,
return next; name,
uid
}); }
}
};
return newData;
});
}; };
const onSetCenterInput = (centerName: string, productName: string) => { const onSetCenterInput = (centerName: string, productName: string) => {

@ -1,5 +1,6 @@
export interface CircularPlant { export interface CircularPlant {
id: string; uid: string;
name: string;
x: number; x: number;
y: number; y: number;
inputs: string[]; inputs: string[];
@ -9,7 +10,8 @@ export interface CircularPlant {
} }
export interface CircularProduct { export interface CircularProduct {
id: string; uid: string;
name: string;
x: number; x: number;
y: number; y: number;
} }
@ -23,7 +25,8 @@ export interface CircularData {
} }
export interface CircularCenter { export interface CircularCenter {
id: string; uid: string;
name: string;
x: number; x: number;
y: number; y: number;

@ -94,9 +94,9 @@ const onNodeDragStop =(_:any, node: Node) => {
if(!product.x || !product.y) hasNullPositions = true; if(!product.x || !product.y) hasNullPositions = true;
mapNameToType[productName] = "product"; mapNameToType[productName] = "product";
nodes.push({ nodes.push({
id: productName, id: product.uid,
type: "default", type: "default",
data: {label: productName, type: 'product'}, data: {label: product.name, type: 'product'},
position: { x:product.x, y:product.y}, position: { x:product.x, y:product.y},
className: 'ProductNode' className: 'ProductNode'
}); });
@ -105,9 +105,9 @@ const onNodeDragStop =(_:any, node: Node) => {
if(!plant.x || !plant.y) hasNullPositions = true; if(!plant.x || !plant.y) hasNullPositions = true;
mapNameToType[plantName] = "plant"; mapNameToType[plantName] = "plant";
nodes.push({ nodes.push({
id: plantName, id: plant.uid,
type: "default", type: "default",
data: {label: plantName, type: 'plant'}, data: {label: plant.name, type: 'plant'},
position: { x:plant.x, y:plant.y}, position: { x:plant.x, y:plant.y},
className: 'PlantNode' className: 'PlantNode'
}); });
@ -143,9 +143,9 @@ const onNodeDragStop =(_:any, node: Node) => {
for (const [centerName, center] of Object.entries(props.centers)) { for (const [centerName, center] of Object.entries(props.centers)) {
mapNameToType[centerName] = "center"; mapNameToType[centerName] = "center";
nodes.push({ nodes.push({
id: centerName, id: center.uid,
type: "default", type: "default",
data: { label: centerName, type: "center"}, data: { label: center.name, type: "center"},
position: {x: center.x, y: center.y}, position: {x: center.x, y: center.y},
className: 'CenterNode' className: 'CenterNode'
}); });

@ -16,13 +16,15 @@ export interface DefaultCenter extends CircularPlant{
} }
export const defaultProduct: DefaultProduct = { export const defaultProduct: DefaultProduct = {
id: "", uid: "",
name: "",
x: 0, x: 0,
y: 0, y: 0,
}; };
export const defaultPlant: CircularPlant = { export const defaultPlant: CircularPlant = {
id: "", uid: "",
name: "",
x: 0, x: 0,
y: 0, y: 0,
inputs : [], inputs : [],
@ -30,7 +32,8 @@ export const defaultPlant: CircularPlant = {
}; };
export const defaultCenter: CircularCenter = { export const defaultCenter: CircularCenter = {
id: "", uid: "",
name: "",
x: 0, x: 0,
y: 0, y: 0,
output: [], output: [],

Loading…
Cancel
Save