mirror of
https://github.com/immich-app/immich.git
synced 2025-12-23 15:38:24 -08:00
refactor: server config and feature flags managers (#23894)
This commit is contained in:
28
web/src/lib/managers/feature-flags-manager.svelte.ts
Normal file
28
web/src/lib/managers/feature-flags-manager.svelte.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import { eventManager } from '$lib/managers/event-manager.svelte';
|
||||
import { getServerFeatures, type ServerFeaturesDto } from '@immich/sdk';
|
||||
|
||||
class FeatureFlagsManager {
|
||||
#value?: ServerFeaturesDto = $state();
|
||||
|
||||
constructor() {
|
||||
eventManager.on('SystemConfigUpdate', () => void this.#loadFeatureFlags());
|
||||
}
|
||||
|
||||
async init() {
|
||||
await this.#loadFeatureFlags();
|
||||
}
|
||||
|
||||
get value() {
|
||||
if (!this.#value) {
|
||||
throw new Error('Feature flags manager must be initialized first');
|
||||
}
|
||||
|
||||
return this.#value;
|
||||
}
|
||||
|
||||
async #loadFeatureFlags() {
|
||||
this.#value = await getServerFeatures();
|
||||
}
|
||||
}
|
||||
|
||||
export const featureFlagsManager = new FeatureFlagsManager();
|
||||
28
web/src/lib/managers/server-config-manager.svelte.ts
Normal file
28
web/src/lib/managers/server-config-manager.svelte.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import { eventManager } from '$lib/managers/event-manager.svelte';
|
||||
import { getServerConfig, type ServerConfigDto } from '@immich/sdk';
|
||||
|
||||
class ServerConfigManager {
|
||||
#value?: ServerConfigDto = $state();
|
||||
|
||||
constructor() {
|
||||
eventManager.on('SystemConfigUpdate', () => void this.loadServerConfig());
|
||||
}
|
||||
|
||||
async init() {
|
||||
await this.loadServerConfig();
|
||||
}
|
||||
|
||||
get value() {
|
||||
if (!this.#value) {
|
||||
throw new Error('Server config manager must be initialized first');
|
||||
}
|
||||
|
||||
return this.#value;
|
||||
}
|
||||
|
||||
async loadServerConfig() {
|
||||
this.#value = await getServerConfig();
|
||||
}
|
||||
}
|
||||
|
||||
export const serverConfigManager = new ServerConfigManager();
|
||||
55
web/src/lib/managers/system-config-manager.svelte.ts
Normal file
55
web/src/lib/managers/system-config-manager.svelte.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import { eventManager } from '$lib/managers/event-manager.svelte';
|
||||
import { getConfig, getConfigDefaults, type SystemConfigDto } from '@immich/sdk';
|
||||
import { cloneDeep } from 'lodash-es';
|
||||
|
||||
class SystemConfigManager {
|
||||
#value?: SystemConfigDto = $state();
|
||||
#defaultValue?: SystemConfigDto = $state();
|
||||
|
||||
constructor() {
|
||||
eventManager.on('SystemConfigUpdate', (config) => (this.#value = config));
|
||||
}
|
||||
|
||||
async init() {
|
||||
await this.#loadConfig();
|
||||
await this.#loadDefault();
|
||||
}
|
||||
|
||||
get value() {
|
||||
if (!this.#value) {
|
||||
throw new Error('Server config manager must be initialized first');
|
||||
}
|
||||
|
||||
return this.#value;
|
||||
}
|
||||
|
||||
set value(config: SystemConfigDto) {
|
||||
this.#value = config;
|
||||
}
|
||||
|
||||
get defaultValue() {
|
||||
if (!this.#defaultValue) {
|
||||
throw new Error('Server config manager must be initialized first');
|
||||
}
|
||||
|
||||
return this.#defaultValue;
|
||||
}
|
||||
|
||||
cloneValue() {
|
||||
return cloneDeep(this.value);
|
||||
}
|
||||
|
||||
cloneDefaultValue() {
|
||||
return cloneDeep(this.defaultValue);
|
||||
}
|
||||
|
||||
async #loadConfig() {
|
||||
this.#value = await getConfig();
|
||||
}
|
||||
|
||||
async #loadDefault() {
|
||||
this.#defaultValue = await getConfigDefaults();
|
||||
}
|
||||
}
|
||||
|
||||
export const systemConfigManager = new SystemConfigManager();
|
||||
Reference in New Issue
Block a user