mirror of https://github.com/BTCPrivate/copay.git
Merge pull request #7749 from Gamboster/feat/walletSelector
[V4] Feat: wallet selector
This commit is contained in:
commit
cc41f08e01
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
<ion-nav [root]="rootPage"></ion-nav>
|
||||
<wallet-selector></wallet-selector>
|
|
@ -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 = [
|
||||
|
|
|
@ -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 |
|
@ -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;
|
||||
|
|
|
@ -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 ? ' · ' + ( 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 ? ' · ' + ( 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>
|
|
@ -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%);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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}}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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];
|
||||
//});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue