fix tab error

This commit is contained in:
1ilit 2023-09-19 15:48:57 +03:00
parent 8da14317e5
commit 246aad77d0
4 changed files with 63 additions and 39 deletions

View File

@ -1,4 +1,4 @@
import { React, useState } from "react"; import { React, useContext } from "react";
import CodeMirror from "@uiw/react-codemirror"; import CodeMirror from "@uiw/react-codemirror";
import { createTheme } from "@uiw/codemirror-themes"; import { createTheme } from "@uiw/codemirror-themes";
import { sql } from "@codemirror/lang-sql"; import { sql } from "@codemirror/lang-sql";
@ -10,6 +10,8 @@ import TableOverview from "./table_overview";
import ReferenceOverview from "./reference_overview"; import ReferenceOverview from "./reference_overview";
import AreaOverview from "./area_overview"; import AreaOverview from "./area_overview";
// import { TableContext } from "../pages/editor"; // import { TableContext } from "../pages/editor";
import { Tab } from "../data/data";
import { TabContext } from "../pages/editor";
const myTheme = createTheme({ const myTheme = createTheme({
dark: "light", dark: "light",
@ -26,16 +28,15 @@ const myTheme = createTheme({
}); });
const EditorPanel = (props) => { const EditorPanel = (props) => {
const [tab, setTab] = useState("1");
// const map = useRef(new Map()); // const map = useRef(new Map());
// const {tables, setTables} = useContext(TableContext); const {tab, setTab} = useContext(TabContext);
const tabList = [ const tabList = [
{ tab: "Tables", itemKey: "1" }, { tab: "Tables", itemKey: Tab.tables },
{ tab: "Relationships", itemKey: "2" }, { tab: "Relationships", itemKey: Tab.relationships },
{ tab: "Subject Areas", itemKey: "3" }, { tab: "Subject Areas", itemKey: Tab.subject_areas },
{ tab: "Shapes", itemKey: "4" }, { tab: "Shapes", itemKey: Tab.shapes },
{ tab: "Editor", itemKey: "5" }, { tab: "Editor", itemKey: Tab.editor },
]; ];
const contentList = [ const contentList = [
<TableOverview <TableOverview
@ -61,6 +62,7 @@ const EditorPanel = (props) => {
<div style={{ width: `${props.width}px` }} className="overflow-y-auto"> <div style={{ width: `${props.width}px` }} className="overflow-y-auto">
<Tabs <Tabs
type="card" type="card"
activeKey={tab}
tabList={tabList} tabList={tabList}
onChange={(key) => { onChange={(key) => {
setTab(key); setTab(key);

View File

@ -1,5 +1,10 @@
import { React, useState, useContext } from "react"; import { React, useState, useContext } from "react";
import { sqlDataTypes, tableThemes, defaultTableTheme } from "../data/data"; import {
sqlDataTypes,
tableThemes,
defaultTableTheme,
Tab,
} from "../data/data";
import { import {
IconEdit, IconEdit,
IconPlus, IconPlus,
@ -24,7 +29,7 @@ import {
SideSheet, SideSheet,
Toast, Toast,
} from "@douyinfe/semi-ui"; } from "@douyinfe/semi-ui";
import { LayoutContext, TableContext } from "../pages/editor"; import { LayoutContext, TabContext, TableContext } from "../pages/editor";
export default function Table(props) { export default function Table(props) {
const [isHovered, setIsHovered] = useState(false); const [isHovered, setIsHovered] = useState(false);
@ -32,6 +37,7 @@ export default function Table(props) {
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
const { layout } = useContext(LayoutContext); const { layout } = useContext(LayoutContext);
const { setTables } = useContext(TableContext); const { setTables } = useContext(TableContext);
const { tab, setTab } = useContext(TabContext);
const height = props.tableData.fields.length * 36 + 50 + 3; const height = props.tableData.fields.length * 36 + 50 + 3;
@ -112,6 +118,8 @@ export default function Table(props) {
if (!layout.sidebar) { if (!layout.sidebar) {
setVisible(true); setVisible(true);
} else { } else {
setTab(Tab.tables);
if (tab !== Tab.tables) return;
props.setSelectedTable(`${props.tableData.id}`); props.setSelectedTable(`${props.tableData.id}`);
document document
.getElementById(`scroll_table_${props.tableData.id}`) .getElementById(`scroll_table_${props.tableData.id}`)

View File

@ -57,6 +57,14 @@ const Constraint = {
setDefault: "Set default", setDefault: "Set default",
}; };
const Tab = {
tables: "1",
relationships: "2",
subject_areas: "3",
shapes: "4",
editor: "5",
};
export { export {
bgBlue, bgBlue,
sqlDataTypes, sqlDataTypes,
@ -64,4 +72,5 @@ export {
defaultTableTheme, defaultTableTheme,
Cardinality, Cardinality,
Constraint, Constraint,
Tab
}; };

View File

@ -5,10 +5,12 @@ import { DndProvider } from "react-dnd";
import { HTML5Backend } from "react-dnd-html5-backend"; import { HTML5Backend } from "react-dnd-html5-backend";
import Canvas from "../components/canvas"; import Canvas from "../components/canvas";
import EditorPanel from "../components/editor_panel"; import EditorPanel from "../components/editor_panel";
import { Tab } from "../data/data";
export const LayoutContext = createContext(); export const LayoutContext = createContext();
export const TableContext = createContext(); export const TableContext = createContext();
export const AreaContext = createContext(); export const AreaContext = createContext();
export const TabContext = createContext();
export default function Editor(props) { export default function Editor(props) {
const [code, setCode] = useState(""); const [code, setCode] = useState("");
@ -18,6 +20,7 @@ export default function Editor(props) {
const [resize, setResize] = useState(false); const [resize, setResize] = useState(false);
const [width, setWidth] = useState(340); const [width, setWidth] = useState(340);
const [selectedTable, setSelectedTable] = useState(""); const [selectedTable, setSelectedTable] = useState("");
const [tab, setTab] = useState(Tab.tables);
const [layout, setLayout] = useState({ const [layout, setLayout] = useState({
header: true, header: true,
sidebar: true, sidebar: true,
@ -37,9 +40,9 @@ export default function Editor(props) {
if (w > 340) setWidth(w); if (w > 340) setWidth(w);
}; };
useEffect(()=>{ useEffect(() => {
document.title = "Editor"; document.title = "Editor";
}, []) }, []);
return ( return (
<LayoutContext.Provider value={{ layout, setLayout }}> <LayoutContext.Provider value={{ layout, setLayout }}>
@ -47,39 +50,41 @@ export default function Editor(props) {
value={{ tables, setTables, relationships, setRelationships }} value={{ tables, setTables, relationships, setRelationships }}
> >
<AreaContext.Provider value={{ areas, setAreas }}> <AreaContext.Provider value={{ areas, setAreas }}>
<div className="h-[100vh] overflow-hidden"> <TabContext.Provider value={{ tab, setTab }}>
<ControlPanel /> <div className="h-[100vh] overflow-hidden">
<div <ControlPanel />
className={ <div
layout.header className={
? `flex h-[calc(100vh-123.93px)]` layout.header
: `flex h-[calc(100vh-51.97px)]` ? `flex h-[calc(100vh-123.93px)]`
} : `flex h-[calc(100vh-51.97px)]`
onMouseUp={() => setResize(false)} }
onMouseMove={dragHandler} onMouseUp={() => setResize(false)}
> onMouseMove={dragHandler}
<DndProvider backend={HTML5Backend}> >
{layout.sidebar && ( <DndProvider backend={HTML5Backend}>
<EditorPanel {layout.sidebar && (
<EditorPanel
code={code}
setCode={setCode}
resize={resize}
setResize={setResize}
width={width}
selectedTable={selectedTable}
setSelectedTable={setSelectedTable}
/>
)}
<Canvas
code={code} code={code}
setCode={setCode} setCode={setCode}
resize={resize}
setResize={setResize}
width={width}
selectedTable={selectedTable} selectedTable={selectedTable}
setSelectedTable={setSelectedTable} setSelectedTable={setSelectedTable}
/> />
)} </DndProvider>
<Canvas {layout.services && <Sidebar />}
code={code} </div>
setCode={setCode}
selectedTable={selectedTable}
setSelectedTable={setSelectedTable}
/>
</DndProvider>
{layout.services && <Sidebar />}
</div> </div>
</div>{" "} </TabContext.Provider>
</AreaContext.Provider> </AreaContext.Provider>
</TableContext.Provider> </TableContext.Provider>
</LayoutContext.Provider> </LayoutContext.Provider>