diff --git a/packages/web/src/datagrid/ColumnManager.js b/packages/web/src/datagrid/ColumnManager.js
index 8797b747c..3dfc93b09 100644
--- a/packages/web/src/datagrid/ColumnManager.js
+++ b/packages/web/src/datagrid/ColumnManager.js
@@ -4,6 +4,7 @@ import ColumnLabel from './ColumnLabel';
import { filterName } from '@dbgate/datalib';
import { ExpandIcon } from '../icons';
import InlineButton from '../widgets/InlineButton';
+import { ManagerInnerContainer } from './ManagerStyles';
const Wrapper = styled.div``;
@@ -86,7 +87,7 @@ export default function ColumnManager(props) {
const { display } = props;
const [columnFilter, setColumnFilter] = React.useState('');
return (
-
+ <>
display.hideAllColumns()}>Hide
display.showAllColumns()}>Show
- {display
- .getColumns(columnFilter)
- .filter((column) => filterName(columnFilter, column.columnName))
- .map((column) => (
-
- ))}
-
+
+ {display
+ .getColumns(columnFilter)
+ .filter((column) => filterName(columnFilter, column.columnName))
+ .map((column) => (
+
+ ))}
+
+ >
);
}
diff --git a/packages/web/src/datagrid/DataGrid.js b/packages/web/src/datagrid/DataGrid.js
index 45c2e4d7d..05ecfed58 100644
--- a/packages/web/src/datagrid/DataGrid.js
+++ b/packages/web/src/datagrid/DataGrid.js
@@ -3,6 +3,17 @@ import styled from 'styled-components';
import DataGridCore from './DataGridCore';
import ColumnManager from './ColumnManager';
+import {
+ // SearchBoxWrapper,
+ // WidgetsInnerContainer,
+ // Input,
+ ManagerMainContainer,
+ ManagerOuterContainer1,
+ ManagerOuterContainer2,
+ WidgetTitle,
+} from './ManagerStyles';
+import ReferenceManager from './ReferenceManager';
+
const MainContainer = styled.div`
position: absolute;
left: 0;
@@ -17,6 +28,11 @@ const ColumnManagerContainer = styled.div`
overflow-y: scroll;
`;
+const LeftContainer = styled.div`
+ background-color: white;
+ display: flex;
+`;
+
const DataGridContainer = styled.div`
position: relative;
flex-grow: 1;
@@ -26,9 +42,22 @@ const DataGridContainer = styled.div`
export default function DataGrid(props) {
return (
-
+
+
+
+ Columns
+
+
+
+ References
+
+
+
+
+
+ {/*
-
+ */}
diff --git a/packages/web/src/datagrid/ManagerStyles.js b/packages/web/src/datagrid/ManagerStyles.js
new file mode 100644
index 000000000..63907546e
--- /dev/null
+++ b/packages/web/src/datagrid/ManagerStyles.js
@@ -0,0 +1,50 @@
+import styled from 'styled-components';
+import theme from '../theme';
+
+// export const SearchBoxWrapper = styled.div`
+// display: flex;
+// margin-bottom: 5px;
+// `;
+
+export const ManagerMainContainer = styled.div`
+ position: relative;
+ display: flex;
+ flex-flow: column wrap;
+ flex: 1;
+ flex-direction: column;
+ user-select: none;
+`;
+
+export const ManagerOuterContainer = styled.div`
+ flex: 1 1 0;
+ overflow: hidden;
+ position: relative;
+ flex-direction: column;
+ display: flex;
+`;
+
+export const ManagerOuterContainer1 = styled(ManagerOuterContainer)`
+ flex: 0 0 60%;
+`;
+
+export const ManagerOuterContainer2 = styled(ManagerOuterContainer)`
+ flex: 0 0 40%;
+`;
+
+export const ManagerInnerContainer = styled.div`
+ flex: 1 1;
+ overflow-y: scroll;
+`;
+
+export const Input = styled.input`
+ flex: 1;
+ min-width: 90px;
+`;
+
+export const WidgetTitle = styled.div`
+ padding: 5px;
+ font-weight: bold;
+ text-transform: uppercase;
+ background-color: gray;
+ // background-color: #CEC;
+`;
diff --git a/packages/web/src/datagrid/ReferenceManager.js b/packages/web/src/datagrid/ReferenceManager.js
new file mode 100644
index 000000000..c4579b626
--- /dev/null
+++ b/packages/web/src/datagrid/ReferenceManager.js
@@ -0,0 +1,78 @@
+import React from 'react';
+import styled from 'styled-components';
+import { ManagerInnerContainer } from './ManagerStyles';
+import { LinkIcon, ReferenceIcon } from '../icons';
+
+const SearchBoxWrapper = styled.div`
+ display: flex;
+ margin-bottom: 5px;
+`;
+
+const Input = styled.input`
+ flex: 1;
+ min-width: 90px;
+`;
+
+const Header = styled.div`
+ font-weight: bold;
+`;
+
+const LinkContainer = styled.div`
+ color: #337ab7;
+ margin: 5px;
+ &:hover {
+ text-decoration: underline;
+ }
+ cursor: pointer;
+ display: flex;
+`;
+
+const NameContainer = styled.div`
+ margin-left: 5px;
+`;
+
+function ManagerRow({ tableName, columns, Icon }) {
+ return (
+
+
+
+ {tableName} ({columns.map((x) => x.columnName).join(', ')})
+
+
+ );
+}
+
+/** @param props {import('./types').DataGridProps} */
+export default function ReferenceManager(props) {
+ const [filter, setFilter] = React.useState('');
+ const { display } = props;
+ const { baseTable } = display || {};
+ const { foreignKeys } = baseTable || {};
+ const { dependencies } = baseTable || {};
+
+ return (
+ <>
+
+ setFilter(e.target.value)} />
+
+
+ {foreignKeys && foreignKeys.length > 0 && (
+ <>
+ References tables ({foreignKeys.length})
+ {foreignKeys.map((fk) => (
+
+ ))}
+ >
+ )}
+ {dependencies && dependencies.length > 0 && (
+ <>
+ Dependend tables ({dependencies.length})
+ {dependencies.map((fk) => (
+
+ ))}
+ >
+ )}
+
+ >
+ );
+}
diff --git a/packages/web/src/widgets/DatabaseWidget.js b/packages/web/src/widgets/DatabaseWidget.js
index 74697a6be..53b95287f 100644
--- a/packages/web/src/widgets/DatabaseWidget.js
+++ b/packages/web/src/widgets/DatabaseWidget.js
@@ -7,8 +7,21 @@ import databaseAppObject from '../appobj/databaseAppObject';
import { useSetCurrentDatabase, useCurrentDatabase, useOpenedConnections } from '../utility/globalState';
import InlineButton from './InlineButton';
import databaseObjectAppObject from '../appobj/databaseObjectAppObject';
-import { useSqlObjectList, useDatabaseList, useConnectionList, useServerStatus, useDatabaseStatus } from '../utility/metadataLoaders';
-import { SearchBoxWrapper, InnerContainer, Input, MainContainer, OuterContainer, WidgetTitle } from './WidgetStyles';
+import {
+ useSqlObjectList,
+ useDatabaseList,
+ useConnectionList,
+ useServerStatus,
+ useDatabaseStatus,
+} from '../utility/metadataLoaders';
+import {
+ SearchBoxWrapper,
+ WidgetsInnerContainer,
+ Input,
+ WidgetsMainContainer,
+ WidgetsOuterContainer,
+ WidgetTitle,
+} from './WidgetStyles';
import axios from '../utility/axios';
import LoadingInfo from './LoadingInfo';
@@ -55,14 +68,14 @@ function ConnectionList() {
Refresh
-
+
-
+
>
);
}
@@ -93,7 +106,7 @@ function SqlObjectList({ conid, database }) {
/>
Refresh
-
+
{status && status.name == 'pending' ? (
) : (
@@ -104,7 +117,7 @@ function SqlObjectList({ conid, database }) {
filter={filter}
/>
)}
-
+
>
);
}
@@ -122,13 +135,13 @@ function SqlObjectListWrapper() {
export default function DatabaseWidget() {
return (
-
-
+
+
-
-
+
+
-
-
+
+
);
}
diff --git a/packages/web/src/widgets/FilesWidget.js b/packages/web/src/widgets/FilesWidget.js
index 6a7532f9f..2cfedc5b3 100644
--- a/packages/web/src/widgets/FilesWidget.js
+++ b/packages/web/src/widgets/FilesWidget.js
@@ -5,7 +5,14 @@ import _ from 'lodash';
import { AppObjectList } from '../appobj/AppObjectList';
import { useOpenedTabs, useSavedSqlFiles } from '../utility/globalState';
import openedTabAppObject from '../appobj/openedTabAppObject';
-import { SearchBoxWrapper, InnerContainer, Input, MainContainer, OuterContainer, WidgetTitle } from './WidgetStyles';
+import {
+ SearchBoxWrapper,
+ WidgetsInnerContainer,
+ Input,
+ WidgetsMainContainer,
+ WidgetsOuterContainer,
+ WidgetTitle,
+} from './WidgetStyles';
import savedSqlFileAppObject from '../appobj/savedSqlFileAppObject';
function OpenedTabsList() {
@@ -14,9 +21,9 @@ function OpenedTabsList() {
return (
<>
Opened tabs
-
+
-
+
>
);
}
@@ -27,22 +34,22 @@ function SavedSqlFilesList() {
return (
<>
Saved SQL files
-
+
-
+
>
);
}
export default function FilesWidget() {
return (
-
-
+
+
-
-
+
+
-
-
+
+
);
}
diff --git a/packages/web/src/widgets/WidgetStyles.js b/packages/web/src/widgets/WidgetStyles.js
index 5744761d6..913bab8d2 100644
--- a/packages/web/src/widgets/WidgetStyles.js
+++ b/packages/web/src/widgets/WidgetStyles.js
@@ -6,7 +6,7 @@ export const SearchBoxWrapper = styled.div`
margin-bottom: 5px;
`;
-export const MainContainer = styled.div`
+export const WidgetsMainContainer = styled.div`
position: relative;
display: flex;
flex-flow: column wrap;
@@ -15,7 +15,7 @@ export const MainContainer = styled.div`
user-select: none;
`;
-export const OuterContainer = styled.div`
+export const WidgetsOuterContainer = styled.div`
flex: 1 1 0;
overflow: hidden;
width: ${theme.leftPanel.width}px;
@@ -24,7 +24,7 @@ export const OuterContainer = styled.div`
display: flex;
`;
-export const InnerContainer = styled.div`
+export const WidgetsInnerContainer = styled.div`
flex: 1 1;
overflow: scroll;
width: ${theme.leftPanel.width}px;