copay-crown
Version:
A Secure Crown Wallet
121 lines (103 loc) • 3.98 kB
text/typescript
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { Logger } from '../../../providers/logger/logger';
// Providers
import { ConfigProvider } from '../../../providers/config/config';
import { PersistenceProvider } from '../../../providers/persistence/persistence';
import { ProfileProvider } from '../../../providers/profile/profile';
import { RateProvider } from '../../../providers/rate/rate';
import { WalletProvider } from '../../../providers/wallet/wallet';
import * as _ from 'lodash';
export class AltCurrencyPage {
public completeAlternativeList: any[];
public searchedAltCurrency: string;
public altCurrencyList: any[];
public loading: any;
public currentCurrency: any;
public lastUsedAltCurrencyList: any[];
private PAGE_COUNTER: number = 3;
private SHOW_LIMIT: number = 10;
private unusedCurrencyList: any;
constructor(
private configProvider: ConfigProvider,
private logger: Logger,
private navCtrl: NavController,
private rate: RateProvider,
private profileProvider: ProfileProvider,
private persistenceProvider: PersistenceProvider,
private walletProvider: WalletProvider
) {
this.completeAlternativeList = [];
this.altCurrencyList = [];
this.unusedCurrencyList = [{
isoCode: 'LTL'
}, {
isoCode: 'BTC'
}];
}
ionViewWillEnter() {
this.rate.whenRatesAvailable().then((data) => {
this.completeAlternativeList = this.rate.listAlternatives(true);
let idx = _.keyBy(this.unusedCurrencyList, 'isoCode');
let idx2 = _.keyBy(this.lastUsedAltCurrencyList, 'isoCode');
this.completeAlternativeList = _.reject(this.completeAlternativeList, (c: any) => {
return idx[c.isoCode] || idx2[c.isoCode];
});
this.altCurrencyList = this.completeAlternativeList.slice(0, 20);
}).catch((err: any) => {
this.logger.error(err);
});
let config = this.configProvider.get();
this.currentCurrency = config.wallet.settings.alternativeIsoCode;
this.persistenceProvider.getLastCurrencyUsed().then((lastUsedAltCurrency: any) => {
this.lastUsedAltCurrencyList = lastUsedAltCurrency ? lastUsedAltCurrency : [];
}).catch((err: any) => {
this.logger.error(err);
});
}
public loadAltCurrencies(loading: any): void {
if (this.altCurrencyList.length === this.completeAlternativeList.length) {
loading.complete();
return;
}
setTimeout(() => {
this.altCurrencyList = this.completeAlternativeList.slice(0, this.PAGE_COUNTER * this.SHOW_LIMIT);
this.PAGE_COUNTER++;
loading.complete();
}, 300);
}
ionViewDidLoad() {
this.logger.info('ionViewDidLoad AltCurrencyPage');
}
public save(newAltCurrency: any): void {
var opts = {
wallet: {
settings: {
alternativeName: newAltCurrency.name,
alternativeIsoCode: newAltCurrency.isoCode,
}
}
};
this.configProvider.set(opts);
this.saveLastUsed(newAltCurrency);
this.walletProvider.updateRemotePreferences(this.profileProvider.getWallets());
this.navCtrl.pop();
}
private saveLastUsed(newAltCurrency: any): void {
this.lastUsedAltCurrencyList.unshift(newAltCurrency);
this.lastUsedAltCurrencyList = _.uniqBy(this.lastUsedAltCurrencyList, 'isoCode');
this.lastUsedAltCurrencyList = this.lastUsedAltCurrencyList.slice(0, 3);
this.persistenceProvider.setLastCurrencyUsed(JSON.stringify(this.lastUsedAltCurrencyList)).then(() => { });
}
public findCurrency(searchedAltCurrency: string): void {
this.altCurrencyList = _.filter(this.completeAlternativeList, (item) => {
var val = item.name
var val2 = item.isoCode;
return _.includes(val.toLowerCase(), searchedAltCurrency.toLowerCase()) || _.includes(val2.toLowerCase(), searchedAltCurrency.toLowerCase());
})
}
}