From c743fd84d8a9e52f379ee0b3ee20d6ca901744ce Mon Sep 17 00:00:00 2001 From: Timur Enikeev Date: Sat, 27 Dec 2025 01:42:58 -0500 Subject: [PATCH 1/5] Cache icons --- vitePwaOptions.ts | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/vitePwaOptions.ts b/vitePwaOptions.ts index 3000101c..a033da3a 100644 --- a/vitePwaOptions.ts +++ b/vitePwaOptions.ts @@ -1,6 +1,31 @@ import { VitePWAOptions } from 'vite-plugin-pwa'; import { vitePwaManifest } from './vitePwaManifest'; -export const vitePWAconfig: Partial = { - manifest: vitePwaManifest, -}; +export const vitePWAconfig: Partial = { + manifest: vitePwaManifest, + workbox: { + runtimeCaching: [ + { + urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i, + handler: 'StaleWhileRevalidate', + options: { + cacheName: 'google-fonts-stylesheets', + }, + }, + { + urlPattern: /^https:\/\/fonts\.gstatic\.com\/.*/i, + handler: 'CacheFirst', + options: { + cacheName: 'google-fonts-webfonts', + expiration: { + maxEntries: 30, + maxAgeSeconds: 60 * 60 * 24 * 30, + }, + cacheableResponse: { + statuses: [0, 200], + }, + }, + }, + ], + }, +}; From 97d13df0f5fc809a1e6aea8915ac46552fb2432f Mon Sep 17 00:00:00 2001 From: Timur Enikeev Date: Sat, 27 Dec 2025 02:06:31 -0500 Subject: [PATCH 2/5] Timetable cache --- vitePwaOptions.ts | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/vitePwaOptions.ts b/vitePwaOptions.ts index a033da3a..2d4a612c 100644 --- a/vitePwaOptions.ts +++ b/vitePwaOptions.ts @@ -1,6 +1,6 @@ -import { VitePWAOptions } from 'vite-plugin-pwa'; -import { vitePwaManifest } from './vitePwaManifest'; - +import { VitePWAOptions } from 'vite-plugin-pwa'; +import { vitePwaManifest } from './vitePwaManifest'; + export const vitePWAconfig: Partial = { manifest: vitePwaManifest, workbox: { @@ -19,7 +19,22 @@ export const vitePWAconfig: Partial = { cacheName: 'google-fonts-webfonts', expiration: { maxEntries: 30, - maxAgeSeconds: 60 * 60 * 24 * 30, + maxAgeSeconds: 60 * 60 * 24 * 365, + }, + cacheableResponse: { + statuses: [0, 200], + }, + }, + }, + { + urlPattern: /^https:\/\/api(?:\.test)?\.profcomff\.com\/timetable\/.*/i, + handler: 'NetworkFirst', + options: { + cacheName: 'api-timetable', + networkTimeoutSeconds: 3, + expiration: { + maxEntries: 30, + maxAgeSeconds: 60 * 60 * 24 * 365, }, cacheableResponse: { statuses: [0, 200], From fae2544de07b64cb1b18ca1af888eb23956410f7 Mon Sep 17 00:00:00 2001 From: Timur Enikeev Date: Sat, 27 Dec 2025 02:19:14 -0500 Subject: [PATCH 3/5] Fix: avoids duplicating events across calls --- src/store/timetable.ts | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/store/timetable.ts b/src/store/timetable.ts index e604e7d8..5a89604c 100644 --- a/src/store/timetable.ts +++ b/src/store/timetable.ts @@ -51,15 +51,8 @@ export const useTimetableStore = defineStore('timetable', () => { function setDay(date: Date, eventList: Event[]) { const key = stringifyDate(date); - - if (!days.value.has(key)) { - days.value.set(key, []); - } - - for (const e of eventList) { - setEvents(eventList); - days.value.get(key)?.push(e); - } + setEvents(eventList); + days.value.set(key, [...eventList]); } function setLecturerEvents(lecturerId: number, eventList: Event[]) { From 941f8c7e4b546d3f736ec23d77890dd0ba2a8cf7 Mon Sep 17 00:00:00 2001 From: Timur Enikeev Date: Sat, 27 Dec 2025 02:19:47 -0500 Subject: [PATCH 4/5] NetworkFirst -> StaleWhileRevalidate --- vitePwaOptions.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vitePwaOptions.ts b/vitePwaOptions.ts index 2d4a612c..dfc5ca66 100644 --- a/vitePwaOptions.ts +++ b/vitePwaOptions.ts @@ -28,10 +28,9 @@ export const vitePWAconfig: Partial = { }, { urlPattern: /^https:\/\/api(?:\.test)?\.profcomff\.com\/timetable\/.*/i, - handler: 'NetworkFirst', + handler: 'StaleWhileRevalidate', options: { cacheName: 'api-timetable', - networkTimeoutSeconds: 3, expiration: { maxEntries: 30, maxAgeSeconds: 60 * 60 * 24 * 365, From fac74752e344c74d60f2a808070198d907280416 Mon Sep 17 00:00:00 2001 From: Timur Enikeev Date: Sat, 27 Dec 2025 02:27:27 -0500 Subject: [PATCH 5/5] Timetable TTL 365d -> 30d --- vitePwaOptions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vitePwaOptions.ts b/vitePwaOptions.ts index dfc5ca66..32c24391 100644 --- a/vitePwaOptions.ts +++ b/vitePwaOptions.ts @@ -33,7 +33,7 @@ export const vitePWAconfig: Partial = { cacheName: 'api-timetable', expiration: { maxEntries: 30, - maxAgeSeconds: 60 * 60 * 24 * 365, + maxAgeSeconds: 60 * 60 * 24 * 30, }, cacheableResponse: { statuses: [0, 200],