Skip to content
This repository was archived by the owner on Jul 27, 2020. It is now read-only.

Commit a6cf229

Browse files
committed
add ability to clear store
1 parent afb3327 commit a6cf229

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

spec/database.spec.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,4 +188,29 @@ describe('database functionality', () => {
188188
});
189189
});
190190

191+
it('should clear store', (done) => {
192+
let found;
193+
idb.clear('todos').subscribe(
194+
() => {},
195+
err => {
196+
console.error(err),
197+
done(err);
198+
},
199+
() => {
200+
idb.query('todos').toArray().subscribe(
201+
(records) => {
202+
found = records;
203+
},
204+
err => {
205+
console.error(err);
206+
done(err);
207+
},
208+
() => {
209+
expect(found.length).toEqual(0);
210+
done();
211+
}
212+
);
213+
})
214+
});
215+
191216
});

src/database.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,38 @@ export class Database {
269269
compare(a: any, b: any): number {
270270
return this._idb.cmp(a, b);
271271
}
272+
273+
clear(storeName: string) {
274+
const open$ = this.open(this._schema.name);
275+
return mergeMap.call(open$, (db: IDBDatabase) => {
276+
return new Observable( (txnObserver: Observer<any>) => {
277+
const recordSchema = this._schema.stores[storeName];
278+
const mapper = this._mapRecord(recordSchema);
279+
const txn = db.transaction([storeName], IDB_TXN_READWRITE);
280+
const objectStore = txn.objectStore(storeName);
281+
282+
const clearRequest = objectStore.clear();
283+
284+
const onTxnError = (err: any) => txnObserver.error(err);
285+
const onTxnComplete = () => txnObserver.complete();
286+
const onClear = () => txnObserver.next(null);
287+
288+
txn.addEventListener(IDB_COMPLETE, onTxnComplete);
289+
txn.addEventListener(IDB_ERROR, onTxnError);
290+
291+
clearRequest.addEventListener(IDB_SUCCESS, onClear);
292+
clearRequest.addEventListener(IDB_ERROR, onTxnError);
293+
294+
return () => {
295+
clearRequest.removeEventListener(IDB_SUCCESS, onClear);
296+
clearRequest.removeEventListener(IDB_ERROR, onTxnError);
297+
txn.removeEventListener(IDB_COMPLETE, onTxnComplete);
298+
txn.removeEventListener(IDB_ERROR, onTxnError);
299+
};
300+
301+
});
302+
});
303+
}
272304
}
273305

274306

0 commit comments

Comments
 (0)