diff --git a/src/pages/wallet-details/wallet-details.html b/src/pages/wallet-details/wallet-details.html index ecd7fa1c4..f0f11ee32 100644 --- a/src/pages/wallet-details/wallet-details.html +++ b/src/pages/wallet-details/wallet-details.html @@ -11,7 +11,7 @@ - + + + + \ No newline at end of file diff --git a/src/pages/wallet-details/wallet-details.ts b/src/pages/wallet-details/wallet-details.ts index aefa52467..c070eb8d7 100644 --- a/src/pages/wallet-details/wallet-details.ts +++ b/src/pages/wallet-details/wallet-details.ts @@ -9,7 +9,11 @@ import { TxDetailsPage } from '../../pages/tx-details/tx-details'; templateUrl: 'wallet-details.html' }) export class WalletDetailsPage { + private HISTORY_SHOW_LIMIT: number; + private HISTORY_PAGE_COUNTER: number; + public wallet: any; + public history: any; constructor( private navCtrl: NavController, @@ -18,6 +22,9 @@ export class WalletDetailsPage { private walletProvider: WalletProvider, ) { this.wallet = this.profileProvider.getWallet(this.navParams.data.walletId); + this.history = []; + this.HISTORY_SHOW_LIMIT = 10; + this.HISTORY_PAGE_COUNTER = 2; } ionViewDidEnter() { @@ -29,16 +36,34 @@ export class WalletDetailsPage { } getTxHistory(force?: boolean) { - if (force) this.wallet.completeHistory = []; - - this.walletProvider.getTxHistory(this.wallet, {force: force}).then((txh) => { + if (force) { + this.history = []; + this.HISTORY_PAGE_COUNTER = 2; + } + + this.walletProvider.getTxHistory(this.wallet, { force: force }).then((txh) => { this.wallet.completeHistory = txh; + this.wallet.completeHistory.isValid = true; + this.history = this.wallet.completeHistory.slice(0, this.HISTORY_SHOW_LIMIT); }).catch((err) => { console.log(err); }); } - + + loadHistory(loading) { + if (this.history.length === this.wallet.completeHistory.length) { + loading.complete(); + return; + } + let self = this; + setTimeout(function() { + self.history = self.wallet.completeHistory.slice(0, self.HISTORY_PAGE_COUNTER * self.HISTORY_SHOW_LIMIT); + self.HISTORY_PAGE_COUNTER++; + loading.complete(); + }, 300); + } + goToTxDetails(tx: any) { - this.navCtrl.push(TxDetailsPage, {walletId: this.wallet.credentials.walletId, txid: tx.txid}); + this.navCtrl.push(TxDetailsPage, { walletId: this.wallet.credentials.walletId, txid: tx.txid }); } } \ No newline at end of file diff --git a/src/providers/wallet/wallet.ts b/src/providers/wallet/wallet.ts index 57494b7b0..59dffecb8 100644 --- a/src/providers/wallet/wallet.ts +++ b/src/providers/wallet/wallet.ts @@ -368,18 +368,22 @@ export class WalletProvider { public getTxHistory(wallet: any, opts: any) { return new Promise((resolve, reject) => { - opts = opts ? opts : {}; + opts = opts || {}; // TODO isHistoryCached should get the properties from status or profile service this.logger.debug('Updating Transaction History'); this.getTxsFromLocal(wallet.credentials.walletId).then((txsFromLocal) => { - if (!lodash.isEmpty(txsFromLocal) && !opts.force) return resolve(txsFromLocal); + if (!lodash.isEmpty(txsFromLocal) && !opts.force) { + return resolve(txsFromLocal.slice(0, opts.limit)); + } - this.getTxsFromServer(wallet, 0, null, 10).then((txsFromServer) => { + this.getTxsFromServer(wallet, opts).then((txsFromServer) => { - this.updateTxHistory(wallet, txsFromLocal, txsFromServer); + this.updateTxHistory(wallet, txsFromLocal, txsFromServer).then((newHistory: any) => { + return resolve(newHistory); + }); }).catch((err) => { this.logger.debug('Error getting txs from server'); return reject(err); @@ -392,18 +396,21 @@ export class WalletProvider { } private updateTxHistory(wallet: any, txsFromLocal: any, txsFromServer?: any) { - let array = txsFromLocal.concat(txsFromServer.res); - let newHistory = lodash.uniqBy(array, (x: any) => { - return x.txid; - }); - wallet.completeHistory = newHistory; - wallet.completeHistory.isValid = true; - let historyToSave = lodash.compact(lodash.flatten(newHistory)); + return new Promise((resolve, reject) => { + var txsFromServer_ = txsFromServer && txsFromServer.res || []; + let array = txsFromLocal.concat(txsFromServer_); + let newHistory = lodash.uniqBy(array, (x: any) => { + return x.txid; + }); + resolve(newHistory); - this.persistenceProvider.setTxHistory(wallet.credentials.walletId, JSON.stringify(historyToSave)).then(() => { - this.logger.debug('Tx History saved for: ' + wallet.credentials.walletId); - }).catch((err) => { - this.logger.warn('Error saving history for: ' + wallet.credentials.walletId); + let historyToSave = lodash.compact(lodash.flatten(newHistory)); + + this.persistenceProvider.setTxHistory(wallet.credentials.walletId, JSON.stringify(historyToSave)).then(() => { + this.logger.debug('Tx History saved for: ' + wallet.credentials.walletId); + }).catch((err) => { + this.logger.warn('Error saving history for: ' + wallet.credentials.walletId); + }); }); } @@ -429,13 +436,14 @@ export class WalletProvider { }); } - private getTxsFromServer(wallet: any, skip: number, endingTxid: string, limit: number): Promise { + private getTxsFromServer(wallet: any, opts: any): Promise { return new Promise((resolve, reject) => { + opts = opts || {}; let res = []; wallet.getTxHistory({ - skip: skip, - limit: limit + skip: opts.skip, + limit: opts.limit }, (err: Error, txsFromServer: Array) => { if (err) return reject(err); @@ -443,12 +451,12 @@ export class WalletProvider { return resolve(); res = lodash.takeWhile(txsFromServer, (tx) => { - return tx.txid != endingTxid; + return tx.txid != opts.endingTxid; }); let result = { res: res, - shouldContinue: res.length >= limit + shouldContinue: res.length >= opts.limit }; return resolve(result);