mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-20 17:06:01 +00:00
activator
This commit is contained in:
52
packages/web/src/utility/createActivator.ts
Normal file
52
packages/web/src/utility/createActivator.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { getContext } from 'svelte';
|
||||
import { get_current_component, onMount, setContext } from 'svelte/internal';
|
||||
import invalidateCommands from '../commands/invalidateCommands';
|
||||
|
||||
const lastActiveDictionary = {};
|
||||
|
||||
export default function createActivator(name, activateOnTabVisible) {
|
||||
const instance = get_current_component();
|
||||
const tabVisible: any = getContext('tabVisible');
|
||||
const tabid = getContext('tabid');
|
||||
const parentActivatorInstance = getContext('parentActivatorInstance') as any;
|
||||
setContext('parentActivatorInstance', instance);
|
||||
let tabVisibleValue;
|
||||
|
||||
onMount(() => {
|
||||
const unsubscribeTabVisible = tabVisible.subscribe(value => {
|
||||
tabVisibleValue = value;
|
||||
if (activateOnTabVisible) {
|
||||
activate();
|
||||
}
|
||||
});
|
||||
invalidateCommands();
|
||||
|
||||
return () => {
|
||||
unsubscribeTabVisible();
|
||||
};
|
||||
});
|
||||
|
||||
const activate = () => {
|
||||
lastActiveDictionary[name] = instance;
|
||||
if (parentActivatorInstance) {
|
||||
parentActivatorInstance.activator.activate();
|
||||
}
|
||||
};
|
||||
|
||||
const getTabVisible = () => tabVisibleValue;
|
||||
|
||||
return {
|
||||
activate,
|
||||
tabid,
|
||||
getTabVisible,
|
||||
};
|
||||
}
|
||||
|
||||
export function getActiveComponent(name) {
|
||||
const current = lastActiveDictionary[name];
|
||||
if (!current) return null;
|
||||
if (!current.activator) return null;
|
||||
if (!current.activator.getTabVisible) return null;
|
||||
if (!current.activator.getTabVisible()) return null;
|
||||
return current;
|
||||
}
|
||||
Reference in New Issue
Block a user