Update src/TurboNode.tsx
Browse files- src/TurboNode.tsx +2 -42
src/TurboNode.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
import React, { memo, ReactNode
|
| 2 |
import { Handle, NodeProps, Position } from 'reactflow';
|
| 3 |
import { FiCloud } from 'react-icons/fi';
|
| 4 |
|
|
@@ -6,28 +6,9 @@ export type TurboNodeData = {
|
|
| 6 |
title: string;
|
| 7 |
icon?: ReactNode;
|
| 8 |
subline?: string;
|
| 9 |
-
inputFields: { id: string; label: string; value: string }[];
|
| 10 |
-
options: { id: string; label: string; checked: boolean }[];
|
| 11 |
};
|
| 12 |
|
| 13 |
export default memo(({ data }: NodeProps<TurboNodeData>) => {
|
| 14 |
-
const [formData, setFormData] = useState(data.inputFields);
|
| 15 |
-
const [selectedOptions, setSelectedOptions] = useState(data.options);
|
| 16 |
-
|
| 17 |
-
const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {
|
| 18 |
-
const { name, value } = event.target;
|
| 19 |
-
setFormData((prevFormData) =>
|
| 20 |
-
prevFormData.map((field) => (field.id === name ? { ...field, value } : field))
|
| 21 |
-
);
|
| 22 |
-
};
|
| 23 |
-
|
| 24 |
-
const handleOptionChange = (event: React.ChangeEvent<HTMLSelectElement>) => {
|
| 25 |
-
const { name, value } = event.target;
|
| 26 |
-
setSelectedOptions((prevOptions) =>
|
| 27 |
-
prevOptions.map((option) => (option.id === name ? { ...option, checked: option.label === value } : option))
|
| 28 |
-
);
|
| 29 |
-
};
|
| 30 |
-
|
| 31 |
return (
|
| 32 |
<>
|
| 33 |
<div className="cloud gradient">
|
|
@@ -42,27 +23,6 @@ export default memo(({ data }: NodeProps<TurboNodeData>) => {
|
|
| 42 |
<div>
|
| 43 |
<div className="title">{data.title}</div>
|
| 44 |
{data.subline && <div className="subline">{data.subline}</div>}
|
| 45 |
-
{formData.map((field) => (
|
| 46 |
-
<div key={field.id}>
|
| 47 |
-
<label htmlFor={field.id}>{field.label}</label>
|
| 48 |
-
<input
|
| 49 |
-
type="text"
|
| 50 |
-
id={field.id}
|
| 51 |
-
name={field.id}
|
| 52 |
-
value={field.value}
|
| 53 |
-
onChange={handleInputChange}
|
| 54 |
-
/>
|
| 55 |
-
</div>
|
| 56 |
-
))}
|
| 57 |
-
{selectedOptions.map((option) => (
|
| 58 |
-
<div key={option.id}>
|
| 59 |
-
<label htmlFor={option.id}>{option.label}</label>
|
| 60 |
-
<select id={option.id} name={option.id} value={option.checked ? option.label : ''} onChange={handleOptionChange}>
|
| 61 |
-
<option value="">Select an option</option>
|
| 62 |
-
<option value={option.label}>{option.label}</option>
|
| 63 |
-
</select>
|
| 64 |
-
</div>
|
| 65 |
-
))}
|
| 66 |
</div>
|
| 67 |
</div>
|
| 68 |
<Handle type="target" position={Position.Left} />
|
|
@@ -71,4 +31,4 @@ export default memo(({ data }: NodeProps<TurboNodeData>) => {
|
|
| 71 |
</div>
|
| 72 |
</>
|
| 73 |
);
|
| 74 |
-
});
|
|
|
|
| 1 |
+
import React, { memo, ReactNode } from 'react';
|
| 2 |
import { Handle, NodeProps, Position } from 'reactflow';
|
| 3 |
import { FiCloud } from 'react-icons/fi';
|
| 4 |
|
|
|
|
| 6 |
title: string;
|
| 7 |
icon?: ReactNode;
|
| 8 |
subline?: string;
|
|
|
|
|
|
|
| 9 |
};
|
| 10 |
|
| 11 |
export default memo(({ data }: NodeProps<TurboNodeData>) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
return (
|
| 13 |
<>
|
| 14 |
<div className="cloud gradient">
|
|
|
|
| 23 |
<div>
|
| 24 |
<div className="title">{data.title}</div>
|
| 25 |
{data.subline && <div className="subline">{data.subline}</div>}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
</div>
|
| 27 |
</div>
|
| 28 |
<Handle type="target" position={Position.Left} />
|
|
|
|
| 31 |
</div>
|
| 32 |
</>
|
| 33 |
);
|
| 34 |
+
});
|