react-indexed-db-hook
Version:
React wrapper to IndexedDB database.
78 lines (72 loc) • 1.75 kB
text/typescript
export interface Options {
storeName: string;
dbMode: IDBTransactionMode;
error: (e: Event) => any;
complete: (e: Event) => any;
abort?: any;
}
export function validateStoreName(db: IDBDatabase, storeName: string) {
return db.objectStoreNames.contains(storeName);
}
export function validateBeforeTransaction(
db: IDBDatabase,
storeName: string,
reject: (errorMessage: string) => void,
) {
if (!db) {
reject(
"You need to use the openDatabase function to create a database before you query it!",
);
}
if (!validateStoreName(db, storeName)) {
reject(`objectStore does not exists: ${storeName}`);
}
}
export function createTransaction(
db: IDBDatabase,
options: Options,
): IDBTransaction {
const trans: IDBTransaction = db.transaction(
options.storeName,
options.dbMode,
);
trans.onerror = options.error;
trans.oncomplete = options.complete;
trans.onabort = options.abort;
return trans;
}
export function optionsGenerator(
type: any,
storeName: any,
reject: (e: Event) => void,
resolve: (e?: Event) => void,
): Options {
return {
storeName: storeName,
dbMode: type,
error: (e: Event) => {
reject(e);
},
complete: () => {
resolve();
},
abort: (e: Event) => {
reject(e);
},
};
}
// export function* processRequest({ request, success, error }: any) {
// request.onerror = function(event: Event) {
// error(error);
// yield error;
// };
// request.onsuccess = function(evt: Event) {
// let cursor: IDBCursorWithValue = (<IDBRequest>evt.target).result;
// if (cursor) {
// result.push(cursor.value);
// cursor.continue();
// } else {
// resolve(result);
// }
// };
// }