mirror of
https://github.com/Unleash/unleash.git
synced 2025-07-31 13:47:02 +02:00
fix: tear down also event handlers in addon service (#10295)
This commit is contained in:
parent
082a6fdb16
commit
89cff9d533
@ -110,6 +110,13 @@ export default class EventService {
|
|||||||
return this.eventStore.on(eventName, listener);
|
return this.eventStore.on(eventName, listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
off(
|
||||||
|
eventName: string | symbol,
|
||||||
|
listener: (...args: any[]) => void,
|
||||||
|
): EventEmitter {
|
||||||
|
return this.eventStore.off(eventName, listener);
|
||||||
|
}
|
||||||
|
|
||||||
private async enhanceEventsWithTags(
|
private async enhanceEventsWithTags(
|
||||||
events: IBaseEvent[],
|
events: IBaseEvent[],
|
||||||
): Promise<IBaseEvent[]> {
|
): Promise<IBaseEvent[]> {
|
||||||
|
@ -59,6 +59,8 @@ export default class AddonService {
|
|||||||
fetchAddonConfigs: (() => Promise<IAddon[]>) &
|
fetchAddonConfigs: (() => Promise<IAddon[]>) &
|
||||||
memoizee.Memoized<() => Promise<IAddon[]>>;
|
memoizee.Memoized<() => Promise<IAddon[]>>;
|
||||||
|
|
||||||
|
private eventHandlers: Map<string, (event: IEvent) => void>;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
{
|
{
|
||||||
addonStore,
|
addonStore,
|
||||||
@ -83,6 +85,7 @@ export default class AddonService {
|
|||||||
this.logger = getLogger('services/addon-service.js');
|
this.logger = getLogger('services/addon-service.js');
|
||||||
this.tagTypeService = tagTypeService;
|
this.tagTypeService = tagTypeService;
|
||||||
this.eventService = eventService;
|
this.eventService = eventService;
|
||||||
|
this.eventHandlers = new Map();
|
||||||
|
|
||||||
this.addonProviders =
|
this.addonProviders =
|
||||||
addons ||
|
addons ||
|
||||||
@ -124,9 +127,11 @@ export default class AddonService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
registerEventHandler(): void {
|
registerEventHandler(): void {
|
||||||
SUPPORTED_EVENTS.forEach((eventName) =>
|
SUPPORTED_EVENTS.forEach((eventName) => {
|
||||||
this.eventService.onEvent(eventName, this.handleEvent(eventName)),
|
const handler = this.handleEvent(eventName);
|
||||||
);
|
this.eventHandlers.set(eventName, handler);
|
||||||
|
this.eventService.onEvent(eventName, handler);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
handleEvent(eventName: string): (event: IEvent) => void {
|
handleEvent(eventName: string): (event: IEvent) => void {
|
||||||
@ -349,6 +354,18 @@ export default class AddonService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
destroy(): void {
|
destroy(): void {
|
||||||
|
this.eventHandlers.forEach((handler, eventName) => {
|
||||||
|
try {
|
||||||
|
this.eventService.off(eventName, handler);
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.debug(
|
||||||
|
`Failed to remove event handler for ${eventName}:`,
|
||||||
|
error,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.eventHandlers.clear();
|
||||||
|
|
||||||
Object.values(this.addonProviders).forEach((addon) =>
|
Object.values(this.addonProviders).forEach((addon) =>
|
||||||
addon.destroy?.(),
|
addon.destroy?.(),
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user