import React, { useContext, useState } from "react"; import { LayoutContext, NoteContext, UndoRedoContext, TabContext, SelectContext, } from "../pages/Editor"; import { Action, ObjectType, noteThemes, Tab } from "../data/data"; import { Input, Button, Popover, Toast } from "@douyinfe/semi-ui"; import { IconEdit, IconDeleteStroked, IconCheckboxTick, } from "@douyinfe/semi-icons"; export default function Note(props) { const [editField, setEditField] = useState({}); const [hovered, setHovered] = useState(false); const [saved, setSaved] = useState(false); const w = 180; const r = 3; const fold = 24; const { updateNote, deleteNote } = useContext(NoteContext); const { setUndoStack, setRedoStack } = useContext(UndoRedoContext); const { layout } = useContext(LayoutContext); const { tab, setTab } = useContext(TabContext); const { selectedElement, setSelectedElement } = useContext(SelectContext); const handleChange = (e) => { const textarea = document.getElementById(`note_${props.data.id}`); textarea.style.height = "0"; textarea.style.height = textarea.scrollHeight + "px"; const newHeight = textarea.scrollHeight + 41; updateNote(props.data.id, { content: e.target.value, height: newHeight }); }; return ( setHovered(true)} onMouseLeave={() => setHovered(false)} >
{(hovered || (selectedElement.element === ObjectType.NOTE && selectedElement.id === props.data.id && selectedElement.openDialogue && !layout.sidebar)) && (
{ setSelectedElement((prev) => ({ ...prev, openDialogue: false, })); }} stopPropagation content={
Edit note
updateNote(props.data.id, { title: value }) } onFocus={(e) => setEditField({ title: e.target.value })} onBlur={(e) => { setSaved(true); if (e.target.value === editField.title) return; setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.NOTE, nid: props.data.id, undo: editField, redo: { title: e.target.value }, message: `Edit note title to "${e.target.name}"`, }, ]); setRedoStack([]); }} />
Theme

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