Skip to content

Commit

Permalink
Extract MultiEsdtTrasfer parser for multiple transactions in a separa…
Browse files Browse the repository at this point in the history
…te function (#1157)

* extract multi esdt trasfer parser for multiple transactions in a separate function

* update changelog

* 2.32.0-alpha.0

* revert version
  • Loading branch information
CiprianDraghici committed Apr 23, 2024
1 parent c247beb commit 50abe36
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 56 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]
- [ExperimentalWebviewProvider: fix android communication](https://github.com/multiversx/mx-sdk-dapp/pull/1163)
-
- [Extract MultiEsdtTrasfer parser for multiple transactions in a separate function](https://github.com/multiversx/mx-sdk-dapp/pull/1157)

## [[v2.31.7]](https://github.com/multiversx/mx-sdk-dapp/pull/1161)] - 2024-04-23
- [Fixed `AuthenticatedRoutesWrapper` redirects to unlock route during webview login](https://github.com/multiversx/mx-sdk-dapp/pull/1160)

Expand Down
61 changes: 6 additions & 55 deletions src/hooks/transactions/useParseMultiEsdtTransferData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ import {
TransactionDataTokenType,
TransactionsDataTokensType
} from 'types';
import { getTokenFromData } from 'utils/transactions/getTokenFromData';
import { parseMultiEsdtTransferData } from 'utils/transactions/parseMultiEsdtTransferData';
import { parseMultiEsdtTransferDataForMultipleTransactions } from 'utils/transactions/parseMultiEsdtTransferDataForMultipleTransactions';

const defaultTransactionInfo: TransactionDataTokenType = {
tokenId: '',
Expand Down Expand Up @@ -38,16 +37,6 @@ export function useParseMultiEsdtTransferData({
MultiSignTransactionType[]
>([]);

function addTransactionDataToParsedInfo(
data: string,
txInfo: TransactionDataTokenType
) {
setParsedTransactions((existing) => ({
...existing,
[data]: txInfo
}));
}

function getTxInfoByDataField(
data: string,
multiTransactionData?: string
Expand All @@ -71,51 +60,13 @@ export function useParseMultiEsdtTransferData({
}

function extractTransactionESDTData() {
if (transactions && transactions.length > 0) {
const allTxs: MultiSignTransactionType[] = [];
transactions.forEach((transaction, transactionIndex) => {
const txData = transaction.getData().toString();
const multiTxs = parseMultiEsdtTransferData(txData);

if (multiTxs.length > 0) {
multiTxs.forEach((trx, idx) => {
const newTx: MultiSignTransactionType = {
transaction,
multiTxData: trx.data,
transactionIndex: idx
};
addTransactionDataToParsedInfo(trx.data, {
tokenId: trx.token ? trx.token : '',
amount: trx.amount ? trx.amount : '',
type: trx.type,
nonce: trx.nonce ? trx.nonce : '',
multiTxData: trx.data,
receiver: trx.receiver
});
allTxs.push(newTx);
});
} else {
const transactionData = transaction.getData().toString();

const { tokenId, amount } = getTokenFromData(transactionData);

if (tokenId) {
addTransactionDataToParsedInfo(transactionData, {
tokenId,
amount,
receiver: transaction.getReceiver().bech32()
});
}
allTxs.push({
transaction,
transactionIndex,
multiTxData: transactionData
});
}
const { allTransactions, parsedTransactionsByDataField } =
parseMultiEsdtTransferDataForMultipleTransactions({
transactions
});

setAllTransactions(allTxs);
}
setAllTransactions(allTransactions);
setParsedTransactions(parsedTransactionsByDataField);
}

useEffect(() => {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import type { Transaction } from '@multiversx/sdk-core';
import {
MultiSignTransactionType,
TransactionDataTokenType,
TransactionsDataTokensType
} from 'types';
import { getTokenFromData } from './getTokenFromData';
import { parseMultiEsdtTransferData } from './parseMultiEsdtTransferData';

function addTransactionDataToParsedInfo({
parsedTransactionsByDataField,
data,
txInfo
}: {
parsedTransactionsByDataField?: TransactionsDataTokensType;
data: string;
txInfo: TransactionDataTokenType;
}) {
if (!parsedTransactionsByDataField) {
return;
}

parsedTransactionsByDataField[data] = txInfo;
}

export function parseMultiEsdtTransferDataForMultipleTransactions({
transactions
}: {
transactions?: Transaction[];
}) {
const parsedTransactionsByDataField: TransactionsDataTokensType = {};
const allTransactions: MultiSignTransactionType[] = [];

if (!transactions || transactions.length === 0) {
return {
allTransactions,
parsedTransactionsByDataField
};
}

transactions.forEach((transaction, transactionIndex) => {
const txData = transaction.getData().toString();
const multiTxs = parseMultiEsdtTransferData(txData);

if (multiTxs.length > 0) {
multiTxs.forEach((trx, idx) => {
const newTx: MultiSignTransactionType = {
transaction,
multiTxData: trx.data,
transactionIndex: idx
};

addTransactionDataToParsedInfo({
parsedTransactionsByDataField,
data: trx.data,
txInfo: {
tokenId: trx.token ? trx.token : '',
amount: trx.amount ? trx.amount : '',
type: trx.type,
nonce: trx.nonce ? trx.nonce : '',
multiTxData: trx.data,
receiver: trx.receiver
}
});

allTransactions.push(newTx);
});
} else {
const transactionData = transaction.getData().toString();

const { tokenId, amount } = getTokenFromData(transactionData);

if (tokenId) {
addTransactionDataToParsedInfo({
parsedTransactionsByDataField,
data: transactionData,
txInfo: {
tokenId,
amount,
receiver: transaction.getReceiver().bech32()
}
});
}
allTransactions.push({
transaction,
transactionIndex,
multiTxData: transactionData
});
}
});

return {
allTransactions,
parsedTransactionsByDataField
};
}

0 comments on commit 50abe36

Please sign in to comment.