mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender-pwa.git
synced 2025-08-10 13:43:52 +02:00
Merge remote-tracking branch 'origin/main' into 22-semi-offline-room-finder
This commit is contained in:
63
frontend/public/sw.js
Normal file
63
frontend/public/sw.js
Normal file
@@ -0,0 +1,63 @@
|
||||
import { precacheAndRoute, cleanupOutdatedCaches } from "workbox-precaching";
|
||||
import { clientsClaim } from "workbox-core";
|
||||
|
||||
self.skipWaiting();
|
||||
clientsClaim();
|
||||
|
||||
cleanupOutdatedCaches();
|
||||
|
||||
// Precache the files from the manifest
|
||||
precacheAndRoute(self.__WB_MANIFEST);
|
||||
|
||||
// Custom precaching logic for the /api/modules endpoint
|
||||
self.addEventListener("install", (event) => {
|
||||
event.waitUntil(
|
||||
caches.open("api-modules-cache").then((cache) => {
|
||||
return fetch("/api/modules")
|
||||
.then((response) => {
|
||||
if (response.ok) {
|
||||
return cache.put("/api/modules", response);
|
||||
}
|
||||
throw new Error("Failed to fetch /api/modules");
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Precaching /api/modules failed:", error);
|
||||
});
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
// Custom precaching logic for the /api/schedule/rooms endpoint
|
||||
self.addEventListener("install", (event) => {
|
||||
event.waitUntil(
|
||||
caches.open("room-schedule-cache").then((cache) => {
|
||||
return fetch("/api/schedule/rooms")
|
||||
.then((response) => {
|
||||
if (response.ok) {
|
||||
return cache.put("/api/schedule/rooms", response);
|
||||
}
|
||||
throw new Error("Failed to fetch /api/schedule/rooms");
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error("Precaching /api/schedule/rooms failed:", error);
|
||||
});
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
// StaleWhileRevalidate strategy for the /api/schedule/rooms endpoint
|
||||
self.addEventListener("fetch", (event) => {
|
||||
if (event.request.url.includes("/api/schedule/rooms")) {
|
||||
event.respondWith(
|
||||
caches.open("room-schedule-cache").then((cache) => {
|
||||
return cache.match(event.request).then((response) => {
|
||||
const fetchPromise = fetch(event.request).then((networkResponse) => {
|
||||
cache.put(event.request, networkResponse.clone());
|
||||
return networkResponse;
|
||||
});
|
||||
return response || fetchPromise;
|
||||
});
|
||||
}),
|
||||
);
|
||||
}
|
||||
});
|
Reference in New Issue
Block a user