2024-03-13 07:27:42 +08:00
|
|
|
import { useState, useEffect } from "react";
|
2023-09-19 20:51:16 +08:00
|
|
|
import { Collapse, Badge } from "@douyinfe/semi-ui";
|
2024-04-02 00:44:50 +08:00
|
|
|
import { arrayIsEqual } from "../../utils/utils";
|
|
|
|
import { getIssues } from "../../utils/issues";
|
2024-04-05 10:12:50 +08:00
|
|
|
import { useSettings, useTables, useTypes } from "../../hooks";
|
2024-05-16 11:44:39 +08:00
|
|
|
import { useTranslation } from "react-i18next";
|
2023-09-19 20:49:13 +08:00
|
|
|
|
|
|
|
export default function Issues() {
|
2024-03-13 07:27:42 +08:00
|
|
|
const { types } = useTypes();
|
2024-05-16 11:44:39 +08:00
|
|
|
const { t } = useTranslation();
|
|
|
|
const { settings } = useSettings();
|
2024-06-10 07:17:43 +08:00
|
|
|
const { tables, relationships, database } = useTables();
|
2023-09-19 20:51:14 +08:00
|
|
|
const [issues, setIssues] = useState([]);
|
2023-09-19 20:51:16 +08:00
|
|
|
|
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,
|
2024-06-10 07:17:43 +08:00
|
|
|
database: database,
|
2023-09-19 20:51:14 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
if (!arrayIsEqual(newIssues, issues)) {
|
|
|
|
setIssues(newIssues);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
findIssues();
|
2024-06-10 07:17:43 +08:00
|
|
|
}, [tables, relationships, issues, types, database]);
|
2023-09-19 20:51:14 +08:00
|
|
|
|
2023-09-19 20:49:14 +08:00
|
|
|
return (
|
2024-05-13 11:14:51 +08:00
|
|
|
<Collapse keepDOM lazyRender style={{ width: "100%" }}>
|
2023-09-19 20:50:57 +08:00
|
|
|
<Collapse.Panel
|
|
|
|
header={
|
2023-09-19 20:51:16 +08:00
|
|
|
<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">
|
2024-03-16 08:23:10 +08:00
|
|
|
<i className="fa-solid fa-triangle-exclamation me-2 text-yellow-500" />
|
2024-05-16 11:44:39 +08:00
|
|
|
{t("issues")}
|
2023-09-19 20:51:16 +08:00
|
|
|
</div>
|
|
|
|
</Badge>
|
2023-09-19 20:50:57 +08:00
|
|
|
}
|
|
|
|
itemKey="1"
|
|
|
|
>
|
|
|
|
<div className="max-h-[160px] overflow-y-auto">
|
|
|
|
{settings.strictMode ? (
|
2024-05-16 11:44:39 +08:00
|
|
|
<div className="mb-1">{t("strict_mode_is_on_no_issues")}</div>
|
2023-09-19 20:51:16 +08:00
|
|
|
) : issues.length > 0 ? (
|
|
|
|
<>
|
2023-09-19 20:51:14 +08:00
|
|
|
{issues.map((e, i) => (
|
|
|
|
<div key={i} className="py-2">
|
|
|
|
{e}
|
|
|
|
</div>
|
|
|
|
))}
|
2023-09-19 20:51:16 +08:00
|
|
|
</>
|
|
|
|
) : (
|
2024-05-16 11:44:39 +08:00
|
|
|
<div>{t("no_issues")}</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
|
|
|
}
|