fix(article): wire eventStore to useArticleLoader for instant local-first loads; keep SW enabled in prod for PWA

This commit is contained in:
Gigi
2025-10-22 15:24:24 +02:00
parent 3f7d726ae6
commit c62cb21962
2 changed files with 29 additions and 38 deletions

View File

@@ -230,6 +230,7 @@ const Bookmarks: React.FC<BookmarksProps> = ({
useArticleLoader({ useArticleLoader({
naddr, naddr,
relayPool, relayPool,
eventStore,
setSelectedUrl, setSelectedUrl,
setReaderContent, setReaderContent,
setReaderLoading, setReaderLoading,

View File

@@ -5,45 +5,35 @@ import './styles/tailwind.css'
import './index.css' import './index.css'
import 'react-loading-skeleton/dist/skeleton.css' import 'react-loading-skeleton/dist/skeleton.css'
// Service Worker behavior // Register Service Worker for PWA functionality (production only)
if ('serviceWorker' in navigator) { if ('serviceWorker' in navigator && import.meta.env.PROD) {
// In dev, make sure no stale SW controls the page window.addEventListener('load', () => {
if (import.meta.env.DEV) { navigator.serviceWorker
navigator.serviceWorker.getRegistrations().then(regs => { .register('/sw.js')
regs.forEach(reg => reg.unregister()) .then(registration => {
}) // Check for updates periodically
} setInterval(() => {
registration.update()
// Register SW only in production builds }, 60 * 60 * 1000) // Check every hour
if (import.meta.env.PROD) {
window.addEventListener('load', () => { // Handle service worker updates
navigator.serviceWorker registration.addEventListener('updatefound', () => {
.register('/sw.js') // classic SW; built asset is not a module const newWorker = registration.installing
.then(registration => { if (newWorker) {
// Check for updates periodically newWorker.addEventListener('statechange', () => {
setInterval(() => { if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {
registration.update() // New service worker available
}, 60 * 60 * 1000) // Check every hour const updateAvailable = new CustomEvent('sw-update-available')
window.dispatchEvent(updateAvailable)
// Handle service worker updates }
registration.addEventListener('updatefound', () => { })
const newWorker = registration.installing }
if (newWorker) {
newWorker.addEventListener('statechange', () => {
if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {
// New service worker available
const updateAvailable = new CustomEvent('sw-update-available')
window.dispatchEvent(updateAvailable)
}
})
}
})
}) })
.catch(error => { })
console.error('❌ Service Worker registration failed:', error) .catch(error => {
}) console.error('❌ Service Worker registration failed:', error)
}) })
} })
} }
ReactDOM.createRoot(document.getElementById('root')!).render( ReactDOM.createRoot(document.getElementById('root')!).render(