diff --git a/packages/web/src/Screen.js b/packages/web/src/Screen.js
index f101c97a1..7b574e3c2 100644
--- a/packages/web/src/Screen.js
+++ b/packages/web/src/Screen.js
@@ -69,10 +69,11 @@ const StausBar = styled.div`
export default function Screen() {
const currentWidget = useCurrentWidget();
const leftPanelWidth = currentWidget ? theme.leftPanel.width : 0;
+ const toolbarPortalRef = React.useRef();
return (
<>
-
+
@@ -86,7 +87,7 @@ export default function Screen() {
-
+
>
diff --git a/packages/web/src/TabContent.js b/packages/web/src/TabContent.js
index 9ea38f9ed..f1074fe7d 100644
--- a/packages/web/src/TabContent.js
+++ b/packages/web/src/TabContent.js
@@ -26,7 +26,7 @@ function createTabComponent(selectedTab) {
return null;
}
-export default function TabContent() {
+export default function TabContent({ toolbarPortalRef }) {
const files = useOpenedTabs();
const [mountedTabs, setMountedTabs] = React.useState({});
@@ -52,7 +52,7 @@ export default function TabContent() {
return (
// @ts-ignore
-
+
);
});
diff --git a/packages/web/src/datagrid/DataGridCore.js b/packages/web/src/datagrid/DataGridCore.js
index b751e66ce..846f5481c 100644
--- a/packages/web/src/datagrid/DataGridCore.js
+++ b/packages/web/src/datagrid/DataGridCore.js
@@ -1,6 +1,7 @@
import moment from 'moment';
import _ from 'lodash';
import React from 'react';
+import ReactDOM from 'react-dom';
import useFetch from '../utility/useFetch';
import styled from 'styled-components';
import theme from '../theme';
@@ -39,6 +40,7 @@ import {
import { scriptToSql } from '@dbgate/sqltree';
import { sleep } from '../utility/common';
import { copyTextToClipboard } from '../utility/clipboard';
+import DataGridToolbar from './DataGridToolbar';
const GridContainer = styled.div`
position: absolute;
@@ -906,6 +908,9 @@ export default function DataGridCore(props) {
engine={display.engine}
onConfirm={handleConfirmSql}
/>
+ {props.toolbarPortalRef &&
+ tabVisible &&
+ ReactDOM.createPortal(, props.toolbarPortalRef.current)}
);
}
diff --git a/packages/web/src/datagrid/DataGridToolbar.js b/packages/web/src/datagrid/DataGridToolbar.js
new file mode 100644
index 000000000..67dc1d3aa
--- /dev/null
+++ b/packages/web/src/datagrid/DataGridToolbar.js
@@ -0,0 +1,6 @@
+import React from 'react';
+import { ToolbarButton } from '../widgets/Toolbar';
+
+export default function DataGridToolbar({ reload }) {
+ return Refresh;
+}
diff --git a/packages/web/src/datagrid/types.ts b/packages/web/src/datagrid/types.ts
index 81fe31720..db7ba7ecf 100644
--- a/packages/web/src/datagrid/types.ts
+++ b/packages/web/src/datagrid/types.ts
@@ -7,4 +7,5 @@ export interface DataGridProps {
tabVisible?: boolean;
changeSetState: { value: ChangeSet };
dispatchChangeSet: Function;
+ toolbarPortalRef: any;
}
diff --git a/packages/web/src/tabs/TableDataTab.js b/packages/web/src/tabs/TableDataTab.js
index dc4644f7b..ae5d174e1 100644
--- a/packages/web/src/tabs/TableDataTab.js
+++ b/packages/web/src/tabs/TableDataTab.js
@@ -10,7 +10,7 @@ import engines from '@dbgate/engines';
import getTableInfo from '../utility/getTableInfo';
import useUndoReducer from '../utility/useUndoReducer';
-export default function TableDataTab({ conid, database, schemaName, pureName, tabVisible }) {
+export default function TableDataTab({ conid, database, schemaName, pureName, tabVisible, toolbarPortalRef }) {
const tableInfo = useTableInfo({ conid, database, schemaName, pureName });
const [config, setConfig] = React.useState(createGridConfig());
const [cache, setCache] = React.useState(createGridCache());
@@ -40,6 +40,7 @@ export default function TableDataTab({ conid, database, schemaName, pureName, ta
tabVisible={tabVisible}
changeSetState={changeSetState}
dispatchChangeSet={dispatchChangeSet}
+ toolbarPortalRef={toolbarPortalRef}
/>
);
}
diff --git a/packages/web/src/widgets/Toolbar.js b/packages/web/src/widgets/Toolbar.js
index be3d5886c..c20a99d82 100644
--- a/packages/web/src/widgets/Toolbar.js
+++ b/packages/web/src/widgets/Toolbar.js
@@ -1,16 +1,18 @@
+import ReactDOM from 'react-dom';
import React from 'react';
import useModalState from '../modals/useModalState';
import ConnectionModal from '../modals/ConnectionModal';
import styled from 'styled-components';
import theme from '../theme';
+import { useOpenedTabs } from '../utility/globalState';
const ToolbarContainer = styled.div`
display: flex;
user-select: none;
`;
-const ToolbarButton = styled.div`
- // height: ${theme.toolBar.height-5}px;
+export const ToolbarButton = styled.div`
+ // height: ${theme.toolBar.height - 5}px;
// border: 1px solid gray;
padding: 5px;
margin: 2px;
@@ -22,15 +24,26 @@ const ToolbarButton = styled.div`
&:hover {
background-color: #286090;
}
-
`;
-export default function ToolBar() {
+export default function ToolBar({ toolbarPortalRef }) {
const modalState = useModalState();
+ const tabs = useOpenedTabs();
+ const selectedTab = tabs.find(x => x.selected);
+// React.useEffect(() => {
+// const node = toolbarPortalRef.current;
+// if (node) {
+// ReactDOM.unmountComponentAtNode(node);
+// while (node.lastElementChild) {
+// node.removeChild(node.lastElementChild);
+// }
+// }
+// }, [selectedTab]);
return (
Add connection
+
);
}