From 38136c8befa258bd15135d007c9eb02c65a7fbc9 Mon Sep 17 00:00:00 2001 From: Robin Leber <rleber98@gmail.com> Date: Fri, 21 Jun 2024 09:45:46 +0200 Subject: [PATCH] FIX: pipe name uniqueness and editable --- src/functions/duplication.js | 45 +++++++++++++++++++++--------------- src/functions/id.js | 8 +++++++ src/index.html | 2 ++ src/main.js | 3 ++- 4 files changed, 38 insertions(+), 20 deletions(-) create mode 100644 src/functions/id.js diff --git a/src/functions/duplication.js b/src/functions/duplication.js index 9c0e8f3..7b30412 100644 --- a/src/functions/duplication.js +++ b/src/functions/duplication.js @@ -2,12 +2,13 @@ import { v4 as uuidv4 } from "uuid"; import { createEndpoints } from "./endpoints"; import { appState } from "./state"; import { showWarning } from "./visualValidation"; +import { shortenId } from "./id"; export const duplicatePipe = (instance) => { const selectedPipe = document.getElementById(window.selectedPipe); const newPipe = selectedPipe.cloneNode(true); - newPipe.id = uuidv4(); + newPipe.id = shortenId(uuidv4()); const top = selectedPipe.offsetTop + 36; const topStr = top.toString() + "px"; @@ -30,7 +31,7 @@ export const duplicateFilter = (instance) => { const selectedFilter = document.getElementById(window.selectedFilter); const newFilter = selectedFilter.cloneNode(true); - newFilter.id = uuidv4(); + newFilter.id = shortenId(uuidv4()); const top = selectedFilter.offsetTop + 48; const topStr = top.toString() + "px"; @@ -50,25 +51,31 @@ export const duplicateFilter = (instance) => { }; export const extendPipe = () => { - let newPipeName = prompt("Bitte geben Sie einen Pipe Namen ein:"); - const pipeToName = document.getElementById(window.selectedPipe); - if (pipeToName) { - var textIndex = pipeToName.innerHTML.indexOf("Queue"); - textIndex === -1 - ? (textIndex = pipeToName.innerHTML.indexOf("Topic")) - : null; - - if (textIndex !== -1) { - var beforeQueue = pipeToName.innerHTML.slice( - 0, - textIndex + "Queue".length - ); - var afterQueue = pipeToName.innerHTML.slice(textIndex + "Queue".length); + let newPipeName; + + while (true) { + newPipeName = prompt("Bitte geben Sie einen Pipe Namen ein:"); - var newContent = beforeQueue + `<br> "${newPipeName}"` + afterQueue; + let nameExists = Array.from(appState.getState().pipes.values()).includes( + newPipeName + ); - pipeToName.innerHTML = newContent; + if (nameExists) { + alert( + "Dieser Name ist bereits vergeben. Bitte geben Sie einen anderen Namen ein." + ); + } else { + break; } - appState.addPipe(pipeToName.id, newPipeName); + } + + if (window.selectedPipe && newPipeName) { + appState.addPipe(window.selectedPipe, newPipeName); + + const spanToChange = document.querySelector( + `#${window.selectedPipe} #PipeName` + ); + spanToChange.innerHTML = `"${newPipeName}"`; + console.log(appState.getState().pipes); } }; diff --git a/src/functions/id.js b/src/functions/id.js new file mode 100644 index 0000000..c7caf57 --- /dev/null +++ b/src/functions/id.js @@ -0,0 +1,8 @@ +export const shortenId = (uuid) => { + const startsWithNumber = /^\d/.test(uuid); + + if (startsWithNumber) { + uuid = uuid.replace(/^\d+/, ""); + } + return uuid; +}; diff --git a/src/index.html b/src/index.html index fb357c9..e06fe32 100644 --- a/src/index.html +++ b/src/index.html @@ -27,6 +27,8 @@ <h5>PIPES</h5> <div class="Pipe" data-type="Default"> Queue + <br /> + <span id="PipeName"></span> <i id="Warning" class="fa-sharp fa-solid fa-xl fa-circle-exclamation" diff --git a/src/main.js b/src/main.js index 40337b4..ae852f9 100644 --- a/src/main.js +++ b/src/main.js @@ -14,6 +14,7 @@ import { } from "./functions/api"; import { getScaleValues } from "./functions/scaling"; import { showAllWarning } from "./functions/visualValidation"; +import { shortenId } from "./functions/id"; function App() { const instance = jsPlumb.getInstance({}); @@ -61,7 +62,7 @@ function App() { // Diagramm DIV droppable machen $("#Diagram").droppable({ drop: function (event, ui) { - var id = uuidv4(); + var id = shortenId(uuidv4()); var clone = $(ui.helper).clone(true); clone.attr("id", id); clone.appendTo(this); -- GitLab