Skip to content

Commit 008d93d

Browse files
Merge Clear Db
See: ngrx#4 and commit: 6981762
2 parents 056b279 + 6981762 commit 008d93d

File tree

3 files changed

+62
-5
lines changed

3 files changed

+62
-5
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@ngrx/db",
3-
"version": "2.1.0",
3+
"version": "2.1.1-alpha",
44
"description": "RxJS + IndexedDB for Angular",
55
"main": "bundles/db.umd.js",
66
"module": "index.js",

spec/database.spec.ts

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

191-
});
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+
216+
});

src/database.ts

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export interface DBSchema {
3737
stores: {[storename: string]: DBStore};
3838
}
3939

40-
export function getIDBFactory(): IDBFactory {
40+
export function getIDBFactory() {
4141
return typeof window !== 'undefined' ? window.indexedDB : self.indexedDB;
4242
}
4343

@@ -46,10 +46,10 @@ export class Database {
4646

4747
public changes: Subject<any> = new Subject();
4848

49-
private _idb: IDBFactory;
49+
private _idb;
5050
private _schema: DBSchema;
5151

52-
constructor(@Inject(DatabaseBackend) idbBackend: any, @Inject(IDB_SCHEMA) schema: any) {
52+
constructor(@Inject(DatabaseBackend) idbBackend: any, @Inject(IDB_SCHEMA) schema: DBSchema) {
5353
this._schema = schema;
5454
this._idb = idbBackend;
5555
}
@@ -270,6 +270,38 @@ export class Database {
270270
compare(a: any, b: any): number {
271271
return this._idb.cmp(a, b);
272272
}
273+
274+
clear(storeName: string) {
275+
const open$ = this.open(this._schema.name);
276+
return mergeMap.call(open$, (db: IDBDatabase) => {
277+
return new Observable( (txnObserver: Observer<any>) => {
278+
const recordSchema = this._schema.stores[storeName];
279+
const mapper = this._mapRecord(recordSchema);
280+
const txn = db.transaction([storeName], IDB_TXN_READWRITE);
281+
const objectStore = txn.objectStore(storeName);
282+
283+
const clearRequest = objectStore.clear();
284+
285+
const onTxnError = (err: any) => txnObserver.error(err);
286+
const onTxnComplete = () => txnObserver.complete();
287+
const onClear = () => txnObserver.next(null);
288+
289+
txn.addEventListener(IDB_COMPLETE, onTxnComplete);
290+
txn.addEventListener(IDB_ERROR, onTxnError);
291+
292+
clearRequest.addEventListener(IDB_SUCCESS, onClear);
293+
clearRequest.addEventListener(IDB_ERROR, onTxnError);
294+
295+
return () => {
296+
clearRequest.removeEventListener(IDB_SUCCESS, onClear);
297+
clearRequest.removeEventListener(IDB_ERROR, onTxnError);
298+
txn.removeEventListener(IDB_COMPLETE, onTxnComplete);
299+
txn.removeEventListener(IDB_ERROR, onTxnError);
300+
};
301+
302+
});
303+
});
304+
}
273305
}
274306

275307

0 commit comments

Comments
 (0)