From e44a30526971778a390b1a7d20212a4fb7a24ab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Fri, 2 Dec 2016 09:48:56 -0300 Subject: [PATCH] glidera new send and buy flow --- src/js/controllers/amount.js | 23 +++++- src/js/controllers/buyGlidera.js | 124 +++++++++++++++--------------- src/js/controllers/confirm.js | 37 +++++++++ src/js/routes.js | 29 ++++++- src/js/services/glideraService.js | 2 +- src/sass/views/amount.scss | 8 +- www/views/amount.html | 18 ++++- www/views/glidera.html | 18 ++++- 8 files changed, 184 insertions(+), 75 deletions(-) diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index f4f8d9d72..3f9cbc6c2 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('amountController', function($scope, $filter, $timeout, $ionicScrollDelegate, $ionicHistory, $ionicPopover, gettextCatalog, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, txFormatService, ongoingProcess, bitpayCardService, popupService, bwcError, payproService, profileService, bitcore, amazonService) { +angular.module('copayApp.controllers').controller('amountController', function($scope, $filter, $timeout, $ionicScrollDelegate, $ionicHistory, $ionicPopover, gettextCatalog, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, txFormatService, ongoingProcess, bitpayCardService, popupService, bwcError, payproService, profileService, bitcore, amazonService, glideraService) { var unitToSatoshi; var satToUnit; var unitDecimals; @@ -15,22 +15,31 @@ angular.module('copayApp.controllers').controller('amountController', function($ $scope.$on("$ionicView.beforeEnter", function(event, data) { $scope.isGiftCard = data.stateParams.isGiftCard; + $scope.isGlidera = data.stateParams.isGlidera; + $scope.glideraAccessToken = data.stateParams.glideraAccessToken; + $scope.cardId = data.stateParams.cardId; $scope.showMenu = $ionicHistory.backView().stateName == 'tabs.send'; $scope.isWallet = data.stateParams.isWallet; - $scope.cardId = data.stateParams.cardId; $scope.toAddress = data.stateParams.toAddress; $scope.toName = data.stateParams.toName; $scope.toEmail = data.stateParams.toEmail; - $scope.showAlternativeAmount = !!$scope.cardId || !!$scope.isGiftCard; + $scope.showAlternativeAmount = !!$scope.cardId || !!$scope.isGiftCard || !!$scope.isGlidera; $scope.toColor = data.stateParams.toColor; $scope.customAmount = data.stateParams.customAmount; - if (!$scope.cardId && !$scope.isGiftCard && !data.stateParams.toAddress) { + if (!$scope.cardId && !$scope.isGiftCard && !$scope.isGlidera && !data.stateParams.toAddress) { $log.error('Bad params at amount') throw ('bad params'); } + glideraService.getLimits($scope.glideraAccessToken, function(err, limits) { + $scope.limits = limits; + $timeout(function() { + $scope.$apply(); + }); + }); + var reNr = /^[1234567890\.]$/; var reOp = /^[\*\+\-\/]$/; @@ -325,6 +334,12 @@ angular.module('copayApp.controllers').controller('amountController', function($ }, true); }); }); + } else if ($scope.isGlidera) { + $state.transitionTo('tabs.buyandsell.glidera.confirm', { + toAmount: (amount * unitToSatoshi).toFixed(0), + glideraBuy: true, + glideraAccessToken: $scope.glideraAccessToken + }); } else { var amount = $scope.showAlternativeAmount ? fromFiat(_amount) : _amount; if ($scope.customAmount) { diff --git a/src/js/controllers/buyGlidera.js b/src/js/controllers/buyGlidera.js index e15632185..0212622a4 100644 --- a/src/js/controllers/buyGlidera.js +++ b/src/js/controllers/buyGlidera.js @@ -9,65 +9,65 @@ angular.module('copayApp.controllers').controller('buyGlideraController', this.success = null; $scope.network = glideraService.getEnvironment(); - $scope.$on('Wallet/Changed', function(event, w) { - if (lodash.isEmpty(w)) { - $log.debug('No wallet provided'); - return; - } - wallet = w; - $log.debug('Wallet changed: ' + w.name); - }); - - $scope.update = function(opts) { - if (!$scope.token || !$scope.permissions) return; - $log.debug('Updating Glidera Account...'); - var accessToken = $scope.token; - var permissions = $scope.permissions; - - opts = opts || {}; - - glideraService.getStatus(accessToken, function(err, data) { - $scope.status = data; - }); - - glideraService.getLimits(accessToken, function(err, limits) { - $scope.limits = limits; - }); - - if (permissions.transaction_history) { - glideraService.getTransactions(accessToken, function(err, data) { - $scope.txs = data; - }); - } - - if (permissions.view_email_address && opts.fullUpdate) { - glideraService.getEmail(accessToken, function(err, data) { - $scope.email = data.email; - }); - } - if (permissions.personal_info && opts.fullUpdate) { - glideraService.getPersonalInfo(accessToken, function(err, data) { - $scope.personalInfo = data; - }); - } - }; - - this.getBuyPrice = function(token, price) { - var self = this; - if (!price || (price && !price.qty && !price.fiat)) { - this.buyPrice = null; - return; - } - this.gettingBuyPrice = true; - glideraService.buyPrice(token, price, function(err, buyPrice) { - self.gettingBuyPrice = false; - if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); - return; - } - self.buyPrice = buyPrice; - }); - }; + // $scope.$on('Wallet/Changed', function(event, w) { + // if (lodash.isEmpty(w)) { + // $log.debug('No wallet provided'); + // return; + // } + // wallet = w; + // $log.debug('Wallet changed: ' + w.name); + // }); + // + // $scope.update = function(opts) { + // if (!$scope.token || !$scope.permissions) return; + // $log.debug('Updating Glidera Account...'); + // var accessToken = $scope.token; + // var permissions = $scope.permissions; + // + // opts = opts || {}; + // + // glideraService.getStatus(accessToken, function(err, data) { + // $scope.status = data; + // }); + // + // glideraService.getLimits(accessToken, function(err, limits) { + // $scope.limits = limits; + // }); + // + // if (permissions.transaction_history) { + // glideraService.getTransactions(accessToken, function(err, data) { + // $scope.txs = data; + // }); + // } + // + // if (permissions.view_email_address && opts.fullUpdate) { + // glideraService.getEmail(accessToken, function(err, data) { + // $scope.email = data.email; + // }); + // } + // if (permissions.personal_info && opts.fullUpdate) { + // glideraService.getPersonalInfo(accessToken, function(err, data) { + // $scope.personalInfo = data; + // }); + // } + // }; + // + // this.getBuyPrice = function(token, price) { + // var self = this; + // if (!price || (price && !price.qty && !price.fiat)) { + // this.buyPrice = null; + // return; + // } + // this.gettingBuyPrice = true; + // glideraService.buyPrice(token, price, function(err, buyPrice) { + // self.gettingBuyPrice = false; + // if (err) { + // popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); + // return; + // } + // self.buyPrice = buyPrice; + // }); + // }; this.get2faCode = function(token) { var self = this; @@ -116,7 +116,7 @@ angular.module('copayApp.controllers').controller('buyGlideraController', }, 100); }; - $scope.$on("$ionicView.enter", function(event, data){ + $scope.$on("$ionicView.enter", function(event, data) { $scope.token = null; $scope.permissions = null; $scope.email = null; @@ -134,7 +134,9 @@ angular.module('copayApp.controllers').controller('buyGlideraController', } $scope.token = glidera.token; $scope.permissions = glidera.permissions; - $scope.update({fullUpdate: true}); + $scope.update({ + fullUpdate: true + }); }); $scope.wallets = profileService.getWallets({ diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 5c4d55499..541bea870 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -21,6 +21,8 @@ angular.module('copayApp.controllers').controller('confirmController', function( giftCardInvoiceTime = data.stateParams.giftCardInvoiceTime; giftCardUUID = data.stateParams.giftCardUUID; + // Glidera parameters + toAmount = data.stateParams.toAmount; cachedSendMax = {}; $scope.useSendMax = data.stateParams.useSendMax == 'true' ? true : false; @@ -131,6 +133,23 @@ angular.module('copayApp.controllers').controller('confirmController', function( $scope.displayAmount = $scope.displayUnit = $scope.fee = $scope.alternativeAmountStr = $scope.insufficientFunds = $scope.noMatchingWallet = null; }; + $scope.getBuyPrice = function(token, price) { + + if (!price || (price && !price.qty && !price.fiat)) { + $scope.buyPrice = null; + return; + } + $scope.gettingBuyPrice = true; + glideraService.buyPrice(token, price, function(err, buyPrice) { + $scope.gettingBuyPrice = false; + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not get exchange information. Please, try again')); + return; + } + $scope.buyPrice = buyPrice; + }); + }; + $scope.getSendMaxInfo = function() { resetValues(); @@ -537,6 +556,24 @@ angular.module('copayApp.controllers').controller('confirmController', function( } }; + $scope.get2faCode = function(token, cb) { + ongoingProcess.set('Sending 2FA code...', true); + $timeout(function() { + glideraService.get2faCode(token, function(err, sent) { + ongoingProcess.set('Sending 2FA code...', false); + if (err) { + popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send confirmation code to your phone')); + return; + } + var title = gettextCatalog.getString("Please, enter the code below"); + var message = gettextCatalog.getString("A SMS containing a confirmation code was sent to your phone."); + popupService.showPrompt(title, message, null, function(code) { + return cb(code); + }); + }); + }, 100); + }; + function publishAndSign(wallet, txp, onSendStatusChange) { walletService.publishAndSign(wallet, txp, function(err, txp) { if (err) return setSendError(err); diff --git a/src/js/routes.js b/src/js/routes.js index 4ef27d0a8..eb40cdec9 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -899,13 +899,40 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } }) .state('tabs.buyandsell.glidera.sell', { - url: '/sell', + url: '/sell/:glideraSell/:glideraAccessToken', views: { 'tab-home@tabs': { controller: 'sellGlideraController', controllerAs: 'sell', templateUrl: 'views/sellGlidera.html' } + }, + params: { + isGlidera: true + } + }) + .state('tabs.buyandsell.glidera.amount', { + url: '/amount/:glideraBuy/:glideraAccessToken', + views: { + 'tab-home@tabs': { + controller: 'amountController', + templateUrl: 'views/amount.html' + } + }, + params: { + isGlidera: true + } + }) + .state('tabs.buyandsell.glidera.confirm', { + url: '/confirm/:toAmount/:glideraBuy/:glideraAccessToken', + views: { + 'tab-home@tabs': { + controller: 'confirmController', + templateUrl: 'views/confirm.html' + } + }, + params: { + isGlidera: true } }) .state('tabs.preferences.glidera', { diff --git a/src/js/services/glideraService.js b/src/js/services/glideraService.js index cf9083014..2bf89ffb6 100644 --- a/src/js/services/glideraService.js +++ b/src/js/services/glideraService.js @@ -16,7 +16,7 @@ angular.module('copayApp.services').factory('glideraService', function($http, $l * Development: 'testnet' * Production: 'livenet' */ - credentials.NETWORK = 'livenet'; + credentials.NETWORK = 'testnet'; if (credentials.NETWORK == 'testnet') { credentials.HOST = glidera.sandbox.host; diff --git a/src/sass/views/amount.scss b/src/sass/views/amount.scss index 7c4c1681e..1c40612cc 100644 --- a/src/sass/views/amount.scss +++ b/src/sass/views/amount.scss @@ -37,7 +37,7 @@ position: absolute; top: 10px; } - .amount-pane-send { + .amount-pane-recipient { position: absolute; top: 95px; bottom: 0; @@ -68,7 +68,7 @@ } } } - .amount-pane-receive { + .amount-pane-no-recipient { position: absolute; top: 0; bottom: 0; @@ -84,6 +84,10 @@ padding-top: 10px; color: $dark-gray; font-weight: bold; + .limits { + margin-top: 20px; + color: $light-gray; + } } } .amount { diff --git a/www/views/amount.html b/www/views/amount.html index 24c3b3f1e..ef560983a 100644 --- a/www/views/amount.html +++ b/www/views/amount.html @@ -14,14 +14,14 @@ -
+
Recipient
- +
@@ -36,12 +36,21 @@
-
+
Amount - (Purchase Amount is limited to USD 500 per day) + (Purchase Amount is limited to USD 500 per day) +
+ Daily buy limit: + {{limits.dailyBuy|currency:'':2}} {{limits.currency}} + (remaining {{limits.dailyBuyRemaining|currency:'':2}} {{limits.currency}}) +
+ Monthly buy limit: + {{limits.monthlyBuy|currency:'':2}} {{limits.currency}} + (remaining {{limits.monthlyBuyRemaining|currency:'':2}} {{limits.currency}}) +
@@ -62,6 +71,7 @@
+