useLeaderboard
Hook for retrieving the top 5 accounts that have received the most tokens or points in a given campaign.
It’s possible to also specify an address to ensure it appears in the leaderboard, which is useful for displaying the rank of the currently connected account.
Import
import { useLeaderboard } from "@metrom-xyz/react";
Usage
import { useLeaderboard } from "@metrom-xyz/react";
function App() {
const { isLoading, data } = useLeaderboard({
chainId: 1,
campaignId:
"0xa8b1dc25d4ea47406771c4db401455a5d8b377dff381e2aea2722084808b4b47",
address: "0x0000000000000000000000000000000000000000",
});
if (isLoading) return <div>loading...</div>;
if (!data) return <div>no distribution yet</div>;
return (
<div>
<p>Last distribution: {data.timestamp}</p>
<p>
Your rank: #{data.connectedAccountRank.position}
{data.connectedAccountRank.weight}
</p>
{data.sortedRanks.map((rank, i) => (
<div key={rank.account}>
<p>
Rank: #{i + 1} {rank.weight}
</p>
{rank.distributed instanceof Array ? (
<div>
{/* Campaign with token rewards have an array of distributed tokens */}
</div>
) : (
<div>
{/* Campaign with point rewards have a single distributed object */}
</div>
)}
</div>
))}
</div>
);
}
Parameters
import { type UseLeaderboardParams } from "@metrom-xyz/react";
campaignId
Hex | undefined
Id of the campaign for which to fetch the leaderboard. Defaults to undefined
.
import { useLeaderboard } from "@metrom-xyz/react";
function App() {
const { isLoading, data } = useLeaderboard({
campaignId:
"0xa8b1dc25d4ea47406771c4db401455a5d8b377dff381e2aea2722084808b4b47",
});
}
chainId
number | undefined
Chain id of the campaign; the chain id is where the campaign lives in. Defaults
to undefiend
.
import { useLeaderboard } from "@metrom-xyz/react";
function App() {
const { isLoading, data } = useLeaderboard({
chainId: 1,
});
}
address
Address | undefined
The address that has to be included in the leaderboard, ususally the currently
connected account. Defaults to undefined
.
import { useLeaderboard } from "@metrom-xyz/react";
function App() {
const { isLoading, data } = useLeaderboard({
address: "0x0000000000000000000000000000000000000000",
});
}
options
TanStack Query parameters. See the TanStack Query query docs for more info.
Metrom React library does not support all TanStack Query parameters, like
queryFn
and queryKey
, are used internally and cannot be overriden. Check
out the
source
to see what parameters are not supported.
Return Type
import { type useLeaderboard } from "@metrom-xyz/react";
data
Leaderboard | undefined
Leaderboard containing the latest rewards distribution time, the top 5 most
rewarded accounts, and the connected account rank (if the address was provided).
Defaults to undefiend
.
isPending
boolean
Is true whenever there’s no cached data and no query attempt was finished yet.
isLoading
boolean
Is true whenever the first fetch for a query is in-flight.
isFetching
boolean
Is true whenever the queryFn is executing, which includes initial pending as well as background refetches.