yalento
Version:
An awesome integration of Google Firebase for Angular and Node
112 lines (111 loc) • 3.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Select = void 0;
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
class Select {
constructor(subject) {
this._subscriptions = [];
this.subject = subject;
this.paginator = subject.getPaginator();
}
getPaginator(onChanges) {
if (onChanges) {
this.getResultsAsObservable().subscribe(() => {
onChanges(this.paginator);
});
}
return this.paginator;
}
getResults() {
return this.paginator.getResults();
}
getModels() {
return this.paginator.getResults().map((result) => result.getModel());
}
getResultsAsPromise() {
return new Promise((resolve) => {
this.subject
.getQueryCallbackChanges()
.pipe(operators_1.takeWhile((changes) => {
return changes.results === undefined;
}))
.toPromise()
.then(() => {
resolve(this.getResults());
});
this.subject.execStatement(this.subject.getSql());
});
}
toJson() {
return new Promise((resolve) => {
this.subject
.getQueryCallbackChanges()
.pipe(operators_1.takeWhile((changes) => {
return changes.results === undefined;
}))
.toPromise()
.then(() => {
const results = [];
this.getResults().forEach((r) => {
const c = r._toPlain();
Object.keys(c).forEach((key) => {
if (key.substr(0, 2) === '__') {
delete c[key];
}
});
results.push(c);
});
resolve(JSON.stringify(results));
});
this.subject.execStatement(this.subject.getSql());
});
}
getResultsAsObservable() {
return new rxjs_1.Observable((observer) => {
this._subscriptions.push(this.subject.getQueryCallbackChanges().subscribe((changes) => {
if (changes.results !== undefined) {
this.subject.getRepository()._zone.run(() => {
observer.next(this.getResults());
});
}
}));
});
}
getReadOnlyResultsAsObservable() {
return new rxjs_1.Observable((observer) => {
this._subscriptions.push(this.subject.getQueryCallbackChanges().subscribe((changes) => {
if (changes.results !== undefined) {
this.subject.getRepository()._zone.run(() => {
observer.next(this.getResults().map((item) => {
return item.getModel();
}));
});
}
}));
});
}
create(data, id) {
return new Promise((resolve, reject) => {
this.subject
.getRepository()
.create(data, id, this.subject.getSqlSelectParsed(this.subject.getSql()))
.then((c) => {
this.subject
.getQueryCallbackChanges()
.pipe(operators_1.take(1))
.toPromise()
.then(() => {
resolve(c);
});
this.subject.execStatement(this.subject.getSql());
});
});
}
unsubscribe() {
this._subscriptions.forEach((sub) => {
sub.unsubscribe();
});
}
}
exports.Select = Select;