billibox-vue/src/indexdDB/index.js

121 lines
4.3 KiB
JavaScript

export default class BilliDB {
DB_VERSION;
DB_NAME;
constructor(dbName, dbVersion) {
this.DB_NAME = dbName;
this.DB_VERSION = dbVersion;
}
async getDb() {
return new Promise((resolve, reject) => {
const request = window.indexedDB.open(this.DB_NAME, this.DB_VERSION);
request.onerror = e => {
console.log("Error opening db", e);
reject("Error");
};
request.onsuccess = e => {
console.log("connect erfolgreich");
// @ts-ignore
resolve(e.target.result);
};
request.onupgradeneeded = e => {
console.log("onupgradeneeded");
// @ts-ignore
const db = e.target.result;
db.createObjectStore("cameras", { autoIncrement: false, keyPath: 'id' });
db.createObjectStore("brands", { autoIncrement: false, keyPath: 'schluessel' });
db.createObjectStore("conditions", { autoIncrement: false, keyPath: 'schluessel' });
db.createObjectStore("buildtypes", { autoIncrement: false, keyPath: 'schluessel' });
};
});
}
async saveItem(item, storeId) {
const db = await this.getDb();
return new Promise((resolve, reject) => {
console.log("Starting Add Transaction");
// @ts-ignore
const trans = db.transaction([storeId], 'readwrite');
trans.oncomplete = (e) => {
resolve(e);
};
trans.onerror = (e) => {
console.log("on Error", e);
reject(e);
};
const store = trans.objectStore(storeId);
store.add(item);
store.onerror = (e) => {
console.log("Error on Store", e);
};
store.oncomplete = (e) => {
console.log("oncomplete on Store", e);
};
store.onsuccess = (e) => {
console.log("onsuccess on Store", e);
};
});
}
async saveItems(items, storeId) {
const db = await this.getDb();
return new Promise((resolve, reject) => {
console.log("Starting Add Transaction");
// @ts-ignore
const trans = db.transaction([storeId], 'readwrite');
trans.oncomplete = (e) => {
resolve(e);
};
trans.onerror = (e) => {
console.log("on Error", e);
reject(e);
};
const store = trans.objectStore(storeId);
items.forEach((item) => {
store.add(item);
});
store.onerror = (e) => {
console.log("Error on Store", e);
};
store.oncomplete = (e) => {
console.log("oncomplete on Store", e);
};
store.onsuccess = (e) => {
console.log("onsuccess on Store", e);
};
});
}
async getItems(storeId) {
console.log("DB-getItems", storeId);
const db = await this.getDb();
return new Promise((resolve, reject) => {
console.log("DB-getItems: Starting Get Transaction");
const items = [];
// @ts-ignore
const trans = db.transaction([storeId], 'readonly');
trans.oncomplete = (e) => {
resolve(items);
};
trans.onerror = (e) => {
console.log("on Error", e);
reject(e);
};
const store = trans.objectStore(storeId);
console.log("--> We have try to get a cursor");
store.openCursor().onsuccess = (e) => {
console.log("--> We have a cursor", e.target.result);
const cursor = e.target.result;
if (cursor) {
items.push(cursor.value);
cursor.continue();
}
console.log("onsuccess on getAll", items);
// resolve(e.target.result);
};
store.onerror = (e) => {
console.log("Error on getAll", e);
};
store.oncomplete = (e) => {
console.log("oncomplete on getAll", e);
};
});
}
}
//# sourceMappingURL=index.js.map