Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | 51x 15x 15x 15x 15x 15x 15x 3x 15x 3x 15x 15x 15x 3x 15x 51x | import { APITransactionsGroup, IParsedData } from "../data.types";
import { useMemo } from "react";
import { additionalDetailsParser } from "./additionalDetailsParser";
import { statsParser } from "./statsParser";
import { groupTransactions } from "./transactions.helpers";
import { useAppSelector } from "@redux/hooks";
import { selectTypeFilter } from "@redux/slices/acquirer/transactionRiskProfile";
const useDataParser = ({
data,
transactions,
}: {
data: any;
transactions: any;
}): IParsedData => {
const typeFilter = useAppSelector(selectTypeFilter);
const level = data?.riskLevel || 0;
const nextDeescalationAt = data?.lastEscalation?.nextDeescalationAt;
const general = {
countryCodeISO2: data?.ipInfo?.country_code?.toLowerCase() || "",
countryName: data?.ipInfo?.country || "",
ipAddress: data?.ipAddress || "",
hasIPProbeData: !!data?.ipInfo?.security,
updatedAt: data?.updatedAt || 0,
isVPN:
data?.ipInfo?.security?.anonymous ||
data?.ipInfo?.security?.hosting,
};
const geomap = {
latitude: data?.ipInfo?.latitude,
longitude: data?.ipInfo?.longitude,
timezone: `${data?.ipInfo?.timezone?.id} (${data?.ipInfo?.timezone?.abbr})`,
};
const cardsList = useMemo(() => {
Eif (!data?.stats?.cards?.length) return [];
return data.stats.cards.map((card: any) => ({
cardBrand: card.brand,
last4: card.last4,
isDebit: card.isDebit,
charged: card.sum / 100,
}));
}, [data?.stats?.cards]);
const usersList = useMemo(() => {
Eif (!data?.stats?.users?.length) return [];
return data.stats.users.map((user: any) => ({
imageURL: user.imageURL,
userName: `${user.firstName} ${user.lastName}`,
email: user.email,
}));
}, [data?.stats?.users]);
const stats = statsParser(data);
const additionalDetails = additionalDetailsParser(data);
const transactionsList = useMemo(() => {
Eif (!transactions?.data?.length) return [];
const filteredData =
typeFilter === "all"
? transactions.data
: filterDataByEscalation(transactions.data);
return groupTransactions(filteredData);
}, [transactions?.data, typeFilter]);
return {
level,
general,
geomap,
detailsPanel: {
cardsList,
usersList,
stats,
},
additionalDetails,
transactions: transactionsList,
nextDeescalationAt,
};
};
const filterDataByEscalation = (data: APITransactionsGroup[]) =>
data
.filter((thxGroup) =>
thxGroup.transactions.some((thx) => !!thx?.eventEscalation),
)
.map((thxGroup) => ({
...thxGroup,
transactions: thxGroup.transactions.filter(
(thx) => !!thx?.eventEscalation,
),
}));
export default useDataParser;
|