e5f41731ae
* bootstrap next app + add overview page * fix AssetList type * fix up nav stuff * Refactor Nav component and add network components pages * Refactor WorldMap component and update TelegramIcon, GitHubIcon, NymVpnIcon, DiscordIcon, and TwitterIcon components * add service providers page * mixnodes page * delegations page + use material react table for all tables * nodes map page * Refactor StyledLink component and remove unnecessary console.log statements * Refactor ESLint configuration, remove unused dependencies, and update component imports * update deps * Refactor imports and update dependencies * fix dark mode * build single mixnode page * build single gateway page * Refactor handleOnDelegate function to use useCallback in mixnodes page.tsx * Add defaults for constants --------- Co-authored-by: Mark Sinclair <mmsinclair@users.noreply.github.com>
58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
import { currencyToString, unymToNym } from '@/app/utils/currency';
|
|
import { useMixnodeContext } from '@/app/context/mixnode';
|
|
import { ApiState, MixNodeEconomicDynamicsStatsResponse } from '@/app/typeDefs/explorer-api';
|
|
import { toPercentIntegerString } from '@/app/utils';
|
|
import { EconomicsInfoRowWithIndex } from './types';
|
|
|
|
const selectionChance = (economicDynamicsStats: ApiState<MixNodeEconomicDynamicsStatsResponse> | undefined) =>
|
|
economicDynamicsStats?.data?.active_set_inclusion_probability || '-';
|
|
|
|
export const EconomicsInfoRows = (): EconomicsInfoRowWithIndex => {
|
|
const { economicDynamicsStats, mixNode } = useMixnodeContext();
|
|
|
|
const estimatedNodeRewards =
|
|
currencyToString({
|
|
amount: economicDynamicsStats?.data?.estimated_total_node_reward.toString() || '',
|
|
}) || '-';
|
|
const estimatedOperatorRewards =
|
|
currencyToString({
|
|
amount: economicDynamicsStats?.data?.estimated_operator_reward.toString() || '',
|
|
}) || '-';
|
|
const profitMargin = mixNode?.data?.profit_margin_percent
|
|
? toPercentIntegerString(mixNode?.data?.profit_margin_percent)
|
|
: '-';
|
|
const avgUptime = mixNode?.data?.node_performance
|
|
? toPercentIntegerString(mixNode?.data?.node_performance.last_24h)
|
|
: '-';
|
|
const nodePerformance = mixNode?.data?.node_performance
|
|
? toPercentIntegerString(mixNode?.data?.node_performance.most_recent)
|
|
: '-';
|
|
|
|
const opCost = mixNode?.data?.operating_cost;
|
|
|
|
return {
|
|
id: 1,
|
|
estimatedTotalReward: {
|
|
value: estimatedNodeRewards,
|
|
},
|
|
estimatedOperatorReward: {
|
|
value: estimatedOperatorRewards,
|
|
},
|
|
selectionChance: {
|
|
value: selectionChance(economicDynamicsStats),
|
|
},
|
|
profitMargin: {
|
|
value: profitMargin ? `${profitMargin} %` : '-',
|
|
},
|
|
operatingCost: {
|
|
value: opCost ? `${unymToNym(opCost.amount, 6)} NYM` : '-',
|
|
},
|
|
avgUptime: {
|
|
value: avgUptime ? `${avgUptime} %` : '-',
|
|
},
|
|
nodePerformance: {
|
|
value: nodePerformance,
|
|
},
|
|
};
|
|
};
|