diff --git a/packages/web/src/appobj/tableAppObject.js b/packages/web/src/appobj/tableAppObject.js index fbd644d29..0effe57cf 100644 --- a/packages/web/src/appobj/tableAppObject.js +++ b/packages/web/src/appobj/tableAppObject.js @@ -7,7 +7,7 @@ import fullDisplayName from '../utility/fullDisplayName'; import { filterName } from '@dbgate/datalib'; async function openTableDetail(setOpenedTabs, tabComponent, { schemaName, pureName, conid, database }) { - const connection = await getConnectionInfo(conid); + const connection = await getConnectionInfo({ conid }); const tooltip = `${connection.displayName || connection.server}\n${database}\n${fullDisplayName({ schemaName, pureName, diff --git a/packages/web/src/appobj/viewAppObject.js b/packages/web/src/appobj/viewAppObject.js index 95fd32cc1..0629e9cc8 100644 --- a/packages/web/src/appobj/viewAppObject.js +++ b/packages/web/src/appobj/viewAppObject.js @@ -7,7 +7,7 @@ import fullDisplayName from '../utility/fullDisplayName'; import { filterName } from '@dbgate/datalib'; async function openViewDetail(setOpenedTabs, tabComponent, { schemaName, pureName, conid, database }) { - const connection = await getConnectionInfo(conid); + const connection = await getConnectionInfo({ conid }); const tooltip = `${connection.displayName || connection.server}\n${database}\n${fullDisplayName({ schemaName, pureName, diff --git a/packages/web/src/tabs/QueryTab.js b/packages/web/src/tabs/QueryTab.js index 193f7e32f..4d76f71d0 100644 --- a/packages/web/src/tabs/QueryTab.js +++ b/packages/web/src/tabs/QueryTab.js @@ -47,7 +47,7 @@ export default function QueryTab({ tabid, conid, database, tabVisible, toolbarPo const editorRef = React.useRef(null); useUpdateDatabaseForTab(tabVisible, conid, database); - const connection = useConnectionInfo(conid); + const connection = useConnectionInfo({ conid }); const handleChange = (text) => { if (text != null) queryTextRef.current = text; diff --git a/packages/web/src/tabs/TableCreateScriptTab.js b/packages/web/src/tabs/TableCreateScriptTab.js index 242702355..0c8482896 100644 --- a/packages/web/src/tabs/TableCreateScriptTab.js +++ b/packages/web/src/tabs/TableCreateScriptTab.js @@ -5,7 +5,7 @@ import SqlEditor from '../sqleditor/SqlEditor'; export default function TableCreateScriptTab({ conid, database, schemaName, pureName }) { const tableInfo = useTableInfo({ conid, database, schemaName, pureName }); - const connnection = useConnectionInfo(conid); + const connnection = useConnectionInfo({ conid }); if (!connnection || !tableInfo) return null; // console.log(tableInfo); diff --git a/packages/web/src/tabs/TableDataTab.js b/packages/web/src/tabs/TableDataTab.js index 99386c92b..3579f4862 100644 --- a/packages/web/src/tabs/TableDataTab.js +++ b/packages/web/src/tabs/TableDataTab.js @@ -17,7 +17,8 @@ export default function TableDataTab({ conid, database, schemaName, pureName, ta const [changeSetState, dispatchChangeSet] = useUndoReducer(createChangeSet()); useUpdateDatabaseForTab(tabVisible, conid, database); - const connection = useConnectionInfo(conid); + const connection = useConnectionInfo({ conid }); + console.log('GOT CONNECTION', connection); // usePropsCompare({ tableInfo, connection, config, cache }); diff --git a/packages/web/src/tabs/ViewCreateScriptTab.js b/packages/web/src/tabs/ViewCreateScriptTab.js index 2f531c387..422608a69 100644 --- a/packages/web/src/tabs/ViewCreateScriptTab.js +++ b/packages/web/src/tabs/ViewCreateScriptTab.js @@ -4,7 +4,7 @@ import SqlEditor from '../sqleditor/SqlEditor'; export default function ViewCreateScriptTab({ conid, database, schemaName, pureName }) { const viewInfo = useViewInfo({ conid, database, schemaName, pureName }); - const connnection = useConnectionInfo(conid); + const connnection = useConnectionInfo({ conid }); if (!connnection || !viewInfo) return null; return ; diff --git a/packages/web/src/tabs/ViewDataTab.js b/packages/web/src/tabs/ViewDataTab.js index 5097d378f..c9f33ea34 100644 --- a/packages/web/src/tabs/ViewDataTab.js +++ b/packages/web/src/tabs/ViewDataTab.js @@ -17,7 +17,7 @@ export default function ViewDataTab({ conid, database, schemaName, pureName, tab const [changeSetState, dispatchChangeSet] = useUndoReducer(createChangeSet()); useUpdateDatabaseForTab(tabVisible, conid, database); - const connection = useConnectionInfo(conid); + const connection = useConnectionInfo({ conid }); // usePropsCompare({ tableInfo, connection, config, cache }); diff --git a/packages/web/src/utility/globalState.js b/packages/web/src/utility/globalState.js index c64c33d0f..842d256b1 100644 --- a/packages/web/src/utility/globalState.js +++ b/packages/web/src/utility/globalState.js @@ -63,7 +63,7 @@ const [OpenedTabsProvider, useOpenedTabs, useSetOpenedTabs] = createStorageState export { OpenedTabsProvider, useOpenedTabs, useSetOpenedTabs }; export function useUpdateDatabaseForTab(tabVisible, conid, database) { - const connection = useConnectionInfo(conid); + const connection = useConnectionInfo({ conid }); const setDb = useSetCurrentDatabase(); const previousTabVisible = usePrevious(!!(tabVisible && connection)); diff --git a/packages/web/src/utility/metadataLoaders.js b/packages/web/src/utility/metadataLoaders.js index a1188cd67..22af3e17c 100644 --- a/packages/web/src/utility/metadataLoaders.js +++ b/packages/web/src/utility/metadataLoaders.js @@ -9,6 +9,18 @@ const tableInfoLoader = ({ conid, database, schemaName, pureName }) => ({ reloadTrigger: `database-structure-changed-${conid}-${database}`, }); +const viewInfoLoader = ({ conid, database, schemaName, pureName }) => ({ + url: 'metadata/view-info', + params: { conid, database, schemaName, pureName }, + reloadTrigger: `database-structure-changed-${conid}-${database}`, +}); + +const connectionInfoLoader = ({ conid }) => ({ + url: 'connections/get', + params: { conid }, + reloadTrigger: 'connection-list-changed', +}); + async function getCore(loader, args) { const { url, params, reloadTrigger } = loader(args); const key = stableStringify({ url, ...params }); @@ -53,55 +65,42 @@ export function getTableInfo(args) { export function useTableInfo(args) { return useCore(tableInfoLoader, args); } -// export const useTableInfo = createUse(tableInfoLoader); -// export async function getTableInfo({ conid, database, schemaName, pureName }) { +/** @returns {Promise} */ +export function getViewInfo(args) { + return getCore(viewInfoLoader, args); +} + +/** @returns {import('@dbgate/types').ViewInfo} */ +export function useViewInfo(args) { + return useCore(viewInfoLoader, args); +} + +/** @returns {Promise} */ +export function getConnectionInfo(args) { + return getCore(connectionInfoLoader, args); +} + +/** @returns {import('@dbgate/types').StoredConnection} */ +export function useConnectionInfo(args) { + return useCore(connectionInfoLoader, args); +} + +// 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', -// url: 'metadata/table-info', -// params: { conid, database, schemaName, pureName }, +// params: { conid }, +// url: 'connections/get', // }); -// /** @type {import('@dbgate/types').TableInfo} */ +// /** @type {import('@dbgate/types').StoredConnection} */ // 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/useFetch.js b/packages/web/src/utility/useFetch.js index 7fb2c9c16..4d300a6cd 100644 --- a/packages/web/src/utility/useFetch.js +++ b/packages/web/src/utility/useFetch.js @@ -38,26 +38,19 @@ export default function useFetch({ if (cacheKey) { const fromCache = cacheGet(cacheKey); - if (fromCache) return fromCache; - const res = await getCachedPromise(cacheKey, doLoad); - setValue([res, loadedIndicators]); - cacheSet(cacheKey, res, reloadTrigger); + if (fromCache) { + setValue([fromCache, loadedIndicators]); + } else { + const res = await getCachedPromise(cacheKey, doLoad); + cacheSet(cacheKey, res, reloadTrigger); + setValue([res, loadedIndicators]); + } } else { const res = await doLoad(); setValue([res, loadedIndicators]); } } - // React.useEffect(() => { - // loadValue(indicators); - // if (reloadTrigger && socket) { - // socket.on(reloadTrigger, handleReload); - // return () => { - // socket.off(reloadTrigger, handleReload); - // }; - // } - // }, [...indicators, socket]); - React.useEffect(() => { loadValue(indicators); }, [...indicators]);