From a9a5ad4efbbafa6be57705d77dc982cddceaab9d Mon Sep 17 00:00:00 2001 From: midzelis Date: Sat, 24 Jan 2026 18:29:13 +0000 Subject: [PATCH] feat: add onMany to BaseEventManager --- web/src/lib/managers/upload-manager.svelte.ts | 6 ++++-- web/src/lib/stores/memory.store.svelte.ts | 6 ++++-- web/src/lib/stores/notification-manager.svelte.ts | 6 ++++-- web/src/lib/utils/base-event-manager.svelte.ts | 9 +++++++++ 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/web/src/lib/managers/upload-manager.svelte.ts b/web/src/lib/managers/upload-manager.svelte.ts index 1b5b73ecd9..dd8e7c9076 100644 --- a/web/src/lib/managers/upload-manager.svelte.ts +++ b/web/src/lib/managers/upload-manager.svelte.ts @@ -6,8 +6,10 @@ class UploadManager { mediaTypes = $state({ image: [], sidecar: [], video: [] }); constructor() { - eventManager.on('AppInit', () => this.#loadExtensions()); - eventManager.on('AuthLogout', () => this.reset()); + eventManager.onMany([ + ['AppInit', () => this.#loadExtensions()], + ['AuthLogout', () => this.reset()], + ]); } reset() { diff --git a/web/src/lib/stores/memory.store.svelte.ts b/web/src/lib/stores/memory.store.svelte.ts index 623de24598..13836c1901 100644 --- a/web/src/lib/stores/memory.store.svelte.ts +++ b/web/src/lib/stores/memory.store.svelte.ts @@ -23,8 +23,10 @@ class MemoryStoreSvelte { #loading: Promise | undefined; constructor() { - eventManager.on('AuthLogout', () => this.clearCache()); - eventManager.on('AuthUserLoaded', () => this.initialize()); + eventManager.onMany([ + ['AuthLogout', () => this.clearCache()], + ['AuthUserLoaded', () => this.initialize()], + ]); } ready() { diff --git a/web/src/lib/stores/notification-manager.svelte.ts b/web/src/lib/stores/notification-manager.svelte.ts index 03b160b989..c0ef767945 100644 --- a/web/src/lib/stores/notification-manager.svelte.ts +++ b/web/src/lib/stores/notification-manager.svelte.ts @@ -8,8 +8,10 @@ class NotificationStore { notifications = $state([]); constructor() { - eventManager.on('AuthLogin', () => this.refresh()); - eventManager.on('AuthLogout', () => this.clear()); + eventManager.onMany([ + ['AuthLogin', () => this.refresh()], + ['AuthLogout', () => this.clear()], + ]); } async refresh() { diff --git a/web/src/lib/utils/base-event-manager.svelte.ts b/web/src/lib/utils/base-event-manager.svelte.ts index 50fa29b776..6524b196d5 100644 --- a/web/src/lib/utils/base-event-manager.svelte.ts +++ b/web/src/lib/utils/base-event-manager.svelte.ts @@ -30,6 +30,15 @@ export class BaseEventManager { }; } + onMany(subscriptions: Array<[T, EventCallback?]>) { + const cleanups = subscriptions.map(([event, callback]) => this.on(event, callback)); + return () => { + for (const cleanup of cleanups) { + cleanup(); + } + }; + } + emit(event: T, ...params: Events[T]) { const listeners = this.getListeners(event); for (const listener of listeners) {