diff --git a/src/js/controllers/preferencesAltCurrency.js b/src/js/controllers/preferencesAltCurrency.js index 5f9ab9910..20e1e16dd 100644 --- a/src/js/controllers/preferencesAltCurrency.js +++ b/src/js/controllers/preferencesAltCurrency.js @@ -1,29 +1,38 @@ 'use strict'; angular.module('copayApp.controllers').controller('preferencesAltCurrencyController', - function($scope, $log, $timeout, $ionicHistory, configService, rateService, lodash, profileService, walletService) { + function($scope, $log, $timeout, $ionicHistory, configService, rateService, lodash, profileService, walletService, storageService) { var next = 10; var completeAlternativeList; - var config = configService.getSync(); - $scope.currentCurrency = config.wallet.settings.alternativeIsoCode; - $scope.listComplete = false; + function init() { + var unusedCurrencyList = [{ + isoCode: 'LTL' + }, { + isoCode: 'BTC' + }]; + rateService.whenAvailable(function() { - var unusedCurrencyList = [{ - isoCode: 'LTL' - }, { - isoCode: 'BTC' - }]; + $scope.listComplete = false; - var idx = lodash.indexBy(unusedCurrencyList, 'isoCode'); + var idx = lodash.indexBy(unusedCurrencyList, 'isoCode'); + var idx2 = lodash.indexBy($scope.lastUsedAltCurrencyList, 'isoCode'); - rateService.whenAvailable(function() { - completeAlternativeList = lodash.reject(rateService.listAlternatives(), function(c) { - return idx[c.isoCode]; + completeAlternativeList = lodash.reject(rateService.listAlternatives(), function(c) { + return idx[c.isoCode] || idx2[c.isoCode]; + }); + + completeAlternativeList = completeAlternativeList.sort(function(a, b) { + return a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1; + }); + + $scope.altCurrencyList = completeAlternativeList.slice(0, 10); + $timeout(function() { + $scope.$apply(); + }); }); - $scope.altCurrencyList = completeAlternativeList.slice(0, next); - }); + } $scope.loadMore = function() { $timeout(function() { @@ -34,6 +43,17 @@ angular.module('copayApp.controllers').controller('preferencesAltCurrencyControl }, 100); }; + $scope.findCurrency = function(search) { + if (!search) init(); + $scope.altCurrencyList = lodash.filter(completeAlternativeList, function(item) { + var val = item.name; + return lodash.includes(val.toLowerCase(), search.toLowerCase()); + }); + $timeout(function() { + $scope.$apply(); + }); + }; + $scope.save = function(newAltCurrency) { var opts = { wallet: { @@ -48,9 +68,26 @@ angular.module('copayApp.controllers').controller('preferencesAltCurrencyControl if (err) $log.warn(err); $ionicHistory.goBack(); + saveLastUsed(newAltCurrency); walletService.updateRemotePreferences(profileService.getWallets(), {}, function() { $log.debug('Remote preferences saved'); }); }); }; + + function saveLastUsed(newAltCurrency) { + $scope.lastUsedAltCurrencyList.unshift(newAltCurrency); + $scope.lastUsedAltCurrencyList = lodash.uniq($scope.lastUsedAltCurrencyList, 'isoCode'); + $scope.lastUsedAltCurrencyList = $scope.lastUsedAltCurrencyList.slice(0, 3); + storageService.setLastCurrencyUsed(JSON.stringify($scope.lastUsedAltCurrencyList), function() {}); + }; + + $scope.$on("$ionicView.beforeEnter", function(event, data) { + var config = configService.getSync(); + $scope.currentCurrency = config.wallet.settings.alternativeIsoCode; + storageService.getLastCurrencyUsed(function(err, lastUsedAltCurrency) { + $scope.lastUsedAltCurrencyList = lastUsedAltCurrency ? JSON.parse(lastUsedAltCurrency) : []; + init(); + }); + }); }); diff --git a/src/js/services/storageService.js b/src/js/services/storageService.js index 7a82a1b90..f179dd1ab 100644 --- a/src/js/services/storageService.js +++ b/src/js/services/storageService.js @@ -77,25 +77,25 @@ angular.module('copayApp.services') //////////////////////////////////////////////////////////////////////////// // // UPGRADING STORAGE - // + // // 1. Write a function to upgrade the desired storage key(s). The function should have the protocol: - // + // // _upgrade_x(key, network, cb), where: - // + // // `x` is the name of the storage key - // `key` is the name of the storage key being upgraded + // `key` is the name of the storage key being upgraded // `network` is one of 'livenet', 'testnet' // // 2. Add the storage key to `_upgraders` object using the name of the key as the `_upgrader` object key // with the value being the name of the upgrade function (e.g., _upgrade_x). In order to avoid conflicts // when a storage key is involved in multiple upgraders as well as predicte the order in which upgrades - // occur the `_upgrader` object key should be prefixed with '##_' (e.g., '01_') to create a unique and + // occur the `_upgrader` object key should be prefixed with '##_' (e.g., '01_') to create a unique and // sortable name. This format is interpreted by the _upgrade() function. - // + // // Upgraders are executed in numerical order per the '##_' object key prefix. - // + // var _upgraders = { - '00_bitpayDebitCards' : _upgrade_bitpayDebitCards // 2016-11: Upgrade bitpayDebitCards-x to bitpayAccounts-x + '00_bitpayDebitCards': _upgrade_bitpayDebitCards // 2016-11: Upgrade bitpayDebitCards-x to bitpayAccounts-x }; function _upgrade_bitpayDebitCards(key, network, cb) { @@ -375,6 +375,14 @@ angular.module('copayApp.services') storage.remove('nextStep-' + service, cb); }; + root.setLastCurrencyUsed = function(lastCurrencyUsed, cb) { + storage.set('lastCurrencyUsed', lastCurrencyUsed, cb) + }; + + root.getLastCurrencyUsed = function(cb) { + storage.get('lastCurrencyUsed', cb) + }; + root.checkQuota = function() { var block = ''; // 50MB @@ -487,12 +495,14 @@ angular.module('copayApp.services') bitpayAccounts = bitpayAccounts || {}; Object.keys(bitpayAccounts).forEach(function(userId) { var data = bitpayAccounts[userId]['bitpayDebitCards-' + network]; - var newCards = lodash.reject(data.cards, {'eid': card.eid}); + var newCards = lodash.reject(data.cards, { + 'eid': card.eid + }); data.cards = newCards; root.setBitpayDebitCards(network, data, function(err) { if (err) cb(err); // If there are no more cards in storage then re-enable the next step entry. - root.getBitpayDebitCards(network, function(err, cards){ + root.getBitpayDebitCards(network, function(err, cards) { if (err) cb(err); if (cards.length == 0) { root.removeNextStep('BitpayCard', cb); diff --git a/www/views/preferencesAltCurrency.html b/www/views/preferencesAltCurrency.html index 0954fa8b5..dc9be4286 100644 --- a/www/views/preferencesAltCurrency.html +++ b/www/views/preferencesAltCurrency.html @@ -7,13 +7,27 @@ - {{altCurrency.name}} - +
+ +
+
+ {{lastUsedAltCurrency.name}} + +
+
+ {{altCurrency.name}} + +
- + ng-if="!listComplete" + on-infinite="loadMore()" + distance="50%"> +