diff --git a/src/components/canvas.jsx b/src/components/canvas.jsx index d72e842..207b6d7 100644 --- a/src/components/canvas.jsx +++ b/src/components/canvas.jsx @@ -1,11 +1,13 @@ -import React, { useRef, useState } from "react"; +import React, { useContext, useRef, useState } from "react"; import { useDrop } from "react-dnd"; import Table from "./table"; import { defaultTableTheme, Cardinality, Constraint } from "../data/data"; import Area from "./area"; import Relationship from "./relationship"; +import { TableContext } from "../pages/editor"; export default function Canvas(props) { + const { tables, setTables } = useContext(TableContext); const ObjectType = { NONE: 0, TABLE: 1, @@ -51,7 +53,7 @@ export default function Canvas(props) { const handleMouseDownRect = (e, id, type) => { const { clientX, clientY } = e; if (type === ObjectType.TABLE) { - const table = props.tables.find((t) => t.id === id); + const table = tables.find((t) => t.id === id); setOffset({ x: clientX - table.x, y: clientY - table.y, @@ -87,8 +89,8 @@ export default function Canvas(props) { const dy = e.clientY - panOffset.y; setPanOffset({ x: e.clientX, y: e.clientY }); - props.setTables( - props.tables.map((t) => ({ + setTables( + tables.map((t) => ({ ...t, x: t.x + dx, y: t.y + dy, @@ -113,7 +115,7 @@ export default function Canvas(props) { })) ); } else if (dragging[0] === ObjectType.TABLE && dragging[1] >= 0) { - const updatedTables = props.tables.map((t) => { + const updatedTables = tables.map((t) => { if (t.id === dragging[1]) { const updatedTable = { ...t, @@ -124,20 +126,19 @@ export default function Canvas(props) { } return t; }); - props.setTables(updatedTables); + setTables(updatedTables); const updatedRelationShips = props.relationships.map((r) => { if (r.startTableId === dragging[1]) { return { ...r, - startX: props.tables[r.startTableId].x + 15, - startY: - props.tables[r.startTableId].y + r.startFieldId * 36 + 50 + 19, + startX: tables[r.startTableId].x + 15, + startY: tables[r.startTableId].y + r.startFieldId * 36 + 50 + 19, }; } else if (r.endTableId === dragging[1]) { return { ...r, - endX: props.tables[r.endTableId].x + 15, - endY: props.tables[r.endTableId].y + r.endFieldId * 36 + 50 + 19, + endX: tables[r.endTableId].x + 15, + endY: tables[r.endTableId].y + r.endFieldId * 36 + 50 + 19, }; } return r; @@ -246,10 +247,10 @@ export default function Canvas(props) { ...line, endTableId: onRect.tableId, endFieldId: onRect.field, - endX: props.tables[onRect.tableId].x + 15, - endY: props.tables[onRect.tableId].y + onRect.field * 36 + 50 + 19, - name: `${props.tables[line.startTableId].name}_to_${ - props.tables[onRect.tableId].name + endX: tables[onRect.tableId].x + 15, + endY: tables[onRect.tableId].y + onRect.field * 36 + 50 + 19, + name: `${tables[line.startTableId].name}_to_${ + tables[onRect.tableId].name }`, id: prev.length, }, @@ -265,8 +266,8 @@ export default function Canvas(props) { const x = offset.x - canvasRect.left - 100 * 0.5; const y = offset.y - canvasRect.top - 100 * 0.5; const newTable = { - id: props.tables.length, - name: `table_${props.tables.length}`, + id: tables.length, + name: `table_${tables.length}`, x: x, y: y, fields: [ @@ -286,7 +287,7 @@ export default function Canvas(props) { indices: [], color: defaultTableTheme, }; - props.setTables((prev) => [...prev, newTable]); + setTables((prev) => [...prev, newTable]); props.setCode((prev) => prev === "" ? `CREATE TABLE \`${newTable.name}\`;` @@ -297,7 +298,7 @@ export default function Canvas(props) { isOver: !!monitor.isOver(), }), }), - [props.tables] + [tables] ); return ( @@ -352,13 +353,10 @@ export default function Canvas(props) { setAreas={props.setAreas} > ))} - {props.tables.map((table, i) => ( + {tables.map((table, i) => ( { const [tab, setTab] = useState("1"); - const map = useRef(new Map()); + // const map = useRef(new Map()); + // const {tables, setTables} = useContext(TableContext); const tabList = [ { tab: "Tables", itemKey: "1" }, @@ -35,11 +37,10 @@ const EditorPanel = (props) => { { tab: "Editor", itemKey: "4" }, ]; const contentList = [ - , + , , , {