import { React, useContext, useState } from "react"; import { Button, Popover, Input, Toast } from "@douyinfe/semi-ui"; import { IconEdit, IconCheckboxTick, IconDeleteStroked, } from "@douyinfe/semi-icons"; import { Tab, Action, ObjectType, tableThemes, defaultTableTheme, } from "../data/data"; import { AreaContext, LayoutContext, SelectContext, SettingsContext, TabContext, UndoRedoContext, } from "../pages/Editor"; export default function Area(props) { const [hovered, setHovered] = useState(false); const [saved, setSaved] = useState(false); const [editField, setEditField] = useState({}); const { layout } = useContext(LayoutContext); const { settings } = useContext(SettingsContext); const { tab, setTab } = useContext(TabContext); const { updateArea, deleteArea } = useContext(AreaContext); const { setUndoStack, setRedoStack } = useContext(UndoRedoContext); const { selectedElement, setSelectedElement } = useContext(SelectContext); const handleMouseDown = (e, dir) => { props.setResize({ id: props.areaData.id, dir: dir }); props.setInitCoords({ x: props.areaData.x, y: props.areaData.y, width: props.areaData.width, height: props.areaData.height, mouseX: e.clientX / props.zoom, mouseY: e.clientY / props.zoom, }); }; return ( setHovered(true)} onMouseLeave={() => { setHovered(false); setSaved(false); }} > 0 ? props.areaData.width : 0} height={props.areaData.height > 0 ? props.areaData.height : 0} onMouseDown={props.onMouseDown} >
{props.areaData.name}
{(hovered || (selectedElement.element === ObjectType.AREA && selectedElement.id === props.areaData.id && selectedElement.openDialogue && !layout.sidebar)) && (
{ setSelectedElement((prev) => ({ ...prev, openDialogue: false, })); }} stopPropagation content={
Edit subject area
updateArea(props.areaData.id, { name: value }) } onFocus={(e) => setEditField({ name: e.target.value })} onBlur={(e) => { setSaved(true); if (e.target.value === editField.name) return; setUndoStack((prev) => [ ...prev, { action: Action.EDIT, element: ObjectType.AREA, aid: props.areaData.id, undo: editField, redo: { name: e.target.value }, message: `Edit area name to ${e.target.value}`, }, ]); setRedoStack([]); }} />
Theme

{tableThemes .slice(0, Math.ceil(tableThemes.length / 2)) .map((c) => ( ))}
{tableThemes .slice(Math.ceil(tableThemes.length / 2)) .map((c) => ( ))}
} position="rightTop" showArrow >
} trigger="custom" position="rightTop" showArrow >
)} {hovered && ( <> handleMouseDown(e, "tl")} /> handleMouseDown(e, "tr")} /> handleMouseDown(e, "bl")} /> handleMouseDown(e, "br")} /> )} ); }