Request Specifc Amount integrated into new send flow.
This commit is contained in:
parent
31d33ba656
commit
927c1e9478
4 changed files with 100 additions and 143 deletions
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
angular.module('copayApp.controllers').controller('amountController', amountController);
|
angular.module('copayApp.controllers').controller('amountController', amountController);
|
||||||
|
|
||||||
function amountController(configService, $filter, $ionicHistory, $ionicModal, $ionicScrollDelegate, lodash, $log, nodeWebkitService, rateService, $scope, $state, $stateParams, $timeout, txFormatService, platformInfo, popupService, profileService, walletService, $window) {
|
function amountController(configService, $filter, $ionicHistory, $ionicModal, $ionicScrollDelegate, lodash, $log, nodeWebkitService, rateService, $scope, $state, $timeout, txFormatService, platformInfo, popupService, profileService, walletService, $window) {
|
||||||
var vm = this;
|
var vm = this;
|
||||||
|
|
||||||
vm.allowSend = false;
|
vm.allowSend = false;
|
||||||
|
|
@ -11,12 +11,10 @@ function amountController(configService, $filter, $ionicHistory, $ionicModal, $i
|
||||||
vm.alternativeUnit = '';
|
vm.alternativeUnit = '';
|
||||||
vm.amount = '0';
|
vm.amount = '0';
|
||||||
vm.availableFunds = '';
|
vm.availableFunds = '';
|
||||||
vm.fromWalletId = '';
|
|
||||||
// Use insufficient for logic, as when the amount is invalid, funds being
|
// Use insufficient for logic, as when the amount is invalid, funds being
|
||||||
// either sufficent or insufficient doesn't make sense.
|
// either sufficent or insufficient doesn't make sense.
|
||||||
vm.fundsAreInsufficient = false;
|
vm.fundsAreInsufficient = false;
|
||||||
vm.globalResult = '';
|
vm.globalResult = '';
|
||||||
vm.hello = 'hi';
|
|
||||||
vm.isRequestingSpecificAmount = false;
|
vm.isRequestingSpecificAmount = false;
|
||||||
vm.listComplete = false;
|
vm.listComplete = false;
|
||||||
vm.lastUsedPopularList = [];
|
vm.lastUsedPopularList = [];
|
||||||
|
|
@ -44,33 +42,25 @@ function amountController(configService, $filter, $ionicHistory, $ionicModal, $i
|
||||||
var LENGTH_BEFORE_COMMA_EXPRESSION_LIMIT = 8;
|
var LENGTH_BEFORE_COMMA_EXPRESSION_LIMIT = 8;
|
||||||
var LENGTH_AFTER_COMMA_EXPRESSION_LIMIT = 8;
|
var LENGTH_AFTER_COMMA_EXPRESSION_LIMIT = 8;
|
||||||
|
|
||||||
var _id;
|
|
||||||
var altCurrencyModal = null;
|
var altCurrencyModal = null;
|
||||||
var altUnitIndex = 0;
|
var altUnitIndex = 0;
|
||||||
var availableFundsInCrypto = '';
|
var availableFundsInCrypto = '';
|
||||||
var availableFundsInFiat = '';
|
var availableFundsInFiat = '';
|
||||||
var availableSatoshis = null;
|
var availableSatoshis = null;
|
||||||
var availableUnits = [];
|
var availableUnits = [];
|
||||||
var displayAddress = null;
|
|
||||||
var fiatCode;
|
var fiatCode;
|
||||||
var fixedUnit;
|
|
||||||
var hasMaxAmount = true;
|
var hasMaxAmount = true;
|
||||||
var isNW = platformInfo.isNW;
|
var isNW = platformInfo.isNW;
|
||||||
var isAndroid = platformInfo.isAndroid;
|
var isAndroid = platformInfo.isAndroid;
|
||||||
var isIos = platformInfo.isIOS;
|
var isIos = platformInfo.isIOS;
|
||||||
var lastUsedAltCurrencyList = [];
|
var lastUsedAltCurrencyList = [];
|
||||||
var nextStep = null;
|
var passthroughParams = {};
|
||||||
var unitToSatoshi;
|
|
||||||
var recipientType = null;
|
|
||||||
var satToUnit;
|
var satToUnit;
|
||||||
var showMenu = false;
|
var showMenu = false;
|
||||||
var showWarningMessage = false;
|
var showWarningMessage = false;
|
||||||
var toAddress = '';
|
|
||||||
var toColor = null;
|
|
||||||
var toEmail = null;
|
|
||||||
var toName = null;
|
|
||||||
var unitDecimals;
|
var unitDecimals;
|
||||||
var unitIndex = 0;
|
var unitIndex = 0;
|
||||||
|
var unitToSatoshi;
|
||||||
var useSendMax = false;
|
var useSendMax = false;
|
||||||
|
|
||||||
function onLeave() {
|
function onLeave() {
|
||||||
|
|
@ -87,24 +77,11 @@ function amountController(configService, $filter, $ionicHistory, $ionicModal, $i
|
||||||
vm.shapeshiftOrderId = data.stateParams.shapeshiftOrderId;
|
vm.shapeshiftOrderId = data.stateParams.shapeshiftOrderId;
|
||||||
}
|
}
|
||||||
|
|
||||||
// To get the wallet from with the new flow
|
passthroughParams = data.stateParams;
|
||||||
vm.fromWalletId = data.stateParams.fromWalletId;
|
|
||||||
|
|
||||||
if (data.stateParams.noPrefix) {
|
vm.isRequestingSpecificAmount = !data.stateParams.fromWalletId;
|
||||||
showWarningMessage = data.stateParams.noPrefix != 0;
|
|
||||||
if (showWarningMessage) {
|
|
||||||
var message = 'Address doesn\'t contain currency information, please make sure you are sending the correct currency.';
|
|
||||||
popupService.showAlert('', message, function() {}, 'Ok');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vm.isRequestingSpecificAmount = !!data.stateParams.id;
|
|
||||||
var config = configService.getSync().wallet.settings;
|
var config = configService.getSync().wallet.settings;
|
||||||
|
|
||||||
// Go to...
|
|
||||||
_id = data.stateParams.id; // Optional (BitPay Card ID or Wallet ID)
|
|
||||||
nextStep = data.stateParams.nextStep;
|
|
||||||
|
|
||||||
setAvailableUnits();
|
setAvailableUnits();
|
||||||
updateUnitUI();
|
updateUnitUI();
|
||||||
|
|
||||||
|
|
@ -112,19 +89,8 @@ function amountController(configService, $filter, $ionicHistory, $ionicModal, $i
|
||||||
hasMaxAmount = false;
|
hasMaxAmount = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
showMenu = $ionicHistory.backView() && ($ionicHistory.backView().stateName == 'tabs.send' || $ionicHistory.backView().stateName == 'tabs.bitpayCard');
|
showMenu = $ionicHistory.backView() && ($ionicHistory.backView().stateName == 'tabs.send');
|
||||||
recipientType = data.stateParams.recipientType || null;
|
|
||||||
toAddress = data.stateParams.toAddress;
|
|
||||||
displayAddress = data.stateParams.displayAddress;
|
|
||||||
toName = data.stateParams.toName;
|
|
||||||
toEmail = data.stateParams.toEmail;
|
|
||||||
toColor = data.stateParams.toColor;
|
|
||||||
|
|
||||||
if (!nextStep && !data.stateParams.toAddress) {
|
|
||||||
$log.error('Bad params at amount')
|
|
||||||
throw ('bad params');
|
|
||||||
}
|
|
||||||
|
|
||||||
var reNr = /^[1234567890\.]$/;
|
var reNr = /^[1234567890\.]$/;
|
||||||
var reOp = /^[\*\+\-\/]$/;
|
var reOp = /^[\*\+\-\/]$/;
|
||||||
|
|
||||||
|
|
@ -158,11 +124,6 @@ function amountController(configService, $filter, $ionicHistory, $ionicModal, $i
|
||||||
|
|
||||||
resetAmount();
|
resetAmount();
|
||||||
|
|
||||||
// in SAT ALWAYS
|
|
||||||
if ($stateParams.toAmount) {
|
|
||||||
vm.amount = (($stateParams.toAmount) * satToUnit).toFixed(unitDecimals);
|
|
||||||
}
|
|
||||||
|
|
||||||
processAmount();
|
processAmount();
|
||||||
|
|
||||||
$timeout(function() {
|
$timeout(function() {
|
||||||
|
|
@ -174,11 +135,16 @@ function amountController(configService, $filter, $ionicHistory, $ionicModal, $i
|
||||||
var configCache = configService.getSync();
|
var configCache = configService.getSync();
|
||||||
availableUnits = [];
|
availableUnits = [];
|
||||||
|
|
||||||
var hasBCHWallets = profileService.getWallets({
|
var coinFromWallet = '';
|
||||||
coin: 'bch'
|
if (passthroughParams.fromWalletId) {
|
||||||
}).length;
|
var fromWallet = profileService.getWallet(passthroughParams.fromWalletId);
|
||||||
|
coinFromWallet = fromWallet.coin;
|
||||||
|
} else {
|
||||||
|
var toWallet = profileService.getWallet(passthroughParams.toWalletId);
|
||||||
|
coinFromWallet = toWallet.coin;
|
||||||
|
}
|
||||||
|
|
||||||
if (hasBCHWallets) {
|
if (coinFromWallet === 'bch') {
|
||||||
availableUnits.push({
|
availableUnits.push({
|
||||||
name: 'Bitcoin Cash',
|
name: 'Bitcoin Cash',
|
||||||
id: 'bch',
|
id: 'bch',
|
||||||
|
|
@ -186,11 +152,7 @@ function amountController(configService, $filter, $ionicHistory, $ionicModal, $i
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
var hasBTCWallets = profileService.getWallets({
|
if (coinFromWallet === 'btc') {
|
||||||
coin: 'btc'
|
|
||||||
}).length;
|
|
||||||
|
|
||||||
if (hasBTCWallets) {
|
|
||||||
availableUnits.push({
|
availableUnits.push({
|
||||||
name: 'Bitcoin',
|
name: 'Bitcoin',
|
||||||
id: 'btc',
|
id: 'btc',
|
||||||
|
|
@ -200,27 +162,7 @@ function amountController(configService, $filter, $ionicHistory, $ionicModal, $i
|
||||||
|
|
||||||
unitIndex = 0;
|
unitIndex = 0;
|
||||||
|
|
||||||
if (data.stateParams.coin) {
|
|
||||||
var coins = data.stateParams.coin.split(',');
|
|
||||||
var newAvailableUnits = [];
|
|
||||||
|
|
||||||
lodash.each(coins, function(c) {
|
|
||||||
var coin = lodash.find(availableUnits, {
|
|
||||||
id: c
|
|
||||||
});
|
|
||||||
if (!coin) {
|
|
||||||
$log.warn('Could not find desired coin:' + data.stateParams.coin)
|
|
||||||
} else {
|
|
||||||
newAvailableUnits.push(coin);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (newAvailableUnits.length > 0) {
|
|
||||||
availableUnits = newAvailableUnits;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// currency have preference
|
// currency have preference
|
||||||
var fiatName;
|
var fiatName;
|
||||||
if (data.stateParams.currency) {
|
if (data.stateParams.currency) {
|
||||||
|
|
@ -241,18 +183,14 @@ function amountController(configService, $filter, $ionicHistory, $ionicModal, $i
|
||||||
isFiat: true,
|
isFiat: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (data.stateParams.fixedUnit) {
|
|
||||||
fixedUnit = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
unitIndex = lodash.findIndex(availableUnits, {
|
unitIndex = lodash.findIndex(availableUnits, {
|
||||||
isFiat: true
|
isFiat: true
|
||||||
});
|
});
|
||||||
|
|
||||||
altUnitIndex = 0;
|
altUnitIndex = 0;
|
||||||
|
|
||||||
if (vm.fromWalletId) {
|
if (passthroughParams.fromWalletId) {
|
||||||
var fromWallet = profileService.getWallet(vm.fromWalletId);
|
var fromWallet = profileService.getWallet(passthroughParams.fromWalletId);
|
||||||
updateAvailableFundsFromWallet(fromWallet);
|
updateAvailableFundsFromWallet(fromWallet);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -302,8 +240,6 @@ function amountController(configService, $filter, $ionicHistory, $ionicModal, $i
|
||||||
|
|
||||||
vm.amount = '0';
|
vm.amount = '0';
|
||||||
|
|
||||||
if (fixedUnit) return;
|
|
||||||
|
|
||||||
if (!(availableUnits[unitIndex].isFiat && availableUnits.length > 2 && altUnitIndex == 0)) {
|
if (!(availableUnits[unitIndex].isFiat && availableUnits.length > 2 && altUnitIndex == 0)) {
|
||||||
unitIndex++;
|
unitIndex++;
|
||||||
if (unitIndex >= availableUnits.length) unitIndex = 0;
|
if (unitIndex >= availableUnits.length) unitIndex = 0;
|
||||||
|
|
@ -405,7 +341,7 @@ function amountController(configService, $filter, $ionicHistory, $ionicModal, $i
|
||||||
var a = fromFiat(result);
|
var a = fromFiat(result);
|
||||||
if (a) {
|
if (a) {
|
||||||
var amountInSatoshis = a * unitToSatoshi;
|
var amountInSatoshis = a * unitToSatoshi;
|
||||||
vm.fundsAreInsufficient = !!vm.fromWalletId
|
vm.fundsAreInsufficient = !!passthroughParams.fromWalletId
|
||||||
&& availableSatoshis !== null
|
&& availableSatoshis !== null
|
||||||
&& availableSatoshis < amountInSatoshis;
|
&& availableSatoshis < amountInSatoshis;
|
||||||
|
|
||||||
|
|
@ -425,7 +361,7 @@ function amountController(configService, $filter, $ionicHistory, $ionicModal, $i
|
||||||
vm.allowSend = false;
|
vm.allowSend = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
vm.fundsAreInsufficient = vm.fromWalletId
|
vm.fundsAreInsufficient = passthroughParams.fromWalletId
|
||||||
&& availableSatoshis !== null
|
&& availableSatoshis !== null
|
||||||
&& availableSatoshis < result * unitToSatoshi;
|
&& availableSatoshis < result * unitToSatoshi;
|
||||||
|
|
||||||
|
|
@ -482,67 +418,88 @@ function amountController(configService, $filter, $ionicHistory, $ionicModal, $i
|
||||||
|
|
||||||
function finish() {
|
function finish() {
|
||||||
var unit = availableUnits[unitIndex];
|
var unit = availableUnits[unitIndex];
|
||||||
var _amount = evaluate(format(vm.amount));
|
var uiAmount = evaluate(format(vm.amount));
|
||||||
var coin = unit.id;
|
|
||||||
|
var satoshis = 0;
|
||||||
if (unit.isFiat) {
|
if (unit.isFiat) {
|
||||||
coin = availableUnits[altUnitIndex].id;
|
satoshis = (fromFiat(uiAmount) * unitToSatoshi).toFixed(0);
|
||||||
|
} else {
|
||||||
|
satoshis = (uiAmount * unitToSatoshi).toFixed(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nextStep) {
|
var confirmData = {
|
||||||
$state.transitionTo(nextStep, {
|
amount: useSendMax ? undefined : satoshis,
|
||||||
id: _id,
|
fromWalletId: passthroughParams.fromWalletId,
|
||||||
amount: useSendMax ? null : _amount,
|
sendMax: useSendMax,
|
||||||
currency: unit.id.toUpperCase(),
|
thirdParty: passthroughParams.thirdParty,
|
||||||
coin: coin,
|
toAddr: passthroughParams.toAddress,
|
||||||
useSendMax: useSendMax,
|
toWalletId: passthroughParams.toWalletId
|
||||||
fromWalletId: vm.fromWalletId
|
};
|
||||||
});
|
|
||||||
} else {
|
|
||||||
var amount = _amount;
|
|
||||||
|
|
||||||
|
console.log('confirmData:', confirmData);
|
||||||
|
|
||||||
|
if (!confirmData.fromWalletId) {
|
||||||
|
$state.transitionTo('tabs.paymentRequest.confirm', confirmData);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
|
||||||
|
var coin = unit.id;
|
||||||
if (unit.isFiat) {
|
if (unit.isFiat) {
|
||||||
amount = (fromFiat(amount) * unitToSatoshi).toFixed(0);
|
coin = availableUnits[altUnitIndex].id;
|
||||||
} else {
|
|
||||||
amount = (amount * unitToSatoshi).toFixed(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var confirmData = {
|
if (nextStep) {
|
||||||
recipientType: recipientType,
|
$state.transitionTo(nextStep, {
|
||||||
toAmount: amount,
|
id: _id,
|
||||||
toAddress: toAddress,
|
amount: useSendMax ? null : _amount,
|
||||||
displayAddress: displayAddress || toAddress,
|
currency: unit.id.toUpperCase(),
|
||||||
toName: toName,
|
coin: coin,
|
||||||
toEmail: toEmail,
|
useSendMax: useSendMax,
|
||||||
toColor: toColor,
|
fromWalletId: passthroughParams.fromWalletId
|
||||||
coin: coin,
|
});
|
||||||
useSendMax: useSendMax,
|
} else {
|
||||||
fromWalletId: vm.fromWalletId
|
var amount = _amount;
|
||||||
};
|
|
||||||
|
|
||||||
if (vm.shapeshiftOrderId) {
|
if (unit.isFiat) {
|
||||||
var shapeshiftOrderUrl = 'https://www.shapeshift.io/#/status/';
|
amount = (fromFiat(amount) * unitToSatoshi).toFixed(0);
|
||||||
shapeshiftOrderUrl += vm.shapeshiftOrderId;
|
} else {
|
||||||
confirmData.description = shapeshiftOrderUrl;
|
amount = (amount * unitToSatoshi).toFixed(0);
|
||||||
confirmData.fromWalletId = vm.fromWalletId;
|
}
|
||||||
|
|
||||||
if (confirmData.useSendMax) {
|
var confirmData = {
|
||||||
var wallet = lodash.find(profileService.getWallets({ coin: coin }),
|
amount: useSendMax ? undefined : amount,
|
||||||
function(w) {
|
fromWalletId: passthroughParams.fromWalletId,
|
||||||
return w.id == vm.fromWalletId;
|
sendMax: useSendMax,
|
||||||
});
|
thirdParty: passthroughParams.thirdParty,
|
||||||
|
toAddr: passthroughParams.toAddress,
|
||||||
|
toWalletId: passthroughParams.toWalletId
|
||||||
|
};
|
||||||
|
|
||||||
var balance = parseFloat(wallet.cachedBalance.substring(0, wallet.cachedBalance.length-4));
|
if (vm.shapeshiftOrderId) {
|
||||||
if (balance < vm.minShapeshiftAmount * 1.04) {
|
var shapeshiftOrderUrl = 'https://www.shapeshift.io/#/status/';
|
||||||
confirmData.useSendMax = false;
|
shapeshiftOrderUrl += vm.shapeshiftOrderId;
|
||||||
confirmData.toAmount = vm.minShapeshiftAmount * unitToSatoshi;
|
confirmData.description = shapeshiftOrderUrl;
|
||||||
} else if (balance > vm.maxShapeshiftAmount) {
|
|
||||||
confirmData.useSendMax = false;
|
if (confirmData.useSendMax) {
|
||||||
confirmData.toAmount = vm.maxShapeshiftAmount * unitToSatoshi * 0.99;
|
var wallet = lodash.find(profileService.getWallets({ coin: coin }),
|
||||||
|
function(w) {
|
||||||
|
return w.id == vm.fromWalletId;
|
||||||
|
});
|
||||||
|
|
||||||
|
var balance = parseFloat(wallet.cachedBalance.substring(0, wallet.cachedBalance.length-4));
|
||||||
|
if (balance < vm.minShapeshiftAmount * 1.04) {
|
||||||
|
confirmData.useSendMax = false;
|
||||||
|
confirmData.amount = vm.minShapeshiftAmount * unitToSatoshi;
|
||||||
|
} else if (balance > vm.maxShapeshiftAmount) {
|
||||||
|
confirmData.useSendMax = false;
|
||||||
|
confirmData.amount = vm.maxShapeshiftAmount * unitToSatoshi * 0.99;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
$state.transitionTo('tabs.send.confirm', confirmData);
|
|
||||||
|
$state.transitionTo('tabs.send.confirm', confirmData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
useSendMax = null;
|
useSendMax = null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ angular.module('copayApp.controllers').controller('customAmountController', func
|
||||||
}
|
}
|
||||||
|
|
||||||
$scope.$on("$ionicView.beforeEnter", function(event, data) {
|
$scope.$on("$ionicView.beforeEnter", function(event, data) {
|
||||||
var walletId = data.stateParams.id;
|
var walletId = data.stateParams.toWalletId;
|
||||||
|
|
||||||
if (!walletId) {
|
if (!walletId) {
|
||||||
showErrorAndBack('Error', 'No wallet selected');
|
showErrorAndBack('Error', 'No wallet selected');
|
||||||
|
|
@ -53,11 +53,12 @@ angular.module('copayApp.controllers').controller('customAmountController', func
|
||||||
$scope.address = bchAddresses[$scope.bchAddressType];
|
$scope.address = bchAddresses[$scope.bchAddressType];
|
||||||
}
|
}
|
||||||
|
|
||||||
$scope.coin = data.stateParams.coin;
|
$scope.coin = $scope.wallet.coin;
|
||||||
|
var satoshis = parseInt(data.stateParams.amount, 10);
|
||||||
var parsedAmount = txFormatService.parseAmount(
|
var parsedAmount = txFormatService.parseAmount(
|
||||||
$scope.wallet.coin,
|
$scope.wallet.coin,
|
||||||
data.stateParams.amount,
|
satoshis,
|
||||||
data.stateParams.currency);
|
'sat');
|
||||||
|
|
||||||
// Amount in USD or BTC
|
// Amount in USD or BTC
|
||||||
var amount = parsedAmount.amount;
|
var amount = parsedAmount.amount;
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,7 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi
|
||||||
|
|
||||||
$scope.requestSpecificAmount = function() {
|
$scope.requestSpecificAmount = function() {
|
||||||
$state.go('tabs.paymentRequest.amount', {
|
$state.go('tabs.paymentRequest.amount', {
|
||||||
id: $scope.wallet.credentials.walletId,
|
toWalletId: $scope.wallet.credentials.walletId
|
||||||
coin: $scope.wallet.coin
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -723,7 +723,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
|
||||||
})
|
})
|
||||||
|
|
||||||
.state('tabs.paymentRequest.amount', {
|
.state('tabs.paymentRequest.amount', {
|
||||||
url: '/amount/:coin',
|
url: '/amount/:toWalletId',
|
||||||
views: {
|
views: {
|
||||||
'tab-receive@tabs': {
|
'tab-receive@tabs': {
|
||||||
controller: 'amountController',
|
controller: 'amountController',
|
||||||
|
|
@ -733,7 +733,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.state('tabs.paymentRequest.confirm', {
|
.state('tabs.paymentRequest.confirm', {
|
||||||
url: '/confirm/:amount/:currency/:coin',
|
url: '/confirm/:amount/:toWalletId',
|
||||||
views: {
|
views: {
|
||||||
'tab-receive@tabs': {
|
'tab-receive@tabs': {
|
||||||
controller: 'customAmountController',
|
controller: 'customAmountController',
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue