diff --git a/app/javascript/dashboard/helper/CacheHelper/DataManager.js b/app/javascript/dashboard/helper/CacheHelper/DataManager.js index 909301e70..22be6cbde 100644 --- a/app/javascript/dashboard/helper/CacheHelper/DataManager.js +++ b/app/javascript/dashboard/helper/CacheHelper/DataManager.js @@ -13,7 +13,17 @@ export class DataManager { if (this.db) return this.db; const dbName = `cw-store-${this.accountId}`; this.db = await openDB(dbName, DATA_VERSION, { - upgrade(db) { + upgrade(db, oldVersion, _newVersion, tx) { + // Flush data carried over from a previous schema version so a + // DATA_VERSION bump acts as a global cache reset. oldVersion === 0 on + // first install, so fresh devices skip this. Clearing before creating + // means we only ever clear stores that pre-existed this upgrade. + if (oldVersion > 0) { + [...db.objectStoreNames].forEach(name => + tx.objectStore(name).clear() + ); + } + if (!db.objectStoreNames.contains('cache-keys')) { db.createObjectStore('cache-keys'); } diff --git a/app/javascript/dashboard/helper/CacheHelper/version.js b/app/javascript/dashboard/helper/CacheHelper/version.js index 8cd958863..bdf5b04c3 100644 --- a/app/javascript/dashboard/helper/CacheHelper/version.js +++ b/app/javascript/dashboard/helper/CacheHelper/version.js @@ -1,9 +1,9 @@ -// Bump DATA_VERSION whenever a new object store is added to the IDB schema -// (the `upgrade()` callback in DataManager only runs when the stored DB -// version is less than the requested version). The upgrade body itself is -// idempotent — it conditionally creates each store via -// `objectStoreNames.contains(name)` — so a single bump is enough to add any -// number of new stores without losing existing data. +// Bump DATA_VERSION to (a) add new object stores to the IDB schema or (b) +// flush bad/stale cache globally. The `upgrade()` callback in DataManager runs +// only when the stored DB version is less than the requested version; on any +// such bump it clears every existing store (a full cache reset) and then +// idempotently creates any missing stores. So bump this whenever a cached +// model's serializer shape changes, or to force all clients to refetch. // // Wednesday, 21 May 2026 — bumped to add canned_response + account_user stores export const DATA_VERSION = '1747785600';