'use client' import { ColumnDef, flexRender, getCoreRowModel, getSortedRowModel, SortingState, useReactTable, } from '@tanstack/react-table' import classNames from 'classnames' import Image from 'next/image' import React from 'react' import AmountAndValue from 'components/AmountAndValue' import { AssetRow } from 'components/Borrow/AssetRow' import { ChevronDown, ChevronUp } from 'components/Icons' import { Text } from 'components/Text' import TitleAndSubCell from 'components/TitleAndSubCell' import { getMarketAssets } from 'utils/assets' import { formatPercent } from 'utils/formatters' import AssetExpanded from 'components/Borrow/AssetExpanded' import Loading from 'components/Loading' type Props = { data: BorrowAsset[] | BorrowAssetActive[] } export const BorrowTable = (props: Props) => { const [sorting, setSorting] = React.useState([]) const marketAssets = getMarketAssets() const columns = React.useMemo[]>( () => [ { header: 'Asset', id: 'symbol', cell: ({ row }) => { const asset = marketAssets.find((asset) => asset.denom === row.original.denom) if (!asset) return null return (
token
) }, }, { accessorKey: 'borrowRate', header: 'Borrow Rate', cell: ({ row }) => { if (row.original.borrowRate === null) { return } return ( {formatPercent(row.original.borrowRate)} ) }, }, ...((props.data[0] as BorrowAssetActive)?.debt ? [ { accessorKey: 'debt', header: 'Borrowed', cell: (info: any) => { const borrowAsset = info.row.original as BorrowAssetActive const asset = marketAssets.find((asset) => asset.denom === borrowAsset.denom) if (!asset) return null return }, }, ] : []), { accessorKey: 'liquidity', header: 'Liquidity Available', cell: ({ row }) => { const asset = marketAssets.find((asset) => asset.denom === row.original.denom) if (!asset) return null if (row.original.liquidity === null) { return } return }, }, { accessorKey: 'status', enableSorting: false, header: 'Manage', width: 150, cell: ({ row }) => (
{row.getIsExpanded() ? : }
), }, ], [marketAssets, props.data], ) const table = useReactTable({ data: props.data, columns, state: { sorting, }, onSortingChange: setSorting, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), debugTable: true, }) return ( {table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header, index) => { return ( ) })} ))} {table.getRowModel().rows.map((row) => { if (row.getIsExpanded()) { return ( {}} onRepayClick={() => {}} resetExpanded={table.resetExpanded} /> ) } return })}
{header.column.getCanSort() ? { asc: ( mars ), desc: ( mars ), false: ( mars ), }[header.column.getIsSorted() as string] ?? null : null} {flexRender(header.column.columnDef.header, header.getContext())}
) }