diff --git a/src/js/controllers/bitpayCard.js b/src/js/controllers/bitpayCard.js index c17cdf4a1..2a1a3c55a 100644 --- a/src/js/controllers/bitpayCard.js +++ b/src/js/controllers/bitpayCard.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('bitpayCardController', function($scope, $timeout, $log, $state, lodash, bitpayCardService, moment, popupService, gettextCatalog, $ionicHistory, bitpayService, externalLinkService) { +angular.module('copayApp.controllers').controller('bitpayCardController', function($scope, $timeout, $log, $state, lodash, bitpayCardService, moment, popupService, gettextCatalog, $ionicHistory, bitpayService, externalLinkService, timeService) { var self = this; var runningBalance; @@ -163,6 +163,14 @@ angular.module('copayApp.controllers').controller('bitpayCardController', functi runningBalance -= parseFloat(tx.amount); }; + $scope.createdWithinPastDay = function(tx) { + var result = false; + if (tx.timestamp) { + result = timeService.withinPastDay(tx.timestamp); + } + return result; + }; + this.openExternalLink = function(url) { var optIn = true; var title = null; diff --git a/src/js/controllers/proposals.js b/src/js/controllers/proposals.js index 1e0e65030..0d997dfe9 100644 --- a/src/js/controllers/proposals.js +++ b/src/js/controllers/proposals.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('proposalsController', - function($timeout, $scope, profileService, $log, txpModalService, addressbookService) { + function($timeout, $scope, profileService, $log, txpModalService, addressbookService, timeService) { $scope.fetchingProposals = true; @@ -27,8 +27,6 @@ angular.module('copayApp.controllers').controller('proposalsController', $scope.openTxpModal = txpModalService.open; $scope.createdWithinPastDay = function(time) { - var now = new Date(); - var date = new Date(time * 1000); - return (now.getTime() - date.getTime()) < (1000 * 60 * 60 * 24); + return timeService.withinPastDay(time); }; }); diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index 7a3fd83f8..b2667b2b7 100644 --- a/src/js/controllers/tab-home.js +++ b/src/js/controllers/tab-home.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('tabHomeController', - function($rootScope, $timeout, $scope, $state, $stateParams, $ionicModal, $ionicScrollDelegate, $window, gettextCatalog, lodash, popupService, ongoingProcess, externalLinkService, latestReleaseService, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, appConfigService, startupService, addressbookService, feedbackService, bwcError, nextStepsService, buyAndSellService, homeIntegrationsService, bitpayCardService, pushNotificationsService) { + function($rootScope, $timeout, $scope, $state, $stateParams, $ionicModal, $ionicScrollDelegate, $window, gettextCatalog, lodash, popupService, ongoingProcess, externalLinkService, latestReleaseService, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, appConfigService, startupService, addressbookService, feedbackService, bwcError, nextStepsService, buyAndSellService, homeIntegrationsService, bitpayCardService, pushNotificationsService, timeService) { var wallet; var listeners = []; var notifications = []; @@ -131,9 +131,7 @@ angular.module('copayApp.controllers').controller('tabHomeController', }); $scope.createdWithinPastDay = function(time) { - var now = new Date(); - var date = new Date(time * 1000); - return (now.getTime() - date.getTime()) < (1000 * 60 * 60 * 24); + return timeService.withinPastDay(time); }; $scope.openExternalLink = function() { diff --git a/src/js/controllers/walletDetails.js b/src/js/controllers/walletDetails.js index 95d24354c..24cf0afbc 100644 --- a/src/js/controllers/walletDetails.js +++ b/src/js/controllers/walletDetails.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $state, $stateParams, $ionicHistory, profileService, lodash, configService, platformInfo, walletService, txpModalService, externalLinkService, popupService, addressbookService, storageService, $ionicScrollDelegate, $window, bwcError, gettextCatalog) { +angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $state, $stateParams, $ionicHistory, profileService, lodash, configService, platformInfo, walletService, txpModalService, externalLinkService, popupService, addressbookService, storageService, $ionicScrollDelegate, $window, bwcError, gettextCatalog, timeService) { var HISTORY_SHOW_LIMIT = 10; var currentTxHistoryPage = 0; @@ -190,7 +190,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun } var curTx = $scope.txHistory[index]; var prevTx = $scope.txHistory[index - 1]; - return !createdDuringSameMonth(curTx, prevTx); + return !$scope.createdDuringSameMonth(curTx, prevTx); }; $scope.isLastInGroup = function(index) { @@ -200,28 +200,18 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun return $scope.isFirstInGroup(index + 1); }; - function createdDuringSameMonth(tx1, tx2) { - if (!tx1 || !tx2) return false; - var date1 = new Date(tx1.time * 1000); - var date2 = new Date(tx2.time * 1000); - return getMonthYear(date1) === getMonthYear(date2); - } + $scope.createdDuringSameMonth = function(curTx, prevTx) { + return timeService.withinSameMonth(curTx.time * 1000, prevTx.time * 1000); + }; $scope.createdWithinPastDay = function(time) { - var now = new Date(); - var date = new Date(time * 1000); - return (now.getTime() - date.getTime()) < (1000 * 60 * 60 * 24); + return timeService.withinPastDay(time); }; $scope.isDateInCurrentMonth = function(date) { - var now = new Date(); - return getMonthYear(now) === getMonthYear(date); + return timeService.isDateInCurrentMonth(date); }; - function getMonthYear(date) { - return date.getMonth() + date.getFullYear(); - } - $scope.isUnconfirmed = function(tx) { return !tx.confirmations || tx.confirmations === 0; }; diff --git a/src/js/directives/svg.js b/src/js/directives/svg.js index 077b155a3..99ee79261 100644 --- a/src/js/directives/svg.js +++ b/src/js/directives/svg.js @@ -10,7 +10,7 @@ angular.module('copayApp.directives') link: function(scope, element, attrs) { var imgId = attrs.id; var imgClass = attrs.class; - var imgUrl = attrs.src; + var imgUrl = attrs.src || attrs.ngSrc; var svg; // Load svg content diff --git a/src/js/services/bitpayCardService.js b/src/js/services/bitpayCardService.js index 1de0ce461..114074a28 100644 --- a/src/js/services/bitpayCardService.js +++ b/src/js/services/bitpayCardService.js @@ -65,6 +65,7 @@ angular.module('copayApp.services').factory('bitpayCardService', function($log, n.lastFourDigits = x.lastFourDigits; n.token = x.token; n.currency = x.currency; + n.country = x.country; cards.push(n); }); diff --git a/src/js/services/timeService.js b/src/js/services/timeService.js new file mode 100644 index 000000000..23f0b348e --- /dev/null +++ b/src/js/services/timeService.js @@ -0,0 +1,30 @@ +'use strict'; + +angular.module('copayApp.services').factory('timeService', function() { + var root = {}; + + root.withinSameMonth = function(time1, time2) { + if (!time1 || !time2) return false; + var date1 = new Date(time1); + var date2 = new Date(time2); + return root.getMonthYear(date1) === root.getMonthYear(date2); + } + + root.withinPastDay = function(time) { + var now = new Date(); + var date = new Date(time); + return (now.getTime() - date.getTime()) < (1000 * 60 * 60 * 24); + }; + + root.isDateInCurrentMonth = function(date) { + var now = new Date(); + return root.getMonthYear(now) === root.getMonthYear(date); + }; + + root.getMonthYear = function(date) { + return date.getMonth() + date.getFullYear(); + } + + return root; + +}); diff --git a/src/sass/views/bitpayCard.scss b/src/sass/views/bitpayCard.scss index 7db9296dd..a602a2238 100644 --- a/src/sass/views/bitpayCard.scss +++ b/src/sass/views/bitpayCard.scss @@ -71,6 +71,100 @@ } .item { border-color: $item-border-color; + &.activity-header { + z-index: 3; + border: 0; + border-bottom: 1px solid #EFEFEF; + } + &.activity { + display: flex; + align-items: center; + background: #fff; + padding: 0 0 0 1rem; + margin: 0; + border: 0; + + &.send .svg #-Transaction-icons { + } + &.receive .svg #-Transaction-icons { + stroke: #09C286; + } + &.pending .svg #-Transaction-icons { + stroke: $v-bitcoin-orange; + } + } + } + .tx-icon { + margin-right: 25px; + .houston { + width: 40px; + height: 40px; + border-radius: 40px; + border: 1px solid; + &.no-border { + border: none; + .svg { + width: 40px; + height: 40px; + display: block; + margin: 0 auto; + position: relative; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + } + } + .svg { + width: 23px; + height: 23px; + display: block; + margin: 0 auto; + position: relative; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + } + } + } + .tx-content { + display: flex; + align-items: center; + flex-grow: 1; + padding: 1rem 0; + padding-right: 1rem; + border-bottom: 1px solid rgb(245, 245, 245); + overflow: hidden; + } + .tx-title { + flex-grow: 1; + color: $v-dark-gray; + overflow: hidden; + } + .tx-message { + margin-right: 1rem; + } + .tx-location { + margin-right: 1rem; + font-size: 12.5px; + color: $v-light-gray; + } + .tx-amount { + font-size: 16px; + white-space: nowrap; + &--received { + color: #09C286; + } + &--sent { + color: $v-dark-gray; + } + &--pending { + color: $v-bitcoin-orange; + } + } + .tx-time { + white-space: nowrap; + color: $v-light-gray; + font-size: 12.5px; } .info { .badge { diff --git a/www/views/bitpayCard.html b/www/views/bitpayCard.html index 5f0a43e71..25256c3c7 100644 --- a/www/views/bitpayCard.html +++ b/www/views/bitpayCard.html @@ -64,7 +64,7 @@ Learn More
-