Skip to content

Instantly share code, notes, and snippets.

@amrfarid140
Created July 11, 2018 20:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amrfarid140/0af92d132fa0ad82a1dfcb6eeed94133 to your computer and use it in GitHub Desktop.
Save amrfarid140/0af92d132fa0ad82a1dfcb6eeed94133 to your computer and use it in GitHub Desktop.
Data access object
import { Observable, Observer } from "rxjs";
import { AppDatabase } from "./AppDatabase";
import { IRepositroy } from "./models/Repository";
export class Dao {
private db: AppDatabase;
private observablesList: Array<Observer<IRepositroy[]>> = [];
constructor() {
this.db = new AppDatabase();
}
public getItems(): Observable<IRepositroy[]> {
return Observable.create(async (observer: Observer<IRepositroy[]>) => {
this.observablesList.push(observer);
try {
observer.next(await this.db.repos.toArray());
} catch (error) {
observer.error(error);
}
});
}
public addItems(items: IRepositroy[]): Observable<IRepositroy[]> {
return Observable.create(async (observer: Observer<IRepositroy[]>) => {
try {
await this.db.repos.bulkAdd(items);
const updatedItems = await this.db.repos.toArray();
this.observablesList.forEach(item => item.next(updatedItems));
observer.next(items);
observer.complete();
} catch (error) {
observer.error(error);
observer.complete();
}
});
}
public async clearTable() {
await this.db.repos.clear();
this.observablesList.forEach(item => item.next([]));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment