9aed938c79
* Add pending events to stake table * Add additional tanstack refetch on user stake/unstake/redeem rewards * refactor repeated fetch functions * clean up fetching functions * refactor & clean up * Add epoch waiting message on epoch change delay * fine tune epoch change * clean up * refactor imports * Add transaction hash to successful redeem rewards InfoModal * fix epoch time check and mobile header * Fix Loading modal width on mobile * fix epoch logic * clean up * clean up logs * add waiting for epoch to start to landing page * clean up * Add refetch of all queries on epoch change * Finalise state change on epoch change * clean up * fix build * Fix NodesTable mobile view * Fix stake table mobile view * fix typo * Fix blog articles height * Add loading skeletons to landing page cards * clean up * Add skeletons to cards * Add skeletons, and loading/error refetch on wallet balnce * clean up * Add active stakers card * clean up * change NGM to mixnet * Add TVL to Tokenomics card * Add last total stake to Stake Card * clean up * Fix stake sorting function in Stake Table * Add wrap of identity key and address to Basic Info Card * Add counter to epoch time on staking page * clean up * update epoch labels * Add circular loading on Toggle Button * Update Toggle button loading functionality * Add skeletons to account cards * Add search functionality on Enter * clean up * DOMpurify node name and description * Add column with id and identity key, wrap names to 2 lines * Set width of column headers to 110px * fix pending events for delegations * Fix Stake button proppagation * Add full country name to tooltips * Take out connect wallet from mobile menu toggle * finetune epoch change intervals * Add error text to Magic Search * fix build * Add react-markdown for Blog articles * fix graph's width and Table column headings * fix Magic Search loading * Fix grid on account page * fix account card address width * Fix permanent loading spinner on ToggleButton * clean up URL's, fix copy address on the Basic Card * replace mintscan with ping, open tx link on new page * Take out toggle button if no node bonded by address * Set fixed column width on tables * Add not-found page to account, when no node bonded * Add full country name to tables and node profile card * clean up * Table fixes * Fix sorting in Delegations table Node page * clean up * Fix line chart view * refactor epoch progress bar * remove unused imports * remove tanstack delclaration module * create epoch data provider * remove logic from togglebutton component * use epoch provider in components * invalidateQueries should be awaited * tidy up QualityIndicatorsCard component formatting * fix infinite loop in epoch provider --------- Co-authored-by: Yana <yanok87@users.noreply.github.com> Co-authored-by: fmtabbara <fmtabbara@hotmail.co.uk>
125 lines
3.4 KiB
TypeScript
125 lines
3.4 KiB
TypeScript
"use client";
|
|
|
|
import { Skeleton, Stack, Typography } from "@mui/material";
|
|
import { useQuery } from "@tanstack/react-query";
|
|
import { format } from "date-fns";
|
|
import { fetchNodeInfo } from "../../app/api";
|
|
import { formatBigNum } from "../../utils/formatBigNumbers";
|
|
import ExplorerCard from "../cards/ExplorerCard";
|
|
import CopyToClipboard from "../copyToClipboard/CopyToClipboard";
|
|
import ExplorerListItem from "../list/ListItem";
|
|
|
|
interface IBasicInfoCardProps {
|
|
id: number;
|
|
}
|
|
|
|
export const BasicInfoCard = ({ id }: IBasicInfoCardProps) => {
|
|
const {
|
|
data: nodeInfo,
|
|
isLoading,
|
|
isError,
|
|
} = useQuery({
|
|
queryKey: ["nodeInfo", id],
|
|
queryFn: () => fetchNodeInfo(id),
|
|
});
|
|
|
|
if (isLoading) {
|
|
return (
|
|
<ExplorerCard label="Basic info">
|
|
<Skeleton variant="text" height={90} />
|
|
<Skeleton variant="text" height={90} />
|
|
<Skeleton variant="text" height={70} />
|
|
<Skeleton variant="text" height={70} />
|
|
<Skeleton variant="text" height={70} />
|
|
<Skeleton variant="text" height={70} />
|
|
</ExplorerCard>
|
|
);
|
|
}
|
|
|
|
if (isError || !nodeInfo) {
|
|
return (
|
|
<ExplorerCard label="Basic info">
|
|
<Typography variant="h3" sx={{ color: "pine.950" }}>
|
|
Failed to load node data.
|
|
</Typography>
|
|
</ExplorerCard>
|
|
);
|
|
}
|
|
|
|
const timeBonded = format(
|
|
new Date(nodeInfo.description.build_information.build_timestamp),
|
|
"dd/MM/yyyy",
|
|
);
|
|
|
|
const selfBond = formatBigNum(
|
|
Number(nodeInfo.rewarding_details.operator) / 1_000_000,
|
|
);
|
|
const selfBondFormatted = `${selfBond} NYM`;
|
|
|
|
const totalStake = formatBigNum(Number(nodeInfo.total_stake) / 1_000_000);
|
|
const totalStakeFormatted = `${totalStake} NYM`;
|
|
|
|
return (
|
|
<ExplorerCard label="Basic info">
|
|
<Stack gap={1}>
|
|
<ExplorerListItem
|
|
divider
|
|
label="NYM Address"
|
|
value={
|
|
<Stack
|
|
direction="row"
|
|
gap={0.1}
|
|
alignItems="center"
|
|
justifyContent="space-between"
|
|
width="100%"
|
|
>
|
|
<Typography
|
|
variant="body4"
|
|
sx={{ wordWrap: "break-word", maxWidth: "90%" }}
|
|
>
|
|
{nodeInfo.bonding_address}
|
|
</Typography>
|
|
<CopyToClipboard text={nodeInfo.bonding_address} />
|
|
</Stack>
|
|
}
|
|
/>
|
|
<ExplorerListItem
|
|
divider
|
|
label="Identity Key"
|
|
value={
|
|
<Stack
|
|
direction="row"
|
|
gap={0.1}
|
|
alignItems="center"
|
|
justifyContent="space-between"
|
|
width="100%"
|
|
>
|
|
<Typography
|
|
variant="body4"
|
|
sx={{ wordWrap: "break-word", maxWidth: "85%" }}
|
|
>
|
|
{nodeInfo.identity_key}
|
|
</Typography>
|
|
<CopyToClipboard text={nodeInfo.identity_key} />
|
|
</Stack>
|
|
}
|
|
/>
|
|
<ExplorerListItem row divider label="Node bonded" value={timeBonded} />
|
|
<ExplorerListItem
|
|
row
|
|
divider
|
|
label="Nr. of stakers"
|
|
value={nodeInfo.rewarding_details.unique_delegations.toString()}
|
|
/>
|
|
<ExplorerListItem
|
|
row
|
|
divider
|
|
label="Self bonded"
|
|
value={selfBondFormatted}
|
|
/>
|
|
<ExplorerListItem row label="Total stake" value={totalStakeFormatted} />
|
|
</Stack>
|
|
</ExplorerCard>
|
|
);
|
|
};
|