{
  "version": 3,
  "sources": ["../../src/utils/transactions/getTransactionsHistory/helpers/mapServerTransactionsToListItems.ts"],
  "sourcesContent": ["import { ITransactionListItem } from 'lib/sdkDappUi';\nimport { saveToCache } from 'store/actions/cache/cacheActions';\nimport { addressSelector } from 'store/selectors/accountSelectors';\nimport {\n  egldLabelSelector,\n  explorerAddressSelector\n} from 'store/selectors/networkSelectors';\nimport { getState } from 'store/store';\nimport { StoreType } from 'store/store.types';\nimport { TransactionServerStatusesEnum } from 'types/enums.types';\nimport { ServerTransactionType } from 'types/serverTransactions.types';\nimport { SignedTransactionType } from 'types/transactions.types';\nimport { getCachedTransactionListItem } from './getCachedTransactionListItem';\nimport { mapTransactionToListItem } from './mapTransactionToListItem';\n\ninterface IMapServerTransactionsToListItemsParams {\n  transactions: SignedTransactionType[];\n  store?: StoreType;\n}\n\nconst sortTransactionsByTimestamp = (transactions: ITransactionListItem[]) =>\n  transactions.sort((a, b) => b.timestamp - a.timestamp);\n\nexport const mapServerTransactionsToListItems = async ({\n  transactions,\n  ...props\n}: IMapServerTransactionsToListItemsParams): Promise<\n  ITransactionListItem[]\n> => {\n  const store = props.store ?? getState();\n  const cachedTransactions: ITransactionListItem[] = [];\n  const hashesToFetch: string[] = [];\n\n  transactions.forEach((transaction) => {\n    const cachedTransaction = getCachedTransactionListItem(\n      transaction.hash,\n      store\n    );\n    if (cachedTransaction) {\n      cachedTransactions.push(cachedTransaction);\n    } else {\n      hashesToFetch.push(transaction.hash);\n    }\n  });\n\n  if (hashesToFetch.length === 0) {\n    return sortTransactionsByTimestamp(cachedTransactions);\n  }\n\n  const newTransactions: ServerTransactionType[] = transactions.map((tx) => ({\n    // casting is correct since store transaction was replaced with fetched server transaction\n    ...(tx as unknown as ServerTransactionType),\n    txHash: tx.hash\n  }));\n\n  const retrievedHashes = newTransactions.map((tx) => tx.txHash);\n  const missingHashes = hashesToFetch.filter(\n    (hash) => !retrievedHashes.includes(hash)\n  );\n\n  if (missingHashes.length > 0) {\n    const filteredTransactions = transactions.filter((transaction) =>\n      missingHashes.includes(transaction.hash)\n    );\n\n    // In case the transactions were not found, we create a dummy transaction with the pending status\n    // until all pending transactions are returned from the API\n    const pendingDummyTransactions = filteredTransactions.map(\n      (transaction) =>\n        ({\n          ...transaction,\n          txHash: transaction.hash,\n          price: 0,\n          status: TransactionServerStatusesEnum.pending,\n          gasUsed: 0,\n          miniBlockHash: '',\n          receiverShard: 0,\n          round: 0,\n          senderShard: 0,\n          timestamp: Date.now()\n        }) as ServerTransactionType\n    );\n\n    newTransactions.push(...pendingDummyTransactions);\n  }\n\n  const uniqueTransactionsMap = new Map<string, ITransactionListItem>();\n\n  cachedTransactions.forEach((item) => {\n    const key = item.hash;\n    if (!key) {\n      return;\n    }\n    uniqueTransactionsMap.set(String(key), item);\n  });\n\n  newTransactions.forEach((transaction) => {\n    const transactionListItem = mapTransactionToListItem({\n      transaction,\n      address: addressSelector(store),\n      explorerAddress: explorerAddressSelector(store),\n      egldLabel: egldLabelSelector(store)\n    });\n\n    if (transactionListItem.status !== TransactionServerStatusesEnum.pending) {\n      saveToCache({\n        key: `transaction-${transaction.txHash}`,\n        value: transactionListItem\n      });\n    }\n\n    uniqueTransactionsMap.set(transaction.txHash, transactionListItem);\n  });\n\n  return sortTransactionsByTimestamp(\n    Array.from(uniqueTransactionsMap.values())\n  );\n};\n"],
  "mappings": "wPAoBA,IAAMA,EAA+BC,GACnCA,EAAa,KAAK,CAACC,EAAGC,IAAMA,EAAE,UAAYD,EAAE,SAAS,EAE1CE,EAAmC,MAAO,CACrD,aAAAH,EACA,GAAGI,CACL,IAEK,CACH,IAAMC,EAAQD,EAAM,OAASE,EAAS,EAChCC,EAA6C,CAAC,EAC9CC,EAA0B,CAAC,EAcjC,GAZAR,EAAa,QAASS,GAAgB,CACpC,IAAMC,EAAoBC,EACxBF,EAAY,KACZJ,CACF,EACIK,EACFH,EAAmB,KAAKG,CAAiB,EAEzCF,EAAc,KAAKC,EAAY,IAAI,CAEvC,CAAC,EAEGD,EAAc,SAAW,EAC3B,OAAOT,EAA4BQ,CAAkB,EAGvD,IAAMK,EAA2CZ,EAAa,IAAKa,IAAQ,CAEzE,GAAIA,EACJ,OAAQA,EAAG,IACb,EAAE,EAEIC,EAAkBF,EAAgB,IAAKC,GAAOA,EAAG,MAAM,EACvDE,EAAgBP,EAAc,OACjCQ,GAAS,CAACF,EAAgB,SAASE,CAAI,CAC1C,EAEA,GAAID,EAAc,OAAS,EAAG,CAO5B,IAAME,EANuBjB,EAAa,OAAQS,GAChDM,EAAc,SAASN,EAAY,IAAI,CACzC,EAIsD,IACnDA,IACE,CACC,GAAGA,EACH,OAAQA,EAAY,KACpB,MAAO,EACP,iBACA,QAAS,EACT,cAAe,GACf,cAAe,EACf,MAAO,EACP,YAAa,EACb,UAAW,KAAK,IAAI,CACtB,EACJ,EAEAG,EAAgB,KAAK,GAAGK,CAAwB,CAClD,CAEA,IAAMC,EAAwB,IAAI,IAElC,OAAAX,EAAmB,QAASY,GAAS,CACnC,IAAMC,EAAMD,EAAK,KACZC,GAGLF,EAAsB,IAAI,OAAOE,CAAG,EAAGD,CAAI,CAC7C,CAAC,EAEDP,EAAgB,QAASH,GAAgB,CACvC,IAAMY,EAAsBC,EAAyB,CACnD,YAAAb,EACA,QAASc,EAAgBlB,CAAK,EAC9B,gBAAiBmB,EAAwBnB,CAAK,EAC9C,UAAWoB,EAAkBpB,CAAK,CACpC,CAAC,EAEGgB,EAAoB,oBACtBK,EAAY,CACV,IAAK,eAAejB,EAAY,MAAM,GACtC,MAAOY,CACT,CAAC,EAGHH,EAAsB,IAAIT,EAAY,OAAQY,CAAmB,CACnE,CAAC,EAEMtB,EACL,MAAM,KAAKmB,EAAsB,OAAO,CAAC,CAC3C,CACF",
  "names": ["sortTransactionsByTimestamp", "transactions", "a", "b", "mapServerTransactionsToListItems", "props", "store", "getState", "cachedTransactions", "hashesToFetch", "transaction", "cachedTransaction", "getCachedTransactionListItem", "newTransactions", "tx", "retrievedHashes", "missingHashes", "hash", "pendingDummyTransactions", "uniqueTransactionsMap", "item", "key", "transactionListItem", "mapTransactionToListItem", "addressSelector", "explorerAddressSelector", "egldLabelSelector", "saveToCache"]
}
