From ea7898d113464b3a52d858f4abbe4df430feb4e0 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Mon, 15 Jan 2024 15:08:15 +0530 Subject: [PATCH] feat: fallback to DB localStorage for idb names (#8682) Co-authored-by: Muhsin Keloth --- .../helper/CacheHelper/DataManager.js | 8 ++++++ app/javascript/dashboard/store/utils/api.js | 25 ++++++++++++++++--- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/app/javascript/dashboard/helper/CacheHelper/DataManager.js b/app/javascript/dashboard/helper/CacheHelper/DataManager.js index df7d560ac..23beaa971 100644 --- a/app/javascript/dashboard/helper/CacheHelper/DataManager.js +++ b/app/javascript/dashboard/helper/CacheHelper/DataManager.js @@ -10,6 +10,7 @@ export class DataManager { async initDb() { if (this.db) return this.db; + const dbName = `cw-store-${this.accountId}`; this.db = await openDB(`cw-store-${this.accountId}`, DATA_VERSION, { upgrade(db) { db.createObjectStore('cache-keys'); @@ -19,6 +20,13 @@ export class DataManager { }, }); + // Store the database name in LocalStorage + const dbNames = JSON.parse(localStorage.getItem('cw-idb-names') || '[]'); + if (!dbNames.includes(dbName)) { + dbNames.push(dbName); + localStorage.setItem('cw-idb-names', JSON.stringify(dbNames)); + } + return this.db; } diff --git a/app/javascript/dashboard/store/utils/api.js b/app/javascript/dashboard/store/utils/api.js index 32afbeb94..79e8bc6c3 100644 --- a/app/javascript/dashboard/store/utils/api.js +++ b/app/javascript/dashboard/store/utils/api.js @@ -44,10 +44,29 @@ export const clearLocalStorageOnLogout = () => { }; export const deleteIndexedDBOnLogout = async () => { - const dbs = await window.indexedDB.databases(); - dbs.forEach(db => { - window.indexedDB.deleteDatabase(db.name); + let dbs = []; + try { + dbs = await window.indexedDB.databases(); + dbs = dbs.map(db => db.name); + } catch (e) { + dbs = JSON.parse(localStorage.getItem('cw-idb-names') || '[]'); + } + + dbs.forEach(dbName => { + const deleteRequest = window.indexedDB.deleteDatabase(dbName); + + deleteRequest.onerror = event => { + // eslint-disable-next-line no-console + console.error(`Error deleting database ${dbName}.`, event); + }; + + deleteRequest.onsuccess = () => { + // eslint-disable-next-line no-console + console.log(`Database ${dbName} deleted successfully.`); + }; }); + + localStorage.removeItem('cw-idb-names'); }; export const clearCookiesOnLogout = () => {