Skip to content

Commit a4314ef

Browse files
committed
added the edit functionality in pipeline canvas
1 parent af1a052 commit a4314ef

4 files changed

Lines changed: 63 additions & 25 deletions

File tree

frontend/src/components/CanvasForPipelines/DestinationNode.tsx

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Handle, Position } from "reactflow"
22
import { Sheet, SheetClose, SheetContent, SheetFooter, SheetTrigger } from "@/components/ui/sheet";
3-
import React, { useEffect, useState } from "react";
3+
import { useEffect, useState } from "react";
44
import { useNodeValue } from "@/context/useNodeContext";
55
import { Button } from "../ui/button";
66
import usePipelineChangesLog from "@/context/usePipelineChangesLog";
@@ -36,14 +36,32 @@ export const DestinationNode = ({ data: Data }: any) => {
3636
const [isSheetOpen, setIsSheetOpen] = useState(false)
3737
const { setNodeValue } = useNodeValue()
3838
const { setChangesLog } = usePipelineChangesLog()
39-
const [data, setData] = useState<object>({})
4039
const [form, setForm] = useState<object>({})
4140

4241
const DestinationLabel = Data.supported_signals
43-
const handleSubmit = (e: React.FormEvent) => {
44-
e.preventDefault();
45-
setIsSheetOpen(false)
46-
};
42+
const handleSubmit = () => {
43+
// setNodeValue(prev => [
44+
// ...prev,
45+
// {
46+
// id: `${Data.label}-${Date.now()}`,
47+
// data: { ...data },
48+
// type: 'source',
49+
// position: { x: 0, y: 0 },
50+
// },
51+
// ]);
52+
setChangesLog(prev => [
53+
...prev,
54+
{ type: 'destination', name: Data.label, status: "added" },
55+
]);
56+
57+
const nodes = JSON.parse(localStorage.getItem("Nodes") || "[]");
58+
const updatedNodes = nodes.map((node: any) =>
59+
node.plugin_name === Data.plugin_name ? { ...node, config: data } : node
60+
);
61+
localStorage.setItem("Nodes", JSON.stringify(updatedNodes));
62+
63+
setIsSheetOpen(false);
64+
}
4765

4866
const getForm = async () => {
4967
const res = await TransporterService.getTransporterForm(Data.plugin_name)
@@ -59,6 +77,10 @@ export const DestinationNode = ({ data: Data }: any) => {
5977
setChangesLog(prev => [...prev, { type: 'destination', name: Data.label, status: "deleted" }])
6078
setIsSheetOpen(false)
6179
}
80+
const getSource = JSON.parse(localStorage.getItem("Nodes") || "[]").find((source: any) => source.plugin_name === Data.plugin_name);
81+
const sourceConfig = getSource?.config
82+
const [data, setData] = useState<object>(sourceConfig)
83+
6284
return (
6385
<Sheet open={isSheetOpen} onOpenChange={setIsSheetOpen}>
6486
<SheetTrigger asChild>
@@ -67,10 +89,10 @@ export const DestinationNode = ({ data: Data }: any) => {
6789
<div className="bg-gray-200 flex items-center rounded-md h-24 w-[8rem]">
6890
<Handle type="target" position={Position.Left} className="bg-green-600 w-0 h-0 rounded-full" />
6991
<div className="flex ml-5 flex-col items-center justify-center w-full">
70-
<div style={{ fontSize: "9px", lineHeight: "0.8rem" }} className="font-medium">{Data.name}</div>
92+
<div style={{ fontSize: "9px", lineHeight: "0.8rem" }} className="font-medium">{Data.name}</div>
7193
<div className="flex justify-between gap-2 mr-4 text-xs mt-2">
72-
{DestinationLabel.map((source:any, index:number) => (
73-
<p style={{fontSize:"8px"}} key={index}>
94+
{DestinationLabel.map((source: any, index: number) => (
95+
<p style={{ fontSize: "8px" }} key={index}>
7496
{source}
7597
</p>
7698
))}
@@ -92,8 +114,8 @@ export const DestinationNode = ({ data: Data }: any) => {
92114
<div className="flex flex-col gap-4 p-4">
93115
<div className="flex flex-col gap-3">
94116
<div className="flex items-center gap-4">
95-
<p className="text-lg bg-gray-500 items-center rounded-lg p-2 px-3 m-1 text-white">→|</p>
96-
<h2 className="text-xl font-bold">{Data.name}</h2>
117+
<p className="text-lg bg-gray-500 items-center rounded-lg p-2 px-3 m-1 text-white">→|</p>
118+
<h2 className="text-xl font-bold">{Data.name}</h2>
97119
</div>
98120
<p className="text-gray-500">Generate the defined log type at the rate desired <span className="text-blue-500 underline">Documentation</span></p>
99121

frontend/src/components/CanvasForPipelines/SourceNode.tsx

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,39 +34,55 @@ export const SourceNode = ({ data:Data }: any) => {
3434
const [isSidebarOpen, setIsSidebarOpen] = useState(false)
3535
const { setNodeValue } = useNodeValue()
3636
const { setChangesLog } = usePipelineChangesLog()
37-
const [data, setData] = useState<object>({})
3837
const [form, setForm] = useState<object>({})
3938
const SourceLabel = Data.supported_signals || ""
4039

4140
const handleDeleteNode = () => {
4241
setNodeValue(prev => prev.filter(node => node.id !== Data.label));
43-
setChangesLog(prev => [...prev, { type: 'source', name: Data.label, status: "deleted" }])
44-
setIsSidebarOpen(false)
42+
setChangesLog(prev => [...prev, { type: 'source', name: Data.label, status: "deleted" }]);
43+
44+
const nodes = JSON.parse(localStorage.getItem("Nodes") || "[]");
45+
const updatedNodes = nodes.filter((node: any) => node.plugin_name !== Data.plugin_name);
46+
localStorage.setItem("Nodes", JSON.stringify(updatedNodes));
47+
48+
setIsSidebarOpen(false);
4549
}
4650

4751
const getForm = async () => {
4852
const res = await TransporterService.getTransporterForm(Data.plugin_name)
4953
setForm(res)
5054
}
5155

56+
const getSource = JSON.parse(localStorage.getItem("Nodes") || "[]").find((source: any) => source.plugin_name === Data.plugin_name);
57+
const sourceConfig=getSource?.config
58+
const [data, setData] = useState<object>(sourceConfig)
59+
60+
5261
useEffect(()=>{
5362
getForm()
5463
},[])
5564

5665
const handleSubmit = () => {
57-
setNodeValue(prev => [
58-
...prev,
59-
{
60-
id: `${Data.label}-${Date.now()}`,
61-
data: { ...data },
62-
type: 'source',
63-
position: { x: 0, y: 0 },
64-
},
65-
]);
66+
// setNodeValue(prev => [
67+
// ...prev,
68+
// {
69+
// id: `${Data.label}-${Date.now()}`,
70+
// data: { ...data },
71+
// type: 'source',
72+
// position: { x: 0, y: 0 },
73+
// },
74+
// ]);
6675
setChangesLog(prev => [
6776
...prev,
6877
{ type: 'source', name: Data.label, status: "added" },
6978
]);
79+
80+
const nodes = JSON.parse(localStorage.getItem("Nodes") || "[]");
81+
const updatedNodes = nodes.map((node: any) =>
82+
node.plugin_name === Data.plugin_name ? { ...node, config: data } : node
83+
);
84+
localStorage.setItem("Nodes", JSON.stringify(updatedNodes));
85+
7086
setIsSidebarOpen(false);
7187
}
7288
return (
@@ -79,7 +95,7 @@ export const SourceNode = ({ data:Data }: any) => {
7995
<div className="bg-gray-200 rounded-tr-md rounded-br-md border-2 border-gray-300 p-4 h-[6rem] shadow-md w-[8rem] relative">
8096
<div style={{ fontSize: "9px", lineHeight: "0.8rem" }} className="font-medium">{Data.name}</div>
8197
<div className="flex justify-between gap-2 mr-2 text-xs mt-2">
82-
{SourceLabel.map((source:any, index:number) => (
98+
{SourceLabel && SourceLabel.map((source:any, index:number) => (
8399
<p style={{fontSize:"8px"}} key={index}>
84100
{source}
85101
</p>

frontend/src/components/Pipelines/DropdownOptions/ProcessorDropdownOptions.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ const ProcessorDropdownOptions = () => {
7373

7474
const handleGetProcessor = async () => {
7575
const res = await TransporterService.getTransporterService("processor")
76-
console.log(res)
7776
setProcessors(res)
7877
}
7978

frontend/src/context/useNodeContext.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ const { Nodes } = fetchLocalStorageData();
2222

2323
// Initialize nodes with fallback for missing position
2424
const initialNodes: Node<any, string | undefined>[] = [
25+
...Nodes,
2526
...Nodes.map((source: any, index: number) => ({
2627
id: source.component_id.toString(),
2728
type: source.component_role == "receiver" ? "source" : source.component_role == "exporter" ? "destination" : "processor",

0 commit comments

Comments
 (0)