Add error checking for enums

This commit is contained in:
1ilit 2024-07-04 02:10:24 +03:00
parent d48ccfff4b
commit d7025e1ff1
4 changed files with 28 additions and 3 deletions

View File

@ -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={() => {

View File

@ -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%" }}>

View File

@ -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}}'",
}, },
}; };

View File

@ -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]) {