UI / src / views / Portfolio / components / TokenBalance / TokenBalanceTable.tsx
TokenBalanceTable.tsx
Raw
import Table from '@components/Table/Table';
import TableBody from '@components/Table/TableBody';
import TableHeader from '@components/Table/TableHeader';
import { IToken } from '@store/store';
import Flex from '@ui/Flex/Flex';
import { TableRowSkeleton } from '@ui/Skeleton';
import useTable from '@views/Portfolio/hooks/useTable';
import { memo, useState } from 'react';
import { TokenBalanceRow } from './TokenBalanceRow';
import type { ITokenBalanceTable } from './types';

function TokenBalanceTable({
  balances,
  isFetched,
  isLoading,
}: ITokenBalanceTable) {
  const [page, setPage] = useState<number>(1);
  const { slice, range } = useTable<IToken>({
    data: balances,
    page,
    rowsPerPage: 10,
    isFetched,
  });

  if (isLoading) {
    return (
      <Flex direction="column">
        <TableRowSkeleton />
        <TableRowSkeleton />
        <TableRowSkeleton />
      </Flex>
    );
  }

  return (
    <Table
      page={page}
      range={range}
      totalLength={!isLoading ? balances.length : 0}
      rowsPerPage={10}
      slice={slice}
      setPage={setPage}
    >
      <TableHeader titleList={['Token', 'Networks', 'Price', 'Balance', '']} />
      <TableBody>
        {slice.map((token: IToken) => (
          <TokenBalanceRow {...token} />
        ))}
      </TableBody>
    </Table>
  );
}

export default memo(TokenBalanceTable);