diff --git a/src/components/EditorCanvas/Canvas.jsx b/src/components/EditorCanvas/Canvas.jsx index 57e1c4c..b5df796 100644 --- a/src/components/EditorCanvas/Canvas.jsx +++ b/src/components/EditorCanvas/Canvas.jsx @@ -104,6 +104,8 @@ export default function Canvas() { const elements = []; tables.forEach((table) => { + if (table.locked) return; + if ( isInsideRect( { @@ -319,6 +321,9 @@ export default function Canvas() { }, })); } else if (dragging.element === ObjectType.TABLE && dragging.id !== null) { + const table = tables.find((t) => t.id === dragging.id); + if (table.locked) return; + updateTable(dragging.id, { x: pointer.spaces.diagram.x + grabOffset.x, y: pointer.spaces.diagram.y + grabOffset.y, diff --git a/src/components/EditorCanvas/Table.jsx b/src/components/EditorCanvas/Table.jsx index 204a776..b016a7d 100644 --- a/src/components/EditorCanvas/Table.jsx +++ b/src/components/EditorCanvas/Table.jsx @@ -12,6 +12,8 @@ import { IconMinus, IconDeleteStroked, IconKeyStroked, + IconLock, + IconUnlock, } from "@douyinfe/semi-icons"; import { Popover, Tag, Button, SideSheet } from "@douyinfe/semi-ui"; import { useLayout, useSettings, useDiagram, useSelect } from "../../hooks"; @@ -32,7 +34,7 @@ export default function Table(props) { setLinkingLine, } = props; const { layout } = useLayout(); - const { deleteTable, deleteField } = useDiagram(); + const { deleteTable, deleteField, updateTable } = useDiagram(); const { settings } = useSettings(); const { t } = useTranslation(); const { selectedElement, setSelectedElement, bulkSelectedElements } = @@ -56,6 +58,9 @@ export default function Table(props) { ); }, [selectedElement, tableData, bulkSelectedElements]); + const lockUnlockTable = () => + updateTable(tableData.id, { locked: !tableData.locked }); + const openEditor = () => { if (!layout.sidebar) { setSelectedElement((prev) => ({ @@ -109,18 +114,26 @@ export default function Table(props) { settings.mode === "light" ? "bg-zinc-200" : "bg-zinc-900" }`} > -
+
{tableData.name}
-
+
+