{
  "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": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sCAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAA4B,4CAC5BC,EAAgC,4CAChCC,EAGO,4CACPC,EAAyB,uBAEzBC,EAA8C,6BAG9CC,EAA6C,0CAC7CC,EAAyC,sCAOzC,MAAMC,EAA+BC,GACnCA,EAAa,KAAK,CAACC,EAAGC,IAAMA,EAAE,UAAYD,EAAE,SAAS,EAE1CX,EAAmC,MAAO,CACrD,aAAAU,EACA,GAAGG,CACL,IAEK,CACH,MAAMC,EAAQD,EAAM,UAAS,YAAS,EAChCE,EAA6C,CAAC,EAC9CC,EAA0B,CAAC,EAcjC,GAZAN,EAAa,QAASO,GAAgB,CACpC,MAAMC,KAAoB,gCACxBD,EAAY,KACZH,CACF,EACII,EACFH,EAAmB,KAAKG,CAAiB,EAEzCF,EAAc,KAAKC,EAAY,IAAI,CAEvC,CAAC,EAEGD,EAAc,SAAW,EAC3B,OAAOP,EAA4BM,CAAkB,EAGvD,MAAMI,EAA2CT,EAAa,IAAKU,IAAQ,CAEzE,GAAIA,EACJ,OAAQA,EAAG,IACb,EAAE,EAEIC,EAAkBF,EAAgB,IAAKC,GAAOA,EAAG,MAAM,EACvDE,EAAgBN,EAAc,OACjCO,GAAS,CAACF,EAAgB,SAASE,CAAI,CAC1C,EAEA,GAAID,EAAc,OAAS,EAAG,CAO5B,MAAME,EANuBd,EAAa,OAAQO,GAChDK,EAAc,SAASL,EAAY,IAAI,CACzC,EAIsD,IACnDA,IACE,CACC,GAAGA,EACH,OAAQA,EAAY,KACpB,MAAO,EACP,OAAQ,gCAA8B,QACtC,QAAS,EACT,cAAe,GACf,cAAe,EACf,MAAO,EACP,YAAa,EACb,UAAW,KAAK,IAAI,CACtB,EACJ,EAEAE,EAAgB,KAAK,GAAGK,CAAwB,CAClD,CAEA,MAAMC,EAAwB,IAAI,IAElC,OAAAV,EAAmB,QAASW,GAAS,CACnC,MAAMC,EAAMD,EAAK,KACZC,GAGLF,EAAsB,IAAI,OAAOE,CAAG,EAAGD,CAAI,CAC7C,CAAC,EAEDP,EAAgB,QAASF,GAAgB,CACvC,MAAMW,KAAsB,4BAAyB,CACnD,YAAAX,EACA,WAAS,mBAAgBH,CAAK,EAC9B,mBAAiB,2BAAwBA,CAAK,EAC9C,aAAW,qBAAkBA,CAAK,CACpC,CAAC,EAEGc,EAAoB,SAAW,gCAA8B,YAC/D,eAAY,CACV,IAAK,eAAeX,EAAY,MAAM,GACtC,MAAOW,CACT,CAAC,EAGHH,EAAsB,IAAIR,EAAY,OAAQW,CAAmB,CACnE,CAAC,EAEMnB,EACL,MAAM,KAAKgB,EAAsB,OAAO,CAAC,CAC3C,CACF",
  "names": ["mapServerTransactionsToListItems_exports", "__export", "mapServerTransactionsToListItems", "__toCommonJS", "import_cacheActions", "import_accountSelectors", "import_networkSelectors", "import_store", "import_enums", "import_getCachedTransactionListItem", "import_mapTransactionToListItem", "sortTransactionsByTimestamp", "transactions", "a", "b", "props", "store", "cachedTransactions", "hashesToFetch", "transaction", "cachedTransaction", "newTransactions", "tx", "retrievedHashes", "missingHashes", "hash", "pendingDummyTransactions", "uniqueTransactionsMap", "item", "key", "transactionListItem"]
}
