thirdParty updates + shapeshift screens + merged with review transaction
This commit is contained in:
parent
391201471d
commit
01dd774fae
8 changed files with 187 additions and 20 deletions
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
angular.module('copayApp.controllers').controller('amountController', amountController);
|
angular.module('copayApp.controllers').controller('amountController', amountController);
|
||||||
|
|
||||||
function amountController(configService, $filter, gettextCatalog, $ionicHistory, $ionicModal, $ionicScrollDelegate, lodash, $log, nodeWebkitService, rateService, $scope, $state, $timeout, txFormatService, platformInfo, profileService, walletService, $window) {
|
function amountController(configService, $filter, gettextCatalog, $ionicHistory, $ionicModal, $ionicScrollDelegate, lodash, $log, nodeWebkitService, rateService, $scope, $state, $timeout, shapeshiftService, txFormatService, platformInfo, profileService, walletService, $window) {
|
||||||
var vm = this;
|
var vm = this;
|
||||||
|
|
||||||
vm.allowSend = false;
|
vm.allowSend = false;
|
||||||
|
|
@ -21,6 +21,7 @@ function amountController(configService, $filter, gettextCatalog, $ionicHistory,
|
||||||
vm.maxAmount = 0;
|
vm.maxAmount = 0;
|
||||||
vm.minAmount = 0;
|
vm.minAmount = 0;
|
||||||
vm.shapeshiftOrderId = '';
|
vm.shapeshiftOrderId = '';
|
||||||
|
vm.thirdParty = false;
|
||||||
vm.unit = '';
|
vm.unit = '';
|
||||||
|
|
||||||
vm.changeUnit = changeUnit;
|
vm.changeUnit = changeUnit;
|
||||||
|
|
@ -72,11 +73,39 @@ function amountController(configService, $filter, gettextCatalog, $ionicHistory,
|
||||||
passthroughParams = data.stateParams;
|
passthroughParams = data.stateParams;
|
||||||
console.log('stateParams:', data.stateParams);
|
console.log('stateParams:', data.stateParams);
|
||||||
|
|
||||||
|
vm.fromWalletId = data.stateParams.fromWalletId;
|
||||||
|
vm.toWalletId = data.stateParams.toWalletId;
|
||||||
vm.minAmount = parseFloat(data.stateParams.minAmount);
|
vm.minAmount = parseFloat(data.stateParams.minAmount);
|
||||||
vm.maxAmount = parseFloat(data.stateParams.maxAmount);
|
vm.maxAmount = parseFloat(data.stateParams.maxAmount);
|
||||||
vm.shapeshiftOrderId = data.stateParams.thirdPartyOrderId;
|
|
||||||
|
if (passthroughParams.thirdParty) {
|
||||||
|
vm.thirdParty = JSON.parse(passthroughParams.thirdParty); // Parse stringified JSON-object
|
||||||
|
if (vm.thirdParty) {
|
||||||
|
if (vm.thirdParty.id === 'shapeshift') {
|
||||||
|
if (!vm.thirdParty.data) {
|
||||||
|
vm.thirdParty.data = {};
|
||||||
|
}
|
||||||
|
vm.thirdParty.data['fromWalletId'] = vm.fromWalletId;
|
||||||
|
|
||||||
|
vm.fromWallet = profileService.getWallet(vm.fromWalletId);
|
||||||
|
vm.toWallet = profileService.getWallet(vm.toWalletId);
|
||||||
|
|
||||||
|
shapeshiftService.getMarketData(vm.fromWallet.coin, vm.toWallet.coin, function(data) {
|
||||||
|
console.log(data);
|
||||||
|
vm.thirdParty.data['minAmount'] = vm.minAmount = parseFloat(data.minimum);
|
||||||
|
vm.thirdParty.data['maxAmount'] = vm.maxAmount = parseFloat(data.maxLimit);
|
||||||
|
});
|
||||||
|
|
||||||
|
// if (vm.thirdParty.data['shapeshiftOrderId'] && data.stateParams.shapeshiftOrderId.length > 0) {
|
||||||
|
// vm.shapeshiftOrderId = vm.thirdParty.data['shapeshiftOrderId'];
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// vm.shapeshiftOrderId = data.stateParams.thirdPartyOrderId;
|
||||||
|
|
||||||
vm.isRequestingSpecificAmount = !data.stateParams.fromWalletId;
|
vm.isRequestingSpecificAmount = !data.stateParams.fromWalletId;
|
||||||
|
|
||||||
var config = configService.getSync().wallet.settings;
|
var config = configService.getSync().wallet.settings;
|
||||||
|
|
||||||
setAvailableUnits();
|
setAvailableUnits();
|
||||||
|
|
@ -441,11 +470,14 @@ function amountController(configService, $filter, gettextCatalog, $ionicHistory,
|
||||||
amount: useSendMax ? undefined : satoshis,
|
amount: useSendMax ? undefined : satoshis,
|
||||||
fromWalletId: passthroughParams.fromWalletId,
|
fromWalletId: passthroughParams.fromWalletId,
|
||||||
sendMax: useSendMax,
|
sendMax: useSendMax,
|
||||||
thirdPartyOrderId: passthroughParams.thirdPartyOrderId,
|
|
||||||
toAddr: passthroughParams.toAddress,
|
toAddr: passthroughParams.toAddress,
|
||||||
toWalletId: passthroughParams.toWalletId
|
toWalletId: passthroughParams.toWalletId
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (vm.thirdParty) {
|
||||||
|
confirmData['thirdParty'] = JSON.stringify(this.thirdParty);
|
||||||
|
}
|
||||||
|
|
||||||
console.log('confirmData:', confirmData);
|
console.log('confirmData:', confirmData);
|
||||||
|
|
||||||
if (!confirmData.fromWalletId) {
|
if (!confirmData.fromWalletId) {
|
||||||
|
|
|
||||||
|
|
@ -287,7 +287,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.state('tabs.send.amount', {
|
.state('tabs.send.amount', {
|
||||||
url: '/amount/:thirdPartyId/:thirdPartyOrderId/:fromWalletId/:maxAmount/:minAmount/:toWalletId/:toAddress',
|
url: '/amount/:thirdParty/:fromWalletId/:maxAmount/:minAmount/:toWalletId/:toAddress',
|
||||||
views: {
|
views: {
|
||||||
'tab-send@tabs': {
|
'tab-send@tabs': {
|
||||||
controller: 'amountController',
|
controller: 'amountController',
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,6 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat
|
||||||
$state.transitionTo('tabs.send.origin', {
|
$state.transitionTo('tabs.send.origin', {
|
||||||
amount: amount,
|
amount: amount,
|
||||||
toAddress: addr,
|
toAddress: addr,
|
||||||
displayAddress: originalAddress ? originalAddress : addr,
|
|
||||||
description: message,
|
description: message,
|
||||||
coin: coin
|
coin: coin
|
||||||
});
|
});
|
||||||
|
|
@ -109,6 +108,7 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat
|
||||||
// params['thirdParty']['minShapeshiftAmount'] = serviceData.minAmount;
|
// params['thirdParty']['minShapeshiftAmount'] = serviceData.minAmount;
|
||||||
// params['thirdParty']['maxShapeshiftAmount'] = serviceData.maxAmount;
|
// params['thirdParty']['maxShapeshiftAmount'] = serviceData.maxAmount;
|
||||||
// params['thirdParty']['shapeshiftOrderId'] = serviceData.orderId;
|
// params['thirdParty']['shapeshiftOrderId'] = serviceData.orderId;
|
||||||
|
params['thirdParty'] = JSON.stringify(params['thirdParty']);
|
||||||
$state.transitionTo('tabs.send.amount', params);
|
$state.transitionTo('tabs.send.amount', params);
|
||||||
} else {
|
} else {
|
||||||
$state.transitionTo('tabs.send.origin', params);
|
$state.transitionTo('tabs.send.origin', params);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,143 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
angular.module('copayApp.services').factory('shapeshiftService', function($http, $log, lodash, moment, storageService, configService, platformInfo, servicesService) {
|
angular.module('copayApp.services').factory('shapeshiftService', function($http, $log, lodash, moment, ongoingProcess, shapeshiftApiService, storageService, configService, platformInfo, servicesService) {
|
||||||
var root = {};
|
var root = {};
|
||||||
var credentials = {};
|
root.ShiftState = 'Shift';
|
||||||
|
root.withdrawalAddress = ''
|
||||||
|
root.returnAddress = ''
|
||||||
|
root.amount = '';
|
||||||
|
root.marketData = {}
|
||||||
|
this.withdrawalAddress = function(address) {
|
||||||
|
root.withdrawalAddress = address;
|
||||||
|
};
|
||||||
|
this.returnAddress = function(address) {
|
||||||
|
root.returnAddress = address;
|
||||||
|
};
|
||||||
|
this.amount = function(amount) {
|
||||||
|
root.amount = amount;
|
||||||
|
};
|
||||||
|
this.fromWalletId = function(id) {
|
||||||
|
root.fromWalletId = id;
|
||||||
|
};
|
||||||
|
this.toWalletId = function(id) {
|
||||||
|
root.toWalletId = id;
|
||||||
|
};
|
||||||
|
|
||||||
|
root.getMarketDataIn = function(coin) {
|
||||||
|
if(coin === root.coinOut) return root.getMarketData(root.coinOut, root.coinIn);
|
||||||
|
return root.getMarketData(coin, root.coinOut);
|
||||||
|
};
|
||||||
|
root.getMarketDataOut = function(coin) {
|
||||||
|
if(coin === root.coinIn) return root.getMarketData(root.coinOut, root.coinIn);
|
||||||
|
return root.getMarketData(root.coinIn, coin);
|
||||||
|
};
|
||||||
|
root.getMarketData = function(coinIn, coinOut, cb) {
|
||||||
|
root.coinIn = coinIn;
|
||||||
|
root.coinOut= coinOut;
|
||||||
|
if(root.coinIn === undefined || root.coinOut === undefined) return;
|
||||||
|
shapeshiftApiService
|
||||||
|
.marketInfo(root.coinIn, root.coinOut)
|
||||||
|
.then(function(marketData){
|
||||||
|
root.marketData = marketData;
|
||||||
|
root.rateString = root.marketData.rate.toString() + ' ' + coinOut.toUpperCase() + '/' + coinIn.toUpperCase();
|
||||||
|
if (cb) {
|
||||||
|
cb(marketData);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/*shapeshiftApiService.coins().then(function(coins){
|
||||||
|
root.coins = coins;
|
||||||
|
root.coinIn = coins['BTC'].symbol;
|
||||||
|
root.coinOut = coins['BCH'].symbol;
|
||||||
|
root.getMarketData(root.coinIn, root.coinOut);
|
||||||
|
});*/
|
||||||
|
|
||||||
|
root.coins = {
|
||||||
|
'BTC': { name: 'Bitcoin', symbol: 'BTC' },
|
||||||
|
'BCH': { name: 'Bitcoin Cash', symbol: 'BCH' }
|
||||||
|
};
|
||||||
|
|
||||||
|
function checkForError(data){
|
||||||
|
if(data.error) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
root.shiftIt = function(){
|
||||||
|
ongoingProcess.set('connectingShapeshift', true);
|
||||||
|
var validate=shapeshiftApiService.ValidateAddress(root.withdrawalAddress, root.coinOut);
|
||||||
|
validate.then(function(valid){
|
||||||
|
//console.log(root.withdrawalAddress)
|
||||||
|
//console.log(valid)
|
||||||
|
var tx = ShapeShift();
|
||||||
|
tx.then(function(txData){
|
||||||
|
if(txData['fixedTxData']){
|
||||||
|
txData = txData.fixedTxData;
|
||||||
|
if(checkForError(txData)) return;
|
||||||
|
//console.log(txData)
|
||||||
|
var coinPair=txData.pair.split('_');
|
||||||
|
txData.depositType = coinPair[0].toUpperCase();
|
||||||
|
txData.withdrawalType = coinPair[1].toUpperCase();
|
||||||
|
var coin = root.coins[txData.depositType].name.toLowerCase();
|
||||||
|
//console.log(coin)
|
||||||
|
txData.depositQR = coin + ":" + txData.deposit + "?amount=" + txData.depositAmount
|
||||||
|
root.txFixedPending = true;
|
||||||
|
} else if(txData['normalTxData']){
|
||||||
|
txData = txData.normalTxData;
|
||||||
|
if(checkForError(txData)) return;
|
||||||
|
var coin = root.coins[txData.depositType.toUpperCase()].name.toLowerCase();
|
||||||
|
txData.depositQR = coin + ":" + txData.deposit;
|
||||||
|
} else if(txData['cancelTxData']){
|
||||||
|
if(checkForError(txData.cancelTxData)) return;
|
||||||
|
if(root.txFixedPending) {
|
||||||
|
$interval.cancel(root.txInterval);
|
||||||
|
root.txFixedPending = false;
|
||||||
|
}
|
||||||
|
root.ShiftState = 'Shift';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
root.depositInfo = txData;
|
||||||
|
//console.log(root.marketData);
|
||||||
|
//console.log(root.depositInfo);
|
||||||
|
var sendAddress = txData.depositQR;
|
||||||
|
if (sendAddress && sendAddress.indexOf('bitcoin cash') >= 0)
|
||||||
|
sendAddress = sendAddress.replace('bitcoin cash', 'bitcoincash');
|
||||||
|
|
||||||
|
var shapeshiftData = {
|
||||||
|
fromWalletId: root.fromWalletId,
|
||||||
|
minAmount: root.marketData.minimum,
|
||||||
|
maxAmount: root.marketData.maxLimit,
|
||||||
|
orderId: root.depositInfo.orderId
|
||||||
|
};
|
||||||
|
|
||||||
|
if (incomingData.redir(sendAddress, shapeshiftData)) {
|
||||||
|
ongoingProcess.set('connectingShapeshift', false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*root.ShiftState = 'Cancel';
|
||||||
|
root.GetStatus();
|
||||||
|
root.txInterval=$interval(root.GetStatus, 8000);*/
|
||||||
|
});
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
function ShapeShift() {
|
||||||
|
if(root.ShiftState === 'Cancel') return shapeshiftApiService.CancelTx(root);
|
||||||
|
if(parseFloat(root.amount) > 0) return shapeshiftApiService.FixedAmountTx(root);
|
||||||
|
return shapeshiftApiService.NormalTx(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
root.GetStatus = function(){
|
||||||
|
var address = root.depositInfo.deposit
|
||||||
|
shapeshiftApiService.GetStatusOfDepositToAddress(address).then(function(data){
|
||||||
|
root.DepositStatus = data;
|
||||||
|
if(root.DepositStatus.status === 'complete'){
|
||||||
|
$interval.cancel(root.txInterval);
|
||||||
|
root.depositInfo = null;
|
||||||
|
root.ShiftState = 'Shift'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
var servicesItem = {
|
var servicesItem = {
|
||||||
name: 'shapeshift',
|
name: 'shapeshift',
|
||||||
|
|
@ -13,7 +149,6 @@ angular.module('copayApp.services').factory('shapeshiftService', function($http,
|
||||||
var register = function() {
|
var register = function() {
|
||||||
servicesService.register(servicesItem);
|
servicesService.register(servicesItem);
|
||||||
};
|
};
|
||||||
|
|
||||||
register();
|
register();
|
||||||
return root;
|
return root;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
#shapeshift {
|
#shapeshift {
|
||||||
|
.swap-image {
|
||||||
|
width: 70%;
|
||||||
|
max-width: 400px;
|
||||||
|
}
|
||||||
.empty-case {
|
.empty-case {
|
||||||
@include empty-case();
|
@include empty-case();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
BIN
www/img/shapeshift_swap.png
Normal file
BIN
www/img/shapeshift_swap.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 205 KiB |
|
|
@ -6,15 +6,11 @@
|
||||||
<ion-nav-back-button ng-click="vm.goBack()"></ion-nav-back-button>
|
<ion-nav-back-button ng-click="vm.goBack()"></ion-nav-back-button>
|
||||||
</ion-nav-bar>
|
</ion-nav-bar>
|
||||||
<ion-content scroll="false">
|
<ion-content scroll="false">
|
||||||
|
<div ng-if="vm.thirdParty && vm.thirdParty.id === 'shapeshift'" ng-include="'views/header-thirdparty.html'"></div>
|
||||||
<div style="order: 0; position: relative;">
|
<div style="order: 0; position: relative;">
|
||||||
|
|
||||||
<div class="card item send-amount">
|
<div class="card item send-amount">
|
||||||
<div class="send-amount-header-footer">
|
<div class="send-amount-header-footer">
|
||||||
<div ng-if="vm.shapeshiftOrderId">
|
<span ng-if="vm.minAmount">Min: {{vm.minAmount}}</span> <span ng-if="vm.maxAmount">Max: {{vm.maxAmount}}</span>
|
||||||
Min: {{vm.minAmount}} <br/>
|
|
||||||
Max: {{vm.maxAmount}} <br/>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="send-amount-tool">
|
<div class="send-amount-tool">
|
||||||
<div class="send-amount-tool-input amount">
|
<div class="send-amount-tool-input amount">
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,8 @@
|
||||||
<img class="shapeshift-logo" src="img/shapeshiftlogo.svg"/>
|
<img class="shapeshift-logo" src="img/shapeshiftlogo.svg"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="list card empty-case">
|
<div class="list card empty-case">
|
||||||
<div class="title" translate>
|
<div>
|
||||||
Your Bitcoin wallet is empty
|
<img class="swap-image" src="img/shapeshift_swap.png"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="subtitle">
|
<div class="subtitle">
|
||||||
<div ng-show="!walletsWithFunds.length">
|
<div ng-show="!walletsWithFunds.length">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue