diff --git a/web/src/lib/components/admin-settings/AdminSettings.svelte b/web/src/lib/components/admin-settings/AdminSettings.svelte deleted file mode 100644 index d8fde9e29b..0000000000 --- a/web/src/lib/components/admin-settings/AdminSettings.svelte +++ /dev/null @@ -1,78 +0,0 @@ - - -{#if savedConfig && defaultConfig} - {@render children({ savedConfig, defaultConfig })} -{/if} diff --git a/web/src/lib/components/admin-settings/AuthSettings.svelte b/web/src/lib/components/admin-settings/AuthSettings.svelte index f88ec18ab9..c53060706e 100644 --- a/web/src/lib/components/admin-settings/AuthSettings.svelte +++ b/web/src/lib/components/admin-settings/AuthSettings.svelte @@ -6,8 +6,9 @@ import SettingButtonsRow from '$lib/components/shared-components/settings/SystemConfigButtonRow.svelte'; import { SettingInputFieldType } from '$lib/constants'; import FormatMessage from '$lib/elements/FormatMessage.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import AuthDisableLoginConfirmModal from '$lib/modals/AuthDisableLoginConfirmModal.svelte'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; import { handleError } from '$lib/utils/handle-error'; import { OAuthTokenEndpointAuthMethod, unlinkAllOAuthAccountsAdmin } from '@immich/sdk'; import { Button, modalManager, Text, toastManager } from '@immich/ui'; @@ -15,7 +16,7 @@ import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/BackupSettings.svelte b/web/src/lib/components/admin-settings/BackupSettings.svelte index aa198f88b8..fc374ddd6f 100644 --- a/web/src/lib/components/admin-settings/BackupSettings.svelte +++ b/web/src/lib/components/admin-settings/BackupSettings.svelte @@ -5,11 +5,12 @@ import SettingSwitch from '$lib/components/shared-components/settings/setting-switch.svelte'; import { SettingInputFieldType } from '$lib/constants'; import FormatMessage from '$lib/elements/FormatMessage.svelte'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/FFmpegSettings.svelte b/web/src/lib/components/admin-settings/FFmpegSettings.svelte index ff22960b49..83596069f9 100644 --- a/web/src/lib/components/admin-settings/FFmpegSettings.svelte +++ b/web/src/lib/components/admin-settings/FFmpegSettings.svelte @@ -7,7 +7,8 @@ import SettingButtonsRow from '$lib/components/shared-components/settings/SystemConfigButtonRow.svelte'; import { SettingInputFieldType } from '$lib/constants'; import FormatMessage from '$lib/elements/FormatMessage.svelte'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { AudioCodec, CQMode, @@ -23,7 +24,7 @@ import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/ImageSettings.svelte b/web/src/lib/components/admin-settings/ImageSettings.svelte index d63e48d372..afed6b3738 100644 --- a/web/src/lib/components/admin-settings/ImageSettings.svelte +++ b/web/src/lib/components/admin-settings/ImageSettings.svelte @@ -8,10 +8,11 @@ import SettingSwitch from '$lib/components/shared-components/settings/setting-switch.svelte'; import SettingButtonsRow from '$lib/components/shared-components/settings/SystemConfigButtonRow.svelte'; import { SettingInputFieldType } from '$lib/constants'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { t } from 'svelte-i18n'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/JobSettings.svelte b/web/src/lib/components/admin-settings/JobSettings.svelte index 5fd7b4117f..fb8a11b33b 100644 --- a/web/src/lib/components/admin-settings/JobSettings.svelte +++ b/web/src/lib/components/admin-settings/JobSettings.svelte @@ -2,13 +2,14 @@ import SettingButtonsRow from '$lib/components/shared-components/settings/SystemConfigButtonRow.svelte'; import SettingInputField from '$lib/components/shared-components/settings/setting-input-field.svelte'; import { SettingInputFieldType } from '$lib/constants'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { getJobName } from '$lib/utils'; import { JobName, type SystemConfigJobDto } from '@immich/sdk'; import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/LibrarySettings.svelte b/web/src/lib/components/admin-settings/LibrarySettings.svelte index 83fc3fdbed..a91a5eb97a 100644 --- a/web/src/lib/components/admin-settings/LibrarySettings.svelte +++ b/web/src/lib/components/admin-settings/LibrarySettings.svelte @@ -6,11 +6,12 @@ import SettingButtonsRow from '$lib/components/shared-components/settings/SystemConfigButtonRow.svelte'; import { SettingInputFieldType } from '$lib/constants'; import FormatMessage from '$lib/elements/FormatMessage.svelte'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/LoggingSettings.svelte b/web/src/lib/components/admin-settings/LoggingSettings.svelte index 707689d502..6052b8ea9f 100644 --- a/web/src/lib/components/admin-settings/LoggingSettings.svelte +++ b/web/src/lib/components/admin-settings/LoggingSettings.svelte @@ -2,12 +2,13 @@ import SettingButtonsRow from '$lib/components/shared-components/settings/SystemConfigButtonRow.svelte'; import SettingSelect from '$lib/components/shared-components/settings/setting-select.svelte'; import SettingSwitch from '$lib/components/shared-components/settings/setting-switch.svelte'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { LogLevel } from '@immich/sdk'; import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/MachineLearningSettings.svelte b/web/src/lib/components/admin-settings/MachineLearningSettings.svelte index 773d30f05e..579efef916 100644 --- a/web/src/lib/components/admin-settings/MachineLearningSettings.svelte +++ b/web/src/lib/components/admin-settings/MachineLearningSettings.svelte @@ -6,14 +6,15 @@ import SettingButtonsRow from '$lib/components/shared-components/settings/SystemConfigButtonRow.svelte'; import { SettingInputFieldType } from '$lib/constants'; import FormatMessage from '$lib/elements/FormatMessage.svelte'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { Button, IconButton } from '@immich/ui'; import { mdiPlus, mdiTrashCanOutline } from '@mdi/js'; import { isEqual } from 'lodash-es'; import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); @@ -167,7 +168,7 @@ min={0.001} max={0.1} description={$t('admin.machine_learning_max_detection_distance_description')} - disabled={disabled || !$featureFlags.duplicateDetection} + disabled={disabled || !featureFlagsManager.value.duplicateDetection} isEdited={configToEdit.machineLearning.duplicateDetection.maxDistance !== config.machineLearning.duplicateDetection.maxDistance} /> diff --git a/web/src/lib/components/admin-settings/MapSettings.svelte b/web/src/lib/components/admin-settings/MapSettings.svelte index 5ecb9f5419..692a5cfcf5 100644 --- a/web/src/lib/components/admin-settings/MapSettings.svelte +++ b/web/src/lib/components/admin-settings/MapSettings.svelte @@ -5,11 +5,12 @@ import SettingButtonsRow from '$lib/components/shared-components/settings/SystemConfigButtonRow.svelte'; import { SettingInputFieldType } from '$lib/constants'; import FormatMessage from '$lib/elements/FormatMessage.svelte'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/MetadataSettings.svelte b/web/src/lib/components/admin-settings/MetadataSettings.svelte index 607faef51c..0db36e0e82 100644 --- a/web/src/lib/components/admin-settings/MetadataSettings.svelte +++ b/web/src/lib/components/admin-settings/MetadataSettings.svelte @@ -1,11 +1,12 @@ diff --git a/web/src/lib/components/admin-settings/NewVersionCheckSettings.svelte b/web/src/lib/components/admin-settings/NewVersionCheckSettings.svelte index 327bf34717..d8a79d6236 100644 --- a/web/src/lib/components/admin-settings/NewVersionCheckSettings.svelte +++ b/web/src/lib/components/admin-settings/NewVersionCheckSettings.svelte @@ -1,11 +1,12 @@ diff --git a/web/src/lib/components/admin-settings/NightlyTasksSettings.svelte b/web/src/lib/components/admin-settings/NightlyTasksSettings.svelte index 688c7cb4f0..9647f0c7c3 100644 --- a/web/src/lib/components/admin-settings/NightlyTasksSettings.svelte +++ b/web/src/lib/components/admin-settings/NightlyTasksSettings.svelte @@ -3,11 +3,12 @@ import SettingInputField from '$lib/components/shared-components/settings/setting-input-field.svelte'; import SettingSwitch from '$lib/components/shared-components/settings/setting-switch.svelte'; import { SettingInputFieldType } from '$lib/constants'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/NotificationSettings.svelte b/web/src/lib/components/admin-settings/NotificationSettings.svelte index 0e0af55c4f..e97af356df 100644 --- a/web/src/lib/components/admin-settings/NotificationSettings.svelte +++ b/web/src/lib/components/admin-settings/NotificationSettings.svelte @@ -5,8 +5,9 @@ import SettingSwitch from '$lib/components/shared-components/settings/setting-switch.svelte'; import SettingButtonsRow from '$lib/components/shared-components/settings/SystemConfigButtonRow.svelte'; import { SettingInputFieldType } from '$lib/constants'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { handleSystemConfigSave } from '$lib/services/system-config.service'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; import { user } from '$lib/stores/user.store'; import { handleError } from '$lib/utils/handle-error'; import { sendTestEmailAdmin } from '@immich/sdk'; @@ -14,7 +15,7 @@ import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/ServerSettings.svelte b/web/src/lib/components/admin-settings/ServerSettings.svelte index 4a04010cf3..936c4f406e 100644 --- a/web/src/lib/components/admin-settings/ServerSettings.svelte +++ b/web/src/lib/components/admin-settings/ServerSettings.svelte @@ -3,11 +3,12 @@ import SettingInputField from '$lib/components/shared-components/settings/setting-input-field.svelte'; import SettingSwitch from '$lib/components/shared-components/settings/setting-switch.svelte'; import { SettingInputFieldType } from '$lib/constants'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/StorageTemplateSettings.svelte b/web/src/lib/components/admin-settings/StorageTemplateSettings.svelte index c445769ae0..3dbf697de1 100644 --- a/web/src/lib/components/admin-settings/StorageTemplateSettings.svelte +++ b/web/src/lib/components/admin-settings/StorageTemplateSettings.svelte @@ -7,8 +7,9 @@ import SettingSwitch from '$lib/components/shared-components/settings/setting-switch.svelte'; import { AppRoute, SettingInputFieldType } from '$lib/constants'; import FormatMessage from '$lib/elements/FormatMessage.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { handleSystemConfigSave } from '$lib/services/system-config.service'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; import { user } from '$lib/stores/user.store'; import { getStorageTemplateOptions, type SystemConfigTemplateStorageOptionDto } from '@immich/sdk'; import { LoadingSpinner } from '@immich/ui'; @@ -27,7 +28,7 @@ const { minified = false, duration = 500, saveOnClose = false }: Props = $props(); - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/TemplateSettings.svelte b/web/src/lib/components/admin-settings/TemplateSettings.svelte index 6e64055879..7ef1bcde0d 100644 --- a/web/src/lib/components/admin-settings/TemplateSettings.svelte +++ b/web/src/lib/components/admin-settings/TemplateSettings.svelte @@ -2,8 +2,8 @@ import SettingAccordion from '$lib/components/shared-components/settings/setting-accordion.svelte'; import SettingTextarea from '$lib/components/shared-components/settings/setting-textarea.svelte'; import FormatMessage from '$lib/elements/FormatMessage.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import EmailTemplatePreviewModal from '$lib/modals/EmailTemplatePreviewModal.svelte'; - import { systemConfigManager } from '$lib/stores/system-config-manager.svelte'; import { handleError } from '$lib/utils/handle-error'; import { type SystemConfigDto, type SystemConfigTemplateEmailsDto, getNotificationTemplateAdmin } from '@immich/sdk'; import { Button, Icon, LoadingSpinner, modalManager } from '@immich/ui'; diff --git a/web/src/lib/components/admin-settings/ThemeSettings.svelte b/web/src/lib/components/admin-settings/ThemeSettings.svelte index 34c4246885..f2e9b51f11 100644 --- a/web/src/lib/components/admin-settings/ThemeSettings.svelte +++ b/web/src/lib/components/admin-settings/ThemeSettings.svelte @@ -1,11 +1,12 @@ diff --git a/web/src/lib/components/admin-settings/TrashSettings.svelte b/web/src/lib/components/admin-settings/TrashSettings.svelte index 5d811af841..9e71d0abc1 100644 --- a/web/src/lib/components/admin-settings/TrashSettings.svelte +++ b/web/src/lib/components/admin-settings/TrashSettings.svelte @@ -3,11 +3,12 @@ import SettingInputField from '$lib/components/shared-components/settings/setting-input-field.svelte'; import SettingSwitch from '$lib/components/shared-components/settings/setting-switch.svelte'; import { SettingInputFieldType } from '$lib/constants'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { t } from 'svelte-i18n'; import { fade } from 'svelte/transition'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/UserSettings.svelte b/web/src/lib/components/admin-settings/UserSettings.svelte index 3d91cff56a..23ea052b52 100644 --- a/web/src/lib/components/admin-settings/UserSettings.svelte +++ b/web/src/lib/components/admin-settings/UserSettings.svelte @@ -4,10 +4,11 @@ import SettingButtonsRow from '$lib/components/shared-components/settings/SystemConfigButtonRow.svelte'; import SettingInputField from '$lib/components/shared-components/settings/setting-input-field.svelte'; import { SettingInputFieldType } from '$lib/constants'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { t } from 'svelte-i18n'; - const disabled = $featureFlags.configFile; + const disabled = $derived(featureFlagsManager.value.configFile); const config = $derived(systemConfigManager.value); let configToEdit = $state(systemConfigManager.cloneValue()); diff --git a/web/src/lib/components/admin-settings/admin-settings.ts b/web/src/lib/components/admin-settings/admin-settings.ts deleted file mode 100644 index 6b0e70dee1..0000000000 --- a/web/src/lib/components/admin-settings/admin-settings.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { ResetOptions } from '$lib/utils/dipatch'; -import type { SystemConfigDto } from '@immich/sdk'; - -export type SettingsResetOptions = ResetOptions & { configKeys: Array }; diff --git a/web/src/lib/components/album-page/album-viewer.svelte b/web/src/lib/components/album-page/album-viewer.svelte index 7e882042cb..a7c9243e64 100644 --- a/web/src/lib/components/album-page/album-viewer.svelte +++ b/web/src/lib/components/album-page/album-viewer.svelte @@ -6,12 +6,12 @@ import SelectAllAssets from '$lib/components/timeline/actions/SelectAllAction.svelte'; import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import Timeline from '$lib/components/timeline/Timeline.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import { TimelineManager } from '$lib/managers/timeline-manager/timeline-manager.svelte'; import { handleDownloadAlbum } from '$lib/services/album.service'; import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { dragAndDropFilesStore } from '$lib/stores/drag-and-drop-files.store'; - import { featureFlags } from '$lib/stores/system-config-manager.svelte'; import { handlePromiseError } from '$lib/utils'; import { cancelMultiselect } from '$lib/utils/asset-utils'; import { fileUploadHandler, openFileUploadDialog } from '$lib/utils/file-uploader'; @@ -126,7 +126,7 @@ icon={mdiDownload} /> {/if} - {#if sharedLink.showMetadata && $featureFlags.loaded && $featureFlags.map} + {#if sharedLink.showMetadata && featureFlagsManager.value.map} {/if} diff --git a/web/src/lib/components/asset-viewer/actions/delete-action.svelte b/web/src/lib/components/asset-viewer/actions/delete-action.svelte index 84be7f3a79..74d40c7cee 100644 --- a/web/src/lib/components/asset-viewer/actions/delete-action.svelte +++ b/web/src/lib/components/asset-viewer/actions/delete-action.svelte @@ -3,8 +3,8 @@ import DeleteAssetDialog from '$lib/components/photos-page/delete-asset-dialog.svelte'; import { AssetAction } from '$lib/constants'; import Portal from '$lib/elements/Portal.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import { showDeleteModal } from '$lib/stores/preferences.store'; - import { featureFlags } from '$lib/stores/system-config-manager.svelte'; import { handleError } from '$lib/utils/handle-error'; import { toTimelineAsset } from '$lib/utils/timeline-util'; import { deleteAssets, type AssetResponseDto } from '@immich/sdk'; @@ -24,7 +24,7 @@ let showConfirmModal = $state(false); const trashOrDelete = async (force = false) => { - if (force || !$featureFlags.trash) { + if (force || !featureFlagsManager.value.trash) { if ($showDeleteModal) { showConfirmModal = true; return; diff --git a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.spec.ts b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.spec.ts index f6a46143bc..55231c11ae 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.spec.ts +++ b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.spec.ts @@ -32,6 +32,10 @@ describe('AssetViewerNavBar component', () => { 'ResizeObserver', vi.fn(() => ({ observe: vi.fn(), unobserve: vi.fn(), disconnect: vi.fn() })), ); + vi.mock(import('$lib/managers/feature-flags-manager.svelte'), () => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return { featureFlagsManager: { init: vi.fn(), loadFeatureFlags: vi.fn(), value: { smartSearch: true } } as any }; + }); }); afterEach(() => { diff --git a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte index 6c66b47286..7daade6379 100644 --- a/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte +++ b/web/src/lib/components/asset-viewer/asset-viewer-nav-bar.svelte @@ -24,8 +24,8 @@ import ButtonContextMenu from '$lib/components/shared-components/context-menu/button-context-menu.svelte'; import MenuOption from '$lib/components/shared-components/context-menu/menu-option.svelte'; import { AppRoute } from '$lib/constants'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import { photoViewerImgElement } from '$lib/stores/assets-store.svelte'; - import { featureFlags } from '$lib/stores/system-config-manager.svelte'; import { user } from '$lib/stores/user.store'; import { photoZoomState } from '$lib/stores/zoom-image.store'; import { getAssetJobName, getSharedLink } from '$lib/utils'; @@ -108,7 +108,7 @@ let isOwner = $derived($user && asset.ownerId === $user?.id); let showDownloadButton = $derived(sharedLink ? sharedLink.allowDownload : !asset.isOffline); let isLocked = $derived(asset.visibility === AssetVisibility.Locked); - let smartSearchEnabled = $derived($featureFlags.loaded && $featureFlags.smartSearch); + let smartSearchEnabled = $derived(featureFlagsManager.value.smartSearch); // $: showEditorButton = // isOwner && diff --git a/web/src/lib/components/asset-viewer/detail-panel.svelte b/web/src/lib/components/asset-viewer/detail-panel.svelte index 51c3098356..a9c447e498 100644 --- a/web/src/lib/components/asset-viewer/detail-panel.svelte +++ b/web/src/lib/components/asset-viewer/detail-panel.svelte @@ -7,11 +7,11 @@ import DetailPanelTags from '$lib/components/asset-viewer/detail-panel-tags.svelte'; import { AppRoute, QueryParameter, timeToLoadTheMap } from '$lib/constants'; import { authManager } from '$lib/managers/auth-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import AssetChangeDateModal from '$lib/modals/AssetChangeDateModal.svelte'; import { isFaceEditMode } from '$lib/stores/face-edit.svelte'; import { boundingBoxesArray } from '$lib/stores/people.store'; import { locale } from '$lib/stores/preferences.store'; - import { featureFlags } from '$lib/stores/system-config-manager.svelte'; import { preferences, user } from '$lib/stores/user.store'; import { getAssetThumbnailUrl, getPeopleThumbnailUrl } from '$lib/utils'; import { delay, getDimensions } from '$lib/utils/asset-utils'; @@ -438,7 +438,7 @@ -{#if latlng && $featureFlags.loaded && $featureFlags.map} +{#if latlng && featureFlagsManager.value.map}
{#await import('$lib/components/shared-components/map/map.svelte')} {#await delay(timeToLoadTheMap) then} diff --git a/web/src/lib/components/jobs/JobsPanel.svelte b/web/src/lib/components/jobs/JobsPanel.svelte index f9a4e5a735..e204c76648 100644 --- a/web/src/lib/components/jobs/JobsPanel.svelte +++ b/web/src/lib/components/jobs/JobsPanel.svelte @@ -1,5 +1,5 @@
diff --git a/web/src/lib/components/onboarding-page/onboarding-server-privacy.svelte b/web/src/lib/components/onboarding-page/onboarding-server-privacy.svelte index c7e5e6a71e..c299d0bc35 100644 --- a/web/src/lib/components/onboarding-page/onboarding-server-privacy.svelte +++ b/web/src/lib/components/onboarding-page/onboarding-server-privacy.svelte @@ -1,7 +1,7 @@ -{#if $featureFlags.loaded && $featureFlags.map} +{#if featureFlagsManager.value.map}
{#await import('$lib/components/shared-components/map/map.svelte')} diff --git a/web/src/routes/(user)/map/[[photos=photos]]/[[assetId=id]]/+page.ts b/web/src/routes/(user)/map/[[photos=photos]]/[[assetId=id]]/+page.ts index add9882bcd..e797c4d8b6 100644 --- a/web/src/routes/(user)/map/[[photos=photos]]/[[assetId=id]]/+page.ts +++ b/web/src/routes/(user)/map/[[photos=photos]]/[[assetId=id]]/+page.ts @@ -1,3 +1,7 @@ +import { goto } from '$app/navigation'; +import { AppRoute } from '$lib/constants'; +import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; +import { handlePromiseError } from '$lib/utils'; import { authenticate } from '$lib/utils/auth'; import { getFormatter } from '$lib/utils/i18n'; import { getAssetInfoFromParam } from '$lib/utils/navigation'; @@ -8,6 +12,10 @@ export const load = (async ({ params, url }) => { const asset = await getAssetInfoFromParam(params); const $t = await getFormatter(); + if (!featureFlagsManager.value.map) { + handlePromiseError(goto(AppRoute.PHOTOS)); + } + return { asset, meta: { diff --git a/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte index b1cbe51392..97964344ef 100644 --- a/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/search/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -21,11 +21,11 @@ import TagAction from '$lib/components/timeline/actions/TagAction.svelte'; import AssetSelectControlBar from '$lib/components/timeline/AssetSelectControlBar.svelte'; import { AppRoute, QueryParameter } from '$lib/constants'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import type { TimelineAsset, Viewport } from '$lib/managers/timeline-manager/types'; import { AssetInteraction } from '$lib/stores/asset-interaction.svelte'; import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { lang, locale } from '$lib/stores/preferences.store'; - import { featureFlags } from '$lib/stores/system-config-manager.svelte'; import { preferences } from '$lib/stores/user.store'; import { handlePromiseError } from '$lib/utils'; import { cancelMultiselect } from '$lib/utils/asset-utils'; @@ -67,7 +67,7 @@ type SearchTerms = MetadataSearchDto & Pick; let searchQuery = $derived(page.url.searchParams.get(QueryParameter.QUERY)); - let smartSearchEnabled = $derived($featureFlags.loaded && $featureFlags.smartSearch); + let smartSearchEnabled = $derived(featureFlagsManager.value.smartSearch); let terms = $derived(searchQuery ? JSON.parse(searchQuery) : {}); $effect(() => { diff --git a/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte index 87eb4eb70c..99aad49285 100644 --- a/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -1,5 +1,4 @@ -{#if $featureFlags.loaded && $featureFlags.trash} +{#if featureFlagsManager.value.trash} {#snippet buttons()} @@ -105,7 +99,9 @@

- {$t('trashed_items_will_be_permanently_deleted_after', { values: { days: $serverConfig.trashDays } })} + {$t('trashed_items_will_be_permanently_deleted_after', { + values: { days: serverConfigManager.value.trashDays }, + })}

{#snippet empty()} diff --git a/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.ts b/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.ts index 79c41892c7..eddf9aa6af 100644 --- a/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.ts +++ b/web/src/routes/(user)/trash/[[photos=photos]]/[[assetId=id]]/+page.ts @@ -1,3 +1,7 @@ +import { goto } from '$app/navigation'; +import { AppRoute } from '$lib/constants'; +import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; +import { handlePromiseError } from '$lib/utils'; import { authenticate } from '$lib/utils/auth'; import { getFormatter } from '$lib/utils/i18n'; import { getAssetInfoFromParam } from '$lib/utils/navigation'; @@ -8,6 +12,10 @@ export const load = (async ({ params, url }) => { const asset = await getAssetInfoFromParam(params); const $t = await getFormatter(); + if (!featureFlagsManager.value.trash) { + handlePromiseError(goto(AppRoute.PHOTOS)); + } + return { asset, meta: { diff --git a/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte index 8bb99895af..c6943c6491 100644 --- a/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -5,11 +5,11 @@ import UserPageLayout from '$lib/components/layouts/user-page-layout.svelte'; import DuplicatesCompareControl from '$lib/components/utilities-page/duplicates/duplicates-compare-control.svelte'; import { AppRoute } from '$lib/constants'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; import DuplicatesInformationModal from '$lib/modals/DuplicatesInformationModal.svelte'; import ShortcutsModal from '$lib/modals/ShortcutsModal.svelte'; import { assetViewingStore } from '$lib/stores/asset-viewing.store'; import { locale } from '$lib/stores/preferences.store'; - import { featureFlags } from '$lib/stores/system-config-manager.svelte'; import { stackAssets } from '$lib/utils/asset-utils'; import { suggestDuplicate } from '$lib/utils/duplicate-utils'; import { handleError } from '$lib/utils/handle-error'; @@ -92,7 +92,7 @@ return; } - const message = $featureFlags.trash + const message = featureFlagsManager.value.trash ? $t('assets_moved_to_trash_count', { values: { count: trashedCount } }) : $t('permanently_deleted_assets_count', { values: { count: trashedCount } }); toastManager.success(message); @@ -101,7 +101,7 @@ const handleResolve = async (duplicateId: string, duplicateAssetIds: string[], trashIds: string[]) => { return withConfirmation( async () => { - await deleteAssets({ assetBulkDeleteDto: { ids: trashIds, force: !$featureFlags.trash } }); + await deleteAssets({ assetBulkDeleteDto: { ids: trashIds, force: !featureFlagsManager.value.trash } }); await updateAssets({ assetBulkUpdateDto: { ids: duplicateAssetIds, duplicateId: null } }); duplicates = duplicates.filter((duplicate) => duplicate.duplicateId !== duplicateId); @@ -109,8 +109,8 @@ deletedNotification(trashIds.length); await correctDuplicatesIndexAndGo(duplicatesIndex); }, - trashIds.length > 0 && !$featureFlags.trash ? $t('delete_duplicates_confirmation') : undefined, - trashIds.length > 0 && !$featureFlags.trash ? $t('permanently_delete') : undefined, + trashIds.length > 0 && !featureFlagsManager.value.trash ? $t('delete_duplicates_confirmation') : undefined, + trashIds.length > 0 && !featureFlagsManager.value.trash ? $t('permanently_delete') : undefined, ); }; @@ -129,7 +129,7 @@ ); let prompt, confirmText; - if ($featureFlags.trash) { + if (featureFlagsManager.value.trash) { prompt = $t('bulk_trash_duplicates_confirmation', { values: { count: idsToDelete.length } }); confirmText = $t('confirm'); } else { @@ -139,7 +139,7 @@ return withConfirmation( async () => { - await deleteAssets({ assetBulkDeleteDto: { ids: idsToDelete, force: !$featureFlags.trash } }); + await deleteAssets({ assetBulkDeleteDto: { ids: idsToDelete, force: !featureFlagsManager.value.trash } }); await updateAssets({ assetBulkUpdateDto: { ids: [...idsToDelete, ...idsToKeep.filter((id): id is string => !!id)], diff --git a/web/src/routes/+layout.svelte b/web/src/routes/+layout.svelte index a52f51210f..8b63017c19 100644 --- a/web/src/routes/+layout.svelte +++ b/web/src/routes/+layout.svelte @@ -8,8 +8,8 @@ import NavigationLoadingBar from '$lib/components/shared-components/navigation-loading-bar.svelte'; import UploadPanel from '$lib/components/shared-components/upload-panel.svelte'; import { eventManager } from '$lib/managers/event-manager.svelte'; + import { serverConfigManager } from '$lib/managers/server-config-manager.svelte'; import VersionAnnouncementModal from '$lib/modals/VersionAnnouncementModal.svelte'; - import { serverConfig } from '$lib/stores/system-config-manager.svelte'; import { user } from '$lib/stores/user.store'; import { closeWebsocketConnection, @@ -120,7 +120,10 @@ {#if page.data.meta.imageUrl} {/if} @@ -131,7 +134,10 @@ {#if page.data.meta.imageUrl} {/if} {/if} diff --git a/web/src/routes/+page.ts b/web/src/routes/+page.ts index f617c2a03e..bd6d1a62da 100644 --- a/web/src/routes/+page.ts +++ b/web/src/routes/+page.ts @@ -1,10 +1,8 @@ import { AppRoute } from '$lib/constants'; -import { serverConfig } from '$lib/stores/system-config-manager.svelte'; +import { serverConfigManager } from '$lib/managers/server-config-manager.svelte'; import { getFormatter } from '$lib/utils/i18n'; import { init } from '$lib/utils/server'; - import { redirect } from '@sveltejs/kit'; -import { get } from 'svelte/store'; import { loadUser } from '../lib/utils/auth'; import type { PageLoad } from './$types'; @@ -19,8 +17,7 @@ export const load = (async ({ fetch }) => { redirect(302, AppRoute.PHOTOS); } - const { isInitialized } = get(serverConfig); - if (isInitialized) { + if (serverConfigManager.value.isInitialized) { // Redirect to login page if there exists an admin account (i.e. server is initialized) redirect(302, AppRoute.AUTH_LOGIN); } diff --git a/web/src/routes/admin/+layout.ts b/web/src/routes/admin/+layout.ts index 885e57b05e..778e5f182f 100644 --- a/web/src/routes/admin/+layout.ts +++ b/web/src/routes/admin/+layout.ts @@ -1,4 +1,4 @@ -import { systemConfigManager } from '$lib/stores/system-config-manager.svelte'; +import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import type { LayoutLoad } from './$types'; export const load = (async () => { diff --git a/web/src/routes/admin/system-settings/+page.svelte b/web/src/routes/admin/system-settings/+page.svelte index 179350ef6b..3f3d9a4f83 100644 --- a/web/src/routes/admin/system-settings/+page.svelte +++ b/web/src/routes/admin/system-settings/+page.svelte @@ -23,8 +23,9 @@ import SettingAccordion from '$lib/components/shared-components/settings/setting-accordion.svelte'; import { QueryParameter } from '$lib/constants'; import SearchBar from '$lib/elements/SearchBar.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { getSystemConfigActions } from '$lib/services/system-config.service'; - import { featureFlags, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; import { Alert, HStack } from '@immich/ui'; import { mdiAccountOutline, @@ -201,7 +202,7 @@ ); const { CopyToClipboard, Upload, Download } = $derived( - getSystemConfigActions($t, $featureFlags, systemConfigManager.value), + getSystemConfigActions($t, featureFlagsManager.value, systemConfigManager.value), ); @@ -219,7 +220,7 @@
- {#if $featureFlags.configFile} + {#if featureFlagsManager.value.configFile} {/if}
diff --git a/web/src/routes/auth/login/+page.svelte b/web/src/routes/auth/login/+page.svelte index 2943dc1e07..88a557f845 100644 --- a/web/src/routes/auth/login/+page.svelte +++ b/web/src/routes/auth/login/+page.svelte @@ -3,7 +3,8 @@ import AuthPageLayout from '$lib/components/layouts/AuthPageLayout.svelte'; import { AppRoute } from '$lib/constants'; import { eventManager } from '$lib/managers/event-manager.svelte'; - import { featureFlags, serverConfig } from '$lib/stores/system-config-manager.svelte'; + import { featureFlagsManager } from '$lib/managers/feature-flags-manager.svelte'; + import { serverConfigManager } from '$lib/managers/server-config-manager.svelte'; import { oauth } from '$lib/utils'; import { getServerErrorMessage, handleError } from '$lib/utils/handle-error'; import { login, type LoginResponseDto } from '@immich/sdk'; @@ -25,6 +26,8 @@ let loading = $state(false); let oauthLoading = $state(true); + const serverConfig = $derived(serverConfigManager.value); + const onSuccess = async (user: LoginResponseDto) => { await goto(data.continueUrl, { invalidateAll: true }); eventManager.emit('AuthLogin', user); @@ -34,7 +37,7 @@ const onOnboarding = () => goto(AppRoute.AUTH_ONBOARDING); onMount(async () => { - if (!$featureFlags.oauth) { + if (!featureFlagsManager.value.oauth) { oauthLoading = false; return; } @@ -60,7 +63,7 @@ try { if ( - ($featureFlags.oauthAutoLaunch && !oauth.isAutoLaunchDisabled(globalThis.location)) || + (featureFlagsManager.value.oauthAutoLaunch && !oauth.isAutoLaunchDisabled(globalThis.location)) || oauth.isAutoLaunchEnabled(globalThis.location) ) { await goto(`${AppRoute.AUTH_LOGIN}?autoLaunch=0`, { replaceState: true }); @@ -80,7 +83,7 @@ loading = true; const user = await login({ loginCredentialDto: { email, password } }); - if (user.isAdmin && !$serverConfig.isOnboarded) { + if (user.isAdmin && !serverConfig.isOnboarded) { await onOnboarding(); return; } @@ -123,64 +126,62 @@ }; -{#if $featureFlags.loaded} - - - {#if $serverConfig.loginPageMessage} - - - {@html $serverConfig.loginPageMessage} - - {/if} + + + {#if serverConfig.loginPageMessage} + + + {@html serverConfig.loginPageMessage} + + {/if} - {#if !oauthLoading && $featureFlags.passwordLogin} -
- {#if errorMessage} - - {/if} - - - - - - - - - - - - {/if} - - {#if $featureFlags.oauth} - {#if $featureFlags.passwordLogin} -
-
- - {$t('or')} - -
+ {#if !oauthLoading && featureFlagsManager.value.passwordLogin} +
+ {#if errorMessage} + {/if} - {#if oauthError} - - {/if} - - {/if} - {#if !$featureFlags.passwordLogin && !$featureFlags.oauth} - + + + + + + + + + + + {/if} + + {#if featureFlagsManager.value.oauth} + {#if featureFlagsManager.value.passwordLogin} +
+
+ + {$t('or')} + +
{/if} -
-
-{/if} + {#if oauthError} + + {/if} + + {/if} + + {#if !featureFlagsManager.value.passwordLogin && !featureFlagsManager.value.oauth} + + {/if} +
+
diff --git a/web/src/routes/auth/login/+page.ts b/web/src/routes/auth/login/+page.ts index ddf5b43fb9..5577ab1a7e 100644 --- a/web/src/routes/auth/login/+page.ts +++ b/web/src/routes/auth/login/+page.ts @@ -1,16 +1,13 @@ import { AppRoute } from '$lib/constants'; -import { serverConfig } from '$lib/stores/system-config-manager.svelte'; +import { serverConfigManager } from '$lib/managers/server-config-manager.svelte'; import { getFormatter } from '$lib/utils/i18n'; - import { redirect } from '@sveltejs/kit'; -import { get } from 'svelte/store'; import type { PageLoad } from './$types'; export const load = (async ({ parent, url }) => { await parent(); - const { isInitialized } = get(serverConfig); - if (!isInitialized) { + if (!serverConfigManager.value.isInitialized) { // Admin not registered redirect(302, AppRoute.AUTH_REGISTER); } diff --git a/web/src/routes/auth/onboarding/+page.svelte b/web/src/routes/auth/onboarding/+page.svelte index 9275fb95c1..44cd97637a 100644 --- a/web/src/routes/auth/onboarding/+page.svelte +++ b/web/src/routes/auth/onboarding/+page.svelte @@ -11,8 +11,9 @@ import OnboardingTheme from '$lib/components/onboarding-page/onboarding-theme.svelte'; import OnboardingUserPrivacy from '$lib/components/onboarding-page/onboarding-user-privacy.svelte'; import { AppRoute, QueryParameter } from '$lib/constants'; + import { serverConfigManager } from '$lib/managers/server-config-manager.svelte'; + import { systemConfigManager } from '$lib/managers/system-config-manager.svelte'; import { OnboardingRole } from '$lib/models/onboarding-role'; - import { retrieveServerConfig, serverConfig, systemConfigManager } from '$lib/stores/system-config-manager.svelte'; import { user } from '$lib/stores/user.store'; import { setUserOnboarding, updateAdminOnboarding } from '@immich/sdk'; import { @@ -95,7 +96,9 @@ ]); let index = $state(0); - let userRole = $derived($user.isAdmin && !$serverConfig.isOnboarded ? OnboardingRole.SERVER : OnboardingRole.USER); + let userRole = $derived( + $user.isAdmin && !serverConfigManager.value.isOnboarded ? OnboardingRole.SERVER : OnboardingRole.USER, + ); let onboardingStepCount = $derived(onboardingSteps.filter((step) => shouldRunStep(step.role, userRole)).length); let onboardingProgress = $derived( @@ -105,7 +108,9 @@ const shouldRunStep = (stepRole: OnboardingRole, userRole: OnboardingRole) => { return ( stepRole === OnboardingRole.USER || - (stepRole === OnboardingRole.SERVER && userRole === OnboardingRole.SERVER && !$serverConfig.isOnboarded) + (stepRole === OnboardingRole.SERVER && + userRole === OnboardingRole.SERVER && + !serverConfigManager.value.isOnboarded) ); }; @@ -127,7 +132,7 @@ if (nextStepIndex == -1) { if ($user.isAdmin) { await updateAdminOnboarding({ adminOnboardingUpdateDto: { isOnboarded: true } }); - await retrieveServerConfig(); + await serverConfigManager.loadServerConfig(); } await setUserOnboarding({ diff --git a/web/src/routes/auth/register/+page.svelte b/web/src/routes/auth/register/+page.svelte index affa5f816c..e78f782841 100644 --- a/web/src/routes/auth/register/+page.svelte +++ b/web/src/routes/auth/register/+page.svelte @@ -2,7 +2,7 @@ import { goto } from '$app/navigation'; import AuthPageLayout from '$lib/components/layouts/AuthPageLayout.svelte'; import { AppRoute } from '$lib/constants'; - import { retrieveServerConfig } from '$lib/stores/system-config-manager.svelte'; + import { serverConfigManager } from '$lib/managers/server-config-manager.svelte'; import { handleError } from '$lib/utils/handle-error'; import { signUpAdmin } from '@immich/sdk'; import { Alert, Button, Field, Input, PasswordInput, Text } from '@immich/ui'; @@ -37,7 +37,7 @@ try { await signUpAdmin({ signUpDto: { email, password, name } }); - await retrieveServerConfig(); + await serverConfigManager.loadServerConfig(); await goto(AppRoute.AUTH_LOGIN); } catch (error) { handleError(error, $t('errors.unable_to_create_admin_account')); diff --git a/web/src/routes/auth/register/+page.ts b/web/src/routes/auth/register/+page.ts index 30969c3167..344a37738c 100644 --- a/web/src/routes/auth/register/+page.ts +++ b/web/src/routes/auth/register/+page.ts @@ -1,14 +1,12 @@ import { AppRoute } from '$lib/constants'; -import { serverConfig } from '$lib/stores/system-config-manager.svelte'; +import { serverConfigManager } from '$lib/managers/server-config-manager.svelte'; import { getFormatter } from '$lib/utils/i18n'; import { redirect } from '@sveltejs/kit'; -import { get } from 'svelte/store'; import type { PageLoad } from './$types'; export const load = (async ({ parent }) => { await parent(); - const { isInitialized } = get(serverConfig); - if (isInitialized) { + if (serverConfigManager.value.isInitialized) { // Admin has been registered, redirect to login redirect(302, AppRoute.AUTH_LOGIN); }