drawDB/src/components/Issues.jsx

70 lines
2.0 KiB
React
Raw Normal View History

2023-12-16 11:39:13 +08:00
import { useContext, useState, useEffect } from "react";
import { Collapse, Badge } from "@douyinfe/semi-ui";
import { TypeContext } from "../pages/Editor";
2024-03-12 19:52:01 +08:00
import { arrayIsEqual } from "../utils/utils";
import { getIssues } from "../utils/issues";
2024-03-10 04:39:46 +08:00
import useSettings from "../hooks/useSettings";
import useTables from "../hooks/useTables";
2023-09-19 20:49:13 +08:00
export default function Issues() {
2024-03-10 04:39:46 +08:00
const { settings } = useSettings();
2023-09-19 20:51:30 +08:00
const { types } = useContext(TypeContext);
const { tables, relationships } = useTables();
2023-09-19 20:51:14 +08:00
const [issues, setIssues] = useState([]);
2023-09-19 20:51:14 +08:00
useEffect(() => {
const findIssues = async () => {
2024-03-12 19:52:01 +08:00
const newIssues = getIssues({
2023-09-19 20:51:14 +08:00
tables: tables,
relationships: relationships,
2023-09-19 20:51:30 +08:00
types: types,
2023-09-19 20:51:14 +08:00
});
if (!arrayIsEqual(newIssues, issues)) {
setIssues(newIssues);
}
};
findIssues();
2023-09-19 20:51:30 +08:00
}, [tables, relationships, issues, types]);
2023-09-19 20:51:14 +08:00
2023-09-19 20:49:14 +08:00
return (
2023-09-19 20:50:57 +08:00
<Collapse style={{ width: "100%" }}>
<Collapse.Panel
header={
<Badge
type={issues.length > 0 ? "danger" : "primary"}
count={settings.strictMode ? null : issues.length}
overflowCount={99}
className="mt-1"
>
2023-10-22 14:01:43 +08:00
<div className="pe-3 select-none">
<i className="fa-solid fa-triangle-exclamation me-2 text-yellow-500"></i>
Issues
</div>
</Badge>
2023-09-19 20:50:57 +08:00
}
itemKey="1"
>
<div className="max-h-[160px] overflow-y-auto">
{settings.strictMode ? (
<div className="mb-1">
Strict mode is off so no issues will be displayed.
</div>
) : issues.length > 0 ? (
<>
2023-09-19 20:51:14 +08:00
{issues.map((e, i) => (
<div key={i} className="py-2">
{e}
</div>
))}
</>
) : (
<div>No issues were detected.</div>
2023-09-19 20:50:57 +08:00
)}
</div>
</Collapse.Panel>
</Collapse>
2023-09-19 20:49:14 +08:00
);
2023-09-19 20:49:13 +08:00
}