Select Git revision
transfer-controllers.js
-
Benoit Lavenier authored
- Avoid error "Could not load Wallet" when extension point failed - Fix #201 - Add default decimal number in config fix #202 - ES Market: add "type" ofer/need filter - ES Market : make sure price is a valid number
Benoit Lavenier authored- Avoid error "Could not load Wallet" when extension point failed - Fix #201 - Add default decimal number in config fix #202 - ES Market: add "type" ofer/need filter - ES Market : make sure price is a valid number
transfer-controllers.js 7.22 KiB
angular.module('cesium.transfer.controllers', ['cesium.services', 'cesium.currency.controllers'])
.config(function($stateProvider) {
'ngInject';
$stateProvider
.state('app.new_transfer', {
cache: false,
url: "/transfer?uid&pubkey",
views: {
'menuContent': {
templateUrl: "templates/wallet/new_transfer.html",
controller: 'TransferCtrl'
}
}
})
.state('app.new_transfer_pubkey_uid', {
cache: false,
url: "/transfer/:pubkey/:uid",
views: {
'menuContent': {
templateUrl: "templates/wallet/new_transfer.html",
controller: 'TransferCtrl'
}
}
})
.state('app.new_transfer_pubkey', {
cache: false,
url: "/transfer/:pubkey",
views: {
'menuContent': {
templateUrl: "templates/wallet/new_transfer.html",
controller: 'TransferCtrl'
}
}
})
;
})
.controller('TransferCtrl', TransferController)
.controller('TransferModalCtrl', TransferModalController)
;
function TransferController($scope, $rootScope, $state, BMA, csWallet, UIUtils, $timeout, Device, $ionicPopover, $translate, $filter, $q, Modals, $ionicHistory) {
'ngInject';
TransferModalController.call(this, $scope, $rootScope, $state, BMA, csWallet, UIUtils, $timeout, Device, $ionicPopover, $translate, $filter, $q, Modals, csSettings);
$scope.$on('$ionicView.enter', function(e, state) {
if (!!state.stateParams && !!state.stateParams.pubkey) {
$scope.formData.destPub = state.stateParams.pubkey;
if (!!state.stateParams.uid) {
$scope.destUid = state.stateParams.uid;
$scope.destPub = '';
}
else {
$scope.destUid = '';
$scope.destPub = $scope.formData.destPub;
}
}
$scope.loadWallet()
.then(function() {
$scope.formData.useRelative = csSettings.data.useRelative;
$scope.onUseRelativeChanged();
UIUtils.loading.hide();
});
});
$scope.setForm = function(form) {
$scope.form = form;
};
// ovveride modal close
$scope.closeModal = function() {
$ionicHistory.goBack();
};
}
function TransferModalController($scope, $rootScope, $ionicPopover, $translate, $filter, $q, BMA, csWallet, UIUtils, Modals,
csSettings, parameters) {
'ngInject';
$scope.convertedBalance = 0;
$scope.formData = {
destPub: null,
amount: null,
comment: null,
useRelative: csSettings.data.useRelative,
useComment: false
};
$scope.udAmount = null;
$scope.commentPattern = BMA.regex.COMMENT;
if (parameters) {
if (parameters.pubkey) {
$scope.formData.destPub = parameters.pubkey;
}
if (parameters.uid) {
$scope.destUid = parameters.uid;
$scope.destPub = '';
}
else {
$scope.destUid = '';
$scope.destPub = parameters.pubkey;
}
if (parameters.amount) {
$scope.formData.amount = parameters.amount;
}
if (parameters.comment) {
$scope.formData.useComment=true;
$scope.formData.comment = parameters.comment;
}
}
$ionicPopover.fromTemplateUrl('templates/wallet/popover_unit.html', {
scope: $scope
}).then(function(popover) {
$scope.unitPopover = popover;
});
//Cleanup the modal when we're done with it!
$scope.$on('$destroy', function() {
if (!!$scope.unitPopover) {
$scope.unitPopover.remove();
}
});
$scope.cancel = function() {
$scope.closeModal();
};
// When changing use relative UD
$scope.onUseRelativeChanged = function() {
$scope.unit = $rootScope.walletData.currency;
if ($scope.formData.useRelative) {
$scope.convertedBalance = $rootScope.walletData.balance / $rootScope.walletData.currentUD;
$scope.udAmount = $scope.amount * $rootScope.walletData.currentUD;
} else {
$scope.convertedBalance = $rootScope.walletData.balance;
// Convert to number
$scope.formData.amount = (!!$scope.formData.amount && typeof $scope.formData.amount == "string") ?
Math.floor(parseFloat($scope.formData.amount.replace(new RegExp('[,]'), '.'))) :
$scope.formData.amount;
// Compute UD
$scope.udAmount = (!!$scope.formData.amount &&
typeof $scope.formData.amount == "number" &&
!!$rootScope.walletData.currentUD &&
typeof $rootScope.walletData.currentUD == "number") ?
$scope.formData.amount / $rootScope.walletData.currentUD :null;
}
};
$scope.$watch('formData.useRelative', $scope.onUseRelativeChanged, true);
$scope.$watch('walletData.balance', $scope.onUseRelativeChanged, true);
// When changing use comment
$scope.onUseCommentChanged = function() {
if (!$scope.formData.useComment) {
$scope.formData.comment = null; // reset comment only when disable
}
};
$scope.$watch('formData.useComment', $scope.onUseCommentChanged, true);
$scope.doTransfer = function() {
$scope.form.$submitted=true;
if(!$scope.form.$valid || !$scope.formData.destPub || !$scope.formData.amount) {
return;
}
$scope.askTransferConfirm()
.then(function(){
UIUtils.loading.show();
var amount = $scope.formData.amount;
if (typeof amount == "string") {
amount = parseFloat(amount.replace(new RegExp('[.,]'), '.'));
}
if ($scope.formData.useRelative) {
amount = $rootScope.walletData.currentUD * amount;
}
csWallet.transfer($scope.formData.destPub, amount, $scope.formData.comment, $scope.formData.useRelative)
.then(function() {
UIUtils.loading.hide();
$scope.closeModal(true);
})
.catch(UIUtils.onError('ERROR.SEND_TX_FAILED'));
});
};
$scope.askTransferConfirm = function() {
return $q(function(resolve, reject) {
$translate(['COMMON.UD', 'COMMON.EMPTY_PARENTHESIS'])
.then(function(translations){
$translate('CONFIRM.TRANSFER', {
from: $rootScope.walletData.isMember ? $rootScope.walletData.uid : $filter('formatPubkey')($rootScope.walletData.pubkey),
to: $scope.destUid ? $scope.destUid : $scope.destPub,
amount: $scope.formData.amount,
unit: $scope.formData.useRelative ? translations['COMMON.UD'] : $filter('abbreviate')($rootScope.walletData.parameters.currency),
comment: (!$scope.formData.comment || $scope.formData.comment.trim().length === 0) ? translations['COMMON.EMPTY_PARENTHESIS'] : $scope.formData.comment
})
.then(function(confirmMsg) {
UIUtils.alert.confirm(confirmMsg)
.then(function(confirm){
if (confirm) {
resolve();
}
});
});
});
});
};
$scope.setUseRelative = function(useRelative) {
$scope.formData.useRelative = useRelative;
$scope.unitPopover.hide();
};
/* -- modals -- */
$scope.showWotLookupModal = function() {
Modals.showWotLookup()
.then(function(result){
if (result) {
if (result.uid) {
$scope.destUid = result.uid;
$scope.destPub = '';
}
else {
$scope.destUid = '';
$scope.destPub = result.pubkey;
}
$scope.formData.destPub = result.pubkey;
}
});
};
}