From 38943d80f26aae2414d4ec927860cee6e3dbc1ae Mon Sep 17 00:00:00 2001 From: 1ilit Date: Fri, 16 Feb 2024 16:27:09 +0200 Subject: [PATCH] Add thumbnails to `create new` modal --- src/components/ControlPanel.jsx | 41 ++++---- src/components/Thumbnail.jsx | 178 ++++++++++++++++++++++++++++++++ 2 files changed, 197 insertions(+), 22 deletions(-) create mode 100644 src/components/Thumbnail.jsx diff --git a/src/components/ControlPanel.jsx b/src/components/ControlPanel.jsx index 12e324e..5f8670b 100644 --- a/src/components/ControlPanel.jsx +++ b/src/components/ControlPanel.jsx @@ -10,7 +10,6 @@ import { IconRedo, IconRowsStroked, IconEdit, - IconPlus, } from "@douyinfe/semi-icons"; import { Link } from "react-router-dom"; import icon from "../assets/icon_dark_64.png"; @@ -71,6 +70,7 @@ import { db } from "../data/db"; import { useLiveQuery } from "dexie-react-hooks"; import { Parser } from "node-sql-parser"; import Todo from "./Todo"; +import { Thumbnail } from "./Thumbnail"; export default function ControlPanel({ diagramId, @@ -81,6 +81,7 @@ export default function ControlPanel({ setState, lastSaved, }) { + const defaultTemplates = useLiveQuery(() => db.templates.toArray()); const MODAL = { NONE: 0, IMG: 1, @@ -1012,7 +1013,7 @@ export default function ControlPanel({ }, }, { - "MSSQL": () => { + MSSQL: () => { setVisible(MODAL.CODE); const src = jsonToSQLServer({ tables: tables, @@ -1256,7 +1257,7 @@ export default function ControlPanel({ case MODAL.SAVEAS: return "Save as"; case MODAL.NEW: - return "New diagram"; + return "Create new diagram"; default: return ""; } @@ -1820,32 +1821,28 @@ export default function ControlPanel({ const newModalBody = () => (
-
+
setSelectedTemplateId(0)}>
setSelectedTemplateId(0)} + className={`rounded-md h-[180px] border-2 hover:border-dashed ${ + selectedTemplateId === 0 ? "border-blue-400" : "border-zinc-100" + }`} > - +
Blank
- {[1, 2, 3, 4, 5, 6, 7, 8].map((i) => ( -
+ {defaultTemplates.map((temp, i) => ( +
setSelectedTemplateId(temp.id)}>
setSelectedTemplateId(i)} + className={`rounded-md h-[180px] border-2 hover:border-dashed ${ + selectedTemplateId === temp.id + ? "border-blue-400" + : "border-zinc-100" + }`} > - + +
-
Template {i}
+
{temp.title}
))}
@@ -2021,7 +2018,7 @@ export default function ControlPanel({ (visible === MODAL.IMPORT_SRC && data.src === ""), }} cancelText="Cancel" - width={600} + width={visible === MODAL.NEW ? 740 : 600} > {getModalBody()} diff --git a/src/components/Thumbnail.jsx b/src/components/Thumbnail.jsx new file mode 100644 index 0000000..60a8f0c --- /dev/null +++ b/src/components/Thumbnail.jsx @@ -0,0 +1,178 @@ +import { calcPath } from "../utils"; + +export function Thumbnail({ diagram, i, zoom }) { + const translateX = 32 * zoom; + const translateY = 32 * zoom; + const theme = localStorage.getItem("theme"); + return ( + + + + + + + + + {diagram.subjectAreas?.map((a) => ( + 0 ? a.width : 0} + height={a.height > 0 ? a.height : 0} + > +
+
+
+
+ {a.name} +
+ + ))} + {diagram.tables?.map((table, i) => { + const height = table.fields.length * 36 + 50 + 7; + return ( + +
+
+
+
+ {table.name} +
+ {table.fields.map((f, j) => ( +
+
+
+
{f.name}
+
+
{f.type}
+
+ ))} +
+
+
+ ); + })} + {diagram.relationships?.map((e, i) => ( + + ))} + {diagram.notes?.map((n) => { + const x = n.x; + const y = n.y; + const w = 180; + const r = 3; + const fold = 24; + const h = n.height; + return ( + + + + +
+ +
{n.content}
+
+
+
+ ); + })} + + + ); +}