196 lines
5.2 KiB
JavaScript
196 lines
5.2 KiB
JavaScript
'use strict';
|
||
|
||
angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $state, $stateParams, profileService, lodash, configService, gettextCatalog, platformInfo, walletService, txpModalService, externalLinkService, popupService) {
|
||
|
||
var HISTORY_SHOW_LIMIT = 10;
|
||
var currentTxHistoryPage = 0;
|
||
var listeners = [];
|
||
$scope.txps = [];
|
||
$scope.completeTxHistory = [];
|
||
$scope.openTxpModal = txpModalService.open;
|
||
|
||
$scope.openExternalLink = function(url, target) {
|
||
externalLinkService.open(url, target);
|
||
};
|
||
|
||
var setPendingTxps = function(txps) {
|
||
|
||
/* Uncomment to test multiple outputs */
|
||
|
||
// var txp = {
|
||
// message: 'test multi-output',
|
||
// fee: 1000,
|
||
// createdOn: new Date() / 1000,
|
||
// outputs: [],
|
||
// wallet: $scope.wallet
|
||
// };
|
||
//
|
||
// function addOutput(n) {
|
||
// txp.outputs.push({
|
||
// amount: 600,
|
||
// toAddress: '2N8bhEwbKtMvR2jqMRcTCQqzHP6zXGToXcK',
|
||
// message: 'output #' + (Number(n) + 1)
|
||
// });
|
||
// };
|
||
// lodash.times(15, addOutput);
|
||
// txps.push(txp);
|
||
|
||
if (!txps) {
|
||
$scope.txps = [];
|
||
return;
|
||
}
|
||
$scope.txps = lodash.sortBy(txps, 'createdOn').reverse();
|
||
};
|
||
|
||
var updateStatus = function(force) {
|
||
$scope.updatingStatus = true;
|
||
$scope.updateStatusError = false;
|
||
$scope.walletNotRegistered = false;
|
||
|
||
walletService.getStatus($scope.wallet, {
|
||
force: !!force,
|
||
}, function(err, status) {
|
||
$scope.updatingStatus = false;
|
||
if (err) {
|
||
if (err === 'WALLET_NOT_REGISTERED') {
|
||
$scope.walletNotRegistered = true;
|
||
} else {
|
||
$scope.updateStatusError = true;
|
||
}
|
||
$scope.status = null;
|
||
return;
|
||
}
|
||
|
||
setPendingTxps(status.pendingTxps);
|
||
|
||
$scope.status = status;
|
||
$timeout(function() {
|
||
$scope.$apply();
|
||
}, 1);
|
||
|
||
});
|
||
};
|
||
|
||
$scope.openSearchModal = function() {
|
||
$scope.color = $scope.wallet.color;
|
||
|
||
$ionicModal.fromTemplateUrl('views/modals/search.html', {
|
||
scope: $scope,
|
||
focusFirstInput: true
|
||
}).then(function(modal) {
|
||
$scope.searchModal = modal;
|
||
$scope.searchModal.show();
|
||
});
|
||
|
||
$scope.close = function() {
|
||
$scope.searchModal.hide();
|
||
}
|
||
};
|
||
|
||
$scope.openTxModal = function(btx) {
|
||
$scope.btx = lodash.cloneDeep(btx);
|
||
$scope.walletId = $scope.wallet.id;
|
||
$ionicModal.fromTemplateUrl('views/modals/tx-details.html', {
|
||
scope: $scope
|
||
}).then(function(modal) {
|
||
$scope.txDetailsModal = modal;
|
||
$scope.txDetailsModal.show();
|
||
});
|
||
};
|
||
|
||
$scope.recreate = function() {
|
||
walletService.recreate($scope.wallet, function(err) {
|
||
$scope.init();
|
||
if (err) return;
|
||
$timeout(function() {
|
||
walletService.startScan($scope.wallet, function() {
|
||
$scope.$apply();
|
||
});
|
||
});
|
||
});
|
||
};
|
||
|
||
var updateTxHistory = function(cb) {
|
||
if (!cb) cb = function() {};
|
||
if ($scope.updatingTxHistory) return;
|
||
|
||
$scope.updatingTxHistory = true;
|
||
$scope.updateTxHistoryError = false;
|
||
$scope.updatingTxHistoryProgress = 0;
|
||
|
||
var progressFn = function(txs, newTxs) {
|
||
$scope.updatingTxHistoryProgress = newTxs;
|
||
$scope.completeTxHistory = txs;
|
||
$scope.showHistory();
|
||
$timeout(function() {
|
||
$scope.$apply();
|
||
});
|
||
};
|
||
|
||
$timeout(function() {
|
||
walletService.getTxHistory($scope.wallet, {
|
||
progressFn: progressFn,
|
||
}, function(err, txHistory) {
|
||
$scope.updatingTxHistory = false;
|
||
if (err) {
|
||
$scope.txHistory = null;
|
||
$scope.updateTxHistoryError = true;
|
||
return;
|
||
}
|
||
$scope.completeTxHistory = txHistory;
|
||
$scope.showHistory();
|
||
$scope.$apply();
|
||
return cb();
|
||
});
|
||
});
|
||
};
|
||
|
||
$scope.showHistory = function() {
|
||
if ($scope.completeTxHistory) {
|
||
$scope.txHistory = $scope.completeTxHistory.slice(0, (currentTxHistoryPage + 1) * HISTORY_SHOW_LIMIT);
|
||
$scope.txHistoryShowMore = $scope.completeTxHistory.length > $scope.txHistory.length;
|
||
}
|
||
};
|
||
|
||
$scope.showMore = function() {
|
||
currentTxHistoryPage++;
|
||
$scope.showHistory();
|
||
$scope.$broadcast('scroll.infiniteScrollComplete');
|
||
};
|
||
|
||
$scope.updateAll = function(force, cb) {
|
||
updateStatus(force);
|
||
updateTxHistory(cb);
|
||
};
|
||
|
||
$scope.hideToggle = function() {
|
||
profileService.toggleHideBalanceFlag($scope.wallet.credentials.walletId, function(err) {
|
||
if (err) $log.error(err);
|
||
});
|
||
};
|
||
|
||
$scope.$on("$ionicView.beforeEnter", function(event, data) {
|
||
|
||
$scope.wallet = profileService.getWallet(data.stateParams.walletId);
|
||
$scope.requiresMultipleSignatures = $scope.wallet.credentials.m > 1;
|
||
|
||
$scope.updateAll();
|
||
|
||
listeners = [
|
||
$rootScope.$on('bwsEvent', function(e, walletId) {
|
||
if (walletId == $scope.wallet.id)
|
||
updateStatus();
|
||
}),
|
||
$rootScope.$on('Local/TxAction', function(e, walletId) {
|
||
if (walletId == $scope.wallet.id)
|
||
updateStatus();
|
||
}),
|
||
];
|
||
});
|
||
|
||
$scope.$on("$ionicView.leave", function(event, data) {
|
||
lodash.each(listeners, function(x) {
|
||
x();
|
||
});
|
||
});
|
||
});
|