From d744639c220b2903a4c1630a49e41555114e1f5e Mon Sep 17 00:00:00 2001 From: thornbill Date: Mon, 17 Nov 2025 11:14:09 -0500 Subject: [PATCH] Backport pull request #7295 from jellyfin-web/release-10.11.z Fix default values in display settings Original-merge: d1379dce8afe4421b2855d00b722b5bc66f7b36b Merged-by: thornbill Backported-by: thornbill --- .../preferences/hooks/useDisplaySettings.ts | 24 ++++++++++++------- src/hooks/useUserTheme.ts | 2 +- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/apps/experimental/features/preferences/hooks/useDisplaySettings.ts b/src/apps/experimental/features/preferences/hooks/useDisplaySettings.ts index c6a544fb6..ee44a80ac 100644 --- a/src/apps/experimental/features/preferences/hooks/useDisplaySettings.ts +++ b/src/apps/experimental/features/preferences/hooks/useDisplaySettings.ts @@ -10,6 +10,9 @@ import themeManager from 'scripts/themeManager'; import { currentSettings, UserSettings } from 'scripts/settings/userSettings'; import type { DisplaySettingsValues } from '../types/displaySettingsValues'; +import { useThemes } from 'hooks/useThemes'; +import { Theme } from 'types/webConfig'; +import { FALLBACK_THEME_ID } from 'hooks/useUserTheme'; interface UseDisplaySettingsParams { userId?: string | null; @@ -20,6 +23,7 @@ export function useDisplaySettings({ userId }: UseDisplaySettingsParams) { const [userSettings, setUserSettings] = useState(); const [displaySettings, setDisplaySettings] = useState(); const { __legacyApiClient__, user: currentUser } = useApi(); + const { defaultTheme } = useThemes(); useEffect(() => { if (!userId || !currentUser || !__legacyApiClient__) { @@ -29,7 +33,7 @@ export function useDisplaySettings({ userId }: UseDisplaySettingsParams) { setLoading(true); void (async () => { - const loadedSettings = await loadDisplaySettings({ api: __legacyApiClient__, currentUser, userId }); + const loadedSettings = await loadDisplaySettings({ api: __legacyApiClient__, currentUser, userId, defaultTheme }); setDisplaySettings(loadedSettings.displaySettings); setUserSettings(loadedSettings.userSettings); @@ -62,15 +66,17 @@ export function useDisplaySettings({ userId }: UseDisplaySettingsParams) { } interface LoadDisplaySettingsParams { - currentUser: UserDto; - userId?: string; - api: ApiClient; + currentUser: UserDto + userId?: string + api: ApiClient + defaultTheme?: Theme } async function loadDisplaySettings({ currentUser, userId, - api + api, + defaultTheme }: LoadDisplaySettingsParams) { const settings = (!userId || userId === currentUser?.Id) ? currentSettings : new UserSettings(); const user = (!userId || userId === currentUser?.Id) ? currentUser : await api.getUser(userId); @@ -78,8 +84,8 @@ async function loadDisplaySettings({ await settings.setUserInfo(userId, api); const displaySettings = { - customCss: settings.customCss(), - dashboardTheme: settings.dashboardTheme() || 'auto', + customCss: settings.customCss() || '', + dashboardTheme: settings.dashboardTheme() || defaultTheme?.id || FALLBACK_THEME_ID, dateTimeLocale: settings.dateTimeLocale() || 'auto', disableCustomCss: Boolean(settings.disableCustomCss()), displayMissingEpisodes: user?.Configuration?.DisplayMissingEpisodes ?? false, @@ -97,7 +103,7 @@ async function loadDisplaySettings({ maxDaysForNextUp: settings.maxDaysForNextUp(), screensaver: settings.screensaver() || 'none', screensaverInterval: settings.backdropScreensaverInterval(), - theme: settings.theme() + theme: settings.theme() || defaultTheme?.id || FALLBACK_THEME_ID }; return { @@ -125,7 +131,7 @@ async function saveDisplaySettings({ userSettings.language(normalizeValue(newDisplaySettings.language)); } userSettings.customCss(normalizeValue(newDisplaySettings.customCss)); - userSettings.dashboardTheme(normalizeValue(newDisplaySettings.dashboardTheme)); + userSettings.dashboardTheme(newDisplaySettings.dashboardTheme); userSettings.dateTimeLocale(normalizeValue(newDisplaySettings.dateTimeLocale)); userSettings.disableCustomCss(newDisplaySettings.disableCustomCss); userSettings.enableBlurhash(newDisplaySettings.enableBlurHash); diff --git a/src/hooks/useUserTheme.ts b/src/hooks/useUserTheme.ts index 2d60c173c..2e24eab65 100644 --- a/src/hooks/useUserTheme.ts +++ b/src/hooks/useUserTheme.ts @@ -1,7 +1,7 @@ import { useThemes } from './useThemes'; import { useUserSettings } from './useUserSettings'; -const FALLBACK_THEME_ID = 'dark'; +export const FALLBACK_THEME_ID = 'dark'; export function useUserTheme() { const { theme, dashboardTheme } = useUserSettings();