import { useState } from "react"; import { Action, ObjectType, noteThemes, Tab, State } from "../data/constants"; import { Input, Button, Popover, Toast } from "@douyinfe/semi-ui"; import { IconEdit, IconDeleteStroked, IconCheckboxTick, } from "@douyinfe/semi-icons"; import useLayout from "../hooks/useLayout"; import useUndoRedo from "../hooks/useUndoRedo"; import useSelect from "../hooks/useSelect"; import useNotes from "../hooks/useNotes"; import useSaveState from "../hooks/useSaveState"; export default function Note({ data, onMouseDown }) { const w = 180; const r = 3; const fold = 24; const [editField, setEditField] = useState({}); const [hovered, setHovered] = useState(false); const { layout } = useLayout(); const { setSaveState } = useSaveState(); const { updateNote, deleteNote } = useNotes(); const { setUndoStack, setRedoStack } = useUndoRedo(); const { selectedElement, setSelectedElement } = useSelect(); const handleChange = (e) => { const textarea = document.getElementById(`note_${data.id}`); textarea.style.height = "0"; textarea.style.height = textarea.scrollHeight + "px"; const newHeight = textarea.scrollHeight + 42; updateNote(data.id, { content: e.target.value, height: newHeight }); }; const handleBlur = (e) => { if (e.target.value === editField.content) return; const textarea = document.getElementById(`note_${data.id}`); textarea.style.height = "0"; textarea.style.height = textarea.scrollHeight + "px"; const newHeight = textarea.scrollHeight + 16 + 20 + 4; setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.NOTE, nid: data.id, undo: editField, redo: { content: e.target.value, height: newHeight }, message: `Edit note content to "${e.target.value}"`, }, ]); setRedoStack([]); }; const edit = () => { if (layout.sidebar) { setSelectedElement((prev) => ({ ...prev, currentTab: Tab.NOTES, })); if (selectedElement.currentTab !== Tab.NOTES) return; document .getElementById(`scroll_note_${data.id}`) .scrollIntoView({ behavior: "smooth" }); } else { setSelectedElement((prev) => ({ ...prev, element: ObjectType.NOTE, id: data.id, open: true, })); } }; return ( setHovered(true)} onMouseLeave={() => setHovered(false)} >