mirror of https://github.com/BTCPrivate/copay.git
add txStatus service
This commit is contained in:
parent
5f5d74944f
commit
a70e7e61a4
5
TODO
5
TODO
|
@ -1,4 +1 @@
|
|||
- join. on walletComplete!
|
||||
- paypro fetch-> return TIMEOUT
|
||||
- yellow lock on paypro
|
||||
- attack: change paypro ->no! in is cached
|
||||
- addressbock
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.controllers').controller('HomeWalletController', function($scope, $rootScope, $timeout, $filter, $modal, rateService, notification, identityService) {
|
||||
angular.module('copayApp.controllers').controller('HomeWalletController', function($scope, $rootScope, $timeout, $filter, $modal, rateService, notification, txStatus, identityService) {
|
||||
$scope.initHome = function() {
|
||||
var w = $rootScope.wallet;
|
||||
|
||||
|
@ -44,23 +44,7 @@ angular.module('copayApp.controllers').controller('HomeWalletController', functi
|
|||
}
|
||||
});
|
||||
|
||||
|
||||
// TODO duplicated on controller send. move to a service.
|
||||
$scope.notifyStatus = function(status) {
|
||||
if (status == copay.Wallet.TX_BROADCASTED)
|
||||
notification.success('Success', 'Transaction broadcasted!');
|
||||
else if (status == copay.Wallet.TX_PROPOSAL_SENT)
|
||||
notification.info('Success', 'Transaction proposal created');
|
||||
else if (status == copay.Wallet.TX_SIGNED)
|
||||
notification.success('Success', 'Transaction proposal was signed');
|
||||
else if (status == copay.Wallet.TX_SIGNED_AND_BROADCASTED)
|
||||
notification.success('Success', 'Transaction signed and broadcasted!');
|
||||
else
|
||||
notification.error('Error', 'Unknown error occured');
|
||||
};
|
||||
|
||||
|
||||
$scope.$on("$destroy", function() {
|
||||
$scope.$on("$destroy", function() {
|
||||
var w = $rootScope.wallet;
|
||||
if (w) {
|
||||
removeWatch();
|
||||
|
@ -113,7 +97,8 @@ angular.module('copayApp.controllers').controller('HomeWalletController', functi
|
|||
$scope.error = $scope.success = null;
|
||||
w.signAndSend(ntxid, function(err, id, status) {
|
||||
$scope.loading = false;
|
||||
$scope.notifyStatus(status);
|
||||
if (!txStatus.notify(status))
|
||||
$scope.error = status;
|
||||
_updateTxs();
|
||||
});
|
||||
};
|
||||
|
@ -121,14 +106,14 @@ angular.module('copayApp.controllers').controller('HomeWalletController', functi
|
|||
$scope.reject = function(ntxid) {
|
||||
var w = $rootScope.wallet;
|
||||
w.reject(ntxid);
|
||||
notification.warning('Transaction rejected', 'You rejected the transaction successfully');
|
||||
txStatus.notify('txRejected');
|
||||
_updateTxs();
|
||||
};
|
||||
|
||||
|
||||
$scope.openTxModal = function(btx) {
|
||||
$scope.openTxModal = function(tx) {
|
||||
var ModalInstanceCtrl = function($scope, $modalInstance) {
|
||||
$scope.btx = btx;
|
||||
$scope.tx = tx;
|
||||
|
||||
$scope.getShortNetworkName = function() {
|
||||
var w = $rootScope.wallet;
|
||||
|
@ -141,7 +126,7 @@ angular.module('copayApp.controllers').controller('HomeWalletController', functi
|
|||
};
|
||||
|
||||
$modal.open({
|
||||
templateUrl: 'views/modals/tx-details.html',
|
||||
templateUrl: 'views/modals/txp-details.html',
|
||||
windowClass: 'tiny',
|
||||
controller: ModalInstanceCtrl,
|
||||
});
|
||||
|
|
|
@ -3,7 +3,7 @@ var bitcore = require('bitcore');
|
|||
var preconditions = require('preconditions').singleton();
|
||||
|
||||
angular.module('copayApp.controllers').controller('SendController',
|
||||
function($scope, $rootScope, $window, $timeout, $modal, $filter, notification, isMobile, rateService) {
|
||||
function($scope, $rootScope, $window, $timeout, $modal, $filter, notification, isMobile, rateService, txStatus) {
|
||||
|
||||
var satToUnit, unitToSat, w;
|
||||
|
||||
|
@ -250,7 +250,6 @@ angular.module('copayApp.controllers').controller('SendController',
|
|||
|
||||
qrcode.callback = function(data) {
|
||||
_scanStop();
|
||||
|
||||
$scope.$apply(function() {
|
||||
$scope.sendForm.address.$setViewValue(data);
|
||||
$scope.sendForm.address.$render();
|
||||
|
@ -389,7 +388,10 @@ angular.module('copayApp.controllers').controller('SendController',
|
|||
form.address.$setViewValue('');
|
||||
form.address.$render();
|
||||
}
|
||||
$scope.notifyStatus(status);
|
||||
|
||||
if (!txStatus.notify(status))
|
||||
$scope.error = status;
|
||||
|
||||
$timeout(function() {
|
||||
$rootScope.$digest();
|
||||
}, 1);
|
||||
|
@ -414,23 +416,8 @@ angular.module('copayApp.controllers').controller('SendController',
|
|||
});
|
||||
};
|
||||
|
||||
$scope.openTxStatusModal = function(statusStr) {
|
||||
var ModalInstanceCtrl = function($scope, $modalInstance) {
|
||||
$scope.statusStr = statusStr;
|
||||
$scope.cancel = function() {
|
||||
$modalInstance.dismiss('cancel');
|
||||
};
|
||||
};
|
||||
$modal.open({
|
||||
templateUrl: 'views/modals/tx-status.html',
|
||||
windowClass: 'tiny',
|
||||
controller: ModalInstanceCtrl,
|
||||
});
|
||||
};
|
||||
|
||||
$scope.setFromPayPro = function(uri) {
|
||||
console.log('[send.js.391:uri:]', uri); //TODO
|
||||
|
||||
$scope.fetchingURL = uri;
|
||||
$scope.loading = true;
|
||||
|
||||
|
@ -478,9 +465,6 @@ angular.module('copayApp.controllers').controller('SendController',
|
|||
};
|
||||
|
||||
$scope.onAddressChange = function(value) {
|
||||
var addr;
|
||||
console.log('[send.js.391:value:]', value); //TODO
|
||||
|
||||
$scope.error = $scope.success = null;
|
||||
if (!value) return '';
|
||||
|
||||
|
@ -489,6 +473,7 @@ angular.module('copayApp.controllers').controller('SendController',
|
|||
} else if (/^https?:\/\//.test(value)) {
|
||||
return $scope.setFromPayPro(value);
|
||||
}
|
||||
|
||||
return value;
|
||||
};
|
||||
|
||||
|
@ -558,8 +543,7 @@ angular.module('copayApp.controllers').controller('SendController',
|
|||
});
|
||||
|
||||
modalInstance.result.then(function(addr) {
|
||||
$scope._address = addr;
|
||||
$scope.setForm(addr);
|
||||
});
|
||||
};
|
||||
|
||||
});
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
'use strict';
|
||||
|
||||
angular.module('copayApp.services').factory('txStatus', function($modal) {
|
||||
var root = {};
|
||||
|
||||
root.notify = function(status) {
|
||||
var msg;
|
||||
if (status == copay.Wallet.TX_BROADCASTED)
|
||||
msg = 'Transaction broadcasted!';
|
||||
else if (status == copay.Wallet.TX_PROPOSAL_SENT)
|
||||
msg = 'Transaction proposal created';
|
||||
else if (status == copay.Wallet.TX_SIGNED)
|
||||
msg = 'Transaction proposal was signed';
|
||||
else if (status == copay.Wallet.TX_SIGNED_AND_BROADCASTED)
|
||||
msg = 'Transaction signed and broadcasted!';
|
||||
else if (status == 'txRejected')
|
||||
msg = 'Transaction was rejected!';
|
||||
|
||||
if (msg)
|
||||
root.openModal(msg);
|
||||
return msg ? true : false;
|
||||
};
|
||||
|
||||
root.openModal = function(statusStr) {
|
||||
var ModalInstanceCtrl = function($scope, $modalInstance) {
|
||||
$scope.statusStr = statusStr;
|
||||
$scope.cancel = function() {
|
||||
$modalInstance.dismiss('cancel');
|
||||
};
|
||||
};
|
||||
$modal.open({
|
||||
templateUrl: 'views/modals/tx-status.html',
|
||||
windowClass: 'tiny',
|
||||
controller: ModalInstanceCtrl,
|
||||
});
|
||||
};
|
||||
|
||||
return root;
|
||||
});
|
|
@ -31,11 +31,11 @@
|
|||
</div>
|
||||
<div class="line-b m10t"></div>
|
||||
<h1 class="m30v">Transaction Details</h1>
|
||||
<div class="ellipsis"> <b>ID:</b> <span class="text-gray"> {{btx.txid}} </span></div>
|
||||
<div ng-if="btx.ts" class="m10v">
|
||||
<time> <span>{{btx.ts | amCalendar}}</span></time>
|
||||
<div class="ellipsis" ng-if="btx.txid"> <b>ID:</b> <span class="text-gray"> {{btx.txid}} </span></div>
|
||||
<div ng-if="btx.ts || btx.createdTs " class="m10v">
|
||||
<time> <span>{{ (btx.ts || btx.createdTs ) | amCalendar}}</span></time>
|
||||
|
||||
[<time>{{btx.ts | amTimeAgo}}</time>]
|
||||
[<time>{{ (btx.ts || btx.createdTs ) | amTimeAgo}}</time>]
|
||||
</div>
|
||||
|
||||
<div class="m10v">
|
||||
|
@ -83,12 +83,11 @@
|
|||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="m10t oh">
|
||||
<div class="m10t oh" ng-if="btx.txid">
|
||||
<a class="right button-setup"
|
||||
ng-click="openExternalLink('http://' + getShortNetworkName() + '.insight.is/tx/' + btx.txid)">
|
||||
See it on the blockchain <i class="icon-arrow-right2 vm"></i>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
|
||||
<a class="close-reveal-modal" ng-click="cancel()">×</a>
|
||||
|
||||
<h1 class="m30v">Transaction Proposal Details</h1>
|
||||
|
||||
<div class="row" ng-repeat="out in tx.outs">
|
||||
<div class="large-5 medium-5 small-6 columns size-14">
|
||||
<b>{{out.value}} {{$root.wallet.settings.unitName}}</b>
|
||||
<span ng-show="out.alternativeAmount" class="alt-currency gray">
|
||||
{{out.alternativeAmount}} {{out.alternativeIsoCode}}
|
||||
</span>
|
||||
</div>
|
||||
<div class="large-2 medium-2 small-1 columns text-center">
|
||||
<i class="fi-arrow-right"></i>
|
||||
</div>
|
||||
<div class="large-5 medium m0-5 small-5 columns ellipsis size-12">
|
||||
<div ng-if="tx.merchant">
|
||||
<span ng-show="tx.merchant.pr.ca"><i class="fi-lock color-greeni"></i> {{tx.merchant.domain}}</span>
|
||||
<span ng-show="!tx.merchant.pr.ca"><i class="fi-unlock color-yellowi"></i> {{tx.merchant.domain}}</span>
|
||||
</span>
|
||||
</div>
|
||||
<contact address="{{out.address}}" tooltip-popup-delay="500" tooltip tooltip-placement="right" ng-hide="tx.merchant" />
|
||||
</div>
|
||||
|
||||
<div class="text-light size-14">{{tx.comment}}</div>
|
||||
|
||||
<div class="line-b m10t"></div>
|
||||
<div ng-if="tx.createdTs " class="m10v size-14">
|
||||
<time> <span>{{ tx.createdTs | amCalendar}}</span></time>
|
||||
|
||||
[<time>{{ tx.createdTs | amTimeAgo}}</time>]
|
||||
</div>
|
||||
|
||||
<div ng-if="tx.addressTo" class="m10v">
|
||||
<span class="ellipsis">
|
||||
<b>To:</b>
|
||||
<span ng-if="tx.merchant">
|
||||
<span ng-show="tx.merchant.pr.ca"><i class="fi-lock color-greeni"></i> {{tx.merchant.domain}}</span>
|
||||
<span ng-show="!tx.merchant.pr.ca"><i class="fi-unlock color-yellowi"></i> {{tx.merchant.domain}}</span>
|
||||
</span>
|
||||
|
||||
<span ng-if="!tx.merchant">
|
||||
<span class="text-gray"> {{tx.labelTo || tx.addressTo}}</span>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div ng-if="tx.merchant" class="size-12 m10v">
|
||||
{{tx.merchant.pr.pd.memo}}
|
||||
</div>
|
||||
|
||||
<div ng-if="tx.actionList[0]" class="m10v">
|
||||
<b>Copayers Signatures</b>
|
||||
<ul class="tx-copayers m10t" ng-if="tx.actionList[0]">
|
||||
<li ng-repeat="c in tx.actionList" ng-class="{'bottom-line-copayers':!$last}">
|
||||
<span>
|
||||
<i ng-if="c.actions.rejected" class="fi-x icon-sign x"></i>
|
||||
<i ng-if="c.actions.sign" class="fi-check icon-sign check"></i>
|
||||
<i ng-if="!c.actions.sign && !c.actions.rejected && tx.missingSignatures" class="m10r fi-loop icon-rotate"></i>
|
||||
</span>
|
||||
<span>
|
||||
<i ng-if="c.actions.create" class="fi-crown icon-status icon-active m10r"></i>
|
||||
</span>
|
||||
<span>{{c.cId === $root.wallet.getMyCopayerId() ? 'Me' : $root.wallet.publicKeyRing.nicknameForCopayer(c.cId)}}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
Loading…
Reference in New Issue