mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-29 08:43:57 +00:00
volatile connection map
This commit is contained in:
@@ -4,13 +4,17 @@
|
|||||||
import { useDatabaseList } from '../utility/metadataLoaders';
|
import { useDatabaseList } from '../utility/metadataLoaders';
|
||||||
import AppObjectList from './AppObjectList.svelte';
|
import AppObjectList from './AppObjectList.svelte';
|
||||||
import * as databaseAppObject from './DatabaseAppObject.svelte';
|
import * as databaseAppObject from './DatabaseAppObject.svelte';
|
||||||
|
import { volatileConnectionMapStore } from '../utility/api';
|
||||||
|
|
||||||
export let filter;
|
export let filter;
|
||||||
export let data;
|
export let data;
|
||||||
export let passProps;
|
export let passProps;
|
||||||
|
|
||||||
$: databases = useDatabaseList({ conid: data._id });
|
$: databases = useDatabaseList({ conid: data._id });
|
||||||
console.log('USED DATABASE LIST', data._id);
|
$: console.log('USED DATABASE LIST', data._id);
|
||||||
|
|
||||||
|
// $: databases = useDatabaseList({ conid: $volatileConnectionMapStore[data._id] || data._id });
|
||||||
|
// $: console.log('USED DATABASE LIST', $volatileConnectionMapStore[data._id] || data._id);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<AppObjectList
|
<AppObjectList
|
||||||
|
|||||||
@@ -21,8 +21,20 @@ let apiLogging = false;
|
|||||||
let apiDisabled = false;
|
let apiDisabled = false;
|
||||||
const disabledOnOauth = isOauthCallback();
|
const disabledOnOauth = isOauthCallback();
|
||||||
|
|
||||||
const volatileConnectionMap = {};
|
export const volatileConnectionMapStore = writable({});
|
||||||
const volatileConnectionMapInv = {};
|
export const volatileConnectionMapInvStore = writable({});
|
||||||
|
|
||||||
|
let volatileConnectionMapValue = {};
|
||||||
|
volatileConnectionMapStore.subscribe(value => {
|
||||||
|
volatileConnectionMapValue = value;
|
||||||
|
});
|
||||||
|
export const getVolatileConnectionMap = () => volatileConnectionMapValue;
|
||||||
|
|
||||||
|
let volatileConnectionMapInvValue = {};
|
||||||
|
volatileConnectionMapInvStore.subscribe(value => {
|
||||||
|
volatileConnectionMapInvValue = value;
|
||||||
|
});
|
||||||
|
export const getVolatileConnectionInvMap = () => volatileConnectionMapInvValue;
|
||||||
|
|
||||||
export function disableApi() {
|
export function disableApi() {
|
||||||
apiDisabled = true;
|
apiDisabled = true;
|
||||||
@@ -33,23 +45,29 @@ export function enableApi() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function setVolatileConnectionRemapping(existingConnectionId, volatileConnectionId) {
|
export function setVolatileConnectionRemapping(existingConnectionId, volatileConnectionId) {
|
||||||
volatileConnectionMap[existingConnectionId] = volatileConnectionId;
|
volatileConnectionMapStore.update(x => ({
|
||||||
volatileConnectionMapInv[volatileConnectionId] = existingConnectionId;
|
...x,
|
||||||
|
[existingConnectionId]: volatileConnectionId,
|
||||||
|
}));
|
||||||
|
volatileConnectionMapInvStore.update(x => ({
|
||||||
|
...x,
|
||||||
|
[volatileConnectionId]: existingConnectionId,
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getVolatileRemapping(conid) {
|
export function getVolatileRemapping(conid) {
|
||||||
return volatileConnectionMap[conid] || conid;
|
return volatileConnectionMapValue[conid] || conid;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getVolatileRemappingInv(conid) {
|
export function getVolatileRemappingInv(conid) {
|
||||||
return volatileConnectionMapInv[conid] || conid;
|
return volatileConnectionMapInvValue[conid] || conid;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function removeVolatileMapping(conid) {
|
export function removeVolatileMapping(conid) {
|
||||||
const mapped = volatileConnectionMap[conid];
|
const mapped = volatileConnectionMapValue[conid];
|
||||||
if (mapped) {
|
if (mapped) {
|
||||||
delete volatileConnectionMap[conid];
|
volatileConnectionMapStore.update(x => _.omit(x, conid));
|
||||||
delete volatileConnectionMapInv[mapped];
|
volatileConnectionMapInvStore.update(x => _.omit(x, mapped));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,16 +112,16 @@ function processApiResponse(route, args, resp) {
|
|||||||
|
|
||||||
export function transformApiArgs(args) {
|
export function transformApiArgs(args) {
|
||||||
return _.mapValues(args, (v, k) => {
|
return _.mapValues(args, (v, k) => {
|
||||||
if (k == 'conid' && v && volatileConnectionMap[v]) return volatileConnectionMap[v];
|
if (k == 'conid' && v && volatileConnectionMapValue[v]) return volatileConnectionMapValue[v];
|
||||||
if (k == 'conidArray' && _.isArray(v)) return v.map(x => volatileConnectionMap[x] || x);
|
if (k == 'conidArray' && _.isArray(v)) return v.map(x => volatileConnectionMapValue[x] || x);
|
||||||
return v;
|
return v;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function transformApiArgsInv(args) {
|
export function transformApiArgsInv(args) {
|
||||||
return _.mapValues(args, (v, k) => {
|
return _.mapValues(args, (v, k) => {
|
||||||
if (k == 'conid' && v && volatileConnectionMapInv[v]) return volatileConnectionMapInv[v];
|
if (k == 'conid' && v && volatileConnectionMapInvValue[v]) return volatileConnectionMapInvValue[v];
|
||||||
if (k == 'conidArray' && _.isArray(v)) return v.map(x => volatileConnectionMapInv[x] || x);
|
if (k == 'conidArray' && _.isArray(v)) return v.map(x => volatileConnectionMapInvValue[x] || x);
|
||||||
return v;
|
return v;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -221,7 +239,7 @@ export function useApiCall(route, args, defaultValue) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getVolatileConnections() {
|
export function getVolatileConnections() {
|
||||||
return Object.values(volatileConnectionMap);
|
return Object.values(volatileConnectionMapValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function installNewVolatileConnectionListener() {
|
export function installNewVolatileConnectionListener() {
|
||||||
|
|||||||
@@ -95,7 +95,9 @@ export async function subscribeCacheChange(reloadTrigger, cacheKey, reloadHandle
|
|||||||
if (!subscriptionsByReloadTrigger[itemString]) {
|
if (!subscriptionsByReloadTrigger[itemString]) {
|
||||||
subscriptionsByReloadTrigger[itemString] = [];
|
subscriptionsByReloadTrigger[itemString] = [];
|
||||||
}
|
}
|
||||||
|
console.log('+++++++++++++ SUBSCRIBE', itemString);
|
||||||
subscriptionsByReloadTrigger[itemString].push(reloadHandler);
|
subscriptionsByReloadTrigger[itemString].push(reloadHandler);
|
||||||
|
console.log('SUBSCRIBED', subscriptionsByReloadTrigger[itemString]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,6 +110,7 @@ export async function unsubscribeCacheChange(reloadTrigger, cacheKey, reloadHand
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (subscriptionsByReloadTrigger[itemString].length == 0) {
|
if (subscriptionsByReloadTrigger[itemString].length == 0) {
|
||||||
|
console.log('------------- UNSUBSCRIBE', itemString);
|
||||||
delete subscriptionsByReloadTrigger[itemString];
|
delete subscriptionsByReloadTrigger[itemString];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -118,6 +121,7 @@ export function dispatchCacheChange(reloadTrigger) {
|
|||||||
|
|
||||||
for (const item of getAsArray(reloadTrigger)) {
|
for (const item of getAsArray(reloadTrigger)) {
|
||||||
const itemString = stableStringify(transformApiArgsInv(item));
|
const itemString = stableStringify(transformApiArgsInv(item));
|
||||||
|
console.log('@@@@@@@@@@@@@@@@@@@@@@@@@ NOTIFYING ', itemString, subscriptionsByReloadTrigger[itemString]);
|
||||||
if (subscriptionsByReloadTrigger[itemString]) {
|
if (subscriptionsByReloadTrigger[itemString]) {
|
||||||
for (const handler of subscriptionsByReloadTrigger[itemString]) {
|
for (const handler of subscriptionsByReloadTrigger[itemString]) {
|
||||||
handler();
|
handler();
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
import { useConnectionColorFactory } from '../utility/useConnectionColor';
|
import { useConnectionColorFactory } from '../utility/useConnectionColor';
|
||||||
import FontIcon from '../icons/FontIcon.svelte';
|
import FontIcon from '../icons/FontIcon.svelte';
|
||||||
import CloseSearchButton from '../buttons/CloseSearchButton.svelte';
|
import CloseSearchButton from '../buttons/CloseSearchButton.svelte';
|
||||||
import { apiCall, getVolatileRemapping } from '../utility/api';
|
import { apiCall, volatileConnectionMapStore } from '../utility/api';
|
||||||
import LargeButton from '../buttons/LargeButton.svelte';
|
import LargeButton from '../buttons/LargeButton.svelte';
|
||||||
import { plusExpandIcon, chevronExpandIcon } from '../icons/expandIcons';
|
import { plusExpandIcon, chevronExpandIcon } from '../icons/expandIcons';
|
||||||
import { safeJsonParse } from 'dbgate-tools';
|
import { safeJsonParse } from 'dbgate-tools';
|
||||||
@@ -37,7 +37,10 @@
|
|||||||
|
|
||||||
$: connectionsWithStatus =
|
$: connectionsWithStatus =
|
||||||
$connections && $serverStatus
|
$connections && $serverStatus
|
||||||
? $connections.map(conn => ({ ...conn, status: $serverStatus[getVolatileRemapping(conn._id)] }))
|
? $connections.map(conn => ({
|
||||||
|
...conn,
|
||||||
|
status: $serverStatus[$volatileConnectionMapStore[conn._id] || conn._id],
|
||||||
|
}))
|
||||||
: $connections;
|
: $connections;
|
||||||
|
|
||||||
$: connectionsWithStatusFiltered = connectionsWithStatus?.filter(
|
$: connectionsWithStatusFiltered = connectionsWithStatus?.filter(
|
||||||
|
|||||||
Reference in New Issue
Block a user