diff --git a/src/pages/Crypto.jsx b/src/pages/Crypto.jsx index 645d268..b58b3ab 100644 --- a/src/pages/Crypto.jsx +++ b/src/pages/Crypto.jsx @@ -18,46 +18,77 @@ * - [ ] Dark mode adaptive coloring for charts * - [ ] Extract to service + custom hook (useCryptoMarkets) */ -import { useEffect, useState } from 'react'; -import Loading from '../components/Loading.jsx'; -import ErrorMessage from '../components/ErrorMessage.jsx'; -import Card from '../components/Card.jsx'; +import { useEffect, useState } from "react"; +import Loading from "../components/Loading.jsx"; +import ErrorMessage from "../components/ErrorMessage.jsx"; +import Card from "../components/Card.jsx"; export default function Crypto() { const [coins, setCoins] = useState([]); - const [query, setQuery] = useState(''); + const [query, setQuery] = useState(""); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); + const [page, setPage] = useState(1); - useEffect(() => { fetchCoins(); }, []); + useEffect(() => { + fetchCoins(); + }, [page]); async function fetchCoins() { try { - setLoading(true); setError(null); - const res = await fetch('https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=50&page=1&sparkline=false'); - if (!res.ok) throw new Error('Failed to fetch'); + setLoading(true); + setError(null); + const res = await fetch( + `https://api.coingecko.com/api/v3/coins/markets?vs_currency=usd&order=market_cap_desc&per_page=50&page=${page}&sparkline=false` + ); + if (!res.ok) throw new Error("Failed to fetch"); const json = await res.json(); setCoins(json); - } catch (e) { setError(e); } finally { setLoading(false); } + } catch (e) { + setError(e); + } finally { + setLoading(false); + } } - const filtered = coins.filter(c => c.name.toLowerCase().includes(query.toLowerCase())); + const filtered = coins.filter((c) => + c.name.toLowerCase().includes(query.toLowerCase()) + ); return (
Market Cap: ${c.market_cap.toLocaleString()}
24h: {c.price_change_percentage_24h?.toFixed(2)}%
{/* TODO: Add mini sparkline chart */}