mirror of https://github.com/BTCPrivate/copay.git
[V4] FEAT: Succes Modal after re-broadcast a transaction, rename processes instead of recreating
This commit is contained in:
parent
3a2bc48b5d
commit
4c5d878178
|
@ -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();
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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();
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) => {
|
||||
|
|
Loading…
Reference in New Issue