fix: preserve custom backgrounds and home fallback layering
This commit is contained in:
@@ -5,6 +5,7 @@ import { useRouter } from "next/navigation";
|
|||||||
import { RefreshButton } from "@/components/library/RefreshButton";
|
import { RefreshButton } from "@/components/library/RefreshButton";
|
||||||
import { PullToRefreshIndicator } from "@/components/common/PullToRefreshIndicator";
|
import { PullToRefreshIndicator } from "@/components/common/PullToRefreshIndicator";
|
||||||
import { usePullToRefresh } from "@/hooks/usePullToRefresh";
|
import { usePullToRefresh } from "@/hooks/usePullToRefresh";
|
||||||
|
import { usePreferences } from "@/contexts/PreferencesContext";
|
||||||
|
|
||||||
interface HomeClientWrapperProps {
|
interface HomeClientWrapperProps {
|
||||||
children: ReactNode;
|
children: ReactNode;
|
||||||
@@ -13,6 +14,12 @@ interface HomeClientWrapperProps {
|
|||||||
export function HomeClientWrapper({ children }: HomeClientWrapperProps) {
|
export function HomeClientWrapper({ children }: HomeClientWrapperProps) {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const [isRefreshing, setIsRefreshing] = useState(false);
|
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 () => {
|
const handleRefresh = async () => {
|
||||||
try {
|
try {
|
||||||
@@ -44,8 +51,12 @@ export function HomeClientWrapper({ children }: HomeClientWrapperProps) {
|
|||||||
isHiding={pullToRefresh.isHiding}
|
isHiding={pullToRefresh.isHiding}
|
||||||
/>
|
/>
|
||||||
<main className="relative isolate overflow-hidden">
|
<main className="relative isolate overflow-hidden">
|
||||||
<div className="pointer-events-none absolute inset-0 -z-10 bg-[linear-gradient(180deg,hsl(var(--background)/0.99)_0%,hsl(var(--background)/0.95)_28%,hsl(var(--background))_100%)]" />
|
{!hasCustomBackground && (
|
||||||
<div className="pointer-events-none absolute inset-0 -z-10 bg-[linear-gradient(128deg,hsl(var(--primary)/0.14)_0%,transparent_36%),linear-gradient(235deg,hsl(185_82%_54%/0.1)_4%,transparent_34%),linear-gradient(320deg,hsl(332_82%_63%/0.08)_8%,transparent_32%)]" />
|
<>
|
||||||
|
<div className="pointer-events-none absolute inset-0 -z-10 bg-[linear-gradient(180deg,hsl(var(--background)/0.99)_0%,hsl(var(--background)/0.95)_28%,hsl(var(--background))_100%)]" />
|
||||||
|
<div className="pointer-events-none absolute inset-0 -z-10 bg-[linear-gradient(128deg,hsl(var(--primary)/0.14)_0%,transparent_36%),linear-gradient(235deg,hsl(185_82%_54%/0.1)_4%,transparent_34%),linear-gradient(320deg,hsl(332_82%_63%/0.08)_8%,transparent_32%)]" />
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
<div className="container mx-auto space-y-12 px-4 py-8">
|
<div className="container mx-auto space-y-12 px-4 py-8">
|
||||||
<div className="flex justify-end">
|
<div className="flex justify-end">
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { NetworkStatus } from "../ui/NetworkStatus";
|
|||||||
import { usePreferences } from "@/contexts/PreferencesContext";
|
import { usePreferences } from "@/contexts/PreferencesContext";
|
||||||
import { ServiceWorkerProvider } from "@/contexts/ServiceWorkerContext";
|
import { ServiceWorkerProvider } from "@/contexts/ServiceWorkerContext";
|
||||||
import type { KomgaLibrary, KomgaSeries } from "@/types/komga";
|
import type { KomgaLibrary, KomgaSeries } from "@/types/komga";
|
||||||
|
import { defaultPreferences } from "@/types/preferences";
|
||||||
import logger from "@/lib/logger";
|
import logger from "@/lib/logger";
|
||||||
import { getRandomBookFromLibraries } from "@/app/actions/library";
|
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
|
// Ne pas afficher le header et la sidebar sur les routes publiques et le reader
|
||||||
const isPublicRoute = publicRoutes.includes(pathname) || pathname.startsWith("/books/");
|
const isPublicRoute = publicRoutes.includes(pathname) || pathname.startsWith("/books/");
|
||||||
|
|
||||||
const hasCustomBackground =
|
const hasCustomBackground = Object.keys(backgroundStyle).length > 0;
|
||||||
preferences.background.type === "gradient" ||
|
const contentOpacity =
|
||||||
preferences.background.type === "image" ||
|
(preferences.background.opacity ?? defaultPreferences.background.opacity ?? 10) / 100;
|
||||||
(preferences.background.type === "komga-random" && randomBookId);
|
|
||||||
const contentOpacity = (preferences.background.opacity || 100) / 100;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ThemeProvider attribute="class" defaultTheme="system" enableSystem>
|
<ThemeProvider attribute="class" defaultTheme="system" enableSystem>
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ export function BackgroundSettings({ initialLibraries }: BackgroundSettingsProps
|
|||||||
try {
|
try {
|
||||||
await updatePreferences({
|
await updatePreferences({
|
||||||
background: {
|
background: {
|
||||||
|
...preferences.background,
|
||||||
type: "gradient",
|
type: "gradient",
|
||||||
gradient,
|
gradient,
|
||||||
},
|
},
|
||||||
@@ -97,6 +98,7 @@ export function BackgroundSettings({ initialLibraries }: BackgroundSettingsProps
|
|||||||
try {
|
try {
|
||||||
await updatePreferences({
|
await updatePreferences({
|
||||||
background: {
|
background: {
|
||||||
|
...preferences.background,
|
||||||
type: "image",
|
type: "image",
|
||||||
imageUrl: customImageUrl,
|
imageUrl: customImageUrl,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -39,7 +39,10 @@ export class PreferencesService {
|
|||||||
...displayMode,
|
...displayMode,
|
||||||
viewMode: displayMode?.viewMode || defaultPreferences.displayMode.viewMode,
|
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,
|
readerPrefetchCount: preferences.readerPrefetchCount,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -62,7 +65,10 @@ export class PreferencesService {
|
|||||||
updateData.showOnlyUnread = preferences.showOnlyUnread;
|
updateData.showOnlyUnread = preferences.showOnlyUnread;
|
||||||
if (preferences.displayMode !== undefined) updateData.displayMode = preferences.displayMode;
|
if (preferences.displayMode !== undefined) updateData.displayMode = preferences.displayMode;
|
||||||
if (preferences.background !== undefined) {
|
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)
|
if (preferences.readerPrefetchCount !== undefined)
|
||||||
updateData.readerPrefetchCount = preferences.readerPrefetchCount;
|
updateData.readerPrefetchCount = preferences.readerPrefetchCount;
|
||||||
@@ -85,7 +91,10 @@ export class PreferencesService {
|
|||||||
showThumbnails: updatedPreferences.showThumbnails,
|
showThumbnails: updatedPreferences.showThumbnails,
|
||||||
showOnlyUnread: updatedPreferences.showOnlyUnread,
|
showOnlyUnread: updatedPreferences.showOnlyUnread,
|
||||||
displayMode: updatedPreferences.displayMode as UserPreferences["displayMode"],
|
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,
|
readerPrefetchCount: updatedPreferences.readerPrefetchCount,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user