From 4f0bbf8f3eb9103adb94209150b277db3f0c95c6 Mon Sep 17 00:00:00 2001 From: asalef10 Date: Sun, 20 Apr 2025 12:33:23 +0300 Subject: [PATCH 01/13] update api --- src/pages/stakingPage/components/RewardsCard.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pages/stakingPage/components/RewardsCard.tsx b/src/pages/stakingPage/components/RewardsCard.tsx index a34f636..466b333 100644 --- a/src/pages/stakingPage/components/RewardsCard.tsx +++ b/src/pages/stakingPage/components/RewardsCard.tsx @@ -16,7 +16,9 @@ type RewardsCardProps = { }; type DexScreenerResponse = { - pairs?: { priceUsd?: string }[]; + grix: { + usd: number; + }; }; export const RewardsCard = ({ data, refetchData }: RewardsCardProps): JSX.Element => { @@ -26,15 +28,13 @@ export const RewardsCard = ({ data, refetchData }: RewardsCardProps): JSX.Elemen const [grixPrice, setGrixPrice] = useState(null); const toast = useToast(); - // Fetch GRIX price from dexscreener + // Fetch GRIX price from CoinGecko useEffect(() => { const fetchPrice = async () => { try { - const res = await fetch( - 'https://api.dexscreener.com/latest/dex/pairs/arbitrum/0x25d3ce097e413eeab09bbda72cd87d8972e673d4' - ); + const res = await fetch('https://api.coingecko.com/api/v3/simple/price?ids=grix&vs_currencies=usd'); const json = (await res.json()) as DexScreenerResponse; - const price = json?.pairs?.[0]?.priceUsd ? parseFloat(json.pairs[0].priceUsd) : null; + const price = json.grix.usd; setGrixPrice(price); } catch { setGrixPrice(null); From a9680fea83ff47323b1ccbe606c16fb8f7275bb7 Mon Sep 17 00:00:00 2001 From: asalef10 Date: Sun, 20 Apr 2025 12:51:49 +0300 Subject: [PATCH 02/13] update : staking -> stake --- src/components/navigation/config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/navigation/config.ts b/src/components/navigation/config.ts index 51f5370..18e9b7b 100644 --- a/src/components/navigation/config.ts +++ b/src/components/navigation/config.ts @@ -93,7 +93,7 @@ export const useNavigationConfig = (): NavigationConfig => { ], }, { - label: 'Staking', + label: 'Stake', path: '/staking', }, { From 6ac65ec34f1faa3acde287b98deb68e887d2da60 Mon Sep 17 00:00:00 2001 From: asalef10 Date: Sun, 20 Apr 2025 12:59:10 +0300 Subject: [PATCH 03/13] Bold "grix" and "esGrix" text --- src/pages/stakingPage/components/BoldGrix.tsx | 24 ++++++ .../components/StakingCardContent.tsx | 5 +- .../VestingComponents/VestingHeader.tsx | 24 +++--- .../VestingComponents/VestingInfo.tsx | 20 ++--- .../VestingComponents/VestingStats.tsx | 73 ++++++++++--------- src/pages/stakingPage/index.tsx | 3 +- 6 files changed, 87 insertions(+), 62 deletions(-) create mode 100644 src/pages/stakingPage/components/BoldGrix.tsx diff --git a/src/pages/stakingPage/components/BoldGrix.tsx b/src/pages/stakingPage/components/BoldGrix.tsx new file mode 100644 index 0000000..a3e792d --- /dev/null +++ b/src/pages/stakingPage/components/BoldGrix.tsx @@ -0,0 +1,24 @@ +import { Text } from '@chakra-ui/react'; +import React from 'react'; + +type BoldGrixProps = { + text: string; +}; + +export const BoldGrix: React.FC = ({ text }) => { + const parts = text.split(/(GRIX|esGRIX)/g); + return ( + <> + {parts.map((part, index) => { + if (part === 'GRIX' || part === 'esGRIX') { + return ( + + {part} + + ); + } + return part; + })} + + ); +}; diff --git a/src/pages/stakingPage/components/StakingCardContent.tsx b/src/pages/stakingPage/components/StakingCardContent.tsx index a2c7db9..cea9913 100644 --- a/src/pages/stakingPage/components/StakingCardContent.tsx +++ b/src/pages/stakingPage/components/StakingCardContent.tsx @@ -16,6 +16,7 @@ import React from 'react'; import { GrixLogo } from '@/components/commons/Logo'; import { formatBalance } from '../utils/formatters'; +import { BoldGrix } from './BoldGrix'; type StakingCardContentProps = { title: string; @@ -69,10 +70,10 @@ export const StakingCardContent: React.FC = ({
- {title} + - {description} +
diff --git a/src/pages/stakingPage/components/VestingComponents/VestingHeader.tsx b/src/pages/stakingPage/components/VestingComponents/VestingHeader.tsx index f0946a0..c1d121b 100644 --- a/src/pages/stakingPage/components/VestingComponents/VestingHeader.tsx +++ b/src/pages/stakingPage/components/VestingComponents/VestingHeader.tsx @@ -1,17 +1,15 @@ -import { Flex, Heading, Text } from '@chakra-ui/react'; +import { Heading, Text, VStack } from '@chakra-ui/react'; +import React from 'react'; -import { GrixLogo } from '@/components/commons/Logo'; +import { BoldGrix } from '../BoldGrix'; export const VestingHeader: React.FC = () => ( - - -
- - Vesting - - - Convert esGRIX tokens to GRIX Token - -
-
+ + + Vesting + + + + + ); diff --git a/src/pages/stakingPage/components/VestingComponents/VestingInfo.tsx b/src/pages/stakingPage/components/VestingComponents/VestingInfo.tsx index e60bad8..f628390 100644 --- a/src/pages/stakingPage/components/VestingComponents/VestingInfo.tsx +++ b/src/pages/stakingPage/components/VestingComponents/VestingInfo.tsx @@ -1,21 +1,15 @@ import { Text, VStack } from '@chakra-ui/react'; +import React from 'react'; -type VestingInfoProps = { - _vestingData?: { - claimable: string; - totalVested: string; - maxVestableAmount: string; - } | null; -}; +import { BoldGrix } from '../BoldGrix'; -export const VestingInfo: React.FC = ({ _vestingData }) => ( - - +export const VestingInfo: React.FC = () => ( + + About Vesting - - Convert your esGRIX tokens to GRIX Token through the vesting process. Vested tokens are claimable on an ongoing - basis. + + ); diff --git a/src/pages/stakingPage/components/VestingComponents/VestingStats.tsx b/src/pages/stakingPage/components/VestingComponents/VestingStats.tsx index 49191b3..d7989d9 100644 --- a/src/pages/stakingPage/components/VestingComponents/VestingStats.tsx +++ b/src/pages/stakingPage/components/VestingComponents/VestingStats.tsx @@ -1,6 +1,9 @@ import { Grid, GridItem, Progress, Text, VStack } from '@chakra-ui/react'; import React from 'react'; +import { BoldGrix } from '../BoldGrix'; +import { formatBalance } from '../../utils/formatters'; + type VestingProgress = { remainingDays: number; progress: number; @@ -19,47 +22,51 @@ type VestingStatsProps = { }; export const VestingStats: React.FC = ({ vestingData }) => ( - + - - Claimable - - - {vestingData?.claimable || '0'} Grix - + + + + + + {vestingData ? formatBalance(vestingData.claimable) : '0.0000'} + + + - - Total Vested - - - {vestingData?.totalVested || '0'} esGrix - + + + + + + {vestingData ? formatBalance(vestingData.totalVested) : '0.0000'} + + + - - Available to vest{' '} - - - {vestingData?.esGrixBalance || '0'} esGrix - + + + + + + {vestingData?.esGrixBalance ? formatBalance(vestingData.esGrixBalance) : '0.0000'} + + + - - Last Vesting Time - - - {vestingData?.lastVestingTime - ? new Date(Number(vestingData.lastVestingTime) * 1000).toLocaleString('en-GB', { - year: 'numeric', - month: 'long', - day: 'numeric', - hour: '2-digit', - minute: '2-digit', - }) - : '----------'} - + + + + + + {vestingData ? formatBalance(vestingData.maxVestableAmount) : '0.0000'} + + + diff --git a/src/pages/stakingPage/index.tsx b/src/pages/stakingPage/index.tsx index 83fa1df..4ae055b 100644 --- a/src/pages/stakingPage/index.tsx +++ b/src/pages/stakingPage/index.tsx @@ -4,6 +4,7 @@ import { useAccount } from 'wagmi'; import { getUserRewardTrackerData } from '@/web3Config/staking/hooks'; +import { BoldGrix } from './components/BoldGrix'; import { RewardsCard } from './components/RewardsCard'; import { StakingCard } from './components/StakingCard'; import { VestingCard } from './components/VestingCard'; @@ -64,7 +65,7 @@ export const StakingPage: React.FC = () => { Staking - Stake GRIX and esGRIX to start earning rewards + From 72bc0992857d2e5203e3a1d52982e6f62f5448e6 Mon Sep 17 00:00:00 2001 From: asalef10 Date: Sun, 20 Apr 2025 13:00:47 +0300 Subject: [PATCH 04/13] lint --- .../stakingPage/components/VestingComponents/VestingStats.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/stakingPage/components/VestingComponents/VestingStats.tsx b/src/pages/stakingPage/components/VestingComponents/VestingStats.tsx index d7989d9..0ec8ddc 100644 --- a/src/pages/stakingPage/components/VestingComponents/VestingStats.tsx +++ b/src/pages/stakingPage/components/VestingComponents/VestingStats.tsx @@ -1,8 +1,8 @@ import { Grid, GridItem, Progress, Text, VStack } from '@chakra-ui/react'; import React from 'react'; -import { BoldGrix } from '../BoldGrix'; import { formatBalance } from '../../utils/formatters'; +import { BoldGrix } from '../BoldGrix'; type VestingProgress = { remainingDays: number; From 2d6acb44d8349d561a6fe8b48cc2bd3a686983d3 Mon Sep 17 00:00:00 2001 From: asalef10 Date: Sun, 20 Apr 2025 13:07:44 +0300 Subject: [PATCH 05/13] Change to eth icon --- src/components/commons/Logo/EthLogo.tsx | 18 ++++++++++++++++++ .../stakingPage/components/RewardsCard.tsx | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 src/components/commons/Logo/EthLogo.tsx diff --git a/src/components/commons/Logo/EthLogo.tsx b/src/components/commons/Logo/EthLogo.tsx new file mode 100644 index 0000000..0ee2407 --- /dev/null +++ b/src/components/commons/Logo/EthLogo.tsx @@ -0,0 +1,18 @@ +import { Icon, IconProps } from '@chakra-ui/react'; +import React from 'react'; + +export const EthLogo: React.FC = (props) => ( + + + + + + + + + + + + + +); diff --git a/src/pages/stakingPage/components/RewardsCard.tsx b/src/pages/stakingPage/components/RewardsCard.tsx index 466b333..a160b18 100644 --- a/src/pages/stakingPage/components/RewardsCard.tsx +++ b/src/pages/stakingPage/components/RewardsCard.tsx @@ -2,6 +2,7 @@ import { Box, Button, HStack, Text, useToast, VStack } from '@chakra-ui/react'; import { useCallback, useEffect, useState } from 'react'; import { useAccount } from 'wagmi'; +import { EthLogo } from '@/components/commons/Logo/EthLogo'; import { GrixLogo } from '@/components/commons/Logo'; import { claim, compound } from '@/web3Config/staking/hooks'; @@ -110,7 +111,7 @@ export const RewardsCard = ({ data, refetchData }: RewardsCardProps): JSX.Elemen - 🔷 + WETH From 4d8d5466fb2a223b2b0e6b575684c7560ee213dc Mon Sep 17 00:00:00 2001 From: asalef10 Date: Sun, 20 Apr 2025 13:09:25 +0300 Subject: [PATCH 06/13] lint --- src/pages/stakingPage/components/RewardsCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/stakingPage/components/RewardsCard.tsx b/src/pages/stakingPage/components/RewardsCard.tsx index a160b18..c4aabb9 100644 --- a/src/pages/stakingPage/components/RewardsCard.tsx +++ b/src/pages/stakingPage/components/RewardsCard.tsx @@ -2,8 +2,8 @@ import { Box, Button, HStack, Text, useToast, VStack } from '@chakra-ui/react'; import { useCallback, useEffect, useState } from 'react'; import { useAccount } from 'wagmi'; -import { EthLogo } from '@/components/commons/Logo/EthLogo'; import { GrixLogo } from '@/components/commons/Logo'; +import { EthLogo } from '@/components/commons/Logo/EthLogo'; import { claim, compound } from '@/web3Config/staking/hooks'; type RewardsCardProps = { From 51f07df81f120d8b6aed826b8f699f43df748b96 Mon Sep 17 00:00:00 2001 From: asalef10 Date: Sun, 20 Apr 2025 13:11:45 +0300 Subject: [PATCH 07/13] Add link --- src/pages/stakingPage/index.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/pages/stakingPage/index.tsx b/src/pages/stakingPage/index.tsx index 4ae055b..c6af764 100644 --- a/src/pages/stakingPage/index.tsx +++ b/src/pages/stakingPage/index.tsx @@ -101,6 +101,13 @@ export const StakingPage: React.FC = () => { border="1px solid" borderColor="gray.900" _hover={{ borderColor: 'gray.800' }} + as="a" + href="https://docs.grix.finance/gitbook/tokenomics/overview" + target="_blank" + rel="noopener noreferrer" + cursor="pointer" + transition="all 0.2s" + _active={{ transform: 'scale(0.98)' }} > From aa7f028a874a79a45c1bc90baeebdcaf9523314d Mon Sep 17 00:00:00 2001 From: asalef10 Date: Sun, 20 Apr 2025 13:45:25 +0300 Subject: [PATCH 08/13] update:text&font --- .../stakingPage/components/RewardsCard.tsx | 36 ++++++----- .../components/StakingCardContent.tsx | 62 ++++++++++--------- .../VestingComponents/VestingHeader.tsx | 6 +- .../VestingComponents/VestingInfo.tsx | 6 +- .../VestingComponents/VestingStats.tsx | 36 +++++------ src/pages/stakingPage/index.tsx | 26 ++++---- 6 files changed, 89 insertions(+), 83 deletions(-) diff --git a/src/pages/stakingPage/components/RewardsCard.tsx b/src/pages/stakingPage/components/RewardsCard.tsx index c4aabb9..3012995 100644 --- a/src/pages/stakingPage/components/RewardsCard.tsx +++ b/src/pages/stakingPage/components/RewardsCard.tsx @@ -101,49 +101,49 @@ export const RewardsCard = ({ data, refetchData }: RewardsCardProps): JSX.Elemen return ( - + - - + + WETH - + ≤{(0.0001).toFixed(4)} WETH (≤${(0.01).toFixed(2)}) - - + + Staked Amount - + {data?.stakedAmount ? Number(data.stakedAmount).toFixed(4) : '0.0000'} GRIX - - + + Claimable Rewards - + {data?.claimable ? Number(data.claimable).toFixed(4) : '0.0000'} esGRIX {grixPrice && data?.claimable && ( - +  ($ {(Number(data.claimable) * grixPrice).toLocaleString(undefined, { minimumFractionDigits: 2, @@ -160,9 +160,10 @@ export const RewardsCard = ({ data, refetchData }: RewardsCardProps): JSX.Elemen loadingText="Claiming" bg="teal.400" color="white" - size="lg" + size="md" width="full" - height="48px" + height="40px" + fontSize="sm" isDisabled={!data?.claimable || Number(data?.claimable) <= 0} _hover={{ bg: 'teal.500' }} _active={{ bg: 'teal.600' }} @@ -176,9 +177,10 @@ export const RewardsCard = ({ data, refetchData }: RewardsCardProps): JSX.Elemen loadingText="Compounding" bg="teal.400" color="white" - size="lg" + size="md" width="full" - height="48px" + height="40px" + fontSize="sm" _hover={{ bg: 'teal.500' }} _active={{ bg: 'teal.600' }} > diff --git a/src/pages/stakingPage/components/StakingCardContent.tsx b/src/pages/stakingPage/components/StakingCardContent.tsx index cea9913..493a02a 100644 --- a/src/pages/stakingPage/components/StakingCardContent.tsx +++ b/src/pages/stakingPage/components/StakingCardContent.tsx @@ -59,56 +59,56 @@ export const StakingCardContent: React.FC = ({ }) => ( - - + +
- + - +
- - - + + + Staked - + {formatBalance(stakedAmount)} - - + + Available to stake - + {formatBalance(availableBalance)} - - + + APR - + {apr.toFixed(2)}% - - + + = ({ bg="gray.900" _hover={{ borderColor: 'gray.600' }} _focus={{ borderColor: 'primary.500' }} - height="48px" + height="40px" + fontSize="sm" /> - +