diff --git a/packages/mapviewer/src/utils/offline/OfflineReadinessStatus.vue b/packages/mapviewer/src/utils/offline/OfflineReadinessStatus.vue index 8ade75a030..6d0f88f400 100644 --- a/packages/mapviewer/src/utils/offline/OfflineReadinessStatus.vue +++ b/packages/mapviewer/src/utils/offline/OfflineReadinessStatus.vue @@ -13,8 +13,10 @@ import SimpleWindow from '@/utils/components/SimpleWindow.vue' // check for updates every hour const period = 60 * 60 * 1000 -const { withText = false } = defineProps<{ +const { withText = false, autoReloadOnUpdate = true } = defineProps<{ withText?: boolean + /** Automatically reload the page when a new service worker takes control */ + autoReloadOnUpdate?: boolean }>() const isServiceWorkerActive = ref(false) @@ -76,6 +78,26 @@ const { offlineReady, needRefresh, updateServiceWorker } = useRegisterSW({ } }) } + + // Listen for when a new service worker takes control + if ('serviceWorker' in navigator) { + navigator.serviceWorker.addEventListener('controllerchange', () => { + log.info({ + title: 'OfflineReadinessStatus', + titleColor: LogPreDefinedColor.Sky, + messages: ['New service worker has taken control'], + }) + + if (autoReloadOnUpdate) { + log.info({ + title: 'OfflineReadinessStatus', + titleColor: LogPreDefinedColor.Sky, + messages: ['Auto-reloading page with new service worker'], + }) + window.location.reload() + } + }) + } }, })