import { makeStyles } from "@material-ui/core"; import numeral from "numeral"; import { useMemo } from "react"; import { createTVLArray, NotionalTVL } from "../../../hooks/useTVL"; import { ChainInfo } from "../../../utils/consts"; import SmartAddress from "../../SmartAddress"; import MuiReactTable from "../tableComponents/MuiReactTable"; import { formatTVL } from "./utils"; const useStyles = makeStyles((theme) => ({ logoPositioner: { height: "30px", width: "30px", maxWidth: "30px", marginRight: theme.spacing(1), display: "flex", alignItems: "center", }, logo: { maxHeight: "100%", maxWidth: "100%", }, tokenContainer: { display: "flex", justifyContent: "flex-start", alignItems: "center", }, })); const TVLTable = ({ chainInfo, tvl, }: { chainInfo: ChainInfo; tvl: NotionalTVL; }) => { const classes = useStyles(); const chainTVL = useMemo(() => { return createTVLArray(tvl).filter((x) => x.originChainId === chainInfo.id); }, [chainInfo, tvl]); const sortTokens = useMemo(() => { return (rowA: any, rowB: any) => { if (rowA.isGrouped && rowB.isGrouped) { return rowA.values.assetAddress > rowB.values.assetAddress ? 1 : -1; } else if (rowA.isGrouped && !rowB.isGrouped) { return 1; } else if (!rowA.isGrouped && rowB.isGrouped) { return -1; } else if (rowA.original.symbol && !rowB.original.symbol) { return 1; } else if (rowB.original.symbol && !rowA.original.symbol) { return -1; } else if (rowA.original.symbol && rowB.original.symbol) { return rowA.original.symbol > rowB.original.symbol ? 1 : -1; } else { return rowA.original.assetAddress > rowB.original.assetAddress ? 1 : -1; } }; }, []); const tvlColumns = useMemo(() => { return [ { Header: "Token", id: "assetAddress", sortType: sortTokens, disableGroupBy: true, accessor: (value: any) => ({ chainId: value.originChainId, symbol: value.symbol, name: value.name, logo: value.logo, assetAddress: value.assetAddress, }), Cell: (value: any) => (
{value.row?.original?.logo ? ( ) : null}
), }, { Header: "Quantity", accessor: "amount", disableGroupBy: true, Cell: (value: any) => value.row?.original?.amount !== undefined ? numeral(value.row?.original?.amount).format("0,0.00") : "", }, { Header: "Unit Price", accessor: "quotePrice", disableGroupBy: true, Cell: (value: any) => value.row?.original?.quotePrice !== undefined ? numeral(value.row?.original?.quotePrice).format("0,0.00") : "", }, { Header: "Value (USD)", id: "totalValue", accessor: "totalValue", disableGroupBy: true, Cell: (value: any) => value.row?.original?.totalValue !== undefined ? formatTVL(value.row?.original?.totalValue) : "", }, ]; }, [ classes.logo, classes.tokenContainer, classes.logoPositioner, sortTokens, ]); return ( ); }; export default TVLTable;