diff --git a/apps/namadillo/src/App/Staking/StakingRewards.tsx b/apps/namadillo/src/App/Staking/StakingRewards.tsx index aefd2e28c..538f7d5df 100644 --- a/apps/namadillo/src/App/Staking/StakingRewards.tsx +++ b/apps/namadillo/src/App/Staking/StakingRewards.tsx @@ -12,12 +12,11 @@ import { claimableRewardsAtom, claimAndStakeRewardsAtom, claimRewardsAtom, + getStakingRewardsTotalAtom, } from "atoms/staking"; -import BigNumber from "bignumber.js"; import { useModalCloseEvent } from "hooks/useModalCloseEvent"; import { useTransaction } from "hooks/useTransaction"; import { useAtomValue } from "jotai"; -import { useMemo } from "react"; import claimRewardsSvg from "./assets/claim-rewards.svg"; export const StakingRewards = (): JSX.Element => { @@ -28,6 +27,8 @@ export const StakingRewards = (): JSX.Element => { data: rewards, } = useAtomValue(claimableRewardsAtom); + const availableRewards = useAtomValue(getStakingRewardsTotalAtom); + const { onCloseModal } = useModalCloseEvent(); const parseStakingRewardsParams = (): ClaimRewardsMsgValue[] => { @@ -79,11 +80,6 @@ export const StakingRewards = (): JSX.Element => { }, }); - const availableRewards = useMemo(() => { - if (!rewards || Object.keys(rewards).length === 0) return BigNumber(0); - return BigNumber.sum(...Object.values(rewards || [])); - }, [rewards]); - const isLoading = claimRewardsPending || claimAndStakePending; return ( @@ -91,7 +87,7 @@ export const StakingRewards = (): JSX.Element => { diff --git a/apps/namadillo/src/App/Staking/StakingRewardsPanel.tsx b/apps/namadillo/src/App/Staking/StakingRewardsPanel.tsx index 31d9eff9d..c734705a3 100644 --- a/apps/namadillo/src/App/Staking/StakingRewardsPanel.tsx +++ b/apps/namadillo/src/App/Staking/StakingRewardsPanel.tsx @@ -2,27 +2,18 @@ import { ActionButton, AmountSummaryCard } from "@namada/components"; import { NamCurrency } from "App/Common/NamCurrency"; import StakingRoutes from "App/Staking/routes"; import { applicationFeaturesAtom } from "atoms/settings"; -import { claimableRewardsAtom } from "atoms/staking"; -import BigNumber from "bignumber.js"; +import { getStakingRewardsTotalAtom } from "atoms/staking"; import clsx from "clsx"; import { useAtomValue } from "jotai"; -import { useMemo } from "react"; import { GoStack } from "react-icons/go"; import { useLocation, useNavigate } from "react-router-dom"; export const StakingRewardsPanel = (): JSX.Element => { const { claimRewardsEnabled } = useAtomValue(applicationFeaturesAtom); - const { data: rewards } = useAtomValue(claimableRewardsAtom); + const availableRewards = useAtomValue(getStakingRewardsTotalAtom); const location = useLocation(); const navigate = useNavigate(); - const availableRewards = useMemo(() => { - if (!claimRewardsEnabled || !rewards || Object.keys(rewards).length === 0) { - return new BigNumber(0); - } - return BigNumber.sum(...Object.values(rewards)); - }, [rewards]); - const title = claimRewardsEnabled ? "Unclaimed Staking Rewards" diff --git a/apps/namadillo/src/atoms/staking/atoms.ts b/apps/namadillo/src/atoms/staking/atoms.ts index c7e0614ba..5efc4a19c 100644 --- a/apps/namadillo/src/atoms/staking/atoms.ts +++ b/apps/namadillo/src/atoms/staking/atoms.ts @@ -12,6 +12,7 @@ import { chainAtom, chainParametersAtom } from "atoms/chain"; import { queryDependentFn } from "atoms/utils"; import { myValidatorsAtom } from "atoms/validators"; import BigNumber from "bignumber.js"; +import { atom } from "jotai"; import { atomWithMutation, atomWithQuery } from "jotai-tanstack-query"; import { atomFamily } from "jotai/utils"; import { AddressBalance, BuildTxAtomParams, StakingTotals } from "types"; @@ -142,6 +143,16 @@ export const claimRewardsAtom = atomWithMutation((get) => { }; }); +export const getStakingRewardsTotalAtom = atom((get) => { + const { data: rewards } = get(claimableRewardsAtom); + + if (!rewards || Object.keys(rewards).length === 0) { + return new BigNumber(0); + } + + return BigNumber.sum(...Object.values(rewards)); +}); + export const claimAndStakeRewardsAtom = atomWithMutation((get) => { const chain = get(chainAtom); const claimableRewards = get(claimableRewardsAtom);