Remove callback map
parent
01713fb1ab
commit
d9b32bed2c
|
@ -6,9 +6,6 @@ import BaseStyle from '@primevue/core/base/style';
|
||||||
import PrimeVueService from '@primevue/core/service';
|
import PrimeVueService from '@primevue/core/service';
|
||||||
import { mergeProps } from 'vue';
|
import { mergeProps } from 'vue';
|
||||||
|
|
||||||
const _themesCallback = new Map();
|
|
||||||
const _configCallback = new Map();
|
|
||||||
|
|
||||||
const BaseDirective = {
|
const BaseDirective = {
|
||||||
_getMeta: (...args) => [isObject(args[0]) ? undefined : args[0], resolve(isObject(args[0]) ? args[0] : args[1])],
|
_getMeta: (...args) => [isObject(args[0]) ? undefined : args[0], resolve(isObject(args[0]) ? args[0] : args[1])],
|
||||||
_getConfig: (binding, vnode) => (binding?.instance?.$primevue || vnode?.ctx?.appContext?.config?.globalProperties?.$primevue)?.config,
|
_getConfig: (binding, vnode) => (binding?.instance?.$primevue || vnode?.ctx?.appContext?.config?.globalProperties?.$primevue)?.config,
|
||||||
|
@ -79,9 +76,11 @@ const BaseDirective = {
|
||||||
BaseDirective._loadThemeStyles(el.$instance, useStyleOptions);
|
BaseDirective._loadThemeStyles(el.$instance, useStyleOptions);
|
||||||
BaseDirective._loadScopedThemeStyles(el.$instance, useStyleOptions);
|
BaseDirective._loadScopedThemeStyles(el.$instance, useStyleOptions);
|
||||||
|
|
||||||
const loadStyle = () => BaseDirective._loadThemeStyles(el.$instance, useStyleOptions);
|
BaseDirective._removeThemeListeners(el.$instance);
|
||||||
|
|
||||||
BaseDirective._themeChangeListener(el.$instance, loadStyle);
|
el.$instance.$loadStyles = () => BaseDirective._loadThemeStyles(el.$instance, useStyleOptions);
|
||||||
|
|
||||||
|
BaseDirective._themeChangeListener(el.$instance.$loadStyles);
|
||||||
},
|
},
|
||||||
_loadCoreStyles(instance = {}, useStyleOptions) {
|
_loadCoreStyles(instance = {}, useStyleOptions) {
|
||||||
if (!Base.isStyleNameLoaded(instance.$style?.name) && instance.$style?.name) {
|
if (!Base.isStyleNameLoaded(instance.$style?.name) && instance.$style?.name) {
|
||||||
|
@ -135,32 +134,12 @@ const BaseDirective = {
|
||||||
instance.scopedStyleEl = scopedStyle.el;
|
instance.scopedStyleEl = scopedStyle.el;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_themeChangeListener(instance, callback = () => {}) {
|
_themeChangeListener(callback = () => {}) {
|
||||||
if (!instance || !callback) return;
|
|
||||||
|
|
||||||
// Store callback reference
|
|
||||||
let listeners = _themesCallback.get(instance.$attrSelector);
|
|
||||||
|
|
||||||
if (!listeners) {
|
|
||||||
listeners = new Set();
|
|
||||||
_themesCallback.set(instance.$attrSelector, listeners);
|
|
||||||
}
|
|
||||||
|
|
||||||
listeners.add(callback);
|
|
||||||
|
|
||||||
Base.clearLoadedStyleNames();
|
Base.clearLoadedStyleNames();
|
||||||
ThemeService.on('theme:change', callback);
|
ThemeService.on('theme:change', callback);
|
||||||
},
|
},
|
||||||
_removeThemeListeners(instance) {
|
_removeThemeListeners(instance) {
|
||||||
const listeners = _themesCallback.get(instance.$attrSelector);
|
ThemeService.off('theme:change', instance.$loadStyles);
|
||||||
|
|
||||||
if (listeners) {
|
|
||||||
listeners.forEach((callback) => {
|
|
||||||
ThemeService.off('theme:change', callback);
|
|
||||||
});
|
|
||||||
listeners.clear();
|
|
||||||
_themesCallback.delete(instance);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
_hook: (directiveName, hookName, el, binding, vnode, prevVnode) => {
|
_hook: (directiveName, hookName, el, binding, vnode, prevVnode) => {
|
||||||
const name = `on${toCapitalCase(hookName)}`;
|
const name = `on${toCapitalCase(hookName)}`;
|
||||||
|
@ -224,7 +203,7 @@ const BaseDirective = {
|
||||||
const handleWatchConfig = ({ newValue, oldValue }) => watchers?.['config']?.call(el.$instance, newValue, oldValue);
|
const handleWatchConfig = ({ newValue, oldValue }) => watchers?.['config']?.call(el.$instance, newValue, oldValue);
|
||||||
const handleWatchConfigRipple = ({ newValue, oldValue }) => watchers?.['config.ripple']?.call(el.$instance, newValue, oldValue);
|
const handleWatchConfigRipple = ({ newValue, oldValue }) => watchers?.['config.ripple']?.call(el.$instance, newValue, oldValue);
|
||||||
|
|
||||||
_configCallback.set(el.$instance.$attrSelector, { config: handleWatchConfig, 'config.ripple': handleWatchConfigRipple });
|
el.$instance.$watchersCallback = { config: handleWatchConfig, 'config.ripple': handleWatchConfigRipple };
|
||||||
|
|
||||||
// for 'config'
|
// for 'config'
|
||||||
watchers?.['config']?.call(el.$instance, el.$instance?.$primevueConfig);
|
watchers?.['config']?.call(el.$instance, el.$instance?.$primevueConfig);
|
||||||
|
@ -236,12 +215,11 @@ const BaseDirective = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const removeWatch = (el) => {
|
const removeWatch = (el) => {
|
||||||
const watchers = _configCallback.get(el.$instance.$attrSelector);
|
const watchers = el.$instance.$watchersCallback;
|
||||||
|
|
||||||
if (watchers) {
|
if (watchers) {
|
||||||
PrimeVueService.off('config:change', watchers.config);
|
PrimeVueService.off('config:change', watchers.config);
|
||||||
PrimeVueService.off('config:ripple:change', watchers['config.ripple']);
|
PrimeVueService.off('config:ripple:change', watchers['config.ripple']);
|
||||||
_configCallback.delete(el.$instance.$attrSelector);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue