import type { NextPage } from 'next' import { DashboardNavbar } from '.' import { Table, Td, Th, TrBody, TrHead } from '@components/shared/TableElements' import useBanks from 'hooks/useBanks' import { Bank } from '@blockworks-foundation/mango-v4' import { formatCurrencyValue } from 'utils/numbers' import { toUiDecimalsForQuote } from '@blockworks-foundation/mango-v4' import { useRouter } from 'next/router' // Import the useRouter hook import { useTokenStats } from 'hooks/useTokenStats' import { TokenStatsItem } from 'types' import BankAmountWithValue from '@components/shared/BankAmountWithValue' import Loading from '@components/shared/Loading' const Marketing: NextPage = () => { const banks = useBanks()['banks'] const router = useRouter() const { data: tokenStats, isLoading } = useTokenStats() // const getColorForPercent = (percent: number) => { // // Use a smoother gradient of colors from red to green based on the percentage // if (percent < 10) return '#ff073a' // Deep red // else if (percent < 20) return '#ff6347' // Tomato // else if (percent < 30) return '#ff7f50' // Coral // else if (percent < 40) return '#ffa500' // Orange // else if (percent < 50) return '#ffd700' // Gold // else if (percent < 60) return '#ffff00' // Yellow // else if (percent < 70) return '#adff2f' // Green Yellow // else if (percent < 80) return '#7fff00' // Chartreuse // else if (percent < 90) return '#32cd32' // Lime Green // return '#00ff00' // Green // } const getColorForPercent = (percent: number) => { // Use a smoother gradient of colors from red to green based on the percentage if (percent < 20) return 'var(--down)' // Deep red else if (percent < 60) return 'var(--warning)' // Yellow return 'var(--up)' // Green } const handleRowClick = (tokenName: string) => { router.push(`/stats?token=${tokenName}`) } const findClosestDate = (targetDate: Date, stats: TokenStatsItem[]) => { if (stats?.length) { return stats.reduce((closest, date) => { const dateObj = new Date(date.date_hour) const diff = Math.abs(dateObj.getTime() - targetDate.getTime()) return diff < Math.abs(new Date(closest.date_hour).getTime() - targetDate.getTime()) ? date : closest }) } } return (

Fullness of Token Deposits

{banks.map((bank: Bank, idx) => { const depositsValue = bank?.uiDeposits() * bank?.uiPrice const depositLimit = Number( toUiDecimalsForQuote(bank.borrowWeightScaleStartQuote), ) const percent = (100 * depositsValue) / depositLimit const bankStats = tokenStats?.data?.length ? tokenStats.data.filter( (stats) => stats.symbol === bank.name, ) : [] const currentDate = new Date() const oneDayAgo = new Date(currentDate) oneDayAgo.setDate(oneDayAgo.getDate() - 1) const oneWeekAgo = new Date(currentDate) oneWeekAgo.setDate(oneWeekAgo.getDate() - 7) const closestToOneDayAgo = findClosestDate(oneDayAgo, bankStats) const closestToOneWeekAgo = findClosestDate( oneWeekAgo, bankStats, ) const deposits = bank.uiDeposits() const depositsChangeDay = closestToOneDayAgo?.total_deposits ? deposits - closestToOneDayAgo.total_deposits : null const depositsChangeWeek = closestToOneWeekAgo?.total_deposits ? deposits - closestToOneWeekAgo.total_deposits : null if ( bank?.name !== 'USDC' && bank?.maintAssetWeight.toNumber() > 0 ) { return ( handleRowClick(bank.name)} > ) } })}
{'Symbol'} {'Leverage'} {'Deposits'} {'Limit'} {'Percent'} {'Deposits Change 1d'} {'Deposits Change 1w'}

{bank?.name}

{( 1 / (1 - bank?.initAssetWeight.toNumber()) ).toFixed()} x

$ {(bank?.uiDeposits() * bank?.uiPrice).toLocaleString( undefined, { minimumFractionDigits: 0, maximumFractionDigits: 0, }, )}

{formatCurrencyValue( toUiDecimalsForQuote( bank.borrowWeightScaleStartQuote, ), )}

{percent.toFixed(2)}%

{/*
*/}
{isLoading ? ( ) : depositsChangeDay ? ( 0 ? 'text-th-up' : depositsChangeDay < 0 ? 'text-th-down' : '' } /> ) : ( '–' )}
{isLoading ? ( ) : depositsChangeWeek ? ( 0 ? 'text-th-up' : depositsChangeWeek < 0 ? 'text-th-down' : '' } /> ) : ( '–' )}
) } export default Marketing