Merge pull request #24 from drawdb-io/change-tablewidth
Add a setting to resize table width (#21)
This commit is contained in:
commit
d35461dbd3
@ -41,7 +41,7 @@ export default function Relationship({ data }) {
|
|||||||
cardinalityStartX = point1.x;
|
cardinalityStartX = point1.x;
|
||||||
cardinalityStartY = point1.y;
|
cardinalityStartY = point1.y;
|
||||||
const point2 = pathRef.current.getPointAtLength(
|
const point2 = pathRef.current.getPointAtLength(
|
||||||
pathLength - cardinalityOffset
|
pathLength - cardinalityOffset,
|
||||||
);
|
);
|
||||||
cardinalityEndX = point2.x;
|
cardinalityEndX = point2.x;
|
||||||
cardinalityEndY = point2.y;
|
cardinalityEndY = point2.y;
|
||||||
@ -51,17 +51,20 @@ export default function Relationship({ data }) {
|
|||||||
<g className="select-none group">
|
<g className="select-none group">
|
||||||
<path
|
<path
|
||||||
ref={pathRef}
|
ref={pathRef}
|
||||||
d={calcPath({
|
d={calcPath(
|
||||||
...data,
|
{
|
||||||
startTable: {
|
...data,
|
||||||
x: tables[data.startTableId].x,
|
startTable: {
|
||||||
y: tables[data.startTableId].y,
|
x: tables[data.startTableId].x,
|
||||||
|
y: tables[data.startTableId].y,
|
||||||
|
},
|
||||||
|
endTable: {
|
||||||
|
x: tables[data.endTableId].x,
|
||||||
|
y: tables[data.endTableId].y,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
endTable: {
|
settings.tableWidth,
|
||||||
x: tables[data.endTableId].x,
|
)}
|
||||||
y: tables[data.endTableId].y,
|
|
||||||
},
|
|
||||||
})}
|
|
||||||
stroke="gray"
|
stroke="gray"
|
||||||
className="group-hover:stroke-sky-700"
|
className="group-hover:stroke-sky-700"
|
||||||
fill="none"
|
fill="none"
|
||||||
|
@ -39,7 +39,7 @@ export default function Table(props) {
|
|||||||
key={tableData.id}
|
key={tableData.id}
|
||||||
x={tableData.x}
|
x={tableData.x}
|
||||||
y={tableData.y}
|
y={tableData.y}
|
||||||
width={200}
|
width={settings.tableWidth}
|
||||||
height={height}
|
height={height}
|
||||||
className="group drop-shadow-lg rounded-md cursor-move"
|
className="group drop-shadow-lg rounded-md cursor-move"
|
||||||
onMouseDown={onMouseDown}
|
onMouseDown={onMouseDown}
|
||||||
|
@ -187,7 +187,7 @@ export default function ControlPanel({
|
|||||||
return { ...t, fields: temp.map((t, i) => ({ ...t, id: i })) };
|
return { ...t, fields: temp.map((t, i) => ({ ...t, id: i })) };
|
||||||
}
|
}
|
||||||
return t;
|
return t;
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
} else if (a.component === "field_add") {
|
} else if (a.component === "field_add") {
|
||||||
updateTable(a.tid, {
|
updateTable(a.tid, {
|
||||||
@ -209,7 +209,7 @@ export default function ControlPanel({
|
|||||||
...index,
|
...index,
|
||||||
...a.undo,
|
...a.undo,
|
||||||
}
|
}
|
||||||
: index
|
: index,
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
} else if (a.component === "index_delete") {
|
} else if (a.component === "index_delete") {
|
||||||
@ -224,27 +224,27 @@ export default function ControlPanel({
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
return table;
|
return table;
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
} else if (a.component === "self") {
|
} else if (a.component === "self") {
|
||||||
updateTable(a.tid, a.undo);
|
updateTable(a.tid, a.undo);
|
||||||
}
|
}
|
||||||
} else if (a.element === ObjectType.RELATIONSHIP) {
|
} else if (a.element === ObjectType.RELATIONSHIP) {
|
||||||
setRelationships((prev) =>
|
setRelationships((prev) =>
|
||||||
prev.map((e, idx) => (idx === a.rid ? { ...e, ...a.undo } : e))
|
prev.map((e, idx) => (idx === a.rid ? { ...e, ...a.undo } : e)),
|
||||||
);
|
);
|
||||||
} else if (a.element === ObjectType.TYPE) {
|
} else if (a.element === ObjectType.TYPE) {
|
||||||
if (a.component === "field_add") {
|
if (a.component === "field_add") {
|
||||||
updateType(a.tid, {
|
updateType(a.tid, {
|
||||||
fields: types[a.tid].fields.filter(
|
fields: types[a.tid].fields.filter(
|
||||||
(e, i) => i !== types[a.tid].fields.length - 1
|
(e, i) => i !== types[a.tid].fields.length - 1,
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (a.component === "field") {
|
if (a.component === "field") {
|
||||||
updateType(a.tid, {
|
updateType(a.tid, {
|
||||||
fields: types[a.tid].fields.map((e, i) =>
|
fields: types[a.tid].fields.map((e, i) =>
|
||||||
i === a.fid ? { ...e, ...a.undo } : e
|
i === a.fid ? { ...e, ...a.undo } : e,
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
} else if (a.component === "field_delete") {
|
} else if (a.component === "field_delete") {
|
||||||
@ -256,7 +256,7 @@ export default function ControlPanel({
|
|||||||
return { ...t, fields: temp };
|
return { ...t, fields: temp };
|
||||||
}
|
}
|
||||||
return t;
|
return t;
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
} else if (a.component === "self") {
|
} else if (a.component === "self") {
|
||||||
updateType(a.tid, a.undo);
|
updateType(a.tid, a.undo);
|
||||||
@ -388,7 +388,7 @@ export default function ControlPanel({
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
return table;
|
return table;
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
} else if (a.component === "index") {
|
} else if (a.component === "index") {
|
||||||
updateTable(a.tid, {
|
updateTable(a.tid, {
|
||||||
@ -398,7 +398,7 @@ export default function ControlPanel({
|
|||||||
...index,
|
...index,
|
||||||
...a.redo,
|
...a.redo,
|
||||||
}
|
}
|
||||||
: index
|
: index,
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
} else if (a.component === "index_delete") {
|
} else if (a.component === "index_delete") {
|
||||||
@ -412,7 +412,7 @@ export default function ControlPanel({
|
|||||||
}
|
}
|
||||||
} else if (a.element === ObjectType.RELATIONSHIP) {
|
} else if (a.element === ObjectType.RELATIONSHIP) {
|
||||||
setRelationships((prev) =>
|
setRelationships((prev) =>
|
||||||
prev.map((e, idx) => (idx === a.rid ? { ...e, ...a.redo } : e))
|
prev.map((e, idx) => (idx === a.rid ? { ...e, ...a.redo } : e)),
|
||||||
);
|
);
|
||||||
} else if (a.element === ObjectType.TYPE) {
|
} else if (a.element === ObjectType.TYPE) {
|
||||||
if (a.component === "field_add") {
|
if (a.component === "field_add") {
|
||||||
@ -428,7 +428,7 @@ export default function ControlPanel({
|
|||||||
} else if (a.component === "field") {
|
} else if (a.component === "field") {
|
||||||
updateType(a.tid, {
|
updateType(a.tid, {
|
||||||
fields: types[a.tid].fields.map((e, i) =>
|
fields: types[a.tid].fields.map((e, i) =>
|
||||||
i === a.fid ? { ...e, ...a.redo } : e
|
i === a.fid ? { ...e, ...a.redo } : e,
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
} else if (a.component === "field_delete") {
|
} else if (a.component === "field_delete") {
|
||||||
@ -466,7 +466,7 @@ export default function ControlPanel({
|
|||||||
showFieldSummary: !prev.showFieldSummary,
|
showFieldSummary: !prev.showFieldSummary,
|
||||||
}));
|
}));
|
||||||
Toast.success(
|
Toast.success(
|
||||||
`Field summary is ${settings.showFieldSummary ? "off" : "on"}.`
|
`Field summary is ${settings.showFieldSummary ? "off" : "on"}.`,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
const copyAsImage = () => {
|
const copyAsImage = () => {
|
||||||
@ -762,7 +762,7 @@ export default function ControlPanel({
|
|||||||
data: dataUrl,
|
data: dataUrl,
|
||||||
extension: "jpeg",
|
extension: "jpeg",
|
||||||
}));
|
}));
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
setModal(MODAL.IMG);
|
setModal(MODAL.IMG);
|
||||||
},
|
},
|
||||||
@ -780,7 +780,7 @@ export default function ControlPanel({
|
|||||||
title: title,
|
title: title,
|
||||||
},
|
},
|
||||||
null,
|
null,
|
||||||
2
|
2,
|
||||||
);
|
);
|
||||||
setExportData((prev) => ({
|
setExportData((prev) => ({
|
||||||
...prev,
|
...prev,
|
||||||
@ -799,7 +799,7 @@ export default function ControlPanel({
|
|||||||
data: dataUrl,
|
data: dataUrl,
|
||||||
extension: "svg",
|
extension: "svg",
|
||||||
}));
|
}));
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
setModal(MODAL.IMG);
|
setModal(MODAL.IMG);
|
||||||
},
|
},
|
||||||
@ -818,7 +818,7 @@ export default function ControlPanel({
|
|||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
canvas.offsetWidth,
|
canvas.offsetWidth,
|
||||||
canvas.offsetHeight
|
canvas.offsetHeight,
|
||||||
);
|
);
|
||||||
doc.save(`${exportData.filename}.pdf`);
|
doc.save(`${exportData.filename}.pdf`);
|
||||||
});
|
});
|
||||||
@ -838,7 +838,7 @@ export default function ControlPanel({
|
|||||||
types: types,
|
types: types,
|
||||||
},
|
},
|
||||||
null,
|
null,
|
||||||
2
|
2,
|
||||||
);
|
);
|
||||||
const blob = new Blob([result], {
|
const blob = new Blob([result], {
|
||||||
type: "text/plain;charset=utf-8",
|
type: "text/plain;charset=utf-8",
|
||||||
@ -1086,6 +1086,9 @@ export default function ControlPanel({
|
|||||||
return { ...prev, panning: !prev.panning };
|
return { ...prev, panning: !prev.panning };
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
"Table width": {
|
||||||
|
function: () => setModal(MODAL.TABLE_WIDTH),
|
||||||
|
},
|
||||||
"Flush storage": {
|
"Flush storage": {
|
||||||
function: async () => {
|
function: async () => {
|
||||||
db.delete()
|
db.delete()
|
||||||
@ -1389,7 +1392,7 @@ export default function ControlPanel({
|
|||||||
>
|
>
|
||||||
{Object.keys(e)[0]}
|
{Object.keys(e)[0]}
|
||||||
</Dropdown.Item>
|
</Dropdown.Item>
|
||||||
)
|
),
|
||||||
)}
|
)}
|
||||||
</Dropdown.Menu>
|
</Dropdown.Menu>
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ import New from "./New";
|
|||||||
import ImportDiagram from "./ImportDiagram";
|
import ImportDiagram from "./ImportDiagram";
|
||||||
import ImportSource from "./ImportSource";
|
import ImportSource from "./ImportSource";
|
||||||
import Editor from "@monaco-editor/react";
|
import Editor from "@monaco-editor/react";
|
||||||
|
import SetTableWidth from "./SetTableWidth";
|
||||||
|
|
||||||
export default function Modal({
|
export default function Modal({
|
||||||
modal,
|
modal,
|
||||||
@ -105,7 +106,7 @@ export default function Modal({
|
|||||||
ast = parser.astify(importSource.src, { database: "MySQL" });
|
ast = parser.astify(importSource.src, { database: "MySQL" });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
Toast.error(
|
Toast.error(
|
||||||
"Could not parse the sql file. Make sure there are no syntax errors."
|
"Could not parse the sql file. Make sure there are no syntax errors.",
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -135,7 +136,7 @@ export default function Modal({
|
|||||||
case MODAL.IMG:
|
case MODAL.IMG:
|
||||||
saveAs(
|
saveAs(
|
||||||
exportData.data,
|
exportData.data,
|
||||||
`${exportData.filename}.${exportData.extension}`
|
`${exportData.filename}.${exportData.extension}`,
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
case MODAL.CODE: {
|
case MODAL.CODE: {
|
||||||
@ -259,6 +260,8 @@ export default function Modal({
|
|||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
case MODAL.TABLE_WIDTH:
|
||||||
|
return <SetTableWidth />;
|
||||||
default:
|
default:
|
||||||
return <></>;
|
return <></>;
|
||||||
}
|
}
|
||||||
|
17
src/components/EditorHeader/Modal/SetTableWidth.jsx
Normal file
17
src/components/EditorHeader/Modal/SetTableWidth.jsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { InputNumber } from "@douyinfe/semi-ui";
|
||||||
|
import { useSettings } from "../../../hooks";
|
||||||
|
|
||||||
|
export default function SetTableWidth() {
|
||||||
|
const { settings, setSettings } = useSettings();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<InputNumber
|
||||||
|
className="w-full"
|
||||||
|
value={settings.tableWidth}
|
||||||
|
onChange={(c) => {
|
||||||
|
if (c < 180) return;
|
||||||
|
setSettings((prev) => ({ ...prev, tableWidth: c }));
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
import { createContext, useState } from "react";
|
import { createContext, useState } from "react";
|
||||||
|
import { tableWidth } from "../data/constants";
|
||||||
|
|
||||||
export const SettingsContext = createContext(null);
|
export const SettingsContext = createContext(null);
|
||||||
|
|
||||||
@ -11,6 +12,7 @@ export default function SettingsContextProvider({ children }) {
|
|||||||
autosave: true,
|
autosave: true,
|
||||||
panning: true,
|
panning: true,
|
||||||
showCardinality: true,
|
showCardinality: true,
|
||||||
|
tableWidth: tableWidth,
|
||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -110,6 +110,7 @@ export const MODAL = {
|
|||||||
SAVEAS: 6,
|
SAVEAS: 6,
|
||||||
NEW: 7,
|
NEW: 7,
|
||||||
IMPORT_SRC: 8,
|
IMPORT_SRC: 8,
|
||||||
|
TABLE_WIDTH: 9,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const STATUS = {
|
export const STATUS = {
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
import {
|
import { tableFieldHeight, tableHeaderHeight } from "../data/constants";
|
||||||
tableFieldHeight,
|
|
||||||
tableHeaderHeight,
|
|
||||||
tableWidth,
|
|
||||||
} from "../data/constants";
|
|
||||||
|
|
||||||
export function calcPath(r, zoom = 1) {
|
export function calcPath(r, tableWidth = 200, zoom = 1) {
|
||||||
const width = tableWidth * zoom;
|
const width = tableWidth * zoom;
|
||||||
let x1 = r.startTable.x;
|
let x1 = r.startTable.x;
|
||||||
let y1 =
|
let y1 =
|
||||||
|
@ -17,6 +17,8 @@ export const getModalTitle = (modal) => {
|
|||||||
return "Save as";
|
return "Save as";
|
||||||
case MODAL.NEW:
|
case MODAL.NEW:
|
||||||
return "Create new diagram";
|
return "Create new diagram";
|
||||||
|
case MODAL.TABLE_WIDTH:
|
||||||
|
return "Set the table width";
|
||||||
default:
|
default:
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user