Handle issues for custom types
This commit is contained in:
parent
6515b87988
commit
f6ab590623
@ -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%" }}>
|
||||||
|
@ -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]) {
|
||||||
|
Loading…
Reference in New Issue
Block a user