Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 36 additions & 22 deletions dist/doboard-widget-bundle.js
Original file line number Diff line number Diff line change
Expand Up @@ -7842,13 +7842,22 @@ const LOCAL_DATA_BASE_TABLE = [
{ name: SPOTFIX_TABLE_COMMENTS, keyPath: 'commentId' },
];

const SPOTFIX_LAST_DB_KEY = 'spotfix_last_db_key';

let dbPromise = null;

function getDBName() {
return `${SPOTFIX_INDEXED_DB_NAME}_${
localStorage.getItem('spotfix_session_id') ||
localStorage.getItem('spotfix_project_token')
}`;
function getSpotfixDBKey() {
const sessionId = localStorage.getItem('spotfix_session_id');
const projectToken = localStorage.getItem('spotfix_project_token');

if (sessionId) return `session:${sessionId}`;
if (projectToken) return `project:${projectToken}`;

return null;
}

function getDBNameByKey(dbKey) {
return `${SPOTFIX_INDEXED_DB_NAME}_${dbKey}`;
}

function openIndexedDB(name, version) {
Expand Down Expand Up @@ -7881,43 +7890,51 @@ function openIndexedDB(name, version) {

function getDB() {
if (!dbPromise) {
dbPromise = openIndexedDB(getDBName(), spotfixIndexedDBVersion);
const dbKey = getSpotfixDBKey();
if (!dbKey) return null;

dbPromise = openIndexedDB(
getDBNameByKey(dbKey),
spotfixIndexedDBVersion
);
}
return dbPromise;
}

async function deleteCurrentDB() {
const name = getDBName();
async function deleteDBByKey(dbKey) {
return new Promise((resolve) => {
const req = indexedDB.deleteDatabase(name);
const req = indexedDB.deleteDatabase(getDBNameByKey(dbKey));
req.onsuccess = () => resolve();
req.onerror = () => resolve();
req.onblocked = () => {
console.warn('IndexedDB delete blocked');
resolve();
};
req.onblocked = () => resolve();
});
}

const spotfixIndexedDB = {
init: async () => {
const sessionId = localStorage.getItem('spotfix_session_id');
const projectToken = localStorage.getItem('spotfix_project_token');
const currentKey = getSpotfixDBKey();

if (!sessionId && !projectToken) {
if (!currentKey) {
return { needInit: false };
}

await deleteCurrentDB();
const lastKey = localStorage.getItem(SPOTFIX_LAST_DB_KEY);

dbPromise = null;
if (lastKey && lastKey !== currentKey) {
await deleteDBByKey(lastKey);
}

localStorage.setItem(SPOTFIX_LAST_DB_KEY, currentKey);

dbPromise = null;
await getDB();

return { needInit: true };
},

withStore: async (table, mode = 'readwrite', callback) => {
const db = await getDB();
if (!db) return;

return new Promise((resolve, reject) => {
const tx = db.transaction(table, mode);
Expand Down Expand Up @@ -7978,10 +7995,7 @@ const spotfixIndexedDB = {
},

getTable: async (table) => {
if (
!localStorage.getItem('spotfix_session_id') &&
!localStorage.getItem('spotfix_project_token')
) {
if (!getSpotfixDBKey()) {
return [];
}
return spotfixIndexedDB.getAll(table);
Expand Down
2 changes: 1 addition & 1 deletion dist/doboard-widget-bundle.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/doboard-widget-bundle.min.js.map

Large diffs are not rendered by default.

58 changes: 36 additions & 22 deletions js/src/localDB.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,22 @@ const LOCAL_DATA_BASE_TABLE = [
{ name: SPOTFIX_TABLE_COMMENTS, keyPath: 'commentId' },
];

const SPOTFIX_LAST_DB_KEY = 'spotfix_last_db_key';

let dbPromise = null;

function getDBName() {
return `${SPOTFIX_INDEXED_DB_NAME}_${
localStorage.getItem('spotfix_session_id') ||
localStorage.getItem('spotfix_project_token')
}`;
function getSpotfixDBKey() {
const sessionId = localStorage.getItem('spotfix_session_id');
const projectToken = localStorage.getItem('spotfix_project_token');

if (sessionId) return `session:${sessionId}`;
if (projectToken) return `project:${projectToken}`;

return null;
}

function getDBNameByKey(dbKey) {
return `${SPOTFIX_INDEXED_DB_NAME}_${dbKey}`;
}

function openIndexedDB(name, version) {
Expand Down Expand Up @@ -50,43 +59,51 @@ function openIndexedDB(name, version) {

function getDB() {
if (!dbPromise) {
dbPromise = openIndexedDB(getDBName(), spotfixIndexedDBVersion);
const dbKey = getSpotfixDBKey();
if (!dbKey) return null;

dbPromise = openIndexedDB(
getDBNameByKey(dbKey),
spotfixIndexedDBVersion
);
}
return dbPromise;
}

async function deleteCurrentDB() {
const name = getDBName();
async function deleteDBByKey(dbKey) {
return new Promise((resolve) => {
const req = indexedDB.deleteDatabase(name);
const req = indexedDB.deleteDatabase(getDBNameByKey(dbKey));
req.onsuccess = () => resolve();
req.onerror = () => resolve();
req.onblocked = () => {
console.warn('IndexedDB delete blocked');
resolve();
};
req.onblocked = () => resolve();
});
}

const spotfixIndexedDB = {
init: async () => {
const sessionId = localStorage.getItem('spotfix_session_id');
const projectToken = localStorage.getItem('spotfix_project_token');
const currentKey = getSpotfixDBKey();

if (!sessionId && !projectToken) {
if (!currentKey) {
return { needInit: false };
}

await deleteCurrentDB();
const lastKey = localStorage.getItem(SPOTFIX_LAST_DB_KEY);

dbPromise = null;
if (lastKey && lastKey !== currentKey) {
await deleteDBByKey(lastKey);
}

localStorage.setItem(SPOTFIX_LAST_DB_KEY, currentKey);

dbPromise = null;
await getDB();

return { needInit: true };
},

withStore: async (table, mode = 'readwrite', callback) => {
const db = await getDB();
if (!db) return;

return new Promise((resolve, reject) => {
const tx = db.transaction(table, mode);
Expand Down Expand Up @@ -147,10 +164,7 @@ const spotfixIndexedDB = {
},

getTable: async (table) => {
if (
!localStorage.getItem('spotfix_session_id') &&
!localStorage.getItem('spotfix_project_token')
) {
if (!getSpotfixDBKey()) {
return [];
}
return spotfixIndexedDB.getAll(table);
Expand Down