mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
90 lines
2.8 KiB
TypeScript
90 lines
2.8 KiB
TypeScript
import type { NovesResponseData, NovesSentReceived } from 'types/api/noves';
|
|
|
|
import type { NovesFlowViewItem } from 'ui/tx/assetFlows/utils/generateFlowViewData';
|
|
|
|
export interface FromToData {
|
|
text: string;
|
|
address: string;
|
|
name?: string | null;
|
|
}
|
|
|
|
export const getFromTo = (txData: NovesResponseData, currentAddress: string): FromToData => {
|
|
const raw = txData.rawTransactionData;
|
|
const sent = txData.classificationData.sent;
|
|
let sentFound: Array<NovesSentReceived> = [];
|
|
if (sent && sent[0]) {
|
|
sentFound = sent
|
|
.filter((sent) => sent.from.address.toLocaleLowerCase() === currentAddress)
|
|
.filter((sent) => sent.to.address);
|
|
}
|
|
|
|
const received = txData.classificationData.received;
|
|
let receivedFound: Array<NovesSentReceived> = [];
|
|
if (received && received[0]) {
|
|
receivedFound = received
|
|
.filter((received) => received.to.address?.toLocaleLowerCase() === currentAddress)
|
|
.filter((received) => received.from.address);
|
|
}
|
|
|
|
if (sentFound[0] && receivedFound[0]) {
|
|
if (sentFound.length === receivedFound.length) {
|
|
if (raw.toAddress.toLocaleLowerCase() === currentAddress) {
|
|
return { text: 'Received from', address: raw.fromAddress };
|
|
}
|
|
|
|
if (raw.fromAddress.toLocaleLowerCase() === currentAddress) {
|
|
return { text: 'Sent to', address: raw.toAddress };
|
|
}
|
|
}
|
|
if (sentFound.length > receivedFound.length) {
|
|
// already filtered if null
|
|
|
|
return { text: 'Sent to', address: sentFound[0].to.address! } ;
|
|
} else {
|
|
return { text: 'Received from', address: receivedFound[0].from.address } ;
|
|
}
|
|
}
|
|
|
|
if (sent && sentFound[0]) {
|
|
// already filtered if null
|
|
|
|
return { text: 'Sent to', address: sentFound[0].to.address! } ;
|
|
}
|
|
|
|
if (received && receivedFound[0]) {
|
|
return { text: 'Received from', address: receivedFound[0].from.address };
|
|
}
|
|
|
|
if (raw.toAddress && raw.toAddress.toLocaleLowerCase() === currentAddress) {
|
|
return { text: 'Received from', address: raw.fromAddress };
|
|
}
|
|
|
|
if (raw.fromAddress && raw.fromAddress.toLocaleLowerCase() === currentAddress) {
|
|
return { text: 'Sent to', address: raw.toAddress };
|
|
}
|
|
|
|
if (!raw.toAddress && raw.fromAddress) {
|
|
return { text: 'Received from', address: raw.fromAddress };
|
|
}
|
|
|
|
if (!raw.fromAddress && raw.toAddress) {
|
|
return { text: 'Sent to', address: raw.toAddress };
|
|
}
|
|
|
|
return { text: 'Sent to', address: currentAddress };
|
|
};
|
|
|
|
export const getFromToValue = (txData: NovesResponseData, currentAddress: string) => {
|
|
const fromTo = getFromTo(txData, currentAddress);
|
|
|
|
return fromTo.text.split(' ').shift()?.toLowerCase();
|
|
};
|
|
|
|
export const getActionFromTo = (item: NovesFlowViewItem): FromToData => {
|
|
return {
|
|
text: item.action.flowDirection === 'toRight' ? 'Sent to' : 'Received from',
|
|
address: item.rightActor.address,
|
|
name: item.rightActor.name,
|
|
};
|
|
};
|