00Boobs00 commited on
Commit
43b3639
·
verified ·
1 Parent(s): 7dd2375

Upload components/PropertiesPanel.js with huggingface_hub

Browse files
Files changed (1) hide show
  1. components/PropertiesPanel.js +58 -0
components/PropertiesPanel.js ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { useEffect, useState } from 'react'
2
+ import { Settings, X } from 'lucide-react'
3
+
4
+ export default function PropertiesPanel({ selectedNode, setNodes }) {
5
+ const [nodeData, setNodeData] = useState(null)
6
+
7
+ useEffect(() => {
8
+ if (selectedNode) {
9
+ setNodeData(selectedNode)
10
+ } else {
11
+ setNodeData(null)
12
+ }
13
+ }, [selectedNode])
14
+
15
+ const handlePropertyChange = (key, value) => {
16
+ if (!nodeData) return
17
+ const updatedNode = { ...nodeData, properties: { ...nodeData.properties, [key]: value } }
18
+ setNodeData(updatedNode)
19
+ setNodes(prev => prev.map(node =>
20
+ node.id === nodeData.id ? updatedNode : node
21
+ ))
22
+ }
23
+
24
+ if (!nodeData) {
25
+ return (
26
+ <div className="w-80 bg-white border-l border-gray-200 p-6" data-tutorial-target="properties-panel">
27
+ <div className="text-center py-12">
28
+ <Settings className="w-12 h-12 text-gray-300 mx-auto mb-4" />
29
+ <h3 className="text-lg font-semibold text-gray-700 mb-2">No Node Selected</h3>
30
+ <p className="text-sm text-gray-500">Select a node to view its properties</p>
31
+ </div>
32
+ </div>
33
+ )
34
+ }
35
+
36
+ return (
37
+ <div className="w-80 bg-white border-l border-gray-200 p-6" data-tutorial-target="properties-panel">
38
+ <div className="flex items-center justify-between mb-6">
39
+ <h2 className="text-lg font-semibold text-gray-900">Node Properties</h2>
40
+ <button className="text-gray-400 hover:text-gray-600">
41
+ <X className="w-5 h-5" />
42
+ </button>
43
+ </div>
44
+
45
+ <div className="space-y-4">
46
+ <div>
47
+ <label className="block text-sm font-medium text-gray-700 mb-2">
48
+ Name
49
+ </label>
50
+ <input
51
+ type="text"
52
+ value={nodeData.properties.name}
53
+ onChange={(e) => handlePropertyChange('name', e.target.value)}
54
+ className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary-500 focus:border-transparent"
55
+ />
56
+ </div>
57
+
58
+ <div>