UNPKG

tns-template-master-detail-progress-ng

Version:

Master-detail interface to display tables from a Progress backend and inspect and edit selected records.

74 lines (63 loc) 2.82 kB
import { Injectable, NgZone } from "@angular/core"; import { Http } from "@angular/http"; import { progress } from "@progress/jsdo-core"; import "rxjs/add/observable/fromPromise"; import "rxjs/add/observable/of"; import { Observable } from "rxjs/Observable"; import { JsdoSettings } from "../../shared/jsdo.settings"; import { ProgressService } from "../../shared/progress.service"; import { State } from "./state.model"; import { DataSource, DataSourceOptions, DataResult } from "@progress/jsdo-nativescript"; /* ************************************************************************************* * The StateService handles all the data operations of retrieving state data. * * It relies upon a ProgressService so it can create a DataSource for the state data. * It is a read-only data service used to provide state info. ***************************************************************************************/ @Injectable() export class StateService { private dataSource: DataSource; private jsdoSettings: JsdoSettings = new JsdoSettings(); constructor( private _ngZone: NgZone, private _progressService: ProgressService ) { } createDataSource(successFn, errorFn): void { if (!this.dataSource) { try { this.dataSource = new DataSource({ jsdo: new progress.data.JSDO({ name: JsdoSettings.stateResourceName }) }); successFn(); } catch (e) { errorFn(); throw new Error("Error: " + e.message); } } } load(): Observable<any> { if (this.dataSource) { return Observable.of(this.dataSource.getData()); } else { const promise = new Promise((resolve, reject) => { this.createDataSource(() => { this.dataSource.read().subscribe((myData: DataResult) => { resolve(myData.data); }, (error) => { if (error.toString() === "Error: Error: HTTP Status 401 Unauthorized") { this._progressService.logout(); } reject(new Error("Error reading state records: " + error.message)); }); }, (error) => { const message = (error && error.message) ? error.message : "Error reading State records."; reject(new Error(message)); }); }); return Observable.fromPromise(promise).catch(this.handleErrors); } } private handleErrors(error: Response): Observable<any> { return Observable.throw(error); } }