Add error checking for enums
This commit is contained in:
parent
d48ccfff4b
commit
d7025e1ff1
@ -18,6 +18,7 @@ export default function EnumDetails({ data, i }) {
|
|||||||
<Input
|
<Input
|
||||||
value={data.name}
|
value={data.name}
|
||||||
placeholder={t("name")}
|
placeholder={t("name")}
|
||||||
|
validateStatus={data.name.trim() === "" ? "error" : "default"}
|
||||||
onChange={(value) => updateEnum(i, { name: value })}
|
onChange={(value) => updateEnum(i, { name: value })}
|
||||||
onFocus={(e) => setEditField({ name: e.target.value })}
|
onFocus={(e) => setEditField({ name: e.target.value })}
|
||||||
onBlur={(e) => {
|
onBlur={(e) => {
|
||||||
@ -46,6 +47,7 @@ export default function EnumDetails({ data, i }) {
|
|||||||
addOnBlur
|
addOnBlur
|
||||||
className="my-2"
|
className="my-2"
|
||||||
placeholder={t("values")}
|
placeholder={t("values")}
|
||||||
|
validateStatus={data.values.length === 0 ? "error" : "default"}
|
||||||
onChange={(v) => updateEnum(i, { values: v })}
|
onChange={(v) => updateEnum(i, { values: v })}
|
||||||
onFocus={() => setEditField({ values: data.values })}
|
onFocus={() => setEditField({ values: data.values })}
|
||||||
onBlur={() => {
|
onBlur={() => {
|
||||||
|
@ -2,13 +2,14 @@ import { useState, useEffect } from "react";
|
|||||||
import { Collapse, Badge } from "@douyinfe/semi-ui";
|
import { Collapse, Badge } from "@douyinfe/semi-ui";
|
||||||
import { arrayIsEqual } from "../../utils/utils";
|
import { arrayIsEqual } from "../../utils/utils";
|
||||||
import { getIssues } from "../../utils/issues";
|
import { getIssues } from "../../utils/issues";
|
||||||
import { useSettings, useTables, useTypes } from "../../hooks";
|
import { useEnums, useSettings, useTables, useTypes } from "../../hooks";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
export default function Issues() {
|
export default function Issues() {
|
||||||
const { types } = useTypes();
|
const { types } = useTypes();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { settings } = useSettings();
|
const { settings } = useSettings();
|
||||||
|
const { enums } = useEnums();
|
||||||
const { tables, relationships, database } = useTables();
|
const { tables, relationships, database } = useTables();
|
||||||
const [issues, setIssues] = useState([]);
|
const [issues, setIssues] = useState([]);
|
||||||
|
|
||||||
@ -19,6 +20,7 @@ export default function Issues() {
|
|||||||
relationships: relationships,
|
relationships: relationships,
|
||||||
types: types,
|
types: types,
|
||||||
database: database,
|
database: database,
|
||||||
|
enums: enums,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!arrayIsEqual(newIssues, issues)) {
|
if (!arrayIsEqual(newIssues, issues)) {
|
||||||
@ -27,7 +29,7 @@ export default function Issues() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
findIssues();
|
findIssues();
|
||||||
}, [tables, relationships, issues, types, database]);
|
}, [tables, relationships, issues, types, database, enums]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Collapse keepDOM lazyRender style={{ width: "100%" }}>
|
<Collapse keepDOM lazyRender style={{ width: "100%" }}>
|
||||||
|
@ -220,6 +220,9 @@ const en = {
|
|||||||
add_enum: "Add enum",
|
add_enum: "Add enum",
|
||||||
edit_enum: "{{extra}} Edit enum {{enumName}}",
|
edit_enum: "{{extra}} Edit enum {{enumName}}",
|
||||||
delete_enum: "Delete enum",
|
delete_enum: "Delete enum",
|
||||||
|
enum_w_no_name: "Found enum with no name",
|
||||||
|
enum_w_no_values: "Found enum '{{enumName}}' with no values",
|
||||||
|
duplicate_enums: "Duplicate enums with the name '{{enumName}}'",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ function checkDefault(field, database) {
|
|||||||
|
|
||||||
if (!field.notNull && field.default.toLowerCase() === "null") return true;
|
if (!field.notNull && field.default.toLowerCase() === "null") return true;
|
||||||
|
|
||||||
if(!dbToTypes[database][field.type].checkDefault) return true;
|
if (!dbToTypes[database][field.type].checkDefault) return true;
|
||||||
|
|
||||||
return dbToTypes[database][field.type].checkDefault(field);
|
return dbToTypes[database][field.type].checkDefault(field);
|
||||||
}
|
}
|
||||||
@ -169,6 +169,24 @@ export function getIssues(diagram) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const duplicateEnumNames = {};
|
||||||
|
diagram.enums.forEach((e) => {
|
||||||
|
if (e.name === "") {
|
||||||
|
issues.push(i18n.t("enum_w_no_name"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (duplicateEnumNames[e.name]) {
|
||||||
|
issues.push(i18n.t("duplicate_enums", { enumName: e.name }));
|
||||||
|
} else {
|
||||||
|
duplicateEnumNames[e.name] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.values.length === 0) {
|
||||||
|
issues.push(i18n.t("enum_w_no_values", { enumName: e.name }));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const duplicateFKName = {};
|
const duplicateFKName = {};
|
||||||
diagram.relationships.forEach((r) => {
|
diagram.relationships.forEach((r) => {
|
||||||
if (duplicateFKName[r.name]) {
|
if (duplicateFKName[r.name]) {
|
||||||
|
Loading…
Reference in New Issue
Block a user