diff --git a/src/App.vue b/src/App.vue index 8b20254..59e6c42 100644 --- a/src/App.vue +++ b/src/App.vue @@ -9,6 +9,7 @@ import GuidePanel from './components/GuidePanel.vue'; import WinModal from './components/WinModal.vue'; import CustomGameModal from './components/CustomGameModal.vue'; import FixedBar from './components/FixedBar.vue'; +import ReloadPrompt from './components/ReloadPrompt.vue'; // Main App Entry const store = usePuzzleStore(); @@ -173,6 +174,7 @@ onUnmounted(() => { + diff --git a/src/components/ReloadPrompt.vue b/src/components/ReloadPrompt.vue new file mode 100644 index 0000000..e1679ce --- /dev/null +++ b/src/components/ReloadPrompt.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/composables/useI18n.js b/src/composables/useI18n.js index 0cfbe22..9e8b032 100644 --- a/src/composables/useI18n.js +++ b/src/composables/useI18n.js @@ -42,6 +42,10 @@ const messages = { 'pwa.installTitle': 'Zainstaluj aplikację i graj offline', 'pwa.installMobile': 'Dodaj do ekranu głównego', 'pwa.installDesktop': 'Zainstaluj na komputerze', + 'pwa.offlineReady': 'Aplikacja gotowa do pracy offline', + 'pwa.newContent': 'Dostępna nowa wersja, odśwież aby zaktualizować', + 'pwa.reload': 'Odśwież', + 'pwa.close': 'Zamknij', 'language.label': 'Wybór języka', 'language.pl': 'Polski', 'language.en': 'Angielski', @@ -137,6 +141,10 @@ const messages = { 'pwa.installTitle': 'Install the app and play offline', 'pwa.installMobile': 'Add to home screen', 'pwa.installDesktop': 'Install on desktop', + 'pwa.offlineReady': 'App ready to work offline', + 'pwa.newContent': 'New content available, click on reload button to update', + 'pwa.reload': 'Reload', + 'pwa.close': 'Close', 'language.label': 'Language selection', 'language.pl': 'Polish', 'language.en': 'English', diff --git a/src/main.js b/src/main.js index e4220ad..de174cf 100644 --- a/src/main.js +++ b/src/main.js @@ -31,23 +31,3 @@ app.directive('cell-hover', vCellHover) app.mount('#app') -if ('serviceWorker' in navigator) { - let refreshing = false - const triggerReload = () => { - if (refreshing) return - refreshing = true - window.location.reload() - } - navigator.serviceWorker.addEventListener('controllerchange', triggerReload) - const checkForUpdate = () => { - navigator.serviceWorker.getRegistration().then((registration) => { - if (registration) { - registration.update() - } - }) - } - window.addEventListener('visibilitychange', () => { - if (document.visibilityState === 'visible') checkForUpdate() - }) - window.addEventListener('focus', checkForUpdate) -} diff --git a/vite.config.js b/vite.config.js index 784ecdb..eae6c43 100644 --- a/vite.config.js +++ b/vite.config.js @@ -10,12 +10,11 @@ export default defineConfig({ plugins: [ vue(), VitePWA({ - registerType: 'autoUpdate', + registerType: 'prompt', injectRegister: 'auto', workbox: { cleanupOutdatedCaches: true, - skipWaiting: true, - clientsClaim: true, + globPatterns: ['**/*.{js,css,html,ico,png,svg,json,vue,txt,woff2}'] }, devOptions: { enabled: true