From dc9f90f78f79380e9363b23ccb815ffbf941645e Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Sat, 28 Feb 2026 22:05:07 +0100 Subject: [PATCH] fix: preserve custom backgrounds and home fallback layering --- src/components/home/HomeClientWrapper.tsx | 15 +++++++++++++-- src/components/layout/ClientLayout.tsx | 9 ++++----- src/components/settings/BackgroundSettings.tsx | 2 ++ src/lib/services/preferences.service.ts | 15 ++++++++++++--- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/components/home/HomeClientWrapper.tsx b/src/components/home/HomeClientWrapper.tsx index 6679bb3..8fd22b8 100644 --- a/src/components/home/HomeClientWrapper.tsx +++ b/src/components/home/HomeClientWrapper.tsx @@ -5,6 +5,7 @@ import { useRouter } from "next/navigation"; import { RefreshButton } from "@/components/library/RefreshButton"; import { PullToRefreshIndicator } from "@/components/common/PullToRefreshIndicator"; import { usePullToRefresh } from "@/hooks/usePullToRefresh"; +import { usePreferences } from "@/contexts/PreferencesContext"; interface HomeClientWrapperProps { children: ReactNode; @@ -13,6 +14,12 @@ interface HomeClientWrapperProps { export function HomeClientWrapper({ children }: HomeClientWrapperProps) { const router = useRouter(); const [isRefreshing, setIsRefreshing] = useState(false); + const { preferences } = usePreferences(); + + const hasCustomBackground = + (preferences.background.type === "gradient" && Boolean(preferences.background.gradient)) || + (preferences.background.type === "image" && Boolean(preferences.background.imageUrl)) || + preferences.background.type === "komga-random"; const handleRefresh = async () => { try { @@ -44,8 +51,12 @@ export function HomeClientWrapper({ children }: HomeClientWrapperProps) { isHiding={pullToRefresh.isHiding} />
-
-
+ {!hasCustomBackground && ( + <> +
+
+ + )}
diff --git a/src/components/layout/ClientLayout.tsx b/src/components/layout/ClientLayout.tsx index 8717064..135a696 100644 --- a/src/components/layout/ClientLayout.tsx +++ b/src/components/layout/ClientLayout.tsx @@ -11,6 +11,7 @@ import { NetworkStatus } from "../ui/NetworkStatus"; import { usePreferences } from "@/contexts/PreferencesContext"; import { ServiceWorkerProvider } from "@/contexts/ServiceWorkerContext"; import type { KomgaLibrary, KomgaSeries } from "@/types/komga"; +import { defaultPreferences } from "@/types/preferences"; import logger from "@/lib/logger"; import { getRandomBookFromLibraries } from "@/app/actions/library"; @@ -141,11 +142,9 @@ export default function ClientLayout({ // Ne pas afficher le header et la sidebar sur les routes publiques et le reader const isPublicRoute = publicRoutes.includes(pathname) || pathname.startsWith("/books/"); - const hasCustomBackground = - preferences.background.type === "gradient" || - preferences.background.type === "image" || - (preferences.background.type === "komga-random" && randomBookId); - const contentOpacity = (preferences.background.opacity || 100) / 100; + const hasCustomBackground = Object.keys(backgroundStyle).length > 0; + const contentOpacity = + (preferences.background.opacity ?? defaultPreferences.background.opacity ?? 10) / 100; return ( diff --git a/src/components/settings/BackgroundSettings.tsx b/src/components/settings/BackgroundSettings.tsx index fe3cc99..101db5d 100644 --- a/src/components/settings/BackgroundSettings.tsx +++ b/src/components/settings/BackgroundSettings.tsx @@ -66,6 +66,7 @@ export function BackgroundSettings({ initialLibraries }: BackgroundSettingsProps try { await updatePreferences({ background: { + ...preferences.background, type: "gradient", gradient, }, @@ -97,6 +98,7 @@ export function BackgroundSettings({ initialLibraries }: BackgroundSettingsProps try { await updatePreferences({ background: { + ...preferences.background, type: "image", imageUrl: customImageUrl, }, diff --git a/src/lib/services/preferences.service.ts b/src/lib/services/preferences.service.ts index 21630ef..a1387a4 100644 --- a/src/lib/services/preferences.service.ts +++ b/src/lib/services/preferences.service.ts @@ -39,7 +39,10 @@ export class PreferencesService { ...displayMode, viewMode: displayMode?.viewMode || defaultPreferences.displayMode.viewMode, }, - background: preferences.background as unknown as BackgroundPreferences, + background: { + ...defaultPreferences.background, + ...(preferences.background as unknown as BackgroundPreferences), + }, readerPrefetchCount: preferences.readerPrefetchCount, }; } catch (error) { @@ -62,7 +65,10 @@ export class PreferencesService { updateData.showOnlyUnread = preferences.showOnlyUnread; if (preferences.displayMode !== undefined) updateData.displayMode = preferences.displayMode; if (preferences.background !== undefined) { - updateData.background = preferences.background as unknown as Prisma.InputJsonValue; + updateData.background = { + ...defaultPreferences.background, + ...(preferences.background as unknown as BackgroundPreferences), + } as unknown as Prisma.InputJsonValue; } if (preferences.readerPrefetchCount !== undefined) updateData.readerPrefetchCount = preferences.readerPrefetchCount; @@ -85,7 +91,10 @@ export class PreferencesService { showThumbnails: updatedPreferences.showThumbnails, showOnlyUnread: updatedPreferences.showOnlyUnread, displayMode: updatedPreferences.displayMode as UserPreferences["displayMode"], - background: updatedPreferences.background as unknown as BackgroundPreferences, + background: { + ...defaultPreferences.background, + ...(updatedPreferences.background as unknown as BackgroundPreferences), + }, readerPrefetchCount: updatedPreferences.readerPrefetchCount, }; } catch (error) {