mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-25 20:02:58 +01:00
Order shapeshift transactions by time within the transactions list
This commit is contained in:
parent
2d7c9b3dac
commit
941a9a0fd9
@ -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()
|
||||
)
|
||||
)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user