From 19ec6667fa92d7bdedc9bf2463c8f7d5dc2d2c13 Mon Sep 17 00:00:00 2001
From: Robin Leber <rleber98@gmail.com>
Date: Tue, 18 Jun 2024 12:06:37 +0200
Subject: [PATCH] validation for pipes

---
 src/functions/api.js              |  4 ++--
 src/functions/contextmenu.js      | 18 ++++++++----------
 src/functions/duplication.js      | 23 +++++++++++++++++++++++
 src/functions/visualValidation.js | 15 ++++++---------
 src/index.html                    | 20 ++++++++++++++++++--
 src/main.js                       |  1 -
 6 files changed, 57 insertions(+), 24 deletions(-)

diff --git a/src/functions/api.js b/src/functions/api.js
index b054d1c..c0da7ce 100644
--- a/src/functions/api.js
+++ b/src/functions/api.js
@@ -12,7 +12,7 @@ export const runCustomCode = () => {
       loader(false);
       if (response.status === 200) {
         successFeedback();
-        showDocker(window.selectedFilter);
+        showDocker();
       } else {
         errorFeedback(response);
       }
@@ -50,7 +50,7 @@ export const restartCustomCode = () => {
       loader(false);
       if (response.status === 200) {
         successFeedback();
-        showDocker(window.selectedFilter);
+        showDocker();
       } else {
         errorFeedback(response);
       }
diff --git a/src/functions/contextmenu.js b/src/functions/contextmenu.js
index 47affbd..b69cb30 100644
--- a/src/functions/contextmenu.js
+++ b/src/functions/contextmenu.js
@@ -1,6 +1,7 @@
-import { duplicatePipe, duplicateFilter } from "./duplication";
+import { duplicatePipe, duplicateFilter, extendPipe } from "./duplication";
 import { codeEditor } from "./codeEditor";
 import { scaleOut } from "./api";
+import { showCheck } from "./visualValidation";
 
 export const initContextmenu = (instance) => {
   // Kontext Menü für Connections
@@ -70,6 +71,9 @@ export const initContextmenu = (instance) => {
     window.selectedPipe = $(event.currentTarget).attr("id");
     $(
       `<div style='display: flex; flex-direction: column;' class='custom-menu'>
+        <button style='border: none; padding: 6px 12px;' class='name-pipe'>
+          Name Pipe
+        </button>
         <button style='border: none; padding: 6px 12px;' class='duplicate-pipe'>
           Duplicate Pipe
         </button>
@@ -88,14 +92,8 @@ export const initContextmenu = (instance) => {
   $("body").on("click", ".duplicate-pipe", (event) => {
     duplicatePipe(instance);
   });
-
-  $("body").on("dblclick", "#Diagram .Pipe", (event) => {
-    event.preventDefault();
-    window.selectedPipe = $(event.currentTarget);
-    let pipeName = prompt("Bitte geben Sie einen Pipe Namen ein:");
-    if (pipeName !== null) {
-      let currentHTML = window.selectedPipe.html();
-      window.selectedPipe.html(`${currentHTML} <br> ${pipeName}`);
-    }
+  $("body").on("click", ".name-pipe", (event) => {
+    extendPipe();
+    showCheck(window.selectedPipe);
   });
 };
diff --git a/src/functions/duplication.js b/src/functions/duplication.js
index fe7abaf..e127412 100644
--- a/src/functions/duplication.js
+++ b/src/functions/duplication.js
@@ -52,3 +52,26 @@ export const duplicateFilter = (instance) => {
   instance.draggable(newFilter.id, { containment: true });
   createEndpoints(instance, newFilter.id, newFilter.dataset.type);
 };
+
+export const extendPipe = () => {
+  let pipeName = 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);
+
+      var newContent = beforeQueue + `<br> "${pipeName}"` + afterQueue;
+
+      pipeToName.innerHTML = newContent;
+    }
+  }
+};
diff --git a/src/functions/visualValidation.js b/src/functions/visualValidation.js
index 2e8df6c..95f918d 100644
--- a/src/functions/visualValidation.js
+++ b/src/functions/visualValidation.js
@@ -16,13 +16,10 @@ export const showCheck = (id) => {
   var dockerDomElement = selectedElement.querySelector("#Docker");
   dockerDomElement.style.visibility = "hidden";
 };
-export const showDocker = (id) => {
-  console.log("### hi:", id);
-  const selectedElement = document.getElementById(id);
-  var checkDomElement = selectedElement.querySelector("#Warning");
-  checkDomElement.style.visibility = "hidden";
-  var dockerDomElement = selectedElement.querySelector("#Check");
-  dockerDomElement.style.visibility = "hidden";
-  var dockerDomElement = selectedElement.querySelector("#Docker");
-  dockerDomElement.style.visibility = "visible";
+export const showDocker = () => {
+  let elementsToHide = document.querySelectorAll("#Warning, #Check");
+  elementsToHide.forEach((element) => (element.style.visibility = "hidden"));
+
+  let elementsToShow = document.querySelectorAll("#Diagram #Docker");
+  elementsToShow.forEach((element) => (element.style.visibility = "visible"));
 };
diff --git a/src/index.html b/src/index.html
index aa701b2..62fef17 100644
--- a/src/index.html
+++ b/src/index.html
@@ -25,8 +25,24 @@
           <h4>TOOLBOX</h4>
           <div>
             <h5>PIPES</h5>
-            <div class="Pipe" data-type="Default">Queue</div>
-            <div class="Pipe" data-type="Distributor">Topic</div>
+            <div class="Pipe" data-type="Default">
+              Queue
+              <i
+                id="Warning"
+                class="fa-sharp fa-solid fa-xl fa-circle-exclamation"
+              ></i>
+              <i id="Check" class="fa-sharp fa-xl fa-solid fa-circle-check"></i>
+              <i id="Docker" class="fa-brands fa-xl fa-docker"></i>
+            </div>
+            <div class="Pipe" data-type="Distributor">
+              Topic
+              <i
+                id="Warning"
+                class="fa-sharp fa-solid fa-xl fa-circle-exclamation"
+              ></i>
+              <i id="Check" class="fa-sharp fa-xl fa-solid fa-circle-check"></i>
+              <i id="Docker" class="fa-brands fa-xl fa-docker"></i>
+            </div>
           </div>
           <hr />
           <div>
diff --git a/src/main.js b/src/main.js
index bfed88a..db85e68 100644
--- a/src/main.js
+++ b/src/main.js
@@ -12,7 +12,6 @@ import {
   clearArchitecture,
 } from "./functions/api";
 import { getScaleValues } from "./functions/scaling";
-import { showDocker } from "./functions/visualValidation";
 
 function App() {
   const appState = (() => {
-- 
GitLab