2023-09-19 20:48:14 +08:00
|
|
|
import React, { useState } from "react";
|
2023-09-19 20:46:48 +08:00
|
|
|
import Sidebar from "../components/sidebar";
|
|
|
|
import ControlPanel from "../components/control_panel";
|
2023-09-19 20:47:01 +08:00
|
|
|
import { DndProvider } from "react-dnd";
|
2023-09-19 20:46:54 +08:00
|
|
|
import { HTML5Backend } from "react-dnd-html5-backend";
|
2023-09-19 20:47:43 +08:00
|
|
|
import Canvas from "../components/canvas";
|
2023-09-19 20:47:01 +08:00
|
|
|
import EditorPanel from "../components/editor_panel";
|
2023-09-19 20:46:54 +08:00
|
|
|
|
2023-09-19 20:46:46 +08:00
|
|
|
export default function Editor(props) {
|
2023-09-19 20:46:56 +08:00
|
|
|
const [code, setCode] = useState("");
|
2023-09-19 20:47:41 +08:00
|
|
|
const [tables, setTables] = useState([]);
|
2023-09-19 20:47:59 +08:00
|
|
|
const [relationships, setRelationships] = useState([]);
|
2023-09-19 20:48:04 +08:00
|
|
|
const [areas, setAreas] = useState([]);
|
2023-09-19 20:48:30 +08:00
|
|
|
const [resize, setResize] = useState(false);
|
2023-09-19 20:48:32 +08:00
|
|
|
const [width, setWidth] = useState(340);
|
2023-09-19 20:48:34 +08:00
|
|
|
const [layout, setLayout] = useState({
|
|
|
|
header: true,
|
|
|
|
sidebar: true,
|
|
|
|
services: true,
|
|
|
|
tables: true,
|
|
|
|
relationships: true,
|
|
|
|
issues: true,
|
|
|
|
editor: true,
|
|
|
|
shapes: true,
|
|
|
|
});
|
2023-09-19 20:48:31 +08:00
|
|
|
|
|
|
|
const dragHandler = (e) => {
|
|
|
|
if (!resize) return;
|
|
|
|
const w = e.clientX;
|
2023-09-19 20:48:32 +08:00
|
|
|
if (w > 340) setWidth(w);
|
2023-09-19 20:48:31 +08:00
|
|
|
};
|
2023-09-19 20:46:56 +08:00
|
|
|
|
2023-09-19 20:46:46 +08:00
|
|
|
return (
|
|
|
|
<>
|
2023-09-19 20:48:34 +08:00
|
|
|
<ControlPanel layout={layout} setLayout={setLayout} />
|
2023-09-19 20:48:31 +08:00
|
|
|
<div
|
|
|
|
className={`flex h-full`}
|
|
|
|
onMouseUp={() => setResize(false)}
|
|
|
|
onMouseMove={dragHandler}
|
|
|
|
>
|
2023-09-19 20:46:58 +08:00
|
|
|
<DndProvider backend={HTML5Backend}>
|
2023-09-19 20:48:34 +08:00
|
|
|
{layout.sidebar && (
|
|
|
|
<EditorPanel
|
|
|
|
tables={tables}
|
|
|
|
setTables={setTables}
|
|
|
|
code={code}
|
|
|
|
setCode={setCode}
|
|
|
|
relationships={relationships}
|
|
|
|
setRelationships={setRelationships}
|
|
|
|
areas={areas}
|
|
|
|
setAreas={setAreas}
|
|
|
|
resize={resize}
|
|
|
|
setResize={setResize}
|
|
|
|
width={width}
|
|
|
|
/>
|
|
|
|
)}
|
2023-09-19 20:47:06 +08:00
|
|
|
<Canvas
|
2023-09-19 20:47:41 +08:00
|
|
|
tables={tables}
|
|
|
|
setTables={setTables}
|
2023-09-19 20:47:06 +08:00
|
|
|
code={code}
|
|
|
|
setCode={setCode}
|
2023-09-19 20:47:59 +08:00
|
|
|
relationships={relationships}
|
|
|
|
setRelationships={setRelationships}
|
2023-09-19 20:48:04 +08:00
|
|
|
areas={areas}
|
|
|
|
setAreas={setAreas}
|
2023-09-19 20:47:06 +08:00
|
|
|
/>
|
2023-09-19 20:46:58 +08:00
|
|
|
</DndProvider>
|
2023-09-19 20:48:34 +08:00
|
|
|
{layout.services && <Sidebar />}
|
2023-09-19 20:46:46 +08:00
|
|
|
</div>
|
|
|
|
</>
|
|
|
|
);
|
|
|
|
}
|