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

Commit 0b0d5e8

Browse files
committed
add ability to clear store
1 parent 22b78a2 commit 0b0d5e8

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

spec/db_spec.ts

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

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

src/database.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,38 @@ export class Database {
263263
compare(a: any, b: any): number {
264264
return this._idb.cmp(a, b);
265265
}
266+
267+
clear(storeName: string) {
268+
return this.open(this._schema.name)
269+
.mergeMap(db => {
270+
return new Observable(txnObserver => {
271+
const recordSchema = this._schema.stores[storeName];
272+
const mapper = this._mapRecord(recordSchema);
273+
const txn = db.transaction([storeName], IDB_TXN_READWRITE);
274+
const objectStore = txn.objectStore(storeName);
275+
276+
const clearRequest = objectStore.clear();
277+
278+
const onTxnError = (err) => txnObserver.error(err);
279+
const onTxnComplete = () => txnObserver.complete();
280+
const onClear = (ev) => txnObserver.next();
281+
282+
txn.addEventListener(IDB_COMPLETE, onTxnComplete);
283+
txn.addEventListener(IDB_ERROR, onTxnError);
284+
285+
clearRequest.addEventListener(IDB_SUCCESS, onClear);
286+
clearRequest.addEventListener(IDB_ERROR, onTxnError);
287+
288+
return () => {
289+
clearRequest.removeEventListener(IDB_SUCCESS, onClear);
290+
clearRequest.removeEventListener(IDB_ERROR, onTxnError);
291+
txn.removeEventListener(IDB_COMPLETE, onTxnComplete);
292+
txn.removeEventListener(IDB_ERROR, onTxnError);
293+
};
294+
295+
});
296+
});
297+
}
266298
}
267299

268300
export const DB_PROVIDERS: any[] = [

0 commit comments

Comments
 (0)