diff --git a/src/app/collective-rewards/rewards/ClaimableRewards.tsx b/src/app/collective-rewards/rewards/ClaimableRewards.tsx
new file mode 100644
index 00000000..14dec5a6
--- /dev/null
+++ b/src/app/collective-rewards/rewards/ClaimableRewards.tsx
@@ -0,0 +1,117 @@
+import {
+ formatMetrics,
+ MetricsCard,
+ MetricsCardTitle,
+ TokenMetricsCardRow,
+ useClaimBuilderRewards,
+ useClaimStateReporting,
+ useGetBuilderRewards,
+} from '@/app/collective-rewards/rewards'
+import { useHandleErrors } from '@/app/collective-rewards/utils'
+import { formatBalanceToHuman } from '@/app/user/Balances/balanceUtils'
+import { Button, ButtonProps } from '@/components/Button'
+import { withSpinner } from '@/components/LoadingSpinner/withLoadingSpinner'
+import { Popover } from '@/components/Popover'
+import { usePricesContext } from '@/shared/context/PricesContext'
+import { FC } from 'react'
+import { Address } from 'viem'
+
+const ClaimYourRewardsSvg = () => (
+
+)
+
+const ClaimYourRewardsButton: FC>> = buttonProps => (
+
+ }
+ size="small"
+ position="top"
+ trigger="hover"
+ >
+
+
+
+)
+
+type Token = {
+ symbol: string
+ address: Address
+}
+
+type RewardsTokenMetricsProps = {
+ builder: Address
+ gauge: Address
+ token: Token
+ currency?: string
+}
+
+const RewardsTokenMetrics: FC = ({
+ builder,
+ gauge,
+ token: { address, symbol },
+ currency = 'USD',
+}) => {
+ const { prices } = usePricesContext()
+
+ const {
+ data: rewards,
+ isLoading: isLoadingRewards,
+ error: rewardsError,
+ } = useGetBuilderRewards(address, gauge)
+ useHandleErrors({ error: rewardsError, title: 'Error loading rewards' })
+
+ const tokenPrice = prices[symbol]?.price ?? 0
+
+ const { amount, fiatAmount } = formatMetrics(
+ Number(formatBalanceToHuman(rewards ?? 0n)),
+ tokenPrice,
+ symbol,
+ currency,
+ )
+
+ const { isClaimFunctionReady, claimRewards, ...claimTx } = useClaimBuilderRewards(builder)
+
+ useClaimStateReporting({ ...claimTx, error: rewardsError ?? claimTx.error })
+
+ return withSpinner(TokenMetricsCardRow)({
+ amount,
+ fiatAmount,
+ isLoading: isLoadingRewards,
+ children: (
+ claimRewards(address)} disabled={!isClaimFunctionReady} />
+ ),
+ })
+}
+
+type ClaimableRewardsProps = {
+ builder: Address
+ gauge: Address
+ currency?: string
+ data: {
+ [token: string]: Token
+ }
+}
+
+export const ClaimableRewards: FC = ({ data, ...rest }) => {
+ return (
+
+
+
+
+
+ )
+}
diff --git a/src/app/collective-rewards/rewards/MyRewards.tsx b/src/app/collective-rewards/rewards/MyRewards.tsx
index 012c89fb..e530fa27 100644
--- a/src/app/collective-rewards/rewards/MyRewards.tsx
+++ b/src/app/collective-rewards/rewards/MyRewards.tsx
@@ -3,9 +3,10 @@ import { Address, getAddress } from 'viem'
import {
RewardsSection,
RewardsSectionHeader,
- useClaimAllRewards,
+ useClaimBuilderRewards,
useClaimStateReporting,
LastCycleRewards,
+ ClaimableRewards,
} from '@/app/collective-rewards/rewards'
import { CycleContextProvider } from '@/app/collective-rewards/metrics'
import { PricesContextProvider } from '@/shared/context/PricesContext'
@@ -16,7 +17,7 @@ import { Button } from '@/components/Button'
import { Paragraph } from '@/components/Typography'
export const Rewards: FC<{ builder: Address; gauge: Address }> = ({ builder, gauge }) => {
- const { isClaimFunctionReady, claimAllRewards, ...claimTx } = useClaimAllRewards(builder)
+ const { isClaimFunctionReady, claimRewards, ...claimTx } = useClaimBuilderRewards(builder)
useClaimStateReporting({ ...claimTx })
@@ -44,7 +45,7 @@ export const Rewards: FC<{ builder: Address; gauge: Address }> = ({ builder, gau
- Claimable Rewards
+
Estimated Rewards
All time rewards
@@ -62,7 +63,7 @@ export const Rewards: FC<{ builder: Address; gauge: Address }> = ({ builder, gau
position="bottom"
className="z-[100]"
>
-