refactor: provider descriptor registry — eliminate provider-specific hardcoding

Replace all if/else chains keyed on provider type strings with a
descriptor-driven architecture. Each provider type (immich, gitea,
planka, scheduler, nut, google_photos) has a descriptor in
frontend/src/lib/providers/ that declares config fields, event
tracking fields, collection metadata, validation, and hooks.

Components now use getDescriptor(type) and render dynamically.
Dashboard provider card shows provider name + type when global
filter is active. Grid-items derived from registry.
This commit is contained in:
2026-03-24 12:40:33 +03:00
parent c6bb2b5b51
commit 8cb836e16c
19 changed files with 904 additions and 353 deletions
+24
View File
@@ -0,0 +1,24 @@
import type { ProviderDescriptor } from './types';
export const schedulerDescriptor: ProviderDescriptor = {
type: 'scheduler',
defaultName: 'Scheduler',
icon: 'mdiClockOutline',
hasUrl: false,
configFields: [],
buildConfig() {
return { config: {} };
},
hasConfigChanged() {
return false;
},
eventFields: [
{ key: 'track_scheduled_message', label: 'trackingConfig.scheduledMessage', default: true },
],
collectionMeta: null,
};