feat: Move service worker registration to a dedicated component for improved client-side handling

This commit is contained in:
2025-08-11 12:35:50 +00:00
committed by GitHub
parent 8b5dbbe854
commit 02d60f4805

View File

@@ -1,6 +1,6 @@
"use client"; "use client";
import React from "react"; import React, { useEffect } from "react";
import { AudioPlayerProvider } from "../components/AudioPlayerContext"; import { AudioPlayerProvider } from "../components/AudioPlayerContext";
import { OfflineNavidromeProvider, useOfflineNavidrome } from "../components/OfflineNavidromeProvider"; import { OfflineNavidromeProvider, useOfflineNavidrome } from "../components/OfflineNavidromeProvider";
import { NavidromeConfigProvider } from "../components/NavidromeConfigContext"; import { NavidromeConfigProvider } from "../components/NavidromeConfigContext";
@@ -15,8 +15,9 @@ import { LoginForm } from "./start-screen";
import Image from "next/image"; import Image from "next/image";
import PageTransition from "./PageTransition"; import PageTransition from "./PageTransition";
// Service Worker registration - moved to useEffect to ensure it only runs client-side // ServiceWorkerRegistration component to handle registration
React.useEffect(() => { function ServiceWorkerRegistration() {
useEffect(() => {
if ('serviceWorker' in navigator) { if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js') navigator.serviceWorker.register('/sw.js')
.then((registration) => { .then((registration) => {
@@ -26,7 +27,10 @@ React.useEffect(() => {
console.error('Service Worker registration failed:', error); console.error('Service Worker registration failed:', error);
}); });
} }
}, []); }, []);
return null;
}
function NavidromeErrorBoundary({ children }: { children: React.ReactNode }) { function NavidromeErrorBoundary({ children }: { children: React.ReactNode }) {
// For now, since we're switching to offline-first, we'll handle errors differently // For now, since we're switching to offline-first, we'll handle errors differently
@@ -100,6 +104,7 @@ export default function RootLayoutClient({ children }: { children: React.ReactNo
<ThemeProvider> <ThemeProvider>
<DynamicViewportTheme /> <DynamicViewportTheme />
<ThemeColorHandler /> <ThemeColorHandler />
<ServiceWorkerRegistration />
<NavidromeConfigProvider> <NavidromeConfigProvider>
<OfflineNavidromeProvider> <OfflineNavidromeProvider>
<NavidromeErrorBoundary> <NavidromeErrorBoundary>