From 726a93108ccbcd3ccdb688b65a98e4603453abbf Mon Sep 17 00:00:00 2001 From: 1ilit <1ilit@proton.me> Date: Sat, 3 Aug 2024 13:22:19 +0300 Subject: [PATCH] Clean up export as --- src/components/EditorHeader/ControlPanel.jsx | 3 +- src/utils/exportAs/mermaid.js | 47 ++++++++++++++++++++ src/utils/exportSQL/generic.js | 38 ---------------- 3 files changed, 48 insertions(+), 40 deletions(-) create mode 100644 src/utils/exportAs/mermaid.js diff --git a/src/components/EditorHeader/ControlPanel.jsx b/src/components/EditorHeader/ControlPanel.jsx index d4bcbee..f1b09f0 100644 --- a/src/components/EditorHeader/ControlPanel.jsx +++ b/src/components/EditorHeader/ControlPanel.jsx @@ -29,7 +29,6 @@ import { jsonToSQLite, jsonToMariaDB, jsonToSQLServer, - jsonToMermaid, } from "../../utils/exportSQL/generic"; import { ObjectType, @@ -68,6 +67,7 @@ import Modal from "./Modal/Modal"; import { useTranslation } from "react-i18next"; import { exportSQL } from "../../utils/exportSQL"; import { databases } from "../../data/databases"; +import { jsonToMermaid } from "../../utils/exportAs/mermaid"; export default function ControlPanel({ diagramId, @@ -1052,7 +1052,6 @@ export default function ControlPanel({ database: database, title: title, }); - // generate .md file setExportData((prev) => ({ ...prev, data: result, diff --git a/src/utils/exportAs/mermaid.js b/src/utils/exportAs/mermaid.js new file mode 100644 index 0000000..0467776 --- /dev/null +++ b/src/utils/exportAs/mermaid.js @@ -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}`; +} diff --git a/src/utils/exportSQL/generic.js b/src/utils/exportSQL/generic.js index 7a44b67..8aa2a04 100644 --- a/src/utils/exportSQL/generic.js +++ b/src/utils/exportSQL/generic.js @@ -502,41 +502,3 @@ export function jsonToSQLServer(obj) { ) .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}`; -}