diff --git a/src/components/ControlPanel.jsx b/src/components/ControlPanel.jsx index ef12b8e..5c79476 100644 --- a/src/components/ControlPanel.jsx +++ b/src/components/ControlPanel.jsx @@ -207,6 +207,27 @@ export default function ControlPanel({ if (a.component === "field") { updateField(a.tid, a.fid, a.undo); } else if (a.component === "field_delete") { + setRelationships((prev) => { + return prev.map((e) => { + if (e.startTableId === a.tid && e.startFieldId > a.data.id) { + return { + ...e, + startFieldId: e.startFieldId + 1, + startX: tables[a.tid].x + 15, + startY: tables[a.tid].y + (e.startFieldId + 1) * 36 + 50 + 19, + }; + } + if (e.endTableId === a.tid && e.endFieldId > a.data.id) { + return { + ...e, + endFieldId: e.endFieldId + 1, + endX: tables[a.tid].x + 15, + endY: tables[a.tid].y + (e.endFieldId + 1) * 36 + 50 + 19, + }; + } + return e; + }); + }); setTables((prev) => prev.map((t) => { if (t.id === a.tid) { @@ -358,6 +379,27 @@ export default function ControlPanel({ if (a.component === "field") { updateField(a.tid, a.fid, a.redo); } else if (a.component === "field_delete") { + setRelationships((prev) => { + return prev.map((e) => { + if (e.startTableId === a.tid && e.startFieldId > a.data.id) { + return { + ...e, + startFieldId: e.startFieldId - 1, + startX: tables[a.tid].x + 15, + startY: tables[a.tid].y + (e.startFieldId - 1) * 36 + 50 + 19, + }; + } + if (e.endTableId === a.tid && e.endFieldId > a.data.id) { + return { + ...e, + endFieldId: e.endFieldId - 1, + endX: tables[a.tid].x + 15, + endY: tables[a.tid].y + (e.endFieldId - 1) * 36 + 50 + 19, + }; + } + return e; + }); + }); updateTable(a.tid, { fields: tables[a.tid].fields .filter((field) => field.id !== a.data.id) @@ -1391,7 +1433,7 @@ export default function ControlPanel({ case MODAL.OPEN: return (
- {diagrams.length === 0 ? ( + {diagrams?.length === 0 ? ( ({ ...e, id: i })) ); + setRelationships((prev) => { + return prev.map((e) => { + if ( + e.startTableId === t.id && + e.startFieldId > f.id + ) { + return { + ...e, + startFieldId: e.startFieldId - 1, + startX: t.x + 15, + startY: + t.y + + (e.startFieldId - 1) * 36 + + 50 + + 19, + }; + } + if ( + e.endTableId === t.id && + e.endFieldId > f.id + ) { + return { + ...e, + endFieldId: e.endFieldId - 1, + endX: t.x + 15, + endY: + t.y + + (e.endFieldId - 1) * 36 + + 50 + + 19, + }; + } + return e; + }); + }); updateTable(i, { fields: t.fields .filter((field) => field.id !== j) diff --git a/src/components/table.jsx b/src/components/table.jsx index f6d90f2..b21e95a 100644 --- a/src/components/table.jsx +++ b/src/components/table.jsx @@ -803,23 +803,45 @@ export default function Table(props) { }, ]); setRedoStack([]); - setRelationships((prev) => - prev - .filter( - (e) => - !( - (e.startTableId === props.tableData.id && - e.startFieldId === j) || - (e.endTableId === props.tableData.id && - e.endFieldId === j) - ) - ) - .map((e, i) => ({ ...e, id: i })) - ); + setRelationships((prev) => { + return prev.map((e) => { + if ( + e.startTableId === props.tableData.id && + e.startFieldId > f.id + ) { + return { + ...e, + startFieldId: e.startFieldId - 1, + startX: props.tableData.x + 15, + startY: + props.tableData.y + + (e.startFieldId - 1) * 36 + + 50 + + 19, + }; + } + if ( + e.endTableId === props.tableData.id && + e.endFieldId > f.id + ) { + return { + ...e, + endFieldId: e.endFieldId - 1, + endX: props.tableData.x + 15, + endY: + props.tableData.y + + (e.endFieldId - 1) * 36 + + 50 + + 19, + }; + } + return e; + }); + }); updateTable(props.tableData.id, { fields: props.tableData.fields .filter((field) => field.id !== j) - .map((e, i) => ({ ...e, id: i })), + .map((e, k) => ({ ...e, id: k })), }); }} > @@ -1285,10 +1307,44 @@ export default function Table(props) { ) .map((e, i) => ({ ...e, id: i })) ); + setRelationships((prev) => { + return prev.map((e) => { + if ( + e.startTableId === props.tableData.id && + e.startFieldId > fieldData.id + ) { + return { + ...e, + startFieldId: e.startFieldId - 1, + startX: props.tableData.x + 15, + startY: + props.tableData.y + + (e.startFieldId - 1) * 36 + + 50 + + 19, + }; + } + if ( + e.endTableId === props.tableData.id && + e.endFieldId > fieldData.id + ) { + return { + ...e, + endFieldId: e.endFieldId - 1, + endX: props.tableData.x + 15, + endY: + props.tableData.y + (e.endFieldId - 1) * 36 + 50 + 19, + }; + } + return e; + }); + }); updateTable(props.tableData.id, { fields: props.tableData.fields .filter((e) => e.id !== fieldData.id) - .map((t, i) => ({ ...t, id: i })), + .map((t, i) => { + return { ...t, id: i }; + }), }); }} onCancel={() => {}}