import { useContext, useState } from "react"; import { StateContext } from "../pages/Editor"; import { Action, ObjectType, noteThemes, Tab, State } from "../data/data"; 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"; 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 { setState } = useContext(StateContext); 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 + 41; updateNote(data.id, { content: e.target.value, height: newHeight }); }; return ( setHovered(true)} onMouseLeave={() => setHovered(false)} >
{(hovered || (selectedElement.element === ObjectType.NOTE && selectedElement.id === data.id && selectedElement.open && !layout.sidebar)) && (
{ if (selectedElement.editFromToolbar) { setSelectedElement((prev) => ({ ...prev, editFromToolbar: false, })); return; } setSelectedElement((prev) => ({ ...prev, open: false, })); setState(State.SAVING); }} stopPropagation content={
Edit note
updateNote(data.id, { title: value }) } onFocus={(e) => setEditField({ title: e.target.value })} onBlur={(e) => { if (e.target.value === editField.title) return; setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.NOTE, nid: data.id, undo: editField, redo: { title: e.target.value }, message: `Edit note title to "${e.target.value}"`, }, ]); setRedoStack([]); }} />
Theme

{noteThemes.map((c) => ( ))}
} position="rightTop" showArrow >
} trigger="custom" position="rightTop" showArrow >
)}
); }