copay-crown
Version:
A Secure Crown Wallet
102 lines (84 loc) • 3.02 kB
text/typescript
import { Component } from '@angular/core';
import { Events, ModalController, NavController } from 'ionic-angular';
import * as _ from 'lodash';
import { Logger } from '../../../providers/logger/logger';
// Pages
import { ShapeshiftDetailsPage } from './shapeshift-details/shapeshift-details';
import { ShapeshiftShiftPage } from './shapeshift-shift/shapeshift-shift';
// Providers
import { ExternalLinkProvider } from '../../../providers/external-link/external-link';
import { ShapeshiftProvider } from '../../../providers/shapeshift/shapeshift';
export class ShapeshiftPage {
public shifts: any;
public network: string;
constructor(
private events: Events,
private externalLinkProvider: ExternalLinkProvider,
private logger: Logger,
private modalCtrl: ModalController,
private navCtrl: NavController,
private shapeshiftProvider: ShapeshiftProvider
) {
this.network = this.shapeshiftProvider.getNetwork();
this.shifts = { data: {} };
this.init();
}
ionViewDidLoad() {
this.logger.info('ionViewDidLoad ShapeshiftPage');
}
ionViewWillEnter() {
this.events.subscribe('bwsEvent', (walletId: string, type: string, n: any) => {
if (type == 'NewBlock') this.updateShift(this.shifts);
});
}
public openExternalLink(url: string): void {
this.externalLinkProvider.open(url);
}
private updateShift = _.debounce((shifts: any) => {
if (_.isEmpty(shifts.data)) return;
_.forEach(shifts.data, (dataFromStorage: any) => {
this.shapeshiftProvider.getStatus(dataFromStorage.address, (err: any, st: any) => {
if (err) return;
this.shifts.data[st.address].status = st.status;
this.shifts.data[st.address].transaction = st.transaction || null;
this.shifts.data[st.address].incomingCoin = st.incomingCoin || null;
this.shifts.data[st.address].incomingType = st.incomingType || null;
this.shifts.data[st.address].outgoingCoin = st.outgoingCoin || null;
this.shifts.data[st.address].outgoingType = st.outgoingType || null;
this.shapeshiftProvider.saveShapeshift(this.shifts.data[st.address], null, (err: any) => {
this.logger.debug("Saved shift with status: " + st.status);
});
});
});
}, 1000, {
'leading': true
});
private init(): void {
this.shapeshiftProvider.getShapeshift((err: any, ss: any) => {
if (err) this.logger.error(err);
this.shifts = { data: ss };
this.updateShift(this.shifts);
});
}
public update(): void {
this.updateShift(this.shifts);
}
public openShiftModal(ssData: any) {
let modal = this.modalCtrl.create(ShapeshiftDetailsPage, { ssData });
modal.present();
modal.onDidDismiss((data) => {
this.init();
});
}
public goTo(page: string): void {
switch (page) {
case 'Shift':
this.navCtrl.push(ShapeshiftShiftPage);
break;
}
}
}