2023-09-19 20:48:51 +08:00
|
|
|
import React, { useState, createContext, useEffect } 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:48:46 +08:00
|
|
|
export const LayoutContext = createContext();
|
2023-09-19 20:48:48 +08:00
|
|
|
export const TableContext = createContext();
|
2023-09-19 20:48:49 +08:00
|
|
|
export const AreaContext = createContext();
|
2023-09-19 20:48:46 +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:53 +08:00
|
|
|
const [selectedTable, setSelectedTable] = useState("");
|
2023-09-19 20:48:34 +08:00
|
|
|
const [layout, setLayout] = useState({
|
|
|
|
header: true,
|
|
|
|
sidebar: true,
|
|
|
|
services: true,
|
|
|
|
tables: true,
|
2023-09-19 20:48:55 +08:00
|
|
|
areas: true,
|
2023-09-19 20:48:34 +08:00
|
|
|
relationships: true,
|
|
|
|
issues: true,
|
|
|
|
editor: true,
|
|
|
|
shapes: true,
|
2023-09-19 20:48:35 +08:00
|
|
|
fullscreen: false,
|
2023-09-19 20:48:34 +08:00
|
|
|
});
|
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:48:51 +08:00
|
|
|
useEffect(()=>{
|
|
|
|
document.title = "Editor";
|
|
|
|
}, [])
|
|
|
|
|
2023-09-19 20:46:46 +08:00
|
|
|
return (
|
2023-09-19 20:48:49 +08:00
|
|
|
<LayoutContext.Provider value={{ layout, setLayout }}>
|
|
|
|
<TableContext.Provider
|
|
|
|
value={{ tables, setTables, relationships, setRelationships }}
|
|
|
|
>
|
|
|
|
<AreaContext.Provider value={{ areas, setAreas }}>
|
|
|
|
<div className="h-[100vh] overflow-hidden">
|
|
|
|
<ControlPanel />
|
|
|
|
<div
|
|
|
|
className={
|
|
|
|
layout.header
|
|
|
|
? `flex h-[calc(100vh-123.93px)]`
|
|
|
|
: `flex h-[calc(100vh-51.97px)]`
|
|
|
|
}
|
|
|
|
onMouseUp={() => setResize(false)}
|
|
|
|
onMouseMove={dragHandler}
|
|
|
|
>
|
|
|
|
<DndProvider backend={HTML5Backend}>
|
|
|
|
{layout.sidebar && (
|
|
|
|
<EditorPanel
|
|
|
|
code={code}
|
|
|
|
setCode={setCode}
|
|
|
|
resize={resize}
|
|
|
|
setResize={setResize}
|
|
|
|
width={width}
|
2023-09-19 20:48:53 +08:00
|
|
|
selectedTable={selectedTable}
|
|
|
|
setSelectedTable={setSelectedTable}
|
2023-09-19 20:48:49 +08:00
|
|
|
/>
|
|
|
|
)}
|
|
|
|
<Canvas
|
2023-09-19 20:48:48 +08:00
|
|
|
code={code}
|
|
|
|
setCode={setCode}
|
2023-09-19 20:48:53 +08:00
|
|
|
selectedTable={selectedTable}
|
|
|
|
setSelectedTable={setSelectedTable}
|
2023-09-19 20:48:48 +08:00
|
|
|
/>
|
2023-09-19 20:48:49 +08:00
|
|
|
</DndProvider>
|
|
|
|
{layout.services && <Sidebar />}
|
|
|
|
</div>
|
|
|
|
</div>{" "}
|
|
|
|
</AreaContext.Provider>
|
2023-09-19 20:48:48 +08:00
|
|
|
</TableContext.Provider>
|
2023-09-19 20:48:46 +08:00
|
|
|
</LayoutContext.Provider>
|
2023-09-19 20:46:46 +08:00
|
|
|
);
|
|
|
|
}
|