From 2cecf99f29f4990e6f9ce2bdf93fc2cd2863519e Mon Sep 17 00:00:00 2001
From: ali asaria <aliasaria@users.noreply.github.com>
Date: Fri, 28 Feb 2025 09:47:18 -0500
Subject: [PATCH] add startNode type

---
 .../Experiment/Workflows/WorkflowCanvas.tsx   |  7 +--
 .../Workflows/{ => nodes}/CustomNode.tsx      |  0
 .../Experiment/Workflows/nodes/StartNode.tsx  | 43 +++++++++++++++++++
 src/renderer/styles.css                       | 12 ++++++
 4 files changed, 59 insertions(+), 3 deletions(-)
 rename src/renderer/components/Experiment/Workflows/{ => nodes}/CustomNode.tsx (100%)
 create mode 100644 src/renderer/components/Experiment/Workflows/nodes/StartNode.tsx

diff --git a/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx b/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx
index c0cd4182..ee0b8371 100644
--- a/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx
+++ b/src/renderer/components/Experiment/Workflows/WorkflowCanvas.tsx
@@ -11,10 +11,11 @@ import {
 } from '@xyflow/react';
 import { PlusCircleIcon } from 'lucide-react';
 import { useCallback, useEffect } from 'react';
-import CustomNode from './CustomNode';
+import CustomNode from './nodes/CustomNode';
+import StartNode from './nodes/StartNode';
 import * as chatAPI from '../../../lib/transformerlab-api-sdk';
 
-const nodeTypes = { customNode: CustomNode };
+const nodeTypes = { customNode: CustomNode, startNode: StartNode };
 
 function generateNodes(workflow: any): any[] {
   const workflowConfig = JSON.parse(workflow?.config);
@@ -44,7 +45,7 @@ function generateNodes(workflow: any): any[] {
 
     const nextNode = {
       id: node.id,
-      type: 'customNode',
+      type: node?.type == 'START' ? 'startNode' : 'customNode',
       position: savedPosition,
       data: data,
     };
diff --git a/src/renderer/components/Experiment/Workflows/CustomNode.tsx b/src/renderer/components/Experiment/Workflows/nodes/CustomNode.tsx
similarity index 100%
rename from src/renderer/components/Experiment/Workflows/CustomNode.tsx
rename to src/renderer/components/Experiment/Workflows/nodes/CustomNode.tsx
diff --git a/src/renderer/components/Experiment/Workflows/nodes/StartNode.tsx b/src/renderer/components/Experiment/Workflows/nodes/StartNode.tsx
new file mode 100644
index 00000000..baa7562e
--- /dev/null
+++ b/src/renderer/components/Experiment/Workflows/nodes/StartNode.tsx
@@ -0,0 +1,43 @@
+import { Typography } from '@mui/joy';
+import { BuiltInNode, Handle, useReactFlow } from '@xyflow/react';
+import { NodeProps, Position } from '@xyflow/system';
+import { XIcon } from 'lucide-react';
+
+export default function memo({
+  id,
+  data,
+  isConnectable,
+  targetPosition = Position.Top,
+  sourcePosition = Position.Bottom,
+}: NodeProps<BuiltInNode>) {
+  const { deleteElements } = useReactFlow();
+
+  const handleDelete = () => {
+    deleteElements({ nodes: [{ id }] });
+  };
+
+  return (
+    <div className="custom-node" style={{ width: '100%' }}>
+      <div
+        className="type-badge"
+        style={{
+          // backgroundColor: 'var(--joy-palette-success-400)',
+          width: '100%',
+          borderRadius: '3px',
+        }}
+      >
+        <Typography
+          level="body-xs"
+          sx={{ color: 'var(--joy-palette-primary-plainColor)' }}
+        >
+          START
+        </Typography>
+      </div>
+      <Handle
+        type="source"
+        position={sourcePosition}
+        isConnectable={isConnectable}
+      />
+    </div>
+  );
+}
diff --git a/src/renderer/styles.css b/src/renderer/styles.css
index 24c99bd1..5a6180c8 100644
--- a/src/renderer/styles.css
+++ b/src/renderer/styles.css
@@ -253,6 +253,18 @@ code if we want */
   border: var(--xy-node-border, var(--xy-node-border-default));
 }
 
+.react-flow__node-startNode {
+  border: 2px solid var(--joy-palette-primary-plainColor);
+  background-color: var(--joy-palette-primary-softBg);
+  border-radius: 20px;
+  width: 80px;
+  height: 30px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+
 
 
 .custom-node-delete-button {
-- 
GitLab