blob: 7a68f83d98d5b7f658badafc67b88b06cf2f0c12 [file] [log] [blame]
gio3fb133d2025-06-13 07:20:24 +00001import { useState, useEffect } from "react";
2import { useStateStore } from "@/lib/state";
3import { AppNode } from "@/lib/state";
4import { Icon } from "./icon";
5import { Input } from "./ui/input";
6
7export function Name({
8 node,
9 disabled,
10 editing,
11}: {
12 node: AppNode;
13 disabled?: boolean;
14 editing?: boolean;
15}): React.ReactNode {
16 const { id, data } = node;
17 const store = useStateStore();
18 const [isEditing, setIsEditing] = useState(false);
19 useEffect(() => {
20 if (data.label === "") {
21 setIsEditing(true);
22 }
23 }, [data.label, disabled]);
24 return (
25 <div className="w-full flex flex-row gap-1 items-center">
26 <Icon type={node.type} />
27 {isEditing || editing ? (
28 <Input
29 placeholder="Name"
30 className="w-full"
31 value={data.label}
32 onChange={(e) => store.updateNodeData(id, { label: e.target.value })}
33 onBlur={() => {
34 if (data.label !== "") {
35 setIsEditing(false);
36 }
37 }}
38 disabled={disabled}
39 />
40 ) : (
41 <h3
42 className="w-full text-lg font-bold cursor-text select-none hover:outline-solid hover:outline-2 hover:outline-gray-200"
43 onClick={() => setIsEditing(true)}
44 >
45 {data.label}
46 </h3>
47 )}
48 </div>
49 );
50}