diff --git a/packages/web/src/appobj/SubDatabaseList.svelte b/packages/web/src/appobj/SubDatabaseList.svelte index d29956f06..4beec338e 100644 --- a/packages/web/src/appobj/SubDatabaseList.svelte +++ b/packages/web/src/appobj/SubDatabaseList.svelte @@ -4,13 +4,17 @@ import { useDatabaseList } from '../utility/metadataLoaders'; import AppObjectList from './AppObjectList.svelte'; import * as databaseAppObject from './DatabaseAppObject.svelte'; + import { volatileConnectionMapStore } from '../utility/api'; export let filter; export let data; export let passProps; $: 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); { + volatileConnectionMapValue = value; +}); +export const getVolatileConnectionMap = () => volatileConnectionMapValue; + +let volatileConnectionMapInvValue = {}; +volatileConnectionMapInvStore.subscribe(value => { + volatileConnectionMapInvValue = value; +}); +export const getVolatileConnectionInvMap = () => volatileConnectionMapInvValue; export function disableApi() { apiDisabled = true; @@ -33,23 +45,29 @@ export function enableApi() { } export function setVolatileConnectionRemapping(existingConnectionId, volatileConnectionId) { - volatileConnectionMap[existingConnectionId] = volatileConnectionId; - volatileConnectionMapInv[volatileConnectionId] = existingConnectionId; + volatileConnectionMapStore.update(x => ({ + ...x, + [existingConnectionId]: volatileConnectionId, + })); + volatileConnectionMapInvStore.update(x => ({ + ...x, + [volatileConnectionId]: existingConnectionId, + })); } export function getVolatileRemapping(conid) { - return volatileConnectionMap[conid] || conid; + return volatileConnectionMapValue[conid] || conid; } export function getVolatileRemappingInv(conid) { - return volatileConnectionMapInv[conid] || conid; + return volatileConnectionMapInvValue[conid] || conid; } export function removeVolatileMapping(conid) { - const mapped = volatileConnectionMap[conid]; + const mapped = volatileConnectionMapValue[conid]; if (mapped) { - delete volatileConnectionMap[conid]; - delete volatileConnectionMapInv[mapped]; + volatileConnectionMapStore.update(x => _.omit(x, conid)); + volatileConnectionMapInvStore.update(x => _.omit(x, mapped)); } } @@ -94,16 +112,16 @@ function processApiResponse(route, args, resp) { export function transformApiArgs(args) { return _.mapValues(args, (v, k) => { - if (k == 'conid' && v && volatileConnectionMap[v]) return volatileConnectionMap[v]; - if (k == 'conidArray' && _.isArray(v)) return v.map(x => volatileConnectionMap[x] || x); + if (k == 'conid' && v && volatileConnectionMapValue[v]) return volatileConnectionMapValue[v]; + if (k == 'conidArray' && _.isArray(v)) return v.map(x => volatileConnectionMapValue[x] || x); return v; }); } export function transformApiArgsInv(args) { return _.mapValues(args, (v, k) => { - if (k == 'conid' && v && volatileConnectionMapInv[v]) return volatileConnectionMapInv[v]; - if (k == 'conidArray' && _.isArray(v)) return v.map(x => volatileConnectionMapInv[x] || x); + if (k == 'conid' && v && volatileConnectionMapInvValue[v]) return volatileConnectionMapInvValue[v]; + if (k == 'conidArray' && _.isArray(v)) return v.map(x => volatileConnectionMapInvValue[x] || x); return v; }); } @@ -221,7 +239,7 @@ export function useApiCall(route, args, defaultValue) { } export function getVolatileConnections() { - return Object.values(volatileConnectionMap); + return Object.values(volatileConnectionMapValue); } export function installNewVolatileConnectionListener() { diff --git a/packages/web/src/utility/cache.ts b/packages/web/src/utility/cache.ts index 19a100d08..d4d082916 100644 --- a/packages/web/src/utility/cache.ts +++ b/packages/web/src/utility/cache.ts @@ -95,7 +95,9 @@ export async function subscribeCacheChange(reloadTrigger, cacheKey, reloadHandle if (!subscriptionsByReloadTrigger[itemString]) { subscriptionsByReloadTrigger[itemString] = []; } + console.log('+++++++++++++ SUBSCRIBE', itemString); 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) { + console.log('------------- UNSUBSCRIBE', itemString); delete subscriptionsByReloadTrigger[itemString]; } } @@ -118,6 +121,7 @@ export function dispatchCacheChange(reloadTrigger) { for (const item of getAsArray(reloadTrigger)) { const itemString = stableStringify(transformApiArgsInv(item)); + console.log('@@@@@@@@@@@@@@@@@@@@@@@@@ NOTIFYING ', itemString, subscriptionsByReloadTrigger[itemString]); if (subscriptionsByReloadTrigger[itemString]) { for (const handler of subscriptionsByReloadTrigger[itemString]) { handler(); diff --git a/packages/web/src/widgets/ConnectionList.svelte b/packages/web/src/widgets/ConnectionList.svelte index 6fd3025c2..03160390b 100644 --- a/packages/web/src/widgets/ConnectionList.svelte +++ b/packages/web/src/widgets/ConnectionList.svelte @@ -22,7 +22,7 @@ import { useConnectionColorFactory } from '../utility/useConnectionColor'; import FontIcon from '../icons/FontIcon.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 { plusExpandIcon, chevronExpandIcon } from '../icons/expandIcons'; import { safeJsonParse } from 'dbgate-tools'; @@ -37,7 +37,10 @@ $: connectionsWithStatus = $connections && $serverStatus - ? $connections.map(conn => ({ ...conn, status: $serverStatus[getVolatileRemapping(conn._id)] })) + ? $connections.map(conn => ({ + ...conn, + status: $serverStatus[$volatileConnectionMapStore[conn._id] || conn._id], + })) : $connections; $: connectionsWithStatusFiltered = connectionsWithStatus?.filter(