forked from Nova-reward/Nova-Rewards
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathofflineStorage.js
More file actions
84 lines (73 loc) · 2.24 KB
/
Copy pathofflineStorage.js
File metadata and controls
84 lines (73 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// Offline storage utilities using IndexedDB
const DB_NAME = 'nova-rewards-offline';
const DB_VERSION = 1;
const STORE_NAME = 'api-cache';
function openDB() {
return new Promise((resolve, reject) => {
const request = indexedDB.open(DB_NAME, DB_VERSION);
request.onerror = () => reject(request.error);
request.onsuccess = () => resolve(request.result);
request.onupgradeneeded = (event) => {
const db = event.target.result;
if (!db.objectStoreNames.contains(STORE_NAME)) {
db.createObjectStore(STORE_NAME, { keyPath: 'key' });
}
};
});
}
export async function saveToOfflineCache(key, data) {
try {
const db = await openDB();
const transaction = db.transaction([STORE_NAME], 'readwrite');
const store = transaction.objectStore(STORE_NAME);
store.put({
key,
data,
timestamp: Date.now(),
});
return new Promise((resolve, reject) => {
transaction.oncomplete = () => resolve(true);
transaction.onerror = () => reject(transaction.error);
});
} catch (error) {
console.error('Save to offline cache failed:', error);
return false;
}
}
export async function getFromOfflineCache(key) {
try {
const db = await openDB();
const transaction = db.transaction([STORE_NAME], 'readonly');
const store = transaction.objectStore(STORE_NAME);
const request = store.get(key);
return new Promise((resolve, reject) => {
request.onsuccess = () => {
const result = request.result;
if (result) {
resolve(result.data);
} else {
resolve(null);
}
};
request.onerror = () => reject(request.error);
});
} catch (error) {
console.error('Get from offline cache failed:', error);
return null;
}
}
export async function clearOfflineCache() {
try {
const db = await openDB();
const transaction = db.transaction([STORE_NAME], 'readwrite');
const store = transaction.objectStore(STORE_NAME);
store.clear();
return new Promise((resolve, reject) => {
transaction.oncomplete = () => resolve(true);
transaction.onerror = () => reject(transaction.error);
});
} catch (error) {
console.error('Clear offline cache failed:', error);
return false;
}
}