Merge branch 'cleanup'
This commit is contained in:
commit
a62a6ba295
@ -29,7 +29,6 @@ import {
|
|||||||
jsonToSQLite,
|
jsonToSQLite,
|
||||||
jsonToMariaDB,
|
jsonToMariaDB,
|
||||||
jsonToSQLServer,
|
jsonToSQLServer,
|
||||||
jsonToMermaid,
|
|
||||||
} from "../../utils/exportSQL/generic";
|
} from "../../utils/exportSQL/generic";
|
||||||
import {
|
import {
|
||||||
ObjectType,
|
ObjectType,
|
||||||
@ -68,6 +67,7 @@ import Modal from "./Modal/Modal";
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { exportSQL } from "../../utils/exportSQL";
|
import { exportSQL } from "../../utils/exportSQL";
|
||||||
import { databases } from "../../data/databases";
|
import { databases } from "../../data/databases";
|
||||||
|
import { jsonToMermaid } from "../../utils/exportAs/mermaid";
|
||||||
|
|
||||||
export default function ControlPanel({
|
export default function ControlPanel({
|
||||||
diagramId,
|
diagramId,
|
||||||
@ -1052,7 +1052,6 @@ export default function ControlPanel({
|
|||||||
database: database,
|
database: database,
|
||||||
title: title,
|
title: title,
|
||||||
});
|
});
|
||||||
// generate .md file
|
|
||||||
setExportData((prev) => ({
|
setExportData((prev) => ({
|
||||||
...prev,
|
...prev,
|
||||||
data: result,
|
data: result,
|
||||||
|
@ -287,11 +287,10 @@ const features = [
|
|||||||
footer: "",
|
footer: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Import",
|
title: "Reverse engineer",
|
||||||
content: (
|
content: (
|
||||||
<div>
|
<div>
|
||||||
Already have a diagram? Import a DDL script, or a JSON file to generate
|
Already have a schema? Import a DDL script to generate a diagram.
|
||||||
or a diagram.
|
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
footer: "",
|
footer: "",
|
||||||
|
47
src/utils/exportAs/mermaid.js
Normal file
47
src/utils/exportAs/mermaid.js
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import { dbToTypes } from "../../data/datatypes";
|
||||||
|
|
||||||
|
export function jsonToMermaid(obj) {
|
||||||
|
function getMermaidRelationship(relationship) {
|
||||||
|
switch (relationship) {
|
||||||
|
case "One to one":
|
||||||
|
return "||--||";
|
||||||
|
case "One to many":
|
||||||
|
return "||--o{";
|
||||||
|
case "Many to one":
|
||||||
|
return "}o--||";
|
||||||
|
default:
|
||||||
|
return "--";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const mermaidEntities = obj.tables
|
||||||
|
.map((table) => {
|
||||||
|
const fields = table.fields
|
||||||
|
.map((field) => {
|
||||||
|
const fieldType =
|
||||||
|
field.type +
|
||||||
|
((dbToTypes[obj.database][field.type].isSized ||
|
||||||
|
dbToTypes[obj.database][field.type].hasPrecision) &&
|
||||||
|
field.size &&
|
||||||
|
field.size !== ""
|
||||||
|
? "(" + field.size + ")"
|
||||||
|
: "");
|
||||||
|
return `\t\t${fieldType} ${field.name}`;
|
||||||
|
})
|
||||||
|
.join("\n");
|
||||||
|
return `\t${table.name} {\n${fields}\n\t}`;
|
||||||
|
})
|
||||||
|
.join("\n\n");
|
||||||
|
|
||||||
|
const mermaidRelationships = obj.relationships?.length
|
||||||
|
? obj.relationships
|
||||||
|
.map((r) => {
|
||||||
|
const startTable = obj.tables[r.startTableId].name;
|
||||||
|
const endTable = obj.tables[r.endTableId].name;
|
||||||
|
return `\t${startTable} ${getMermaidRelationship(r.cardinality)} ${endTable} : references`;
|
||||||
|
})
|
||||||
|
.join("\n")
|
||||||
|
: "";
|
||||||
|
|
||||||
|
return `erDiagram\n${mermaidRelationships ? `${mermaidRelationships}\n\n` : ""}${mermaidEntities}`;
|
||||||
|
}
|
@ -502,41 +502,3 @@ export function jsonToSQLServer(obj) {
|
|||||||
)
|
)
|
||||||
.join("\n")}`;
|
.join("\n")}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function jsonToMermaid(obj) {
|
|
||||||
function getMermaidRelationship(relationship) {
|
|
||||||
switch (relationship) {
|
|
||||||
case "One to one":
|
|
||||||
return "||--||";
|
|
||||||
case "One to many":
|
|
||||||
return "||--o{";
|
|
||||||
case "Many to one":
|
|
||||||
return "}o--||";
|
|
||||||
default:
|
|
||||||
return "--";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const mermaidEntities = obj.tables
|
|
||||||
.map((table) => {
|
|
||||||
const fields = table.fields
|
|
||||||
.map((field) => {
|
|
||||||
const fieldType = getTypeString(field, obj.database, "mssql");
|
|
||||||
return ` ${fieldType} ${field.name}`;
|
|
||||||
})
|
|
||||||
.join("\n");
|
|
||||||
return ` ${table.name} {\n${fields}\n }`;
|
|
||||||
})
|
|
||||||
.join("\n\n");
|
|
||||||
|
|
||||||
const mermaidRelationships = obj.relationships?.length
|
|
||||||
? obj.relationships
|
|
||||||
.map((r) => {
|
|
||||||
const startTable = obj.tables[r.startTableId].name;
|
|
||||||
const endTable = obj.tables[r.endTableId].name;
|
|
||||||
return ` ${startTable} ${getMermaidRelationship(r.cardinality)} ${endTable} : references`;
|
|
||||||
})
|
|
||||||
.join("\n")
|
|
||||||
: "";
|
|
||||||
|
|
||||||
return `erDiagram\n${mermaidRelationships ? `${mermaidRelationships}\n\n` : ""}${mermaidEntities}`;
|
|
||||||
}
|
|
||||||
|
@ -4,8 +4,9 @@ import i18n from "../i18n/i18n";
|
|||||||
export const getModalTitle = (modal) => {
|
export const getModalTitle = (modal) => {
|
||||||
switch (modal) {
|
switch (modal) {
|
||||||
case MODAL.IMPORT:
|
case MODAL.IMPORT:
|
||||||
case MODAL.IMPORT_SRC:
|
|
||||||
return i18n.t("import_diagram");
|
return i18n.t("import_diagram");
|
||||||
|
case MODAL.IMPORT_SRC:
|
||||||
|
return i18n.t("import_from_source");
|
||||||
case MODAL.CODE:
|
case MODAL.CODE:
|
||||||
return i18n.t("export");
|
return i18n.t("export");
|
||||||
case MODAL.IMG:
|
case MODAL.IMG:
|
||||||
|
Loading…
Reference in New Issue
Block a user