Require selecting a db on new diagrams

This commit is contained in:
1ilit 2024-06-09 18:10:51 +03:00
parent be6ecb066c
commit b13d576c5e
4 changed files with 56 additions and 18 deletions

View File

@ -2,7 +2,7 @@ import { useState, useEffect, useCallback } from "react";
import ControlPanel from "./EditorHeader/ControlPanel"; import ControlPanel from "./EditorHeader/ControlPanel";
import Canvas from "./EditorCanvas/Canvas"; import Canvas from "./EditorCanvas/Canvas";
import SidePanel from "./EditorSidePanel/SidePanel"; import SidePanel from "./EditorSidePanel/SidePanel";
import { State } from "../data/constants"; import { DB, State } from "../data/constants";
import { db } from "../data/db"; import { db } from "../data/db";
import { import {
useLayout, useLayout,
@ -37,8 +37,14 @@ export default function WorkSpace() {
const { notes, setNotes } = useNotes(); const { notes, setNotes } = useNotes();
const { saveState, setSaveState } = useSaveState(); const { saveState, setSaveState } = useSaveState();
const { transform, setTransform } = useTransform(); const { transform, setTransform } = useTransform();
const { tables, relationships, setTables, setRelationships, setDatabase } = const {
useTables(); tables,
relationships,
setTables,
setRelationships,
database,
setDatabase,
} = useTables();
const { undoStack, redoStack, setUndoStack, setRedoStack } = useUndoRedo(); const { undoStack, redoStack, setUndoStack, setRedoStack } = useUndoRedo();
const { t } = useTranslation(); const { t } = useTranslation();
@ -60,6 +66,7 @@ export default function WorkSpace() {
) { ) {
await db.diagrams await db.diagrams
.add({ .add({
database: database,
name: title, name: title,
lastModified: new Date(), lastModified: new Date(),
tables: tables, tables: tables,
@ -80,6 +87,7 @@ export default function WorkSpace() {
} else { } else {
await db.diagrams await db.diagrams
.update(id, { .update(id, {
database: database,
name: title, name: title,
lastModified: new Date(), lastModified: new Date(),
tables: tables, tables: tables,
@ -99,6 +107,7 @@ export default function WorkSpace() {
} else { } else {
await db.templates await db.templates
.update(id, { .update(id, {
database: database,
title: title, title: title,
tables: tables, tables: tables,
relationships: relationships, relationships: relationships,
@ -128,6 +137,7 @@ export default function WorkSpace() {
tasks, tasks,
transform, transform,
setSaveState, setSaveState,
database,
]); ]);
const load = useCallback(async () => { const load = useCallback(async () => {
@ -137,8 +147,10 @@ export default function WorkSpace() {
.last() .last()
.then((d) => { .then((d) => {
if (d) { if (d) {
if (!d.database) { if (d.database) {
setShowSelectDbModal(true); setDatabase(d.database);
} else {
setDatabase(DB.GENERIC);
} }
setId(d.id); setId(d.id);
setTitle(d.name); setTitle(d.name);
@ -164,8 +176,10 @@ export default function WorkSpace() {
.get(id) .get(id)
.then((diagram) => { .then((diagram) => {
if (diagram) { if (diagram) {
if (!diagram.database) { if (diagram.database) {
setShowSelectDbModal(true); setDatabase(diagram.database);
} else {
setDatabase(DB.GENERIC);
} }
setId(diagram.id); setId(diagram.id);
setTitle(diagram.name); setTitle(diagram.name);
@ -196,6 +210,11 @@ export default function WorkSpace() {
.get(id) .get(id)
.then((diagram) => { .then((diagram) => {
if (diagram) { if (diagram) {
if (diagram.database) {
setDatabase(diagram.database);
} else {
setDatabase(DB.GENERIC);
}
setId(diagram.id); setId(diagram.id);
setTitle(diagram.title); setTitle(diagram.title);
setTables(diagram.tables); setTables(diagram.tables);
@ -210,6 +229,8 @@ export default function WorkSpace() {
}); });
setUndoStack([]); setUndoStack([]);
setRedoStack([]); setRedoStack([]);
} else {
setShowSelectDbModal(true);
} }
}) })
.catch((error) => { .catch((error) => {
@ -247,6 +268,7 @@ export default function WorkSpace() {
setNotes, setNotes,
setTypes, setTypes,
setTasks, setTasks,
setDatabase,
]); ]);
useEffect(() => { useEffect(() => {
@ -324,18 +346,20 @@ export default function WorkSpace() {
hasCancel={false} hasCancel={false}
title={t("pick_db")} title={t("pick_db")}
okText={t("confirm")} okText={t("confirm")}
visible={showSelectDbModal}
onOk={() => { onOk={() => {
if (selectedDb === "") return;
setDatabase(selectedDb); setDatabase(selectedDb);
setShowSelectDbModal(false); setShowSelectDbModal(false);
}} }}
visible={showSelectDbModal} okButtonProps={{ disabled: selectedDb === "" }}
> >
<div className="grid grid-cols-3 gap-4 place-content-center"> <div className="grid grid-cols-3 gap-4 place-content-center">
{databases.map((x) => ( {databases.map((x) => (
<div <div
key={x.name} key={x.name}
onClick={() => setSelectedDb(x.label)} onClick={() => setSelectedDb(x.label)}
className={`space-y-3 py-3 px-4 rounded-md border-2 ${ className={`space-y-3 py-3 px-4 rounded-md border-2 select-none ${
settings.mode === "dark" settings.mode === "dark"
? "bg-zinc-700 hover:bg-zinc-600" ? "bg-zinc-700 hover:bg-zinc-600"
: "bg-zinc-100 hover:bg-zinc-200" : "bg-zinc-100 hover:bg-zinc-200"

View File

@ -103,3 +103,12 @@ export const SIDESHEET = {
TODO: 1, TODO: 1,
TIMELINE: 2, TIMELINE: 2,
}; };
export const DB = {
MYSQL: "mysql",
POSTGRES: "postgresql",
MSSQL: "mssql",
SQLITE: "sqlite",
MARIADB: "mariadb",
GENERIC: "generic",
};

View File

@ -3,38 +3,39 @@ import postgresImage from "../assets/postgres-icon.png";
import sqliteImage from "../assets/sqlite-icon.png"; import sqliteImage from "../assets/sqlite-icon.png";
import mariadbImage from "../assets/mariadb-icon.png"; import mariadbImage from "../assets/mariadb-icon.png";
import mssqlImage from "../assets/mssql-icon.png"; import mssqlImage from "../assets/mssql-icon.png";
import i18n from "../i18n/i18n";
import { DB } from "./constants";
export const databases = [ export const databases = [
{ {
name: "MySQL", name: "MySQL",
label: "mysql", label: DB.MYSQL,
image: mysqlImage, image: mysqlImage,
}, },
{ {
name: "PostgreSQL", name: "PostgreSQL",
label: "postgresql", label: DB.POSTGRES,
image: postgresImage, image: postgresImage,
}, },
{ {
name: "SQLite", name: "SQLite",
label: "sqlite", label: DB.SQLITE,
image: sqliteImage, image: sqliteImage,
}, },
{ {
name: "MariaDB", name: "MariaDB",
label: "mariadb", label: DB.MARIADB,
image: mariadbImage, image: mariadbImage,
}, },
{ {
name: "MSSQL", name: "MSSQL",
label: "mssql", label: DB.MSSQL,
image: mssqlImage, image: mssqlImage,
}, },
{ {
name: "Generic", name: i18n.t("generic"),
label: "generic", label: DB.GENERIC,
image: null, image: null,
description: description: i18n.t("generic_description"),
"Generic diagrams can be exported to any SQL flavor but support few data types.",
}, },
]; ];

View File

@ -212,6 +212,10 @@ const en = {
edit_relationship: "{{extra}} Edit relationship {{refName}}", edit_relationship: "{{extra}} Edit relationship {{refName}}",
delete_relationship: "Delete relationship {{refName}}", delete_relationship: "Delete relationship {{refName}}",
not_found: "Not found", not_found: "Not found",
pick_db: "Choose a database",
generic: "Generic",
generic_description:
"Generic diagrams can be exported to any SQL flavor but support few data types.",
}, },
}; };