Merge pull request #327 from msalcala11/slideToPayComponent

Implement Slide to Pay
This commit is contained in:
Matias Alejo Garcia 2016-10-11 11:47:18 -03:00 committed by GitHub
commit 8607867d71
30 changed files with 842 additions and 164 deletions

View file

@ -1,9 +1,11 @@
'use strict';
angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $filter, $timeout, $ionicScrollDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, gettext, txFormatService, ongoingProcess, $ionicModal, popupService) {
angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $filter, $timeout, $ionicScrollDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, gettext, txFormatService, ongoingProcess, $ionicModal, popupService, $ionicHistory, $ionicConfig) {
var cachedTxp = {};
var isChromeApp = platformInfo.isChromeApp;
$ionicConfig.views.swipeBackEnabled(false);
$scope.$on("$ionicView.beforeEnter", function(event, data) {
$scope.isWallet = data.stateParams.isWallet;
$scope.isCard = data.stateParams.isCard;
@ -30,6 +32,7 @@ angular.module('copayApp.controllers').controller('confirmController', function(
throw ('bad params');
}
$scope.isCordova = platformInfo.isCordova;
$scope.hasClick = platformInfo.hasClick;
$scope.data = {};
var config = configService.getSync().wallet;
@ -54,7 +57,8 @@ angular.module('copayApp.controllers').controller('confirmController', function(
}
var filteredWallets = [];
var index = 0, enoughFunds = false;
var index = 0;
var enoughFunds = false;
lodash.each(wallets, function(w) {
walletService.getStatus(w, {}, function(err, status) {
@ -198,6 +202,7 @@ angular.module('copayApp.controllers').controller('confirmController', function(
};
var setSendError = function(msg) {
$scope.sendStatus = '';
popupService.showAlert(gettextCatalog.getString('Error at confirm:'), msg);
};
@ -205,7 +210,7 @@ angular.module('copayApp.controllers').controller('confirmController', function(
$scope.fee = txFormatService.formatAmountStr(txp.fee);
$scope.txp = txp;
$scope.$apply();
};
}
var createTx = function(wallet, dryRun, cb) {
var config = configService.getSync().wallet;
@ -270,7 +275,7 @@ angular.module('copayApp.controllers').controller('confirmController', function(
});
};
$scope.approve = function() {
$scope.approve = function(onSendStatusChange) {
var wallet = $scope.wallet;
if (!wallet) {
return setSendError(gettextCatalog.getString('No wallet selected'));
@ -284,9 +289,10 @@ angular.module('copayApp.controllers').controller('confirmController', function(
if (err) return setSendError(err);
});
}
ongoingProcess.set('creatingTx', true);
ongoingProcess.set('creatingTx', true, onSendStatusChange);
createTx(wallet, false, function(err, txp) {
ongoingProcess.set('creatingTx', false);
ongoingProcess.set('creatingTx', false, onSendStatusChange);
if (err) return;
var config = configService.getSync();
@ -304,24 +310,57 @@ angular.module('copayApp.controllers').controller('confirmController', function(
if (!spendingPassEnabled && !touchIdEnabled) {
if (isCordova && bigAmount) {
popupService.showConfirm(null, message, okText, cancelText, function(ok) {
if (!ok) return;
publishAndSign(wallet, txp);
if (!ok) {
$scope.sendStatus = '';
$timeout(function() {
$scope.$apply();
});
return;
}
publishAndSign(wallet, txp, onSendStatusChange);
});
}
else {
popupService.showConfirm(null, message, okText, cancelText, function(ok) {
if (!ok) return;
publishAndSign(wallet, txp);
if (!ok) {
$scope.sendStatus = '';
return;
}
publishAndSign(wallet, txp, onSendStatusChange);
});
}
}
else publishAndSign(wallet, txp);
else publishAndSign(wallet, txp, onSendStatusChange);
});
};
function publishAndSign(wallet, txp) {
function statusChangeHandler(processName, showName, isOn) {
$log.debug('statusChangeHandler: ', processName, showName, isOn);
if ((processName === 'broadcastingTx' || ((processName === 'signingTx') && $scope.wallet.m > 1)) && !isOn) {
$scope.sendStatus = 'success';
$scope.$digest();
} else if (showName) {
$scope.sendStatus = showName;
}
}
$scope.statusChangeHandler = statusChangeHandler;
$scope.onConfirm = function() {
$scope.approve(statusChangeHandler);
};
$scope.onSuccessConfirm = function() {
$ionicHistory.nextViewOptions({
disableAnimate: true
});
$scope.sendStatus = '';
$state.go('tabs.send');
};
function publishAndSign(wallet, txp, onSendStatusChange) {
walletService.publishAndSign(wallet, txp, function(err, txp) {
if (err) return setSendError(err);
});
};
}, onSendStatusChange);
}
});

View file

@ -1,49 +1,11 @@
'use strict';
angular.module('copayApp.controllers').controller('txStatusController', function($scope, $timeout, $state, $stateParams, $ionicHistory, $log, addressbookService) {
angular.module('copayApp.controllers').controller('txStatusController', function($scope, $timeout) {
if ($scope.cb) $timeout($scope.cb, 100);
var previousView = $ionicHistory.viewHistory().backView && $ionicHistory.viewHistory().backView.stateName;
$scope.fromSendTab = previousView.match(/tabs.send/) ? true : false;
$scope.fromBitPayCard = previousView.match(/tabs.bitpayCard/) ? true : false;
$scope.fromPayPro = $stateParams.paypro ? true : false;
$scope.cancel = function() {
$scope.txStatusModal.hide();
if ($scope.fromSendTab) {
$ionicHistory.removeBackView();
$state.go('tabs.send');
$timeout(function() {
$state.transitionTo('tabs.home');
}, 100);
} else if ($scope.fromBitPayCard) {
$ionicHistory.removeBackView();
$timeout(function() {
$state.transitionTo('tabs.bitpayCard');
}, 100);
}
};
$scope.save = function(addressbookEntry) {
$scope.txStatusModal.hide();
$ionicHistory.nextViewOptions({
disableAnimate: true,
disableBack: true
});
$ionicHistory.removeBackView();
$state.go('tabs.send.addressbook', {
fromSendTab: $scope.fromSendTab,
addressbookEntry: addressbookEntry
});
}
addressbookService.list(function(err, ab) {
if (err) $log.error(err);
if (ab[$scope.tx.toAddress]) {
$scope.entryExist = true;
$log.debug('Entry already exist');
}
})
});

View file

@ -1,6 +1,6 @@
'use strict';
angular.module('copayApp.controllers').controller('txpDetailsController', function($scope, $rootScope, $timeout, $interval, $ionicModal, ongoingProcess, platformInfo, $ionicScrollDelegate, txFormatService, fingerprintService, bwcError, gettextCatalog, lodash, walletService, popupService) {
angular.module('copayApp.controllers').controller('txpDetailsController', function($scope, $rootScope, $timeout, $interval, $ionicModal, $log, ongoingProcess, platformInfo, $ionicScrollDelegate, txFormatService, fingerprintService, bwcError, gettextCatalog, lodash, walletService, popupService, $state, $ionicHistory) {
var self = $scope.self;
var tx = $scope.tx;
var copayers = $scope.copayers;
@ -17,7 +17,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
$scope.canSign = $scope.wallet.canSign() || $scope.wallet.isPrivKeyExternal();
$scope.color = $scope.wallet.color;
$scope.data = {};
$scope.hasClick = platformInfo.hasClick;
initActionList();
checkPaypro();
}
@ -66,17 +66,18 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
}
var setSendError = function(msg) {
$scope.sendStatus = '';
var error = msg || gettextCatalog.getString('Could not send payment');
popupService.showAlert(gettextCatalog.getString('Error'), error);
}
$scope.sign = function() {
$scope.sign = function(onSendStatusChange) {
$scope.loading = true;
walletService.publishAndSign($scope.wallet, $scope.tx, function(err, txp) {
$scope.$emit('UpdateTx');
if (err) return setSendError(err);
$scope.close();
});
success();
}, onSendStatusChange);
};
function setError(err, prefix) {
@ -213,6 +214,31 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi
});
};
function statusChangeHandler(processName, showName, isOn) {
$log.debug('statusChangeHandler: ', processName, showName, isOn);
if (showName) {
$scope.sendStatus = showName;
}
}
function success() {
$scope.sendStatus = 'success';
$scope.$digest();
}
$scope.statusChangeHandler = statusChangeHandler;
$scope.onConfirm = function() {
$scope.sign(statusChangeHandler);
};
$scope.onSuccessConfirm = function() {
$ionicHistory.nextViewOptions({
disableAnimate: true
});
$scope.close();
};
$scope.close = function() {
$scope.loading = null;
$scope.txpDetailsModal.hide();