Skip to content

Commit 436ab3e

Browse files
authored
Export saved data (#400)
1 parent fe0cbbe commit 436ab3e

File tree

5 files changed

+136
-2
lines changed

5 files changed

+136
-2
lines changed

package-lock.json

Lines changed: 95 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"i18next-browser-languagedetector": "^8.0.0",
3232
"jsonschema": "^1.4.1",
3333
"jspdf": "^3.0.1",
34+
"jszip": "^3.10.1",
3435
"lexical": "^0.12.5",
3536
"node-sql-parser": "^5.3.8",
3637
"octokit": "^4.0.2",

src/components/EditorHeader/ControlPanel.jsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ import { jsonToDocumentation } from "../../utils/exportAs/documentation";
7777
import { IdContext } from "../Workspace";
7878
import { socials } from "../../data/socials";
7979
import { toDBML } from "../../utils/exportAs/dbml";
80+
import { exportSavedData } from "../../utils/exportSavedData";
8081

8182
export default function ControlPanel({
8283
diagramId,
@@ -1419,6 +1420,9 @@ export default function ControlPanel({
14191420
language: {
14201421
function: () => setModal(MODAL.LANGUAGE),
14211422
},
1423+
export_saved_data: {
1424+
function: exportSavedData,
1425+
},
14221426
flush_storage: {
14231427
warning: {
14241428
title: t("flush_storage"),

src/i18n/locales/en.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ const en = {
249249
supported_types: "Supported file types:",
250250
bulk_update: "Bulk update",
251251
multiselect: "Multiselect",
252+
export_saved_data: "Export saved data",
252253
},
253254
};
254255

src/utils/exportSavedData.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import JSZip from "jszip";
2+
import { db } from "../data/db";
3+
import { saveAs } from "file-saver";
4+
5+
const zip = new JSZip();
6+
7+
export async function exportSavedData() {
8+
const diagramsFolder = zip.folder("diagrams");
9+
10+
await db.diagrams.each((diagram) => {
11+
diagramsFolder.file(
12+
`${diagram.name}(${diagram.id}).json`,
13+
JSON.stringify(diagram, null, 2),
14+
);
15+
return true;
16+
});
17+
18+
const templatesFolder = zip.folder("templates");
19+
20+
await db.templates.where({ custom: 1 }).each((template) => {
21+
templatesFolder.file(
22+
`${template.title}(${template.id}).json`,
23+
JSON.stringify(template, null, 2),
24+
);
25+
return true;
26+
});
27+
28+
zip.generateAsync({ type: "blob" }).then(function (content) {
29+
const date = new Date();
30+
saveAs(
31+
content,
32+
`${date.getFullYear()}_${date.getMonth()}_${date.getDay()}_export.zip`,
33+
);
34+
});
35+
}

0 commit comments

Comments
 (0)