mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-22 14:36:01 +00:00
apps loading optimalization
This commit is contained in:
@@ -53,12 +53,9 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
async emitChangedDbApp(folder) {
|
async emitChangedDbApp(folder) {
|
||||||
for (const conn of await connections.list()) {
|
const used = await this.getUsedAppFolders();
|
||||||
for (const db of conn.databases || []) {
|
if (used.includes(folder)) {
|
||||||
if (db[`useApp:${folder}`]) {
|
socket.emitChanged('used-apps-changed');
|
||||||
socket.emitChanged(`db-apps-changed-${conn._id}-${db.name}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -112,26 +109,55 @@ module.exports = {
|
|||||||
return `${name}${index}`;
|
return `${name}${index}`;
|
||||||
},
|
},
|
||||||
|
|
||||||
getAppsForDb_meta: true,
|
getUsedAppFolders_meta: true,
|
||||||
async getAppsForDb({ conid, database }) {
|
async getUsedAppFolders() {
|
||||||
const connection = await connections.get({ conid });
|
const list = await connections.list();
|
||||||
if (!connection) return [];
|
|
||||||
const db = (connection.databases || []).find(x => x.name == database);
|
|
||||||
const apps = [];
|
const apps = [];
|
||||||
const res = [];
|
|
||||||
if (db) {
|
for (const connection of list) {
|
||||||
for (const key of _.keys(db || {})) {
|
for (const db of connection.databases || []) {
|
||||||
if (key.startsWith('useApp:') && db[key]) {
|
for (const key of _.keys(db || {})) {
|
||||||
apps.push(key.substring('useApp:'.length));
|
if (key.startsWith('useApp:') && db[key]) {
|
||||||
|
apps.push(key.substring('useApp:'.length));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return _.uniq(apps);
|
||||||
|
},
|
||||||
|
|
||||||
|
getUsedApps_meta: true,
|
||||||
|
async getUsedApps() {
|
||||||
|
const apps = await this.getUsedAppFolders();
|
||||||
|
const res = [];
|
||||||
|
|
||||||
for (const folder of apps) {
|
for (const folder of apps) {
|
||||||
res.push(await this.loadApp({ folder }));
|
res.push(await this.loadApp({ folder }));
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// getAppsForDb_meta: true,
|
||||||
|
// async getAppsForDb({ conid, database }) {
|
||||||
|
// const connection = await connections.get({ conid });
|
||||||
|
// if (!connection) return [];
|
||||||
|
// const db = (connection.databases || []).find(x => x.name == database);
|
||||||
|
// const apps = [];
|
||||||
|
// const res = [];
|
||||||
|
// if (db) {
|
||||||
|
// for (const key of _.keys(db || {})) {
|
||||||
|
// if (key.startsWith('useApp:') && db[key]) {
|
||||||
|
// apps.push(key.substring('useApp:'.length));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// for (const folder of apps) {
|
||||||
|
// res.push(await this.loadApp({ folder }));
|
||||||
|
// }
|
||||||
|
// return res;
|
||||||
|
// },
|
||||||
|
|
||||||
loadApp_meta: true,
|
loadApp_meta: true,
|
||||||
async loadApp({ folder }) {
|
async loadApp({ folder }) {
|
||||||
const res = {
|
const res = {
|
||||||
|
|||||||
@@ -178,9 +178,10 @@ module.exports = {
|
|||||||
res = await this.datastore.insert(encrypted);
|
res = await this.datastore.insert(encrypted);
|
||||||
}
|
}
|
||||||
socket.emitChanged('connection-list-changed');
|
socket.emitChanged('connection-list-changed');
|
||||||
for (const db of connection.databases || []) {
|
socket.emitChanged('used-apps-changed');
|
||||||
socket.emitChanged(`db-apps-changed-${connection._id}-${db.name}`);
|
// for (const db of connection.databases || []) {
|
||||||
}
|
// socket.emitChanged(`db-apps-changed-${connection._id}-${db.name}`);
|
||||||
|
// }
|
||||||
return res;
|
return res;
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -204,7 +205,8 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
const res = await this.datastore.update({ _id: conid }, { $set: { databases } });
|
const res = await this.datastore.update({ _id: conid }, { $set: { databases } });
|
||||||
socket.emitChanged('connection-list-changed');
|
socket.emitChanged('connection-list-changed');
|
||||||
socket.emitChanged(`db-apps-changed-${conid}-${database}`);
|
socket.emitChanged('used-apps-changed');
|
||||||
|
// socket.emitChanged(`db-apps-changed-${conid}-${database}`);
|
||||||
return res;
|
return res;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
import { getDatabaseMenuItems } from './DatabaseAppObject.svelte';
|
import { getDatabaseMenuItems } from './DatabaseAppObject.svelte';
|
||||||
import getElectron from '../utility/getElectron';
|
import getElectron from '../utility/getElectron';
|
||||||
import getConnectionLabel from '../utility/getConnectionLabel';
|
import getConnectionLabel from '../utility/getConnectionLabel';
|
||||||
import { getDatabaseList, useDbApps } from '../utility/metadataLoaders';
|
import { getDatabaseList, useUsedApps } from '../utility/metadataLoaders';
|
||||||
import { getLocalStorage } from '../utility/storageCache';
|
import { getLocalStorage } from '../utility/storageCache';
|
||||||
import { apiCall } from '../utility/api';
|
import { apiCall } from '../utility/api';
|
||||||
|
|
||||||
@@ -187,7 +187,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$: apps = useDbApps({ conid: data?._id, database: data.defaultDatabase });
|
$: apps = useUsedApps();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<AppObjectCore
|
<AppObjectCore
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
<script lang="ts" context="module">
|
<script lang="ts" context="module">
|
||||||
export const extractKey = props => props.name;
|
export const extractKey = props => props.name;
|
||||||
|
|
||||||
|
export function filterAppsForDatabase(connection, database, $apps) {
|
||||||
|
const db = (connection?.databases || []).find(x => x.name == database);
|
||||||
|
return $apps.filter(app => db && db[`useApp:${app.name}`]);
|
||||||
|
}
|
||||||
|
|
||||||
export function getDatabaseMenuItems(connection, name, $extensions, $currentDatabase, $apps) {
|
export function getDatabaseMenuItems(connection, name, $extensions, $currentDatabase, $apps) {
|
||||||
|
const apps = filterAppsForDatabase(connection, name, $apps);
|
||||||
const handleNewQuery = () => {
|
const handleNewQuery = () => {
|
||||||
const tooltip = `${getConnectionLabel(connection)}\n${name}`;
|
const tooltip = `${getConnectionLabel(connection)}\n${name}`;
|
||||||
openNewTab({
|
openNewTab({
|
||||||
@@ -169,7 +175,7 @@
|
|||||||
|
|
||||||
const driver = findEngineDriver(connection, getExtensions());
|
const driver = findEngineDriver(connection, getExtensions());
|
||||||
|
|
||||||
const commands = _.flatten(($apps || []).map(x => x.commands || []));
|
const commands = _.flatten((apps || []).map(x => x.commands || []));
|
||||||
|
|
||||||
return [
|
return [
|
||||||
{ onClick: handleNewQuery, text: 'New query', isNewQuery: true },
|
{ onClick: handleNewQuery, text: 'New query', isNewQuery: true },
|
||||||
@@ -233,7 +239,7 @@
|
|||||||
import { showSnackbarSuccess } from '../utility/snackbar';
|
import { showSnackbarSuccess } from '../utility/snackbar';
|
||||||
import { findEngineDriver } from 'dbgate-tools';
|
import { findEngineDriver } from 'dbgate-tools';
|
||||||
import InputTextModal from '../modals/InputTextModal.svelte';
|
import InputTextModal from '../modals/InputTextModal.svelte';
|
||||||
import { getDatabaseInfo, useDbApps } from '../utility/metadataLoaders';
|
import { getDatabaseInfo, useUsedApps } from '../utility/metadataLoaders';
|
||||||
import { openJsonDocument } from '../tabs/JsonTab.svelte';
|
import { openJsonDocument } from '../tabs/JsonTab.svelte';
|
||||||
import { apiCall } from '../utility/api';
|
import { apiCall } from '../utility/api';
|
||||||
import ErrorMessageModal from '../modals/ErrorMessageModal.svelte';
|
import ErrorMessageModal from '../modals/ErrorMessageModal.svelte';
|
||||||
@@ -247,7 +253,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
$: isPinned = !!$pinnedDatabases.find(x => x.name == data.name && x.connection?._id == data.connection?._id);
|
$: isPinned = !!$pinnedDatabases.find(x => x.name == data.name && x.connection?._id == data.connection?._id);
|
||||||
$: apps = useDbApps({ conid: data?.connection?._id, database: data?.name });
|
$: apps = useUsedApps();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<AppObjectCore
|
<AppObjectCore
|
||||||
|
|||||||
@@ -115,10 +115,16 @@ const appFilesLoader = ({ folder }) => ({
|
|||||||
reloadTrigger: `app-files-changed-${folder}`,
|
reloadTrigger: `app-files-changed-${folder}`,
|
||||||
});
|
});
|
||||||
|
|
||||||
const dbAppsLoader = ({ conid, database }) => ({
|
// const dbAppsLoader = ({ conid, database }) => ({
|
||||||
url: 'apps/get-apps-for-db',
|
// url: 'apps/get-apps-for-db',
|
||||||
params: { conid, database },
|
// params: { conid, database },
|
||||||
reloadTrigger: `db-apps-changed-${conid}-${database}`,
|
// reloadTrigger: `db-apps-changed-${conid}-${database}`,
|
||||||
|
// });
|
||||||
|
|
||||||
|
const usedAppsLoader = ({ conid, database }) => ({
|
||||||
|
url: 'apps/get-used-apps',
|
||||||
|
params: { },
|
||||||
|
reloadTrigger: `used-apps-changed`,
|
||||||
});
|
});
|
||||||
|
|
||||||
const serverStatusLoader = () => ({
|
const serverStatusLoader = () => ({
|
||||||
@@ -433,13 +439,22 @@ export function useAppFolders(args = {}) {
|
|||||||
return useCore(appFoldersLoader, args);
|
return useCore(appFoldersLoader, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getDbApps(args = {}) {
|
|
||||||
return getCore(dbAppsLoader, args);
|
|
||||||
|
export function getUsedApps(args = {}) {
|
||||||
|
return getCore(usedAppsLoader, args);
|
||||||
}
|
}
|
||||||
export function useDbApps(args = {}) {
|
export function useUsedApps(args = {}) {
|
||||||
return useCore(dbAppsLoader, args);
|
return useCore(usedAppsLoader, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// export function getDbApps(args = {}) {
|
||||||
|
// return getCore(dbAppsLoader, args);
|
||||||
|
// }
|
||||||
|
// export function useDbApps(args = {}) {
|
||||||
|
// return useCore(dbAppsLoader, args);
|
||||||
|
// }
|
||||||
|
|
||||||
export function getInstalledPlugins(args = {}) {
|
export function getInstalledPlugins(args = {}) {
|
||||||
return getCore(installedPluginsLoader, args) || [];
|
return getCore(installedPluginsLoader, args) || [];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user