Clean up export as

This commit is contained in:
1ilit 2024-08-03 13:22:19 +03:00
parent 8e430a3b17
commit 726a93108c
3 changed files with 48 additions and 40 deletions

View File

@ -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,

View 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}`;
}

View File

@ -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}`;
}