[V4] FEAT: Succes Modal after re-broadcast a transaction, rename processes instead of recreating

This commit is contained in:
Gabriel Bazán 2018-02-06 16:22:57 -03:00
parent 3a2bc48b5d
commit 4c5d878178
5 changed files with 56 additions and 33 deletions

View File

@ -514,7 +514,6 @@ export class ConfirmPage {
this.onGoingProcessProvider.set('creatingTx', true);
this.getTxp(_.clone(tx), wallet, false).then((txp: any) => {
this.onGoingProcessProvider.set('creatingTx', false);
// confirm txs for more that 20usd, if not spending/touchid is enabled
let confirmTx = (): Promise<any> => {
@ -543,10 +542,11 @@ export class ConfirmPage {
let publishAndSign = (): void => {
if (!wallet.canSign() && !wallet.isPrivKeyExternal()) {
this.logger.info('No signing proposal: No private key');
this.walletProvider.onlyPublish(wallet, txp).catch((err: any) => {
this.walletProvider.onlyPublish(wallet, txp).then(() => {
this.openSuccessModal(true);
}).catch((err: any) => {
this.setSendError(err);
});
this.openSuccessModal();
return;
}
@ -573,13 +573,20 @@ export class ConfirmPage {
return;
});
}).catch((err: any) => {
this.onGoingProcessProvider.set('creatingTx', false);
this.logger.warn(err);
return;
});
}
public openSuccessModal() {
let modal = this.modalCtrl.create(SuccessModalPage, {}, { showBackdrop: true, enableBackdropDismiss: false });
public openSuccessModal(onlyPublish?: boolean) {
let params = {};
if (onlyPublish) {
let successText = this.translate.instant('Payment Published');
let successComment = this.translate.instant('You could sign the transaction later in your wallet details');
params = { successText: successText, successComment: successComment };
}
let modal = this.modalCtrl.create(SuccessModalPage, params, { showBackdrop: true, enableBackdropDismiss: false });
modal.present();
modal.onDidDismiss(() => {
this.navCtrl.popToRoot();

View File

@ -229,7 +229,7 @@
</button>
</ion-buttons>
<ion-buttons right>
<button *ngIf="tx.pendingForUs && canSign && !paymentExpired" ion-button icon-right color="primary" (click)="onConfirm()">
<button *ngIf="tx.pendingForUs && canSign && !paymentExpired" ion-button icon-right (click)="onConfirm()">
{{buttonText}}
<ion-icon name="send"></ion-icon>
</button>

View File

@ -1,5 +1,5 @@
import { Component } from '@angular/core';
import { NavParams, Events, ViewController } from 'ionic-angular';
import { NavController, NavParams, Events, ViewController, ModalController } from 'ionic-angular';
import { TranslateService } from '@ngx-translate/core';
//providers
@ -13,6 +13,9 @@ import { ConfigProvider } from '../../providers/config/config';
import { ProfileProvider } from '../../providers/profile/profile';
import { TxFormatProvider } from '../../providers/tx-format/tx-format';
//pages
import { SuccessModalPage } from '../success/success';
import * as _ from 'lodash';
@Component({
@ -54,7 +57,9 @@ export class TxpDetailsPage {
private configProvider: ConfigProvider,
private profileProvider: ProfileProvider,
private txFormatProvider: TxFormatProvider,
private translate: TranslateService
private translate: TranslateService,
private modalCtrl: ModalController,
private navCtrl: NavController,
) {
let config = this.configProvider.get().wallet;
this.tx = this.navParams.data.tx;
@ -212,7 +217,7 @@ export class TxpDetailsPage {
this.loading = true;
this.walletProvider.publishAndSign(this.wallet, this.tx).then((txp: any) => {
this.events.publish('UpdateTx');
//this.success(); TODO
this.openSuccessModal();
}).catch((err: any) => {
this.setError(err, ('Could not send payment'));
});
@ -255,7 +260,7 @@ export class TxpDetailsPage {
this.onGoingProcessProvider.set('broadcastingTx', true);
this.walletProvider.broadcastTx(this.wallet, this.tx).then((txpb: any) => {
this.onGoingProcessProvider.set('broadcastingTx', false);
this.close();
this.openSuccessModal();
}).catch((err: any) => {
this.setError(err, 'Could not broadcast payment');
});
@ -301,14 +306,18 @@ export class TxpDetailsPage {
this.sign();
};
public onSuccessConfirm(): void {
this.close();
}
public close(): void {
this.events.unsubscribe('bwsEvent');
this.loading = false;
this.viewCtrl.dismiss();
}
public openSuccessModal() {
let modal = this.modalCtrl.create(SuccessModalPage, {}, { showBackdrop: true, enableBackdropDismiss: false });
modal.present();
modal.onDidDismiss(() => {
this.close();
})
}
}

View File

@ -62,7 +62,7 @@ export class OnGoingProcessProvider {
this.ongoingProcess = {};
}
private clear() {
public clear() {
this.ongoingProcess = {};
this.loading.dismiss();
}
@ -88,9 +88,13 @@ export class OnGoingProcessProvider {
this.loading.dismiss();
return;
}
this.loading = this.loadingCtrl.create({
content: showName
});
if (!this.loading) {
this.loading = this.loadingCtrl.create();
this.loading.onDidDismiss(() => {
this.loading = null;
});
}
this.loading.setContent(showName);
this.loading.present();
}
}

View File

@ -49,7 +49,7 @@ export class WalletProvider {
private rateProvider: RateProvider,
private filter: FilterProvider,
private popupProvider: PopupProvider,
private ongoingProcess: OnGoingProcessProvider,
private ongoingProcessProvider: OnGoingProcessProvider,
private touchidProvider: TouchIdProvider,
private events: Events,
private feeProvider: FeeProvider,
@ -977,10 +977,10 @@ export class WalletProvider {
public recreate(wallet: any): Promise<any> {
return new Promise((resolve, reject) => {
this.logger.debug('Recreating wallet:', wallet.id);
this.ongoingProcess.set('recreating', true);
this.ongoingProcessProvider.set('recreating', true);
wallet.recreateWallet((err: any) => {
wallet.notAuthorized = false;
this.ongoingProcess.set('recreating', false);
this.ongoingProcessProvider.set('recreating', false);
if (err) return reject(err);
return resolve();
});
@ -1139,13 +1139,14 @@ export class WalletProvider {
public reject(wallet: any, txp: any): Promise<any> {
return new Promise((resolve, reject) => {
this.ongoingProcess.set('rejectTx', true);
this.ongoingProcessProvider.set('rejectTx', true);
this.rejectTx(wallet, txp).then((txpr: any) => {
this.invalidateCache(wallet);
this.ongoingProcess.set('rejectTx', false);
this.ongoingProcessProvider.set('rejectTx', false);
this.events.publish('Local/TxAction', wallet.id);
return resolve(txpr);
}).catch((err) => {
this.ongoingProcessProvider.set('rejectTx', false);
return reject(err);
});
});
@ -1153,13 +1154,14 @@ export class WalletProvider {
public onlyPublish(wallet: any, txp: any): Promise<any> {
return new Promise((resolve, reject) => {
this.ongoingProcess.set('sendingTx', true);
this.ongoingProcessProvider.set('sendingTx', true);
this.publishTx(wallet, txp).then((publishedTxp) => {
this.invalidateCache(wallet);
this.ongoingProcess.set('sendingTx', false);
this.ongoingProcessProvider.set('sendingTx', false);
this.events.publish('Local/TxAction', wallet.id);
return resolve();
}).catch((err) => {
this.ongoingProcessProvider.set('sendingTx', false);
return reject(this.bwcErrorProvider.msg(err));
});
});
@ -1182,24 +1184,26 @@ export class WalletProvider {
private signAndBroadcast(wallet: any, publishedTxp: any, password: any): Promise<any> {
return new Promise((resolve, reject) => {
this.ongoingProcess.set('signingTx', true);
this.ongoingProcessProvider.set('signingTx', true);
this.signTx(wallet, publishedTxp, password).then((signedTxp: any) => {
this.ongoingProcess.set('signingTx', false);
this.invalidateCache(wallet);
if (signedTxp.status == 'accepted') {
this.ongoingProcess.set('broadcastingTx', true);
this.ongoingProcessProvider.set('broadcastingTx', true);
this.broadcastTx(wallet, signedTxp).then((broadcastedTxp: any) => {
this.ongoingProcess.set('broadcastingTx', false);
this.ongoingProcessProvider.clear();
this.events.publish('Local/TxAction', wallet.id);
return resolve(broadcastedTxp);
}).catch((err) => {
this.ongoingProcessProvider.clear();
return reject(this.bwcErrorProvider.msg(err));
});
} else {
this.ongoingProcessProvider.clear();
this.events.publish('Local/TxAction', wallet.id);
return resolve(signedTxp);
};
}).catch((err) => {
this.ongoingProcessProvider.clear();
this.logger.warn('sign error:' + err);
let msg = err && err.message ? err.message : this.translate.instant('The payment was created but could not be completed. Please try again from home screen');
this.events.publish('Local/TxAction', wallet.id);
@ -1223,16 +1227,15 @@ export class WalletProvider {
});
} else {
this.prepare(wallet).then((password: string) => {
this.ongoingProcess.set('sendingTx', true);
this.ongoingProcessProvider.set('sendingTx', true);
this.publishTx(wallet, txp).then((publishedTxp: any) => {
this.ongoingProcess.set('sendingTx', false);
this.signAndBroadcast(wallet, publishedTxp, password).then((broadcastedTxp: any) => {
return resolve(broadcastedTxp);
}).catch((err) => {
return reject(err);
});
}).catch((err) => {
this.ongoingProcess.set('sendingTx', false);
this.ongoingProcessProvider.clear();
return reject(this.bwcErrorProvider.msg(err));
});
}).catch((err) => {