From 941a9a0fd95cb0d68d940e42a431f520d717921c Mon Sep 17 00:00:00 2001 From: Alexander Tseung Date: Mon, 14 Jan 2019 14:34:37 -0800 Subject: Order shapeshift transactions by time within the transactions list --- ui/app/selectors/transactions.js | 44 +++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 12 deletions(-) (limited to 'ui') diff --git a/ui/app/selectors/transactions.js b/ui/app/selectors/transactions.js index 301e8d11f..fc1271c59 100644 --- a/ui/app/selectors/transactions.js +++ b/ui/app/selectors/transactions.js @@ -83,7 +83,7 @@ const insertOrderedNonce = (nonces, nonceToInsert) => { for (let i = 0; i < nonces.length; i++) { const nonce = nonces[i] - if (Number(hexToDecimal(nonce)) < Number(hexToDecimal(nonceToInsert))) { + if (Number(hexToDecimal(nonce)) > Number(hexToDecimal(nonceToInsert))) { insertIndex = i break } @@ -138,17 +138,17 @@ const insertTransactionByTime = (transactions, transaction) => { * @param {transactionGroup[]} transactionGroups - Array of transactionGroup objects. * @param {transactionGroup} transactionGroup - transactionGroup object to be inserted into the * array of transactionGroups. - * @returns {transactionGroup[]} */ const insertTransactionGroupByTime = (transactionGroups, transactionGroup) => { - const { primaryTransaction: { time } = {} } = transactionGroup + const { primaryTransaction: { time: groupToInsertTime } = {} } = transactionGroup let insertIndex = transactionGroups.length for (let i = 0; i < transactionGroups.length; i++) { const txGroup = transactionGroups[i] + const { primaryTransaction: { time } = {} } = txGroup - if (txGroup.time > time) { + if (time > groupToInsertTime) { insertIndex = i break } @@ -157,6 +157,22 @@ const insertTransactionGroupByTime = (transactionGroups, transactionGroup) => { transactionGroups.splice(insertIndex, 0, transactionGroup) } +/** + * @name mergeShapeshiftTransactionGroups + * @private + * @description Inserts (mutates) shapeshift transactionGroups into an array of nonce-ordered + * transactionGroups by time. Shapeshift transactionGroups need to be sorted by time within the list + * of transactions as they do not have nonces. + * @param {transactionGroup[]} orderedTransactionGroups - Array of transactionGroups ordered by + * nonce. + * @param {transactionGroup[]} shapeshiftTransactionGroups - Array of shapeshift transactionGroups + */ +const mergeShapeshiftTransactionGroups = (orderedTransactionGroups, shapeshiftTransactionGroups) => { + shapeshiftTransactionGroups.forEach(shapeshiftGroup => { + insertTransactionGroupByTime(orderedTransactionGroups, shapeshiftGroup) + }) +} + /** * @name nonceSortedTransactionsSelector * @description Returns an array of transactionGroups sorted by nonce in ascending order. @@ -166,11 +182,12 @@ export const nonceSortedTransactionsSelector = createSelector( transactionsSelector, (transactions = []) => { const unapprovedTransactionGroups = [] + const shapeshiftTransactionGroups = [] const orderedNonces = [] const nonceToTransactionsMap = {} transactions.forEach(transaction => { - const { txParams: { nonce } = {}, status, type, time: txTime } = transaction + const { txParams: { nonce } = {}, status, type, time: txTime, key } = transaction if (typeof nonce === 'undefined') { const transactionGroup = { @@ -181,7 +198,11 @@ export const nonceSortedTransactionsSelector = createSelector( hasCancelled: false, } - insertTransactionGroupByTime(unapprovedTransactionGroups, transactionGroup) + if (key === 'shapeshift') { + shapeshiftTransactionGroups.push(transactionGroup) + } else { + insertTransactionGroupByTime(unapprovedTransactionGroups, transactionGroup) + } } else if (nonce in nonceToTransactionsMap) { const nonceProps = nonceToTransactionsMap[nonce] insertTransactionByTime(nonceProps.transactions, transaction) @@ -224,6 +245,7 @@ export const nonceSortedTransactionsSelector = createSelector( }) const orderedTransactionGroups = orderedNonces.map(nonce => nonceToTransactionsMap[nonce]) + mergeShapeshiftTransactionGroups(orderedTransactionGroups, shapeshiftTransactionGroups) return unapprovedTransactionGroups.concat(orderedTransactionGroups) } ) @@ -237,9 +259,7 @@ export const nonceSortedTransactionsSelector = createSelector( export const nonceSortedPendingTransactionsSelector = createSelector( nonceSortedTransactionsSelector, (transactions = []) => ( - transactions - .filter(({ primaryTransaction }) => primaryTransaction.status in pendingStatusHash) - .reverse() + transactions.filter(({ primaryTransaction }) => primaryTransaction.status in pendingStatusHash) ) ) @@ -252,9 +272,9 @@ export const nonceSortedPendingTransactionsSelector = createSelector( export const nonceSortedCompletedTransactionsSelector = createSelector( nonceSortedTransactionsSelector, (transactions = []) => ( - transactions.filter(({ primaryTransaction }) => { - return !(primaryTransaction.status in pendingStatusHash) - }) + transactions + .filter(({ primaryTransaction }) => !(primaryTransaction.status in pendingStatusHash)) + .reverse() ) ) -- cgit v1.2.3