blob: 7a68f83d98d5b7f658badafc67b88b06cf2f0c12 [file] [log] [blame]
import { useState, useEffect } from "react";
import { useStateStore } from "@/lib/state";
import { AppNode } from "@/lib/state";
import { Icon } from "./icon";
import { Input } from "./ui/input";
export function Name({
node,
disabled,
editing,
}: {
node: AppNode;
disabled?: boolean;
editing?: boolean;
}): React.ReactNode {
const { id, data } = node;
const store = useStateStore();
const [isEditing, setIsEditing] = useState(false);
useEffect(() => {
if (data.label === "") {
setIsEditing(true);
}
}, [data.label, disabled]);
return (
<div className="w-full flex flex-row gap-1 items-center">
<Icon type={node.type} />
{isEditing || editing ? (
<Input
placeholder="Name"
className="w-full"
value={data.label}
onChange={(e) => store.updateNodeData(id, { label: e.target.value })}
onBlur={() => {
if (data.label !== "") {
setIsEditing(false);
}
}}
disabled={disabled}
/>
) : (
<h3
className="w-full text-lg font-bold cursor-text select-none hover:outline-solid hover:outline-2 hover:outline-gray-200"
onClick={() => setIsEditing(true)}
>
{data.label}
</h3>
)}
</div>
);
}