Handle issues for custom types

This commit is contained in:
1ilit 2023-09-19 15:51:30 +03:00
parent 6515b87988
commit f6ab590623
2 changed files with 52 additions and 3 deletions

View File

@ -1,10 +1,11 @@
import React, { useContext, useState, useEffect } from "react"; import React, { useContext, useState, useEffect } from "react";
import { Collapse, Badge } from "@douyinfe/semi-ui"; import { Collapse, Badge } from "@douyinfe/semi-ui";
import { SettingsContext, TableContext } from "../pages/editor"; import { SettingsContext, TableContext, TypeContext } from "../pages/editor";
import { validateDiagram, arrayIsEqual } from "../utils"; import { validateDiagram, arrayIsEqual } from "../utils";
export default function Issues() { export default function Issues() {
const { settings } = useContext(SettingsContext); const { settings } = useContext(SettingsContext);
const { types } = useContext(TypeContext);
const { tables, relationships } = useContext(TableContext); const { tables, relationships } = useContext(TableContext);
const [issues, setIssues] = useState([]); const [issues, setIssues] = useState([]);
@ -13,6 +14,7 @@ export default function Issues() {
const newIssues = validateDiagram({ const newIssues = validateDiagram({
tables: tables, tables: tables,
relationships: relationships, relationships: relationships,
types: types,
}); });
if (!arrayIsEqual(newIssues, issues)) { if (!arrayIsEqual(newIssues, issues)) {
@ -21,7 +23,7 @@ export default function Issues() {
}; };
findIssues(); findIssues();
}, [tables, relationships, issues]); }, [tables, relationships, issues, types]);
return ( return (
<Collapse style={{ width: "100%" }}> <Collapse style={{ width: "100%" }}>

View File

@ -384,7 +384,7 @@ function validateDiagram(diagram) {
} else if (field.type === "ENUM" || field.type === "SET") { } else if (field.type === "ENUM" || field.type === "SET") {
if (!field.values || field.values.length === 0) { if (!field.values || field.values.length === 0) {
issues.push( issues.push(
`"${field.name}" field of table "${table.name}" is of type ${field.type} but values have been specified` `"${field.name}" field of table "${table.name}" is of type ${field.type} but no values have been specified`
); );
} }
} }
@ -434,6 +434,53 @@ function validateDiagram(diagram) {
} }
}); });
const duplicateTypeNames = {};
diagram.types.forEach((type) => {
if (type.name === "") {
issues.push(`Declared a type with no name`);
}
if (duplicateTypeNames[type.name]) {
issues.push(`Duplicate types by the name "${type.name}"`);
} else {
duplicateTypeNames[type.name] = true;
}
if (type.fields.length === 0) {
issues.push(`Declared an empty type "${type.name}" with no fields`);
return;
}
const duplicateFieldNames = {};
type.fields.forEach((field) => {
if (field.name === "") {
issues.push(`Empty field name in type "${type.name}"`);
}
if (field.type === "") {
issues.push(`Empty field type in "${type.name}"`);
} else if (field.type === "ENUM" || field.type === "SET") {
if (!field.values || field.values.length === 0) {
issues.push(
`"${field.name}" field of type "${type.name}" is of type ${field.type} but no values have been specified`
);
}
}
if (field.type === "DOUBLE" && field.size !== "") {
issues.push(
`Specifying number of digits for floating point data types is deprecated.`
);
}
if (duplicateFieldNames[field.name]) {
issues.push(`Duplicate type fields in "${type.name}"`);
} else {
duplicateFieldNames[field.name] = true;
}
});
});
const duplicateFKName = {}; const duplicateFKName = {};
diagram.relationships.forEach((r) => { diagram.relationships.forEach((r) => {
if (duplicateFKName[r.name]) { if (duplicateFKName[r.name]) {