/** * Sales Bot - PWA Registration and Install Prompt */ // Register Service Worker if ('serviceWorker' in navigator) { window.addEventListener('load', async () => { try { const registration = await navigator.serviceWorker.register('/service-worker.js'); console.log('Service Worker registered:', registration.scope); // Check for updates registration.addEventListener('updatefound', () => { const newWorker = registration.installing; newWorker.addEventListener('statechange', () => { if (newWorker.state === 'installed' && navigator.serviceWorker.controller) { // New version available showUpdatePrompt(); } }); }); } catch (error) { console.error('Service Worker registration failed:', error); } }); } // Install prompt handling let deferredPrompt; window.addEventListener('beforeinstallprompt', (e) => { e.preventDefault(); deferredPrompt = e; showInstallPrompt(); }); function showInstallPrompt() { // Create install prompt UI const prompt = document.createElement('div'); prompt.id = 'install-prompt'; prompt.className = 'install-prompt show'; prompt.innerHTML = ` Instalar Sales Bot en tu dispositivo `; document.body.appendChild(prompt); } async function installPWA() { if (!deferredPrompt) return; deferredPrompt.prompt(); const { outcome } = await deferredPrompt.userChoice; console.log('Install prompt outcome:', outcome); deferredPrompt = null; dismissInstallPrompt(); if (outcome === 'accepted') { if (window.Utils) { window.Utils.showNotification('App instalada correctamente', 'success'); } } } function dismissInstallPrompt() { const prompt = document.getElementById('install-prompt'); if (prompt) { prompt.remove(); } } function showUpdatePrompt() { const updateBanner = document.createElement('div'); updateBanner.id = 'update-banner'; updateBanner.style.cssText = ` position: fixed; bottom: 0; left: 0; right: 0; background: #00d4ff; color: #000; padding: 15px; text-align: center; z-index: 9999; `; updateBanner.innerHTML = ` Nueva version disponible `; document.body.appendChild(updateBanner); } function updateApp() { if ('serviceWorker' in navigator) { navigator.serviceWorker.getRegistration().then(registration => { if (registration && registration.waiting) { registration.waiting.postMessage({ type: 'SKIP_WAITING' }); } }); } window.location.reload(); } // Detect if running as PWA function isPWA() { return window.matchMedia('(display-mode: standalone)').matches || window.navigator.standalone === true; } // Add PWA class to body if running as installed app if (isPWA()) { document.body.classList.add('pwa-mode'); } // Export window.installPWA = installPWA; window.dismissInstallPrompt = dismissInstallPrompt; window.isPWA = isPWA;