ruv commited on
Commit
fc854f5
·
verified ·
1 Parent(s): 00a8527

Update src/TurboNode.tsx

Browse files
Files changed (1) hide show
  1. src/TurboNode.tsx +42 -2
src/TurboNode.tsx CHANGED
@@ -1,4 +1,4 @@
1
- import React, { memo, ReactNode } from 'react';
2
  import { Handle, NodeProps, Position } from 'reactflow';
3
  import { FiCloud } from 'react-icons/fi';
4
 
@@ -6,9 +6,28 @@ export type TurboNodeData = {
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,6 +42,27 @@ export default memo(({ data }: NodeProps<TurboNodeData>) => {
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,4 +71,4 @@ export default memo(({ data }: NodeProps<TurboNodeData>) => {
31
  </div>
32
  </>
33
  );
34
- });
 
1
+ import React, { memo, ReactNode, useState } 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
+ 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
  <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
  </div>
72
  </>
73
  );
74
+ });