"use client"; import { useState, useCallback, useEffect } from "react"; import { Position, type NodeProps, type Node } from "@xyflow/react"; import type { Id } from "@/convex/_generated/dataModel"; import { useDebouncedCallback } from "@/hooks/use-debounced-callback"; import BaseNodeWrapper from "./base-node-wrapper"; import { useCanvasSync } from "@/components/canvas/canvas-sync-context"; import CanvasHandle from "@/components/canvas/canvas-handle"; type NoteNodeData = { content?: string; _status?: string; _statusMessage?: string; }; export type NoteNode = Node; export default function NoteNode({ id, data, selected }: NodeProps) { const { queueNodeDataUpdate } = useCanvasSync(); const [content, setContent] = useState(data.content ?? ""); const [isEditing, setIsEditing] = useState(false); useEffect(() => { if (!isEditing) { // eslint-disable-next-line react-hooks/set-state-in-effect setContent(data.content ?? ""); } }, [data.content, isEditing]); const saveContent = useDebouncedCallback( (newContent: string) => { void queueNodeDataUpdate({ nodeId: id as Id<"nodes">, data: { ...data, content: newContent, _status: undefined, _statusMessage: undefined, }, }); }, 500, ); const handleChange = useCallback( (e: React.ChangeEvent) => { const newContent = e.target.value; setContent(newContent); saveContent(newContent); }, [saveContent], ); return (
📌 Notiz
{isEditing ? (