Merge pull request #200 from tasnim0tantawi/mermaid-feature
Add export mermaid feature
This commit is contained in:
commit
ed12e3b9f5
@ -29,6 +29,7 @@ import {
|
|||||||
jsonToSQLite,
|
jsonToSQLite,
|
||||||
jsonToMariaDB,
|
jsonToMariaDB,
|
||||||
jsonToSQLServer,
|
jsonToSQLServer,
|
||||||
|
jsonToMermaid,
|
||||||
} from "../../utils/exportSQL/generic";
|
} from "../../utils/exportSQL/generic";
|
||||||
import {
|
import {
|
||||||
ObjectType,
|
ObjectType,
|
||||||
@ -1040,6 +1041,25 @@ export default function ControlPanel({
|
|||||||
saveAs(blob, `${exportData.filename}.ddb`);
|
saveAs(blob, `${exportData.filename}.ddb`);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
MERMAID: () => {
|
||||||
|
setModal(MODAL.CODE);
|
||||||
|
const result = jsonToMermaid({
|
||||||
|
tables: tables,
|
||||||
|
relationships: relationships,
|
||||||
|
notes: notes,
|
||||||
|
subjectAreas: areas,
|
||||||
|
database: database,
|
||||||
|
title: title,
|
||||||
|
});
|
||||||
|
// generate .md file
|
||||||
|
setExportData((prev) => ({
|
||||||
|
...prev,
|
||||||
|
data: result,
|
||||||
|
extension: "md",
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
function: () => {},
|
function: () => {},
|
||||||
},
|
},
|
||||||
|
@ -502,3 +502,41 @@ 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}`;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user