diff --git a/app/dashboard/page.tsx b/app/dashboard/page.tsx index 6591862..3de0620 100644 --- a/app/dashboard/page.tsx +++ b/app/dashboard/page.tsx @@ -34,7 +34,10 @@ const formatMintedToken = (token: TokenSummary): TokenSummary => ({ code: token.code, issuer: token.issuer, name: token.name, + image: token.image, totalSupply: token.totalSupply, + circulating: token.circulating, + holders: token.holders, liquidityPools: token.liquidityPools, description: token.description, }) @@ -90,9 +93,13 @@ export default function DashboardPage() { mintedTokens.map((token) => ({ code: token.assetCode, issuer: token.issuer, - name: token.name, + name: token.tomlName || token.name, + image: token.image, totalSupply: token.totalSupply, - description: token.description, + circulating: token.circulatingSupply, + holders: token.holders, + liquidityPools: token.liquidityPools, + description: token.tomlDescription || token.description, })), [mintedTokens] ) diff --git a/app/explore/page.tsx b/app/explore/page.tsx index 39dd07f..92beff8 100644 --- a/app/explore/page.tsx +++ b/app/explore/page.tsx @@ -1,10 +1,11 @@ "use client" -import { useState } from "react" +import { useState, useMemo, useCallback } from "react" import { useRouter } from "next/navigation" import Link from "next/link" import { Button } from "@/components/ui/button" import { Card, CardContent } from "@/components/ui/card" +import { Input } from "@/components/ui/input" import { Compass, ArrowRightLeft, @@ -13,23 +14,40 @@ import { TrendingUp, Droplets, Loader2, - Star, ChevronRight, Send, History, Shield, + Search, + ChevronDown, } from "lucide-react" -import { useTokenRegistry } from "@/hooks/useTokenRegistry" +import { useNetworkTokens } from "@/hooks/useNetworkTokens" +import { TokenIcon } from "@/components/token-icon" + +const PAGE_SIZE = 15 export default function ExplorePage() { const router = useRouter() - const { tokens, isLoading: tokensLoading, error: tokensError } = useTokenRegistry() + const [searchQuery, setSearchQuery] = useState("") + + const { + tokens, + isLoading, + isLoadingMore, + error: tokensError, + hasMore, + loadMore, + refresh, + } = useNetworkTokens({ searchQuery, limit: PAGE_SIZE }) + + const displayTokens = useMemo(() => + tokens.filter(token => token.assetCode && token.assetCode.trim() !== ""), + [tokens] + ) - const filteredTokens = tokens - .filter(token => - token.assetCode && token.assetCode.trim() !== "" - ) - .slice(0, 12) + const handleSearch = useCallback((e: React.ChangeEvent) => { + setSearchQuery(e.target.value) + }, []) const exploreCategories = [ { @@ -123,13 +141,28 @@ export default function ExplorePage() { {/* Token Discovery */}
-
-

Available Tokens

-

Discover tokens on the network

+
+
+

Available Tokens

+

+ {displayTokens.length > 0 + ? `Showing ${displayTokens.length} token${displayTokens.length !== 1 ? "s" : ""}` + : "Discover tokens on the network"} +

+
+
+ + +
- {tokensLoading ? ( -
+ {isLoading ? ( +
Loading tokens...
@@ -137,41 +170,66 @@ export default function ExplorePage() {

Unable to load tokens right now.

- +
) : ( -
- {filteredTokens.length === 0 ? ( -
-

No tokens available yet.

-
- ) : ( - filteredTokens.map((token) => ( - +
+ {displayTokens.length === 0 ? ( +
+

+ {searchQuery.trim() ? "No tokens match your search" : "No tokens available yet."} +

+
+ ) : ( + displayTokens.map((token) => ( + + + + +
+

+ {token.assetCode} +

+ {token.name ? ( +

{token.name}

+ ) : null} +
+ +
+
+ + )) + )} +
+ + {hasMore && !searchQuery.trim() && ( +
+ +
)} -
+ )}
diff --git a/app/layout.tsx b/app/layout.tsx index e86071a..3c71989 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -8,6 +8,7 @@ import { Navbar } from "@/components/navbar" import { Suspense } from "react" import { PiProvider } from "@/components/providers/pi-provider" import { BalanceRefreshProvider } from "@/components/providers/balance-refresh-provider" +import { PoolPriceProvider } from "@/components/providers/pool-price-provider" import { DisclaimerProvider } from "@/components/disclaimer-provider" import { RefCapture } from "@/components/ref-capture" import Script from 'next/script' @@ -40,6 +41,7 @@ export default function RootLayout({