diff --git a/app/views/pwa/service_worker.js.erb b/app/views/pwa/service_worker.js.erb index 0c4ab6ea5..b3f59aa60 100644 --- a/app/views/pwa/service_worker.js.erb +++ b/app/views/pwa/service_worker.js.erb @@ -1,44 +1,57 @@ importScripts("<%= javascript_url("turbo-offline-umd.min") %>") -TurboOffline.addRule({ - match: /\/assets\/.+[-\.][0-9a-f]+\.(js|css|svg|png|jpg|webp|woff2?|ico)$/, - handler: TurboOffline.handlers.cacheFirst({ - cacheName: "assets", - maxAge: 60 * 60 * 24 * 7 +<% if hotwire_native_app? %> + TurboOffline.addRule({ + match: /\/assets\/.+[-\.][0-9a-f]+\.(js|css|svg|png|jpg|webp|woff2?|ico)$/, + handler: TurboOffline.handlers.cacheFirst({ + cacheName: "assets", + maxAge: 60 * 60 * 24 * 7 + }) }) -}) -TurboOffline.addRule({ - match: /\/(boards|cards|users)\//, - except: /\/(edit|pin|watch|new)$/, - handler: TurboOffline.handlers.networkFirst({ - cacheName: "cards", - maxAge: 60 * 60 * 24 * 3, - networkTimeout: 2 + TurboOffline.addRule({ + match: /\/(boards|cards|users)\//, + except: /\/(edit|pin|watch|new)$/, + handler: TurboOffline.handlers.networkFirst({ + cacheName: "cards", + maxAge: 60 * 60 * 24 * 3, + networkTimeout: 2 + }) }) -}) -TurboOffline.addRule({ - match: /\/rails\/active_storage\//, - handler: TurboOffline.handlers.networkFirst({ - cacheName: "storage", - maxAge: 60 * 60 * 24 * 7, - networkTimeout: 2 + TurboOffline.addRule({ + match: /\/rails\/active_storage\//, + handler: TurboOffline.handlers.networkFirst({ + cacheName: "storage", + maxAge: 60 * 60 * 24 * 7, + networkTimeout: 2 + }) }) -}) -// Everything else -TurboOffline.addRule({ - handler: TurboOffline.handlers.networkFirst({ - cacheName: "misc", - maxAge: 60 * 60 * 24, - networkTimeout: 3 + // Everything else + TurboOffline.addRule({ + handler: TurboOffline.handlers.networkFirst({ + cacheName: "misc", + maxAge: 60 * 60 * 24, + networkTimeout: 3 + }) }) -}) -TurboOffline.start() + TurboOffline.start() +<% else %> + self.addEventListener("fetch", (event) => { + if (event.request.method !== "GET") return -self.addEventListener('activate', (event) => { + if (event.request.destination === "document") { + event.respondWith( + fetch(event.request, { cache: "no-cache" }) + .catch(() => caches.match(event.request)) + ) + } + }) +<% end %> + +self.addEventListener("activate", (event) => { event.waitUntil(self.clients.claim()) })