Files

88 lines
2.6 KiB
JavaScript

const DB_NAME = 'SpanishDiary';
const DB_VERSION = 1;
const STORE_NAME = 'entries';
let db = null;
function openDb() {
return new Promise((resolve, reject) => {
if (db) { resolve(db); return; }
const req = indexedDB.open(DB_NAME, DB_VERSION);
req.onupgradeneeded = (e) => {
const d = e.target.result;
if (!d.objectStoreNames.contains(STORE_NAME)) {
const store = d.createObjectStore(STORE_NAME, { keyPath: 'id' });
store.createIndex('date', 'date', { unique: false });
}
};
req.onsuccess = (e) => { db = e.target.result; resolve(db); };
req.onerror = (e) => reject(e.target.error);
});
}
function getAllEntries() {
return openDb().then(db => {
return new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, 'readonly');
const store = tx.objectStore(STORE_NAME);
const index = store.index('date');
const req = index.openCursor(null, 'prev');
const results = [];
req.onsuccess = (e) => {
const cursor = e.target.result;
if (cursor) { results.push(cursor.value); cursor.continue(); }
else resolve(results);
};
req.onerror = (e) => reject(e.target.error);
});
});
}
function getEntry(id) {
return openDb().then(db => {
return new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, 'readonly');
const store = tx.objectStore(STORE_NAME);
const req = store.get(id);
req.onsuccess = () => resolve(req.result || null);
req.onerror = (e) => reject(e.target.error);
});
});
}
function addEntry(entry) {
return openDb().then(db => {
return new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, 'readwrite');
const store = tx.objectStore(STORE_NAME);
const req = store.add(entry);
req.onsuccess = () => resolve(entry);
req.onerror = (e) => reject(e.target.error);
});
});
}
function updateEntry(entry) {
return openDb().then(db => {
return new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, 'readwrite');
const store = tx.objectStore(STORE_NAME);
const req = store.put(entry);
req.onsuccess = () => resolve(entry);
req.onerror = (e) => reject(e.target.error);
});
});
}
function deleteEntry(id) {
return openDb().then(db => {
return new Promise((resolve, reject) => {
const tx = db.transaction(STORE_NAME, 'readwrite');
const store = tx.objectStore(STORE_NAME);
const req = store.delete(id);
req.onsuccess = () => resolve();
req.onerror = (e) => reject(e.target.error);
});
});
}