import { Injectable } from '@angular/core'; import { ApiProvider } from '../../services/api/api.provider'; import { Beacon } from './beacon'; import 'rxjs/add/operator/map'; import { Subject } from 'rxjs/Subject'; import * as _ from 'lodash'; // beacon holder // current beacon // observable? // Generated class for the Beacon provider. // See https://angular.io/docs/ts/latest/guide/dependency-injection.html // for more info on providers and Angular 2 DI. @Injectable() export class BeaconProvider { beacons: Beacon[]; currentBeacon: Beacon; beaconObservable: Subject; beaconSetObservable: Subject; constructor( public apiProvider: ApiProvider) { this.beacons = []; this.beaconObservable = > new Subject(); this.beaconSetObservable = > new Subject(); } createBeacon(beacon: Beacon) { // createBeacon() { // TODO REMOVE // let beacon = new Beacon(); let payload: any = beacon.toJson(); let promise = new Promise((resolve, reject) => { this.apiProvider.api('POST', '/v1/beacon' , payload) .then((response: any) => { if (response.id) { // cast to class? this.beaconState(Beacon.fromJson(response)); resolve(this.currentBeacon); } else { reject(); } }, (err) => { // catch error // @todo: We should check for errors ?!? reject(err); }); }); return promise; } retrieveBeacon(beaconId: string) { let payload = {}; let promise = new Promise((resolve, reject) => { this.apiProvider.api('GET', '/v1/beacon/' + beaconId, payload) .then((response: any) => { if (response.id) { // cast to class? this.beaconState(Beacon.fromJson(response)); resolve(this.currentBeacon); } else { reject(); } }, (err) => { // catch error // @todo: We should check for errors ?!? reject(err); }); }); return promise; } // `/v1/beacon/?tenantId=*tenantId` retrieveByTenant(tenantId: string) { let payload = { tenantId: tenantId }; let promise = new Promise((resolve, reject) => { this.apiProvider.api('GET', '/v1/beacons/', payload) .then((response: any) => { if (response) { this.beacons = _.map((_.values(response)), Beacon.fromJson); this.beaconSetObservable.next(this.beacons); resolve(this.beacons ); } else { reject(); } }) .catch((erresp) => { reject(erresp); }); }); return promise; } createEvent( uuid: string, major: number, minor: number) { // loading the parameters let payload: any = {}; payload.uuid = uuid; payload.major = major; payload.minor = minor; let promise = new Promise((resolve, reject) => { this.apiProvider.api('POST', '/v1/beacon/event/presence' , payload) .then((response: any) => { if (response.id) { // cast to class? this.beaconState(Beacon.fromJson(response)); resolve(this.currentBeacon); } else { reject(); } }, (err) => { // catch error // @todo: We should check for errors ?!? reject(err); }); }); return promise; } // pending insert or replace beaconState(result: Beacon) { this.currentBeacon = result; this.beaconObservable.next(this.currentBeacon); this.beaconSetObservable.next(this.beacons); } }