From 648e3a921e2dd0bdd9c8f346664dd2aff9472299 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Sun, 12 Apr 2020 19:50:29 +0200 Subject: [PATCH] metadata loaders refactor --- packages/web/src/appobj/tableAppObject.js | 2 +- packages/web/src/appobj/viewAppObject.js | 2 +- packages/web/src/tabs/QueryTab.js | 2 +- packages/web/src/tabs/TableCreateScriptTab.js | 3 +- packages/web/src/tabs/TableDataTab.js | 6 +- packages/web/src/tabs/TableStructureTab.js | 24 +++-- packages/web/src/tabs/ViewCreateScriptTab.js | 3 +- packages/web/src/tabs/ViewDataTab.js | 10 +- packages/web/src/utility/getConnectionInfo.js | 12 --- packages/web/src/utility/getTableInfo.js | 12 --- packages/web/src/utility/globalState.js | 4 +- packages/web/src/utility/metadataLoaders.js | 93 +++++++++++++++++++ packages/web/src/utility/useConnectionInfo.js | 10 -- packages/web/src/utility/useTableInfo.js | 11 --- packages/web/src/utility/useViewInfo.js | 11 --- 15 files changed, 116 insertions(+), 89 deletions(-) delete mode 100644 packages/web/src/utility/getConnectionInfo.js delete mode 100644 packages/web/src/utility/getTableInfo.js create mode 100644 packages/web/src/utility/metadataLoaders.js delete mode 100644 packages/web/src/utility/useConnectionInfo.js delete mode 100644 packages/web/src/utility/useTableInfo.js delete mode 100644 packages/web/src/utility/useViewInfo.js diff --git a/packages/web/src/appobj/tableAppObject.js b/packages/web/src/appobj/tableAppObject.js index fcb57bae7..fbd644d29 100644 --- a/packages/web/src/appobj/tableAppObject.js +++ b/packages/web/src/appobj/tableAppObject.js @@ -2,7 +2,7 @@ import React from 'react'; import { TableIcon } from '../icons'; import { DropDownMenuItem } from '../modals/DropDownMenu'; import { openNewTab } from '../utility/common'; -import getConnectionInfo from '../utility/getConnectionInfo'; +import { getConnectionInfo } from '../utility/metadataLoaders'; import fullDisplayName from '../utility/fullDisplayName'; import { filterName } from '@dbgate/datalib'; diff --git a/packages/web/src/appobj/viewAppObject.js b/packages/web/src/appobj/viewAppObject.js index 64bf2d59d..95fd32cc1 100644 --- a/packages/web/src/appobj/viewAppObject.js +++ b/packages/web/src/appobj/viewAppObject.js @@ -2,7 +2,7 @@ import React from 'react'; import { ViewIcon } from '../icons'; import { DropDownMenuItem } from '../modals/DropDownMenu'; import { openNewTab } from '../utility/common'; -import getConnectionInfo from '../utility/getConnectionInfo'; +import { getConnectionInfo } from '../utility/metadataLoaders'; import fullDisplayName from '../utility/fullDisplayName'; import { filterName } from '@dbgate/datalib'; diff --git a/packages/web/src/tabs/QueryTab.js b/packages/web/src/tabs/QueryTab.js index 6ccdf8139..193f7e32f 100644 --- a/packages/web/src/tabs/QueryTab.js +++ b/packages/web/src/tabs/QueryTab.js @@ -2,7 +2,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import _ from 'lodash'; import axios from '../utility/axios'; -import useConnectionInfo from '../utility/useConnectionInfo'; +import { useConnectionInfo } from '../utility/metadataLoaders'; import SqlEditor from '../sqleditor/SqlEditor'; import { useUpdateDatabaseForTab } from '../utility/globalState'; import QueryToolbar from '../query/QueryToolbar'; diff --git a/packages/web/src/tabs/TableCreateScriptTab.js b/packages/web/src/tabs/TableCreateScriptTab.js index 1935a18a5..242702355 100644 --- a/packages/web/src/tabs/TableCreateScriptTab.js +++ b/packages/web/src/tabs/TableCreateScriptTab.js @@ -1,7 +1,6 @@ import React from 'react'; import engines from '@dbgate/engines'; -import useTableInfo from '../utility/useTableInfo'; -import useConnectionInfo from '../utility/useConnectionInfo'; +import { useTableInfo, useConnectionInfo } from '../utility/metadataLoaders'; import SqlEditor from '../sqleditor/SqlEditor'; export default function TableCreateScriptTab({ conid, database, schemaName, pureName }) { diff --git a/packages/web/src/tabs/TableDataTab.js b/packages/web/src/tabs/TableDataTab.js index 859211ec7..99386c92b 100644 --- a/packages/web/src/tabs/TableDataTab.js +++ b/packages/web/src/tabs/TableDataTab.js @@ -4,10 +4,8 @@ import styled from 'styled-components'; import theme from '../theme'; import DataGrid from '../datagrid/DataGrid'; import { TableGridDisplay, createGridConfig, createGridCache, createChangeSet } from '@dbgate/datalib'; -import useTableInfo from '../utility/useTableInfo'; -import useConnectionInfo from '../utility/useConnectionInfo'; +import { useTableInfo, useConnectionInfo, getTableInfo } from '../utility/metadataLoaders'; import engines from '@dbgate/engines'; -import getTableInfo from '../utility/getTableInfo'; import useUndoReducer from '../utility/useUndoReducer'; import usePropsCompare from '../utility/usePropsCompare'; import { useUpdateDatabaseForTab } from '../utility/globalState'; @@ -26,7 +24,7 @@ export default function TableDataTab({ conid, database, schemaName, pureName, ta const display = React.useMemo( () => tableInfo && connection - ? new TableGridDisplay(tableInfo, engines(connection), config, setConfig, cache, setCache, name => + ? new TableGridDisplay(tableInfo, engines(connection), config, setConfig, cache, setCache, (name) => getTableInfo({ conid, database, ...name }) ) : null, diff --git a/packages/web/src/tabs/TableStructureTab.js b/packages/web/src/tabs/TableStructureTab.js index 5fdda944d..dec18710c 100644 --- a/packages/web/src/tabs/TableStructureTab.js +++ b/packages/web/src/tabs/TableStructureTab.js @@ -1,13 +1,11 @@ import React from 'react'; import styled from 'styled-components'; import _ from 'lodash'; -import theme from '../theme'; -import useFetch from '../utility/useFetch'; import ObjectListControl from '../utility/ObjectListControl'; import { TableColumn } from '../utility/TableControl'; import columnAppObject from '../appobj/columnAppObject'; import constraintAppObject from '../appobj/constraintAppObject'; -import useTableInfo from '../utility/useTableInfo'; +import { useTableInfo } from '../utility/metadataLoaders'; const WhitePage = styled.div` position: absolute; @@ -33,7 +31,7 @@ export default function TableStructureTab({ conid, database, schemaName, pureNam fieldName="notNull" header="Not NULL" sortable={true} - formatter={row => (row.notNull ? 'YES' : 'NO')} + formatter={(row) => (row.notNull ? 'YES' : 'NO')} /> @@ -41,14 +39,14 @@ export default function TableStructureTab({ conid, database, schemaName, pureNam fieldName="isSparse" header="Is Sparse" sortable={true} - formatter={row => (row.isSparse ? 'YES' : 'NO')} + formatter={(row) => (row.isSparse ? 'YES' : 'NO')} /> (row.isPersisted ? 'YES' : 'NO')} + formatter={(row) => (row.isPersisted ? 'YES' : 'NO')} /> {/* {_.includes(dbCaps.columnListOptionalColumns, 'referencedTableNamesFormatted') && ( @@ -80,7 +78,7 @@ export default function TableStructureTab({ conid, database, schemaName, pureNam row.columns.map(x => x.columnName).join(', ')} + formatter={(row) => row.columns.map((x) => x.columnName).join(', ')} /> @@ -88,13 +86,13 @@ export default function TableStructureTab({ conid, database, schemaName, pureNam row.columns.map(x => x.columnName).join(', ')} + formatter={(row) => row.columns.map((x) => x.columnName).join(', ')} /> - row.refTableName} /> + row.refTableName} /> row.columns.map(x => x.refColumnName).join(', ')} + formatter={(row) => row.columns.map((x) => x.refColumnName).join(', ')} /> @@ -104,13 +102,13 @@ export default function TableStructureTab({ conid, database, schemaName, pureNam row.columns.map(x => x.columnName).join(', ')} + formatter={(row) => row.columns.map((x) => x.columnName).join(', ')} /> - row.pureName} /> + row.pureName} /> row.columns.map(x => x.refColumnName).join(', ')} + formatter={(row) => row.columns.map((x) => x.refColumnName).join(', ')} /> diff --git a/packages/web/src/tabs/ViewCreateScriptTab.js b/packages/web/src/tabs/ViewCreateScriptTab.js index 78e38f450..2f531c387 100644 --- a/packages/web/src/tabs/ViewCreateScriptTab.js +++ b/packages/web/src/tabs/ViewCreateScriptTab.js @@ -1,7 +1,6 @@ import React from 'react'; -import useConnectionInfo from '../utility/useConnectionInfo'; +import { useConnectionInfo, useViewInfo } from '../utility/metadataLoaders'; import SqlEditor from '../sqleditor/SqlEditor'; -import useViewInfo from '../utility/useViewInfo'; export default function ViewCreateScriptTab({ conid, database, schemaName, pureName }) { const viewInfo = useViewInfo({ conid, database, schemaName, pureName }); diff --git a/packages/web/src/tabs/ViewDataTab.js b/packages/web/src/tabs/ViewDataTab.js index 82d57bdbf..5097d378f 100644 --- a/packages/web/src/tabs/ViewDataTab.js +++ b/packages/web/src/tabs/ViewDataTab.js @@ -4,14 +4,11 @@ import styled from 'styled-components'; import theme from '../theme'; import DataGrid from '../datagrid/DataGrid'; import { ViewGridDisplay, createGridConfig, createGridCache, createChangeSet } from '@dbgate/datalib'; -import useTableInfo from '../utility/useTableInfo'; -import useConnectionInfo from '../utility/useConnectionInfo'; +import { useConnectionInfo, useViewInfo } from '../utility/metadataLoaders'; import engines from '@dbgate/engines'; -import getTableInfo from '../utility/getTableInfo'; import useUndoReducer from '../utility/useUndoReducer'; import usePropsCompare from '../utility/usePropsCompare'; import { useUpdateDatabaseForTab } from '../utility/globalState'; -import useViewInfo from '../utility/useViewInfo'; export default function ViewDataTab({ conid, database, schemaName, pureName, tabVisible, toolbarPortalRef }) { const viewInfo = useViewInfo({ conid, database, schemaName, pureName }); @@ -26,9 +23,8 @@ export default function ViewDataTab({ conid, database, schemaName, pureName, tab const display = React.useMemo( () => - viewInfo && connection - ? new ViewGridDisplay(viewInfo, engines(connection), config, setConfig, cache, setCache, - ) + viewInfo && connection + ? new ViewGridDisplay(viewInfo, engines(connection), config, setConfig, cache, setCache) : null, [viewInfo, connection, config, cache] ); diff --git a/packages/web/src/utility/getConnectionInfo.js b/packages/web/src/utility/getConnectionInfo.js deleted file mode 100644 index 9ab0a79fb..000000000 --- a/packages/web/src/utility/getConnectionInfo.js +++ /dev/null @@ -1,12 +0,0 @@ -import axios from './axios'; - -export default async function getConnectionInfo(conid) { - const resp = await axios.request({ - method: 'get', - params: { conid }, - url: 'connections/get', - }); - /** @type {import('@dbgate/types').StoredConnection} */ - const res = resp.data; - return res; -} diff --git a/packages/web/src/utility/getTableInfo.js b/packages/web/src/utility/getTableInfo.js deleted file mode 100644 index f81194cfa..000000000 --- a/packages/web/src/utility/getTableInfo.js +++ /dev/null @@ -1,12 +0,0 @@ -import axios from './axios'; - -export default async function getTableInfo({ conid, database, schemaName, pureName }) { - const resp = await axios.request({ - method: 'get', - url: 'metadata/table-info', - params: { conid, database, schemaName, pureName }, - }); - /** @type {import('@dbgate/types').TableInfo} */ - const res = resp.data; - return res; -} diff --git a/packages/web/src/utility/globalState.js b/packages/web/src/utility/globalState.js index 019b6c5cc..c64c33d0f 100644 --- a/packages/web/src/utility/globalState.js +++ b/packages/web/src/utility/globalState.js @@ -1,7 +1,7 @@ import _ from 'lodash'; import React from 'react'; import useStorage from './useStorage'; -import useConnectionInfo from './useConnectionInfo'; +import { useConnectionInfo } from './metadataLoaders'; import usePrevious from './usePrevious'; function createGlobalState(defaultValue) { @@ -50,7 +50,7 @@ const [CurrentDatabaseProvider, useCurrentDatabase, useSetCurrentDatabaseCore] = function useSetCurrentDatabase() { const setDb = useSetCurrentDatabaseCore(); const db = useCurrentDatabase(); - return value => { + return (value) => { if (_.get(db, 'name') !== _.get(value, 'name') || _.get(db, 'connection._id') != _.get(value, 'connection._id')) { setDb(value); } diff --git a/packages/web/src/utility/metadataLoaders.js b/packages/web/src/utility/metadataLoaders.js new file mode 100644 index 000000000..39304b8cb --- /dev/null +++ b/packages/web/src/utility/metadataLoaders.js @@ -0,0 +1,93 @@ +import useFetch from './useFetch'; +import axios from './axios'; + +// /** @returns {import('@dbgate/types').TableInfo} */ +// function makeTableInfo(x) { +// return x; +// } + +// const tableInfoLoader = ({ conid, database, schemaName, pureName }) => ({ +// url: 'metadata/table-info', +// params: { conid, database, schemaName, pureName }, +// reloadTrigger: `database-structure-changed-${conid}-${database}`, +// type: makeTableInfo, +// }); + +// function createGet(loader) { +// return async (args) => { +// const { url, params, reloadTrigger, type } = loader(args); +// const resp = await axios.request({ +// method: 'get', +// url, +// params, +// }); +// return type(resp.data); +// }; +// } + +// function createUse(loader) { +// return async (args) => { +// const { url, params, reloadTrigger, type } = loader(args); + +// const res = useFetch({ +// url, +// params, +// reloadTrigger, +// }); +// return type(res); +// }; +// } + +// export const getTableInfo = createGet(tableInfoLoader); +// export const useTableInfo = createUse(tableInfoLoader); + +export async function getTableInfo({ conid, database, schemaName, pureName }) { + const resp = await axios.request({ + method: 'get', + url: 'metadata/table-info', + params: { conid, database, schemaName, pureName }, + }); + /** @type {import('@dbgate/types').TableInfo} */ + const res = resp.data; + return res; +} + +export function useTableInfo({ conid, database, schemaName, pureName }) { + /** @type {import('@dbgate/types').TableInfo} */ + const tableInfo = useFetch({ + url: 'metadata/table-info', + params: { conid, database, schemaName, pureName }, + reloadTrigger: `database-structure-changed-${conid}-${database}`, + }); + return tableInfo; +} + +export function useViewInfo({ conid, database, schemaName, pureName }) { + /** @type {import('@dbgate/types').ViewInfo} */ + const viewInfo = useFetch({ + url: 'metadata/view-info', + params: { conid, database, schemaName, pureName }, + reloadTrigger: `database-structure-changed-${conid}-${database}`, + }); + return viewInfo; +} + +export function useConnectionInfo(conid) { + /** @type {import('@dbgate/types').StoredConnection} */ + const connection = useFetch({ + params: { conid }, + url: 'connections/get', + }); + return connection; +} + +export async function getConnectionInfo(conid) { + const resp = await axios.request({ + method: 'get', + params: { conid }, + url: 'connections/get', + }); + /** @type {import('@dbgate/types').StoredConnection} */ + const res = resp.data; + return res; +} diff --git a/packages/web/src/utility/useConnectionInfo.js b/packages/web/src/utility/useConnectionInfo.js deleted file mode 100644 index 369c98145..000000000 --- a/packages/web/src/utility/useConnectionInfo.js +++ /dev/null @@ -1,10 +0,0 @@ -import useFetch from './useFetch'; - -export default function useConnectionInfo(conid) { - /** @type {import('@dbgate/types').StoredConnection} */ - const connection = useFetch({ - params: { conid }, - url: 'connections/get', - }); - return connection; -} diff --git a/packages/web/src/utility/useTableInfo.js b/packages/web/src/utility/useTableInfo.js deleted file mode 100644 index 07c6a17b3..000000000 --- a/packages/web/src/utility/useTableInfo.js +++ /dev/null @@ -1,11 +0,0 @@ -import useFetch from './useFetch'; - -export default function useTableInfo({ conid, database, schemaName, pureName }) { - /** @type {import('@dbgate/types').TableInfo} */ - const tableInfo = useFetch({ - url: 'metadata/table-info', - params: { conid, database, schemaName, pureName }, - reloadTrigger: `database-structure-changed-${conid}-${database}`, - }); - return tableInfo; -} diff --git a/packages/web/src/utility/useViewInfo.js b/packages/web/src/utility/useViewInfo.js deleted file mode 100644 index 4d5120252..000000000 --- a/packages/web/src/utility/useViewInfo.js +++ /dev/null @@ -1,11 +0,0 @@ -import useFetch from './useFetch'; - -export default function useViewInfo({ conid, database, schemaName, pureName }) { - /** @type {import('@dbgate/types').ViewInfo} */ - const viewInfo = useFetch({ - url: 'metadata/view-info', - params: { conid, database, schemaName, pureName }, - reloadTrigger: `database-structure-changed-${conid}-${database}`, - }); - return viewInfo; -}