Merge pull request #7749 from Gamboster/feat/walletSelector

[V4] Feat: wallet selector
This commit is contained in:
Gustavo Maximiliano Cortez 2018-01-04 14:16:22 -03:00 committed by GitHub
commit cc41f08e01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 333 additions and 244 deletions

View File

@ -28,7 +28,8 @@ import { DisclaimerPage } from '../pages/onboarding/disclaimer/disclaimer';
providers: [TouchIdProvider]
})
export class CopayApp {
rootPage: any;
public rootPage: any;
constructor(
private platform: Platform,
@ -44,9 +45,8 @@ export class CopayApp {
private amazonProvider: AmazonProvider,
private bitPayCardProvider: BitPayCardProvider,
private mercadoLibreProvider: MercadoLibreProvider,
private shapeshiftProvider: ShapeshiftProvider,
private shapeshiftProvider: ShapeshiftProvider
) {
this.initializeApp();
}

View File

@ -1 +1,2 @@
<ion-nav [root]="rootPage"></ion-nav>
<wallet-selector></wallet-selector>

View File

@ -87,6 +87,7 @@ import { GravatarPage } from '../pages/includes/gravatar/gravatar';
import { TxpPage } from '../pages/includes/txp/txp';
import { WalletItemPage } from '../pages/includes/wallet-item/wallet-item';
import { WalletActivityPage } from '../pages/includes/wallet-activity/wallet-activity';
import { WalletSelectorPage } from '../pages/includes/wallet-selector/wallet-selector';
/* Tabs */
import { HomePage } from '../pages/home/home';
@ -293,6 +294,7 @@ let pages: any = [
WalletDetailsPage,
WalletItemPage,
WalletActivityPage,
WalletSelectorPage
];
let providers: any = [

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="17px" viewBox="0 0 20 17" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 40.1 (33804) - http://www.bohemiancoding.com/sketch -->
<title>Icons/Check/Green</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Views/Select-Wallet" transform="translate(-325.000000, -344.000000)" stroke="#12E5B6">
<g id="Componets/Select-Wallet">
<g id="Items/Activity-Cards/Recent-Activity" transform="translate(15.000000, 256.000000)">
<g id="Group-3" transform="translate(0.000000, 60.000000)">
<g id="Icons/Check/Green" transform="translate(311.000000, 29.000000)">
<g id="ui-24px-outline-1_check">
<g id="Group" transform="translate(0.500000, 0.500000)" stroke-width="2">
<polyline id="Shape" points="0 7 7 14 17.5 0"></polyline>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,5 +1,4 @@
import { Component, Input, OnInit } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
import { Component, Input } from '@angular/core';
import { Md5 } from 'ts-md5/dist/md5';
import { Logger } from '@nsalaun/ng-logger';
@ -9,7 +8,7 @@ import { Logger } from '@nsalaun/ng-logger';
})
export class GravatarPage {
private emailHash: any;
public emailHash: any;
@Input() email: string;
@Input() name: string;

View File

@ -0,0 +1,88 @@
<div class="backdrop" *ngIf="showWalletsSelector" (click)="backdropDismiss()">
</div>
<div class="wallet-selector slider" [ngClass]="{'opened': showSlideEffect, 'closed': !showSlideEffect }" [hidden]="!showWalletsSelector">
<div class="back-button">
<ion-icon (click)="backdropDismiss()" name="arrow-round-back"></ion-icon>
<h6 *ngIf="title">{{ title }}</h6>
</div>
<!--<div *ngFor="let wallet of wallets" (click)="selectWallet(wallet)">{{wallet.name}}</div>-->
<div *ngIf="walletsBtc && walletsBtc[0]">
<div class="title">
<img src="assets/img/icon-bitcoin.svg" alt="Bitcoin Wallets" width="18" />
<span translate>Bitcoin Wallets</span>
</div>
<ion-list>
<button ion-item *ngFor="let wallet of walletsBtc" class="wallet-button" (click)="selectWallet(wallet)">
<ion-icon item-start>
<img *ngIf="wallet.network == 'testnet'" [ngStyle]="{'background-color': wallet.color}" src="assets/img/icon-wallet-testnet.svg"
class="icon-wallet" />
<img *ngIf="wallet.network != 'testnet'" [ngStyle]="{'background-color': wallet.color}" src="assets/img/icon-wallet.svg"
class="icon-wallet" />
</ion-icon>
<ion-icon item-end>
<img class="check" src="assets/img/icon-check-selected.svg" *ngIf="selectedWalletId === wallet.id">
</ion-icon>
<h2 class="wallet-name">{{wallet.credentials.walletName}}</h2>
<p>
<span *ngIf="!wallet.isComplete()" translate>
Incomplete
</span>
<span *ngIf="wallet.isComplete()">
<span *ngIf="!wallet.balanceHidden && !wallet.scanning">
{{wallet.status && wallet.status.totalBalanceStr ? (wallet.status.totalBalanceStr) : ( wallet.cachedBalance ? wallet.cachedBalance
+ (wallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( wallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '')
: '')}}
</span>
<span *ngIf="wallet.scanning" translate>Scanning funds</span>
<span *ngIf="wallet.balanceHidden && !wallet.scanning">[{{'Balance Hidden' | translate}}]</span>
<span *ngIf="wallet.credentials.m > 1">{{wallet.credentials.m}}-of-{{wallet.credentials.n}}</span>
<ion-icon *ngIf="!wallet.balanceHidden && wallet.status && (wallet.status.totalBalanceSat != wallet.status.spendableAmount)"
name="timer"></ion-icon>
<span *ngIf="wallet.error" class="error">{{wallet.error}}</span>
</span>
</p>
</button>
</ion-list>
</div>
<div *ngIf="walletsBch && walletsBch[0]">
<div class="title">
<img src="assets/img/bitcoin-cash-logo.svg" alt="Bitcoin Cash Wallets" width="22" />
<span translate>Bitcoin Cash Wallets</span>
</div>
<ion-list>
<button ion-item *ngFor="let wallet of walletsBch" class="wallet-button" (click)="selectWallet(wallet)">
<ion-icon item-start>
<img *ngIf="wallet.network == 'testnet'" [ngStyle]="{'background-color': wallet.color}" src="assets/img/icon-wallet-testnet.svg"
class="icon-wallet" />
<img *ngIf="wallet.network != 'testnet'" [ngStyle]="{'background-color': wallet.color}" src="assets/img/icon-wallet.svg"
class="icon-wallet" />
</ion-icon>
<ion-icon item-end>
<img class="check" src="assets/img/icon-check-selected.svg" *ngIf="selectedWalletId === wallet.id">
</ion-icon>
<h2 class="wallet-name">{{wallet.credentials.walletName}}</h2>
<p>
<span *ngIf="!wallet.isComplete()" translate>
Incomplete
</span>
<span *ngIf="wallet.isComplete()">
<span *ngIf="!wallet.balanceHidden && !wallet.scanning">
{{wallet.status && wallet.status.totalBalanceStr ? (wallet.status.totalBalanceStr) : ( wallet.cachedBalance ? wallet.cachedBalance
+ (wallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( wallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '')
: '')}}
</span>
<span *ngIf="wallet.scanning" translate>Scanning funds</span>
<span *ngIf="wallet.balanceHidden && !wallet.scanning">[{{'Balance Hidden' | translate}}]</span>
<span *ngIf="wallet.credentials.m > 1">{{wallet.credentials.m}}-of-{{wallet.credentials.n}}</span>
<ion-icon *ngIf="!wallet.balanceHidden && wallet.status && (wallet.status.totalBalanceSat != wallet.status.spendableAmount)"
name="timer"></ion-icon>
<span *ngIf="wallet.error" class="error">{{wallet.error}}</span>
</span>
</p>
</button>
</ion-list>
</div>
</div>

View File

@ -0,0 +1,70 @@
wallet-selector {
display: flex;
justify-content: center;
.backdrop {
width: 100%;
height: 100%;
position: absolute;
background-color: rgba(0, 0, 0, 0.5);
}
.wallet-selector {
position: absolute;
bottom: 0;
max-height: 90vh;
max-width: 50rem;
width: calc(100% + 1px);
overflow-y: scroll;
background: white;
padding: 2rem;
box-shadow: 0px 2px 13px 3px rgba(0, 0, 0, 0.3);
.back-button {
display: inline-block;
margin: 1rem 0 2rem 0;
ion-icon {
cursor: pointer;
}
}
.title {
color: color($colors, dark);
font-weight: 700;
height: 3rem;
>img {
width: 22px;
display: inline-block;
vertical-align: middle;
margin-right: 10px;
}
}
.error {
color: color($colors, danger);
}
.wallet-button {
background: none;
.wallet-name {
overflow: hidden;
text-overflow: ellipsis;
}
}
}
.slider {
/* only transition on transform properties which are hardware accelerated = way better performances */
-webkit-transition:-webkit-transform .2s ease;
-moz-transition: -moz-transform .2s ease;
-ms-transition: -ms-transform .2s ease;
transition: transform .2s ease;
}
.opened {
/* visible */
-webkit-transform: translate(0, 0%);
-moz-transform: translate(0, 0%);
-ms-transform: translate(0, 0%);
transform: translate(0, 0%);
}
.closed {
/* completely offscreen */
-webkit-transform: translate(0, 100%);
-moz-transform: translate(0, 100%);
-ms-transform: translate(0, 100%);
transform: translate(0, 100%);
}
}

View File

@ -0,0 +1,63 @@
import { Component } from '@angular/core';
import { Events } from 'ionic-angular';
@Component({
selector: 'wallet-selector',
templateUrl: 'wallet-selector.html',
})
export class WalletSelectorPage {
public showWalletsSelector: boolean;
public wallets: Array<any>;
public walletsBtc: Array<any>;
public walletsBch: Array<any>;
public showSlideEffect: boolean;
public title: string;
public selectedWalletId: string;
constructor(
private events: Events
) {
this.showWalletsSelector = false;
this.showSlideEffect = false;
this.wallets = [];
this.events.subscribe('showWalletsSelectorEvent', (wallets: Array<any>, selectedWalletId: string, title?: string) => {
this.title = title ? title : null;
this.showWalletsSelector = true;
this.selectedWalletId = selectedWalletId;
setTimeout(() => {
this.showSlideEffect = true;
}, 50);
this.wallets = wallets;
this.separeWallets();
});
}
public selectWallet(wallet: any): void {
this.events.publish('selectWalletEvent', wallet);
this.showSlideEffect = false;
setTimeout(() => {
this.showWalletsSelector = false;
}, 150);
}
private separeWallets(): void {
this.walletsBtc = [];
this.walletsBch = [];
if (this.wallets.length == 0) return;
for (var i = 0; i <= this.wallets.length; i++) {
if (this.wallets[i]) {
if (this.wallets[i].coin == 'btc') this.walletsBtc.push(this.wallets[i]);
else this.walletsBch.push(this.wallets[i]);
}
}
}
public backdropDismiss() {
this.showSlideEffect = false;
setTimeout(() => {
this.showWalletsSelector = false;
}, 150);
}
}

View File

@ -1,5 +1,5 @@
import { Component } from '@angular/core';
import { NavController, NavParams, ModalController, ActionSheetController } from 'ionic-angular';
import { NavController, NavParams, ModalController, Events } from 'ionic-angular';
import { Logger } from '@nsalaun/ng-logger';
import * as _ from 'lodash';
import * as moment from 'moment';
@ -50,11 +50,11 @@ export class BuyAmazonPage {
public walletSelectorTitle: string;
constructor(
private actionSheetCtrl: ActionSheetController,
private amazonProvider: AmazonProvider,
private bwcErrorProvider: BwcErrorProvider,
private configProvider: ConfigProvider,
private emailNotificationsProvider: EmailNotificationsProvider,
private events: Events,
private externalLinkProvider: ExternalLinkProvider,
private logger: Logger,
private modalCtrl: ModalController,
@ -426,26 +426,11 @@ export class BuyAmazonPage {
}
public showWallets(): void {
let buttons: Array<any> = [];
_.each(this.wallets, (w: any) => {
let walletButton: Object = {
text: w.credentials.walletName,
cssClass: 'wallet-' + w.network,
icon: 'wallet',
handler: () => {
this.onWalletSelect(w);
}
}
buttons.push(walletButton);
this.events.publish('showWalletsSelectorEvent', this.wallets, this.wallet.id, 'Buy from');
this.events.subscribe('selectWalletEvent', (wallet: any) => {
this.onWalletSelect(wallet);
this.events.unsubscribe('selectWalletEvent');
});
const actionSheet = this.actionSheetCtrl.create({
title: 'Buy from',
buttons: buttons
});
actionSheet.present();
}
}

View File

@ -1,5 +1,5 @@
import { Component } from '@angular/core';
import { NavController, NavParams, ActionSheetController } from 'ionic-angular';
import { NavController, NavParams, Events } from 'ionic-angular';
import { Logger } from '@nsalaun/ng-logger';
import * as _ from 'lodash';
@ -44,11 +44,11 @@ export class BuyCoinbasePage {
private logger: Logger,
private popupProvider: PopupProvider,
private navCtrl: NavController,
private events: Events,
private externalLinkProvider: ExternalLinkProvider,
private onGoingProcessProvider: OnGoingProcessProvider,
private navParams: NavParams,
private walletProvider: WalletProvider,
private actionSheetCtrl: ActionSheetController,
private txFormatProvider: TxFormatProvider,
private profileProvider: ProfileProvider
) {
@ -282,26 +282,11 @@ export class BuyCoinbasePage {
}
public showWallets(): void {
let buttons: Array<any> = [];
_.each(this.wallets, (w: any) => {
let walletButton: Object = {
text: w.credentials.walletName,
cssClass: 'wallet-' + w.network,
icon: 'wallet',
handler: () => {
this.onWalletSelect(w);
}
}
buttons.push(walletButton);
this.events.publish('showWalletsSelectorEvent', this.wallets, this.wallet.id, 'Receive in');
this.events.subscribe('selectWalletEvent', (wallet: any) => {
this.onWalletSelect(wallet);
this.events.unsubscribe('selectWalletEvent');
});
const actionSheet = this.actionSheetCtrl.create({
title: 'Receive in',
buttons: buttons
});
actionSheet.present();
}
public onWalletSelect(wallet: any) {

View File

@ -1,5 +1,5 @@
import { Component } from '@angular/core';
import { NavController, NavParams, ActionSheetController } from 'ionic-angular';
import { NavController, NavParams, Events } from 'ionic-angular';
import { Logger } from '@nsalaun/ng-logger';
import * as _ from 'lodash';
@ -45,6 +45,7 @@ export class SellCoinbasePage {
private appProvider: AppProvider,
private coinbaseProvider: CoinbaseProvider,
private configProvider: ConfigProvider,
private events: Events,
private logger: Logger,
private popupProvider: PopupProvider,
private navCtrl: NavController,
@ -52,7 +53,6 @@ export class SellCoinbasePage {
private externalLinkProvider: ExternalLinkProvider,
private onGoingProcessProvider: OnGoingProcessProvider,
private walletProvider: WalletProvider,
private actionSheetCtrl: ActionSheetController,
private txFormatProvider: TxFormatProvider,
private profileProvider: ProfileProvider
) {
@ -356,26 +356,11 @@ export class SellCoinbasePage {
}
public showWallets(): void {
let buttons: Array<any> = [];
_.each(this.wallets, (w: any) => {
let walletButton: Object = {
text: w.credentials.walletName,
cssClass: 'wallet-' + w.network,
icon: 'wallet',
handler: () => {
this.onWalletSelect(w);
}
}
buttons.push(walletButton);
this.events.publish('showWalletsSelectorEvent', this.wallets, this.wallet.id, 'Sell from');
this.events.subscribe('selectWalletEvent', (wallet: any) => {
this.onWalletSelect(wallet);
this.events.unsubscribe('selectWalletEvent');
});
const actionSheet = this.actionSheetCtrl.create({
title: 'Sell from',
buttons: buttons
});
actionSheet.present();
}
public onWalletSelect(wallet: any): void {

View File

@ -1,5 +1,5 @@
import { Component } from '@angular/core';
import { NavController, NavParams, ActionSheetController } from 'ionic-angular';
import { NavController, NavParams, Events } from 'ionic-angular';
import { Logger } from '@nsalaun/ng-logger';
//providers
@ -35,6 +35,7 @@ export class BuyGlideraPage {
constructor(
private platformProvider: PlatformProvider,
private events: Events,
private logger: Logger,
private popupProvider: PopupProvider,
private navCtrl: NavController,
@ -44,7 +45,6 @@ export class BuyGlideraPage {
private profileProvider: ProfileProvider,
private txFormatProvider: TxFormatProvider,
private walletProvider: WalletProvider,
private actionSheetCtrl: ActionSheetController,
) {
this.coin = 'btc';
this.isCordova = this.platformProvider.isCordova;
@ -190,29 +190,13 @@ export class BuyGlideraPage {
}
public showWallets(): void {
let buttons: Array<any> = [];
_.each(this.wallets, (w: any) => {
let walletButton: Object = {
text: w.credentials.walletName,
cssClass: 'wallet-' + w.network,
icon: 'wallet',
handler: () => {
this.onWalletSelect(w);
}
}
buttons.push(walletButton);
this.events.publish('showWalletsSelectorEvent', this.wallets, this.wallet.id, 'Receive in');
this.events.subscribe('selectWalletEvent', (wallet: any) => {
this.onWalletSelect(wallet);
this.events.unsubscribe('selectWalletEvent');
});
const actionSheet = this.actionSheetCtrl.create({
title: 'Receive in',
buttons: buttons
});
actionSheet.present();
}
public onWalletSelect(wallet): void {
this.wallet = wallet;
let parsedAmount = this.txFormatProvider.parseAmount(

View File

@ -1,6 +1,7 @@
import { Component } from '@angular/core';
import { NavController, NavParams, ActionSheetController } from 'ionic-angular';
import { NavController, NavParams, Events } from 'ionic-angular';
import { Logger } from '@nsalaun/ng-logger';
import * as _ from 'lodash';
//providers
import { PlatformProvider } from '../../../../providers/platform/platform';
@ -12,8 +13,6 @@ import { TxFormatProvider } from '../../../../providers/tx-format/tx-format';
import { WalletProvider } from '../../../../providers/wallet/wallet';
import { ConfigProvider } from '../../../../providers/config/config';
import * as _ from 'lodash';
@Component({
selector: 'page-sell-glidera',
templateUrl: 'sell-glidera.html',
@ -44,9 +43,9 @@ export class SellGlideraPage {
private glideraProvider: GlideraProvider,
private profileProvider: ProfileProvider,
private txFormatProvider: TxFormatProvider,
private actionSheetCtrl: ActionSheetController,
private walletProvider: WalletProvider,
private configProvider: ConfigProvider
private configProvider: ConfigProvider,
private events: Events
) {
this.coin = 'btc';
this.isCordova = this.platformProvider.isCordova;
@ -276,28 +275,12 @@ export class SellGlideraPage {
this.processPaymentInfo();
}
public showWallets(): void {
let buttons: Array<any> = [];
_.each(this.wallets, (w: any) => {
let walletButton: Object = {
text: w.credentials.walletName,
cssClass: 'wallet-' + w.network,
icon: 'wallet',
handler: () => {
this.onWalletSelect(w);
}
}
buttons.push(walletButton);
this.events.publish('showWalletsSelectorEvent', this.wallets, this.wallet.id, 'Sell From');
this.events.subscribe('selectWalletEvent', (wallet: any) => {
this.onWalletSelect(wallet);
this.events.unsubscribe('selectWalletEvent');
});
const actionSheet = this.actionSheetCtrl.create({
title: 'Sell From',
buttons: buttons
});
actionSheet.present();
}
public goBackHome(): void {

View File

@ -1,5 +1,5 @@
import { Component } from '@angular/core';
import { NavController, NavParams, ModalController, ActionSheetController } from 'ionic-angular';
import { NavController, NavParams, ModalController, Events } from 'ionic-angular';
import { Logger } from '@nsalaun/ng-logger';
import * as _ from 'lodash';
import * as moment from 'moment';
@ -50,11 +50,11 @@ export class BuyMercadoLibrePage {
public walletSelectorTitle: string;
constructor(
private actionSheetCtrl: ActionSheetController,
private mercadoLibreProvider: MercadoLibreProvider,
private bwcErrorProvider: BwcErrorProvider,
private configProvider: ConfigProvider,
private emailNotificationsProvider: EmailNotificationsProvider,
private events: Events,
private externalLinkProvider: ExternalLinkProvider,
private logger: Logger,
private modalCtrl: ModalController,
@ -413,26 +413,11 @@ export class BuyMercadoLibrePage {
}
public showWallets(): void {
let buttons: Array<any> = [];
_.each(this.wallets, (w: any) => {
let walletButton: Object = {
text: w.credentials.walletName,
cssClass: 'wallet-' + w.network,
icon: 'wallet',
handler: () => {
this.onWalletSelect(w);
}
}
buttons.push(walletButton);
this.events.publish('showWalletsSelectorEvent', this.wallets, this.wallet.id, 'Buy from');
this.events.subscribe('selectWalletEvent', (wallet: any) => {
this.onWalletSelect(wallet);
this.events.unsubscribe('selectWalletEvent');
});
const actionSheet = this.actionSheetCtrl.create({
title: 'Buy from',
buttons: buttons
});
actionSheet.present();
}
}

View File

@ -14,7 +14,8 @@
<img item-end *ngIf="fromWallet.coin == 'bch'" src="assets/img/bitcoin-cash-logo.svg" width="22">
</ion-item>
<button ion-item class="wallet-selector" (click)="showWallets('from')">
<img *ngIf="fromWallet.network != 'testnet'" src="assets/img/icon-wallet.svg" class="icon-wallet" />
<img *ngIf="fromWallet.network != 'testnet'" src="assets/img/icon-wallet.svg" [ngStyle]="{'background-color': fromWallet.color}"
class="icon-wallet" />
<div class="wallet-balance">
<span>
{{fromWallet.name || fromWallet.id}}
@ -48,7 +49,8 @@
<img item-end *ngIf="toWallet.coin == 'bch'" src="assets/img/bitcoin-cash-logo.svg" width="22">
</ion-item>
<button ion-item class="wallet-selector" (click)="showWallets('to')">
<img *ngIf="fromWallet.network != 'testnet'" src="assets/img/icon-wallet.svg" class="icon-wallet" />
<img *ngIf="toWallet.network != 'testnet'" src="assets/img/icon-wallet.svg" class="icon-wallet" [ngStyle]="{'background-color': toWallet.color}"
/>
<div class="wallet-balance">
<span>
{{toWallet.name || toWallet.id}}

View File

@ -1,5 +1,5 @@
import { Component } from '@angular/core';
import { NavController, ActionSheetController } from 'ionic-angular';
import { NavController, Events } from 'ionic-angular';
import { Logger } from '@nsalaun/ng-logger';
import * as _ from 'lodash';
@ -31,7 +31,7 @@ export class ShapeshiftShiftPage {
public toWalletSelectorTitle: string;
constructor(
private actionSheetCtrl: ActionSheetController,
private events: Events,
private logger: Logger,
private navCtrl: NavController,
private popupProvider: PopupProvider,
@ -118,33 +118,21 @@ export class ShapeshiftShiftPage {
}
public showWallets(selector: string): void {
let buttons: Array<any> = [];
let walletsForActionSheet: Array<any> = [];
let selectedWalletId: string;
let title: string = selector == 'from' ? this.fromWalletSelectorTitle : this.toWalletSelectorTitle
if (selector == 'from') {
walletsForActionSheet = this.fromWallets;
selectedWalletId = this.fromWallet.id;
} else if (selector == 'to') {
walletsForActionSheet = this.toWallets;
selectedWalletId = this.toWallet.id;
}
_.each(walletsForActionSheet, (w: any) => {
let walletButton: Object = {
text: w.credentials.walletName,
cssClass: 'wallet-' + w.network,
icon: 'wallet',
handler: () => {
this.onWalletSelect(w, selector);
}
}
buttons.push(walletButton);
this.events.publish('showWalletsSelectorEvent', walletsForActionSheet, selectedWalletId, title);
this.events.subscribe('selectWalletEvent', (wallet: any) => {
this.onWalletSelect(wallet, selector);
this.events.unsubscribe('selectWalletEvent');
});
const actionSheet = this.actionSheetCtrl.create({
title: selector == 'from' ? this.fromWalletSelectorTitle : this.toWalletSelectorTitle,
buttons: buttons
});
actionSheet.present();
}
public onWalletSelect(wallet: any, selector: string): void {

View File

@ -1,5 +1,5 @@
import { Component } from '@angular/core';
import { NavController, NavParams, ActionSheetController } from 'ionic-angular';
import { NavController, NavParams, Events } from 'ionic-angular';
import { Logger } from '@nsalaun/ng-logger';
//providers
@ -10,8 +10,6 @@ import { WalletProvider } from '../../providers/wallet/wallet';
import { FeeProvider } from '../../providers/fee/fee';
import { ProfileProvider } from '../../providers/profile/profile';
import * as _ from 'lodash';
@Component({
selector: 'page-paper-wallet',
templateUrl: 'paper-wallet.html',
@ -46,7 +44,7 @@ export class PaperWalletPage {
private walletProvider: WalletProvider,
private feeProvider: FeeProvider,
private profileProvider: ProfileProvider,
private actionSheetCtrl: ActionSheetController,
private events: Events
) {
this.bitcore = this.bwcProvider.getBitcore();
}
@ -167,25 +165,10 @@ export class PaperWalletPage {
}
public showWallets(): void {
let buttons: Array<any> = [];
_.each(this.wallets, (w: any) => {
let walletButton: Object = {
text: w.credentials.walletName,
cssClass: 'wallet-' + w.network,
icon: 'wallet',
handler: () => {
this.onWalletSelect(w);
}
}
buttons.push(walletButton);
this.events.publish('showWalletsSelectorEvent', this.wallets, this.wallet.id, 'Select a wallet');
this.events.subscribe('selectWalletEvent', (wallet: any) => {
this.onWalletSelect(wallet);
this.events.unsubscribe('selectWalletEvent');
});
const actionSheet = this.actionSheetCtrl.create({
title: 'Select a wallet',
buttons: buttons
});
actionSheet.present();
}
}

View File

@ -51,10 +51,10 @@
<ion-footer>
<div *ngIf="wallets[0]" class="wallets-container" (click)="showWallets()">
<img src="assets/img/icon-wallet.svg" [ngStyle]="{'background-color': wallet.color}" class="icon-wallet" *ngIf="wallet.network == 'livenet'">
<img src="assets/img/icon-wallet-testnet.svg" [ngStyle]="{'background-color': wallet.color}" class="icon-wallet" *ngIf="wallet.network == 'testnet'">
<img src="assets/img/icon-wallet.svg" class="icon-wallet" [ngStyle]="{'background-color': wallet.color}" *ngIf="wallet.network == 'livenet'">
<img src="assets/img/icon-wallet-testnet.svg" class="icon-wallet" [ngStyle]="{'background-color': wallet.color}" *ngIf="wallet.network == 'testnet'">
<div class="wallet-text">
<div>{{wallet.name}}</div>
</div>
</div>
</ion-footer>
</ion-footer>

View File

@ -44,11 +44,6 @@ page-receive {
display: flex;
align-items: center;
cursor: pointer;
.icon-wallet {
width: 30px;
height: 30px;
box-shadow: 0;
}
.wallet-text {
padding-left: 24px;
}

View File

@ -1,6 +1,6 @@
import { Component } from '@angular/core';
import { Logger } from '@nsalaun/ng-logger';
import { NavController, Events, ActionSheetController, AlertController } from 'ionic-angular';
import { NavController, Events, AlertController } from 'ionic-angular';
//native
import { SocialSharing } from '@ionic-native/social-sharing';
@ -40,7 +40,6 @@ export class ReceivePage {
private walletProvider: WalletProvider,
private platformProvider: PlatformProvider,
private events: Events,
private actionSheetCtrl: ActionSheetController,
private socialSharing: SocialSharing,
private bwcErrorProvider: BwcErrorProvider
) {
@ -49,7 +48,7 @@ export class ReceivePage {
ionViewWillEnter() {
this.wallets = this.profileProvider.getWallets();
this.onSelect(this.checkSelectedWallet(this.wallet, this.wallets));
this.onWalletSelect(this.checkSelectedWallet(this.wallet, this.wallets));
this.events.subscribe('bwsEvent', (walletId, type, n) => {
// Update current address
if (this.wallet && walletId == this.wallet.id && type == 'NewIncomingTx') this.setAddress(true);
@ -60,7 +59,7 @@ export class ReceivePage {
this.events.unsubscribe('bwsEvent');
}
private onSelect(wallet: any): any {
private onWalletSelect(wallet: any): any {
this.wallet = wallet;
if (this.wallet) {
this.setProtocolHandler();
@ -119,26 +118,11 @@ export class ReceivePage {
}
public showWallets(): void {
let buttons: Array<any> = [];
_.each(this.wallets, (w: any) => {
let walletButton: Object = {
text: w.credentials.walletName,
cssClass: 'wallet-' + w.network,
icon: 'wallet',
handler: () => {
this.onSelect(w);
}
}
buttons.push(walletButton);
this.events.publish('showWalletsSelectorEvent', this.wallets, this.wallet.id);
this.events.subscribe('selectWalletEvent', (wallet: any) => {
this.onWalletSelect(wallet);
this.events.unsubscribe('selectWalletEvent');
});
const actionSheet = this.actionSheetCtrl.create({
title: 'Select a wallet',
buttons: buttons
});
actionSheet.present();
}
public goCopayers(): void {

View File

@ -81,7 +81,7 @@
</div>
</ion-item>
<button class="container-from" ion-item [hidden]="!wallet" (click)="showWalletSelector()">
<button class="container-from" ion-item [hidden]="!wallet" (click)="showWallets()">
<span class="label" translate>From</span>
<div>
<div class="wallet" *ngIf="wallet">

View File

@ -1,5 +1,5 @@
import { Component } from '@angular/core';
import { NavController, NavParams, ModalController, ActionSheetController } from 'ionic-angular';
import { NavController, NavParams, ModalController, Events } from 'ionic-angular';
import { Logger } from '@nsalaun/ng-logger';
import * as _ from 'lodash';
@ -68,8 +68,8 @@ export class ConfirmPage {
private feeProvider: FeeProvider,
private txConfirmNotificationProvider: TxConfirmNotificationProvider,
private modalCtrl: ModalController,
private actionSheetCtrl: ActionSheetController,
private txFormatProvider: TxFormatProvider
private txFormatProvider: TxFormatProvider,
private events: Events
) {
this.CONFIRM_LIMIT_USD = 20;
this.FEE_TOO_HIGH_LIMIT_PER = 15;
@ -105,7 +105,7 @@ export class ConfirmPage {
this.logger.info('ionViewDidLoad ConfirmPage');
this.setWalletSelector(this.tx.coin, this.tx.network, this.tx.amount).then(() => {
if (this.wallets.length > 1) {
this.showWalletSelector();
this.showWallets();
} else if (this.wallets.length) {
this.setWallet(this.wallets[0], this.tx);
}
@ -638,27 +638,12 @@ export class ConfirmPage {
});
};
public showWalletSelector(): void {
let buttons: Array<any> = [];
_.each(this.wallets, (w: any) => {
let walletButton: Object = {
text: w.credentials.walletName,
cssClass: 'wallet-' + w.network,
icon: 'wallet',
handler: () => {
this.onWalletSelect(w);
}
}
buttons.push(walletButton);
public showWallets(): void {
this.events.publish('showWalletsSelectorEvent', this.wallets, this.wallet.id, this.walletSelectorTitle);
this.events.subscribe('selectWalletEvent', (wallet: any) => {
this.onWalletSelect(wallet);
this.events.unsubscribe('selectWalletEvent');
});
const actionSheet = this.actionSheetCtrl.create({
title: this.walletSelectorTitle,
buttons: buttons
});
actionSheet.present();
}
}

View File

@ -1,6 +1,5 @@
import { Component } from '@angular/core';
import { NavController, NavParams, AlertController } from 'ionic-angular';
import { importType } from '@angular/compiler/src/output/output_ast';
import { NavController, NavParams } from 'ionic-angular';
// Pages
import { AmountPage } from '../../../../pages/send/amount/amount';
@ -29,7 +28,6 @@ export class AddressbookViewPage {
constructor(
private addressBookProvider: AddressBookProvider,
private addressProvider: AddressProvider,
private alertCtrl: AlertController,
private bwcProvider: BwcProvider,
private navCtrl: NavController,
private navParams: NavParams,

View File

@ -47,7 +47,7 @@ export class ProfileProvider {
// this.config.whenAvailable( (config) => { TODO
wallet.usingCustomBWS = config.bwsFor && config.bwsFor[wallet.id] && (config.bwsFor[wallet.id] != defaults.bws.url);
wallet.name = (config.aliasFor && config.aliasFor[wallet.id]) || wallet.credentials.walletName;
wallet.color = (config.colorFor && config.colorFor[wallet.id]);
wallet.color = (config.colorFor && config.colorFor[wallet.id]) ? config.colorFor[wallet.id] : null;
wallet.email = config.emailFor && config.emailFor[wallet.id];
//});
}