export default class BilliDB { private DB_VERSION: number; private DB_NAME: string; constructor(dbName:string, dbVersion:number) { this.DB_NAME = dbName; this.DB_VERSION = dbVersion; } async getDb():Promise { 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("inventory", {autoIncrement: false, keyPath: 'id'}); db.createObjectStore("sets", {autoIncrement: false, keyPath: 'id'}); db.createObjectStore("conditions", {autoIncrement: false, keyPath: 'key'}); db.createObjectStore("buildtypes", {autoIncrement: false, keyPath: 'key'}); db.createObjectStore("mounts", {autoIncrement: false, keyPath: 'key'}); db.createObjectStore("brands", {autoIncrement: false, keyPath: 'key'}); db.createObjectStore("manufacturers", {autoIncrement: false, keyPath: 'key'}); db.createObjectStore("medias", {autoIncrement: false, keyPath: 'key'}); } }) } async saveItem(item, storeId:string) { 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:string) { 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:string) { const db = await this.getDb(); return new Promise((resolve, reject) => { const items = []; // @ts-ignore const trans = db.transaction([storeId], 'readonly'); trans.oncomplete = (e) => { console.log(`${storeId}: oncomplete`, items.length) resolve(items); }; trans.onerror = (e) => { console.log("on Error", e) reject(e); }; const store = trans.objectStore(storeId); store.openCursor().onsuccess = (e) => { const cursor = e.target.result; if(cursor) { items.push(cursor.value); cursor.continue(); } } store.onerror = (e) => { console.log("Error on getAll", e) } store.oncomplete = (e) => { console.log("oncomplete on getAll", e) } }) } }