Skip to content

Commit 4cfd91d

Browse files
committed
Merge branch 'fix-import-from-source'
2 parents 3c7c0ea + 2233108 commit 4cfd91d

File tree

9 files changed

+296
-208
lines changed

9 files changed

+296
-208
lines changed

package-lock.json

Lines changed: 10 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"jsonschema": "^1.4.1",
2828
"jspdf": "^2.5.1",
2929
"lexical": "^0.12.5",
30-
"node-sql-parser": "^4.17.0",
30+
"node-sql-parser": "^5.0.0",
3131
"react": "^18.2.0",
3232
"react-dom": "^18.2.0",
3333
"react-hotkeys-hook": "^4.4.1",

src/components/EditorHeader/Modal/ImportSource.jsx

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1-
import { Upload, Checkbox } from "@douyinfe/semi-ui";
1+
import { Upload, Checkbox, Banner } from "@douyinfe/semi-ui";
22
import { STATUS } from "../../../data/constants";
33

4-
export default function ImportSource({ importData, setImportData, setError }) {
4+
export default function ImportSource({
5+
importData,
6+
setImportData,
7+
error,
8+
setError,
9+
}) {
510
return (
611
<div>
712
<Upload
@@ -60,6 +65,29 @@ export default function ImportSource({ importData, setImportData, setError }) {
6065
>
6166
Overwrite existing diagram
6267
</Checkbox>
68+
<div className="mt-2">
69+
{error.type === STATUS.ERROR ? (
70+
<Banner
71+
type="danger"
72+
fullMode={false}
73+
description={<div>{error.message}</div>}
74+
/>
75+
) : error.type === STATUS.OK ? (
76+
<Banner
77+
type="info"
78+
fullMode={false}
79+
description={<div>{error.message}</div>}
80+
/>
81+
) : (
82+
error.type === STATUS.WARNING && (
83+
<Banner
84+
type="warning"
85+
fullMode={false}
86+
description={<div>{error.message}</div>}
87+
/>
88+
)
89+
)}
90+
</div>
6391
</div>
6492
</div>
6593
);

src/components/EditorHeader/Modal/Modal.jsx

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,16 +114,25 @@ export default function Modal({
114114
try {
115115
ast = parser.astify(importSource.src, { database: "MySQL" });
116116
} catch (err) {
117-
Toast.error(
118-
"Could not parse the sql file. Make sure there are no syntax errors.",
119-
);
117+
setError({
118+
type: STATUS.ERROR,
119+
message:
120+
err.name +
121+
" [Ln " +
122+
err.location.start.line +
123+
", Col " +
124+
err.location.start.column +
125+
"]: " +
126+
err.message,
127+
});
120128
return;
121129
}
122130

123131
const d = astToDiagram(ast);
124132
if (importSource.overwrite) {
125133
setTables(d.tables);
126134
setRelationships(d.relationships);
135+
setTransform((prev) => ({ ...prev, pan: { x: 0, y: 0 } }));
127136
setNotes([]);
128137
setAreas([]);
129138
setTypes([]);
@@ -133,6 +142,7 @@ export default function Modal({
133142
setTables((prev) => [...prev, ...d.tables]);
134143
setRelationships((prev) => [...prev, ...d.relationships]);
135144
}
145+
setModal(MODAL.NONE);
136146
};
137147

138148
const createNewDiagram = (id) => {
@@ -167,7 +177,6 @@ export default function Modal({
167177
return;
168178
case MODAL.IMPORT_SRC:
169179
parseSQLAndLoadDiagram();
170-
setModal(MODAL.NONE);
171180
return;
172181
case MODAL.OPEN:
173182
if (selectedDiagramId === 0) return;
@@ -207,6 +216,7 @@ export default function Modal({
207216
<ImportSource
208217
importData={importSource}
209218
setImportData={setImportSource}
219+
error={error}
210220
setError={setError}
211221
/>
212222
);

src/components/EditorSidePanel/TablesTab/FieldDetails.jsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ export default function FieldDetails({ data, tid, index }) {
8080
undo: editField,
8181
redo: { values: data.values },
8282
message: `Edit table field values to "${JSON.stringify(
83-
data.values
83+
data.values,
8484
)}"`,
8585
},
8686
]);
@@ -123,9 +123,11 @@ export default function FieldDetails({ data, tid, index }) {
123123
<div className="font-semibold">Precision</div>
124124
<Input
125125
className="my-2 w-full"
126-
placeholder="Set precision: (size, d)"
126+
placeholder="Set precision: size, d"
127127
validateStatus={
128-
/^\(\d+,\s*\d+\)$|^$/.test(data.size) ? "default" : "error"
128+
!data.size || /^\d+,\s*\d+$|^$/.test(data.size)
129+
? "default"
130+
: "error"
129131
}
130132
value={data.size}
131133
onChange={(value) => updateField(tid, index, { size: value })}

0 commit comments

Comments
 (0)