copay-crown
Version:
A Secure Crown Wallet
144 lines (123 loc) • 4.71 kB
text/typescript
import { Component } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { ModalController, NavController, NavParams } from 'ionic-angular';
import { Logger } from '../../../providers/logger/logger';
// providers
import { ExternalLinkProvider } from '../../../providers/external-link/external-link';
import { GlideraProvider } from '../../../providers/glidera/glidera';
import { OnGoingProcessProvider } from '../../../providers/on-going-process/on-going-process';
import { PopupProvider } from '../../../providers/popup/popup';
// pages
import { AmountPage } from '../../send/amount/amount';
import { GlideraTxDetailsPage } from './glidera-tx-details/glidera-tx-details';
export class GlideraPage {
public account: any;
public tx: any;
public showOauthForm: boolean;
public network: string;
public currency: string;
public oauthCodeForm: FormGroup;
constructor(
private externalLinkProvider: ExternalLinkProvider,
private onGoingProcessProvider: OnGoingProcessProvider,
private glideraProvider: GlideraProvider,
private popupProvider: PopupProvider,
private logger: Logger,
private navParams: NavParams,
private navCtrl: NavController,
private formBuilder: FormBuilder,
private modalCtrl: ModalController
) {
this.oauthCodeForm = this.formBuilder.group({
code: ['', Validators.compose([Validators.minLength(1), Validators.required])]
});
this.network = this.glideraProvider.getNetwork();
this.currency = this.glideraProvider.getCurrency();
this.showOauthForm = false;
this.account = {};
}
ionViewDidEnter() {
if (this.navParams.data && this.navParams.data.code) this.submitOauthCode(this.navParams.data.code);
else this.init();
}
public openExternalLink(url: string): void {
this.externalLinkProvider.open(url);
}
private init(): void {
this.onGoingProcessProvider.set('connectingGlidera');
this.glideraProvider.init((err, data) => {
this.onGoingProcessProvider.clear();
if (err) {
this.popupProvider.ionicAlert('Error connecting Glidera', err + '. Please re-connect to Glidera');
return;
}
if (!data || (data && !data.token)) return;
this.account.token = data.token;
this.account.status = data.status;
this.account.txs = data.txs;
this.update();
});
}
public update(opts?: any): void {
this.logger.debug('Updating Glidera...');
this.glideraProvider.updateStatus(this.account);
}
public getAuthenticateUrl(): string {
return this.glideraProvider.getOauthCodeUrl();
}
public submitOauthCode(code?: string): void {
this.onGoingProcessProvider.set('connectingGlidera');
this.glideraProvider.authorize(code, (err, data) => {
this.onGoingProcessProvider.clear();
if (err) {
this.popupProvider.ionicAlert('Authorization error', err);
return;
}
this.account.token = data.token;
this.account.status = data.status;
this.init();
});
};
public openTxModal(tx) {
this.tx = tx;
let modal = this.modalCtrl.create(GlideraTxDetailsPage, { tx: this.tx });
modal.present();
this.glideraProvider.getTransaction(this.account.token, tx.transactionUuid, (err, tx) => {
if (err) {
this.popupProvider.ionicAlert('Error getting transaction', 'Could not get transactions');
return;
}
this.tx = tx;
});
}
public openAuthenticateWindow(): void {
this.openExternalLink(this.getAuthenticateUrl());
this.showOauthForm = true
}
public openLoginWindow() {
let glideraUrl = (this.network === 'testnet') ? 'https://sandbox.glidera.io/login' : 'https://glidera.io/login';
this.openExternalLink(glideraUrl);
}
public openSupportWindow(): void {
var url = this.glideraProvider.getSupportUrl();
var optIn = true;
var title = 'Glidera Support';
var message = 'You can email glidera at support@glidera.io for direct support, or you can contact Glidera on Twitter.';
var okText = 'Tweet @GlideraInc';
var cancelText = 'Go Back';
this.externalLinkProvider.open(url, optIn, title, message, okText, cancelText);
}
public toggleOauthForm(): void {
this.showOauthForm = !this.showOauthForm;
}
public goToBuyGlideraPage(): void {
this.navCtrl.push(AmountPage, { nextPage: 'BuyGlideraPage', currency: this.currency, coin: 'btc', fixedUnit: true });
}
public goToSellGlideraPage(): void {
this.navCtrl.push(AmountPage, { nextPage: 'SellGlideraPage', currency: this.currency, coin: 'btc', fixedUnit: true })
}
}