diff --git a/frontend/package.json b/frontend/package.json index ab5d65b..788682b 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "checklist-frontend", "private": true, - "version": "1.0.88", + "version": "1.0.89", "type": "module", "scripts": { "dev": "vite", diff --git a/frontend/public/service-worker.js b/frontend/public/service-worker.js index 5c17b67..8886a97 100644 --- a/frontend/public/service-worker.js +++ b/frontend/public/service-worker.js @@ -1,6 +1,6 @@ // Service Worker para PWA con detección de actualizaciones // IMPORTANTE: Actualizar esta versión cada vez que se despliegue una nueva versión -const CACHE_NAME = 'ayutec-v1.0.88'; +const CACHE_NAME = 'ayutec-v1.0.89'; const urlsToCache = [ '/', '/index.html' @@ -15,7 +15,7 @@ self.addEventListener('install', (event) => { console.log('Service Worker: Caching files'); return cache.addAll(urlsToCache); }) - .then(() => self.skipWaiting()) // Forzar activación inmediata + // NO hacer skipWaiting automáticamente - esperar a que el usuario lo active ); }); @@ -32,7 +32,8 @@ self.addEventListener('activate', (event) => { } }) ); - }).then(() => self.clients.claim()) // Tomar control de todas las páginas + }) + // NO hacer claim automáticamente - solo cuando el usuario actualice manualmente ); }); diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 13fb162..3ccc4b9 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -21,6 +21,7 @@ function App() { // Verificar si hay actualización esperando if (registration.waiting) { + console.log('⚠️ Hay una actualización esperando'); setWaitingWorker(registration.waiting); setUpdateAvailable(true); } @@ -32,8 +33,8 @@ function App() { newWorker.addEventListener('statechange', () => { if (newWorker.state === 'installed' && navigator.serviceWorker.controller) { - // Hay nueva versión disponible - console.log('✨ Nueva versión lista!'); + // Hay nueva versión disponible - MOSTRAR MODAL, NO ACTIVAR AUTOMÁTICAMENTE + console.log('✨ Nueva versión instalada - esperando confirmación del usuario'); setWaitingWorker(newWorker); setUpdateAvailable(true); } @@ -45,17 +46,25 @@ function App() { }); // Escuchar cambios de controlador (cuando se activa nueva versión) + // SOLO se dispara DESPUÉS de que el usuario presione el botón + let refreshing = false; navigator.serviceWorker.addEventListener('controllerchange', () => { - console.log('🔄 Controlador cambiado, recargando página...'); - window.location.reload(); + if (!refreshing) { + refreshing = true; + console.log('🔄 Controlador cambiado, recargando página...'); + window.location.reload(); + } }); } }, []); - // Función para actualizar la app + // Función para actualizar la app - SOLO cuando el usuario presiona el botón const handleUpdate = () => { if (waitingWorker) { + console.log('👆 Usuario confirmó actualización - activando nueva versión...'); + // Enviar mensaje al service worker para que se active waitingWorker.postMessage({ type: 'SKIP_WAITING' }); + // El controllerchange listener manejará la recarga } };