import React, { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; import { getUserUsage, redeemCode, Q, quotaToDollar } from '../api'; import SpotlightCard from '../components/bits/SpotlightCard'; import CountUp from '../components/bits/CountUp'; import ShinyText from '../components/bits/ShinyText'; import toast from 'react-hot-toast'; export default function Dashboard() { const { user, refreshUser } = useAuth(); const [usage, setUsage] = useState(null); const [redeemInput, setRedeemInput] = useState(''); const [redeeming, setRedeeming] = useState(false); const loadUsage = async () => { try { const r = await getUserUsage(); if (r.data.success) setUsage(r.data.data); } catch (e) { /* interceptor */ } }; useEffect(() => { loadUsage(); }, []); const handleRedeem = async (e) => { e.preventDefault(); if (!redeemInput.trim()) return; setRedeeming(true); try { const res = await redeemCode(redeemInput.trim()); if (res.data.success) { toast.success('Code redeemed successfully!'); setRedeemInput(''); // Refresh both usage AND user data to update balance await Promise.all([loadUsage(), refreshUser()]); } } catch (err) { /* interceptor */ } setRedeeming(false); }; // Use usage data (fresh from API) for balance/used — NOT stale user object const quota = usage?.quota ?? user?.quota ?? 0; const usedQuota = usage?.used_quota ?? user?.used_quota ?? 0; const requestCount = usage?.request_count ?? user?.request_count ?? 0; const balanceDollars = quota / Q; return (
Manage your API usage, keys, and account
Balance
{quota.toLocaleString()} quota units
Used
{usedQuota.toLocaleString()} quota units
Total Requests
API Keys
Manage your keys
Packages
View plans
Pricing
Model prices
API Docs
Coming soon