From cfee971063d951bc9806453865b85c66b0fd1616 Mon Sep 17 00:00:00 2001 From: Joe Bowman Date: Wed, 24 Jan 2024 11:39:11 +0000 Subject: [PATCH] chore(deps): bump cosmossdk.io/errors from 1.0.0 to 1.0.1 (#1025) Bumps [cosmossdk.io/errors](https://github.com/cosmos/cosmos-sdk) from 1.0.0 to 1.0.1. - [Release notes](https://github.com/cosmos/cosmos-sdk/releases) - [Changelog](https://github.com/cosmos/cosmos-sdk/blob/main/CHANGELOG.md) - [Commits](https://github.com/cosmos/cosmos-sdk/compare/log/v1.0.0...math/v1.0.1) --- updated-dependencies: - dependency-name: cosmossdk.io/errors dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> finish intents fix intent match fix custom weight size remove under construction image add more mobile resisizng, prepare assets grid for main net rewards queries, remove Three chore(deps): bump cosmjs-types from 0.5.0 to 0.9.0 in /web-ui (#998) Bumps [cosmjs-types](https://github.com/confio/cosmjs-types) from 0.5.0 to 0.9.0. - [Changelog](https://github.com/confio/cosmjs-types/blob/main/CHANGELOG.md) - [Commits](https://github.com/confio/cosmjs-types/compare/v0.5.0...v0.9.0) --- updated-dependencies: - dependency-name: cosmjs-types dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> chore(deps-dev): bump @types/react-dom from 18.0.9 to 18.2.18 in /web-ui (#1008) Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 18.0.9 to 18.2.18. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom) --- updated-dependencies: - dependency-name: "@types/react-dom" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> chore(deps): bump framer-motion from 9.0.7 to 10.18.0 in /web-ui (#1026) Bumps [framer-motion](https://github.com/framer/motion) from 9.0.7 to 10.18.0. - [Changelog](https://github.com/framer/motion/blob/main/CHANGELOG.md) - [Commits](https://github.com/framer/motion/compare/v9.0.7...v10.18.0) --- updated-dependencies: - dependency-name: framer-motion dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> chore(deps): bump remixicon from 3.7.0 to 4.0.1 in /web-ui (#931) Bumps [remixicon](https://github.com/Remix-Design/remixicon) from 3.7.0 to 4.0.1. - [Release notes](https://github.com/Remix-Design/remixicon/releases) - [Commits](https://github.com/Remix-Design/remixicon/commits) --- updated-dependencies: - dependency-name: remixicon dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> chore(deps): bump @tanstack/react-query-devtools in /web-ui (#1029) Bumps [@tanstack/react-query-devtools](https://github.com/TanStack/query/tree/HEAD/packages/react-query-devtools) from 4.36.1 to 5.17.9. - [Release notes](https://github.com/TanStack/query/releases) - [Commits](https://github.com/TanStack/query/commits/v5.17.9/packages/react-query-devtools) --- updated-dependencies: - dependency-name: "@tanstack/react-query-devtools" dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> chore(deps-dev): bump @types/node from 20.10.6 to 20.11.0 in /web-ui (#1022) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.10.6 to 20.11.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> chore(deps): bump react-markdown from 8.0.7 to 9.0.1 in /web-ui (#1016) Bumps [react-markdown](https://github.com/remarkjs/react-markdown) from 8.0.7 to 9.0.1. - [Release notes](https://github.com/remarkjs/react-markdown/releases) - [Changelog](https://github.com/remarkjs/react-markdown/blob/main/changelog.md) - [Commits](https://github.com/remarkjs/react-markdown/compare/8.0.7...9.0.1) --- updated-dependencies: - dependency-name: react-markdown dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> chore(deps): bump react-icons from 4.12.0 to 5.0.1 in /web-ui (#1023) Bumps [react-icons](https://github.com/react-icons/react-icons) from 4.12.0 to 5.0.1. - [Release notes](https://github.com/react-icons/react-icons/releases) - [Commits](https://github.com/react-icons/react-icons/compare/v4.12.0...v5.0.1) --- updated-dependencies: - dependency-name: react-icons dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> chore(deps): bump golang.org/x/tools from 0.16.1 to 0.17.0 (#1030) Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.16.1 to 0.17.0. - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.16.1...v0.17.0) --- updated-dependencies: - dependency-name: golang.org/x/tools dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> finish claim transaction add rewards claim UI, transactions, & queries add drawer controller for wallet modal, add filter for defi table Merge branch 'main' into bunDev2 add better styles to filter buttons Merge branch 'bunDev2' of https://github.com/quicksilver-zone/quicksilver into bunDev2 change deploy workflow branch fix webui deploy branch clean up code, make intent setting safer fix staking util types make intent memo safer remove useless null & unused imports remove console log finish authz tx fix portfolio percentage width fix spinner size in defi table match all button styles rename main app component fix mobile menu links add juno, fix somm add cosmjs override dependency updates bump dependencies to fix tm0.37 issue add docs url hide PP and link about to quicksilver.zone add default text if no intent set add asset page info hovers, fix wallet styles in theme, update to usechains for wallet connect, add correct address for claims backend fix linting, lint remove broken leap metamask snaps remove /quicksilver from url fix resizing a ordering add udpated icons add secret & umee to wallet connect. remove secret fix icons before launch remove airdrop page use updated quicksilverjs fix IBC, change icon contrast add logo to staking page fix side header highlights fix asset amount loading loop better hover styles for side header components remove deprecated packages, lint revert lockfile changes fix gov prop search lint fix wallet errors, fix mobile wallet, move wallet button fix mobile wallet, change side header colors change metadata update update twitter logo, fix mobile social links bump quicksilverjs add logo to other pages add tooltip arrow color fix flicker, update state for portfolio, fix wallet connect state, fix 0% apr quicksilverjs v1.1.0 fix sort order fix sort order remove legacy env vars reduce fees use env var for /defi api remove qs logo from assets page hide all qassets until we have claims enabled change alignment of qck balance re-add assets, but hide empty rows show the full grid prettify the qasset lint fix lockfile fix ibc withdraw dest address rework xcc authz notice update tooltip for non-native assets lint more fixes refine gas prices fix send fee show tokenized shares regardless of delegations, update tokenized share send denom change unstaking tokens available denom add tx events, fetch denom from events fix linting mobile modals fix qs branding positons, add more mobile breakpoint resizing finish breakpoints move qs logo slightly --- web-ui/.env | 9 +- web-ui/.env.development | 4 - web-ui/.eslintrc.json | 2 +- web-ui/bun.lockb | Bin 466233 -> 440170 bytes web-ui/components/Assets/assetsGrid.tsx | 82 +++--- web-ui/components/Assets/intents.tsx | 98 +++---- .../Assets/modals/qTokenDepositModal.tsx | 6 +- .../Assets/modals/qTokenWithdrawlModal.tsx | 23 +- .../Assets/modals/qckDepositModal.tsx | 7 +- .../Assets/modals/qckWithdrawModal.tsx | 4 +- .../Assets/modals/signalIntentProcess.tsx | 9 +- web-ui/components/Assets/portfolio.tsx | 45 +++- web-ui/components/Assets/quickbox.tsx | 23 +- web-ui/components/Assets/rewardsClaim.tsx | 101 +++++--- web-ui/components/Assets/unbondingTable.tsx | 84 +++++- web-ui/components/Defi/defiBox.tsx | 28 +- web-ui/components/Governance/ProposalCard.tsx | 3 +- .../components/Governance/ProposalModal.tsx | 6 +- .../components/Governance/VotingSection.tsx | 32 ++- web-ui/components/Governance/common.tsx | 66 +---- web-ui/components/Staking/assetsAccordion.tsx | 4 +- web-ui/components/Staking/infoBox.tsx | 2 +- .../Staking/modals/stakingProcessModal.tsx | 34 ++- .../Staking/modals/transferProcessModal.tsx | 76 +++--- .../modals/validatorSelectionModal.tsx | 3 +- web-ui/components/Staking/stakingBox.tsx | 161 ++++++------ web-ui/components/react/astronaut.tsx | 27 +- web-ui/components/react/header.tsx | 22 +- web-ui/components/react/sideHeader.tsx | 136 +++++----- web-ui/components/react/wallet-connect.tsx | 18 +- web-ui/components/wallet-button.tsx | 24 +- web-ui/components/wallet.tsx | 101 +------- web-ui/config/theme.ts | 17 ++ web-ui/global.d.ts | 7 + web-ui/hooks/useGrpcQueryClient.ts | 5 +- web-ui/hooks/useQueries.ts | 41 ++- web-ui/hooks/useTx.tsx | 10 +- web-ui/next.config.js | 5 +- web-ui/package.json | 33 ++- web-ui/pages/_app.tsx | 95 +++++-- web-ui/pages/about.tsx | 2 +- web-ui/pages/airdrop.tsx | 2 +- web-ui/pages/assets.tsx | 239 ++++++++++-------- web-ui/pages/defi.tsx | 56 ++-- web-ui/pages/geo-block.tsx | 2 +- web-ui/pages/governance.tsx | 18 +- web-ui/pages/privacy-policy.tsx | 2 +- .../staking/[chainId]/[valoperAddress].tsx | 4 +- web-ui/pages/staking/index.tsx | 32 ++- web-ui/public/img/airdrop.png | Bin 674355 -> 2753 bytes web-ui/public/img/assets.png | Bin 764462 -> 2169 bytes web-ui/public/img/defi.png | Bin 340453 -> 695 bytes web-ui/public/img/governance.png | Bin 549661 -> 1954 bytes web-ui/public/img/index.js | 2 - web-ui/public/img/liquid.png | Bin 445696 -> 2687 bytes web-ui/public/img/networks/juno.svg | 46 +++- web-ui/public/img/networks/qjuno.png | Bin 0 -> 73694 bytes web-ui/public/img/networks/quicksilver.svg | 117 +++------ web-ui/public/img/networks/somm.svg | 13 + web-ui/public/img/quicksilverWord.png | Bin 0 -> 29480 bytes web-ui/state/chains/prod.ts | 98 ++++--- web-ui/styles/globals.css | 30 +++ web-ui/test/Staking.test.tsx | 24 +- web-ui/tx/intentTx.tsx | 6 +- web-ui/utils/index.ts | 3 +- web-ui/utils/string.ts | 6 + 66 files changed, 1182 insertions(+), 973 deletions(-) create mode 100644 web-ui/global.d.ts create mode 100644 web-ui/public/img/networks/qjuno.png create mode 100644 web-ui/public/img/networks/somm.svg create mode 100644 web-ui/public/img/quicksilverWord.png create mode 100644 web-ui/utils/string.ts diff --git a/web-ui/.env b/web-ui/.env index b4428c9da..e2ee1d560 100644 --- a/web-ui/.env +++ b/web-ui/.env @@ -11,13 +11,11 @@ NEXT_PUBLIC_MAINNET_LCD_ENDPOINT_REGEN="https://lcd.regen-1.quicksilver.zone" NEXT_PUBLIC_MAINNET_RPC_ENDPOINT_REGEN="https://rpc.regen-1.quicksilver.zone" NEXT_PUBLIC_MAINNET_LCD_ENDPOINT_SOMMELIER="https://lcd.sommelier-3.quicksilver.zone" NEXT_PUBLIC_MAINNET_RPC_ENDPOINT_SOMMELIER="https://rpc.sommelier-3.quicksilver.zone" +NEXT_PUBLIC_MAINNET_LCD_ENDPOINT_JUNO="https://lcd.juno-1.quicksilver.zone" +NEXT_PUBLIC_MAINNET_RPC_ENDPOINT_JUNO="https://rpc.juno-1.quicksilver.zone" NEXT_PUBLIC_QUICKSILVER_API="https://lcd.quicksilver.zone" NEXT_PUBLIC_QUICKSILVER_DATA_API="https://data.quicksilver.zone" ZONE_URL="quicksilver.zone" -REACT_APP_WHITELISTED_ZONES="osmosis-1,stargaze-1,regen-1,cosmoshub-4,sommelier-3" -REACT_APP_ENABLE_UNBONDING="true" -REACT_APP_ENABLE_SET_INTENT="true" -REACT_APP_ENABLE_CLAIMS="true" APY_ZONES_ENDPOINT = "https://chains.cosmos.directory" NEXT_PUBLIC_OSMOSIS_API="https://api.osmosis.zone" NEXT_PUBLIC_WHITELISTED_DENOM="uatom,ustars,uosmo,usomm,uregen" @@ -26,4 +24,5 @@ NEXT_PUBLIC_COSMOSHUB_CHAIN_ID=cosmoshub-4 NEXT_PUBLIC_OSMOSIS_CHAIN_ID=osmosis-1 NEXT_PUBLIC_STARGAZE_CHAIN_ID=stargaze-1 NEXT_PUBLIC_REGEN_CHAIN_ID=regen-1 -NEXT_PUBLIC_SOMMELIER_CHAIN_ID=sommelier-3 \ No newline at end of file +NEXT_PUBLIC_SOMMELIER_CHAIN_ID=sommelier-3 +NEXT_PUBLIC_JUNO_CHAIN_ID=juno-1 \ No newline at end of file diff --git a/web-ui/.env.development b/web-ui/.env.development index d041ac509..53c6e26ed 100644 --- a/web-ui/.env.development +++ b/web-ui/.env.development @@ -14,10 +14,6 @@ # NEXT_PUBLIC_QUICKSILVER_API="https://lcd.test.quicksilver.zone" # NEXT_PUBLIC_QUICKSILVER_DATA_API="https://data.test.quicksilver.zone" # ZONE_URL="quicksilver.zone" -# REACT_APP_WHITELISTED_ZONES="osmosis-1,stargaze-1,regen-1,cosmoshub-4,sommelier-3" -# REACT_APP_ENABLE_UNBONDING="true" -# REACT_APP_ENABLE_SET_INTENT="true" -# REACT_APP_ENABLE_CLAIMS="true" # APY_ZONES_ENDPOINT = "https://chains.cosmos.directory" # NEXT_PUBLIC_OSMOSIS_API="https://api.osmosis.zone" # NEXT_PUBLIC_WHITELISTED_DENOM="uatom,ustars,uosmo,usomm,uregen" diff --git a/web-ui/.eslintrc.json b/web-ui/.eslintrc.json index a9b0e6a52..595dd805c 100644 --- a/web-ui/.eslintrc.json +++ b/web-ui/.eslintrc.json @@ -1,5 +1,5 @@ { - "extends": "next/babel", + "extends": "next/core-web-vitals", "plugins": ["import"], "rules": { "import/order": [ diff --git a/web-ui/bun.lockb b/web-ui/bun.lockb index b03ea87e93e509a1cef2ac8b437a0c98ce467730..a03b7aa27bb5a0b50cb38ab31cff0135a8a49931 100755 GIT binary patch delta 122018 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 m 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 delta 147215 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 F{~vOSELZ>l diff --git a/web-ui/components/Assets/assetsGrid.tsx b/web-ui/components/Assets/assetsGrid.tsx index d6e25e67b..be26d968f 100644 --- a/web-ui/components/Assets/assetsGrid.tsx +++ b/web-ui/components/Assets/assetsGrid.tsx @@ -1,10 +1,12 @@ -import { Box, VStack, Text, Divider, HStack, Flex, Grid, GridItem, Spinner } from '@chakra-ui/react'; +import { WarningIcon } from '@chakra-ui/icons'; +import { Box, VStack, Text, Divider, HStack, Flex, Grid, GridItem, Spinner, Tooltip } from '@chakra-ui/react'; import React from 'react'; +import { shiftDigits, formatQasset } from '@/utils'; + import QDepositModal from './modals/qTokenDepositModal'; import QWithdrawModal from './modals/qTokenWithdrawlModal'; -import { shiftDigits } from '@/utils'; interface AssetCardProps { assetName: string; @@ -48,12 +50,17 @@ type LiquidRewardsData = { errors: Errors; }; -const AssetCard: React.FC = ({ assetName, balance, apy, nativeAssetName, isWalletConnected, nonNative }) => { +function truncateToTwoDecimals(num: number) { + const multiplier = Math.pow(10, 2); + return Math.floor(num * multiplier) / multiplier; +} + +const AssetCard: React.FC = ({ assetName, balance, apy }) => { const calculateTotalBalance = (nonNative: LiquidRewardsData | undefined, nativeAssetName: string) => { if (!nonNative) { return '0'; } - const chainIds = ['osmosis-1', 'secret-1', 'umee-1', 'cosmoshub-4', 'stargaze-1', 'sommelier-3', 'regen-1']; + const chainIds = ['osmosis-1', 'secret-1', 'umee-1', 'cosmoshub-4', 'stargaze-1', 'sommelier-3', 'regen-1', 'juno-1']; let totalAmount = 0; chainIds.forEach((chainId) => { @@ -71,15 +78,15 @@ const AssetCard: React.FC = ({ assetName, balance, apy, nativeAs return shiftDigits(totalAmount.toString(), -6); // Adjust the shift as per your data's scale }; - const nativeAssets = nonNative?.assets['rhye-2'] - ? nonNative.assets['rhye-2'][0].Amount.find((amount) => amount.denom === `uq${nativeAssetName.toLowerCase()}`) - : undefined; + // const nativeAssets = nonNative?.assets['quicksilver-2'] + // ? nonNative.assets['quicksilver-2'][0].Amount.find((amount) => amount.denom === `uq${nativeAssetName.toLowerCase()}`) + // : undefined; - const formattedNonNativeBalance = calculateTotalBalance(nonNative, nativeAssetName); + // const formattedNonNativeBalance = calculateTotalBalance(nonNative, nativeAssetName); - const formattedNativebalance = nativeAssets ? shiftDigits(nativeAssets.amount, -6) : '0'; + // const formattedNativebalance = nativeAssets ? shiftDigits(nativeAssets.amount, -6) : '0'; - if (!balance || !apy) { + if (balance === undefined || balance === null || apy === undefined || apy === null) { return ( = ({ assetName, balance, apy, nativeAs ); } + return ( @@ -108,7 +116,7 @@ const AssetCard: React.FC = ({ assetName, balance, apy, nativeAs APY: - {shiftDigits(apy.toFixed(2), 2)}% + {truncateToTwoDecimals(Number(shiftDigits(apy, 2)))}% @@ -121,19 +129,18 @@ const AssetCard: React.FC = ({ assetName, balance, apy, nativeAs - {formattedNativebalance} + {balance.toString()} {assetName} - + {/* NON-NATIVE: - {formattedNonNativeBalance} - + */} @@ -148,9 +155,14 @@ const AssetCard: React.FC = ({ assetName, balance, apy, nativeAs const AssetsGrid: React.FC = ({ assets, isWalletConnected, nonNative }) => { return ( <> - - qAssets - + + + qAssets + + + + + {!isWalletConnected && ( = ({ assets, isWalletConnected, nonNa )} {isWalletConnected && ( - - - {assets.map((asset, index) => ( - - - - ))} - - + + {assets.map((asset, index) => ( + + + + ))} + )} ); diff --git a/web-ui/components/Assets/intents.tsx b/web-ui/components/Assets/intents.tsx index 0e7f7cdf4..5ebc66413 100644 --- a/web-ui/components/Assets/intents.tsx +++ b/web-ui/components/Assets/intents.tsx @@ -12,16 +12,17 @@ import { Spinner, SkeletonCircle, SkeletonText, + Center, } from '@chakra-ui/react'; - import { Key, useState } from 'react'; -import SignalIntentModal from './modals/signalIntentProcess'; - import { useIntentQuery, useValidatorLogos, useValidatorsQuery } from '@/hooks/useQueries'; import { networks as prodNetworks, testNetworks as devNetworks } from '@/state/chains/prod'; import { truncateString } from '@/utils'; +import SignalIntentModal from './modals/signalIntentProcess'; + + export interface StakingIntentProps { address: string; isWalletConnected: boolean; @@ -30,7 +31,7 @@ export interface StakingIntentProps { const StakingIntent: React.FC = ({ address, isWalletConnected }) => { const networks = process.env.NEXT_PUBLIC_CHAIN_ENV === 'mainnet' ? prodNetworks : devNetworks; - const chains = ['Cosmos', 'Osmosis', 'Stargaze', 'Regen', 'Sommelier']; + const chains = ['Cosmos', 'Osmosis', 'Stargaze', 'Regen', 'Sommelier', 'Juno']; const [currentChainIndex, setCurrentChainIndex] = useState(0); const [isSignalIntentModalOpen, setIsSignalIntentModalOpen] = useState(false); @@ -157,49 +158,54 @@ const StakingIntent: React.FC = ({ address, isWalletConnecte /> - - {validatorsWithDetails.map( - (validator: { logoUrl: string; moniker: string; percentage: string }, index: Key | null | undefined) => ( - - - {validator.logoUrl ? ( - {validator.moniker} - ) : ( - - )} - {validator.moniker ? ( - {truncateString(validator.moniker, 20)} - ) : ( - - )} + + {(validatorsWithDetails.length > 0 && + validatorsWithDetails.map( + (validator: { logoUrl: string; moniker: string; percentage: string }, index: Key | null | undefined) => ( + + + {validator.logoUrl ? ( + {validator.moniker} + ) : ( + + )} + {validator.moniker ? ( + {truncateString(validator.moniker, 20)} + ) : ( + + )} + + + {validator.percentage} + - - {validator.percentage} - - - ), + ), + )) || ( +

+ No intent set +
)} diff --git a/web-ui/components/Assets/modals/qTokenDepositModal.tsx b/web-ui/components/Assets/modals/qTokenDepositModal.tsx index a01152de4..d9e5d937c 100644 --- a/web-ui/components/Assets/modals/qTokenDepositModal.tsx +++ b/web-ui/components/Assets/modals/qTokenDepositModal.tsx @@ -14,11 +14,11 @@ import { useToast, Spinner, } from '@chakra-ui/react'; -import { ibc } from '@chalabi/quicksilverjs'; import { StdFee, coins } from '@cosmjs/stargate'; import { ChainName } from '@cosmos-kit/core'; import { useChain, useManager } from '@cosmos-kit/react'; import BigNumber from 'bignumber.js'; +import { ibc } from 'quicksilverjs'; import { useState, useMemo, useEffect } from 'react'; import { ChooseChain } from '@/components/react/choose-chain'; @@ -42,7 +42,7 @@ const QDepositModal: React.FC = ({ token }) => { const [isLoading, setIsLoading] = useState(false); const chainOptions = useMemo(() => { - const desiredChains = ['osmosis', 'secretnetwork', 'umee']; + const desiredChains = ['osmosis', 'umee']; return chainRecords .filter((chainRecord) => desiredChains.includes(chainRecord.name)) .map((chainRecord) => ({ @@ -101,7 +101,7 @@ const QDepositModal: React.FC = ({ token }) => { const chain = chainName as ChainDenomMappingKeys; const chainDenoms = ibcDenomDepositMapping[chain]; - if (token in chainDenoms) { + if (chainDenoms && token in chainDenoms) { return chainDenoms[token as TokenKeys]; } diff --git a/web-ui/components/Assets/modals/qTokenWithdrawlModal.tsx b/web-ui/components/Assets/modals/qTokenWithdrawlModal.tsx index 2557f7bad..9b629104f 100644 --- a/web-ui/components/Assets/modals/qTokenWithdrawlModal.tsx +++ b/web-ui/components/Assets/modals/qTokenWithdrawlModal.tsx @@ -10,16 +10,15 @@ import { FormControl, FormLabel, Input, - Select, useDisclosure, useToast, Spinner, } from '@chakra-ui/react'; -import { ibc } from '@chalabi/quicksilverjs'; import { StdFee, coins } from '@cosmjs/stargate'; import { ChainName } from '@cosmos-kit/core'; import { useChain, useManager } from '@cosmos-kit/react'; import BigNumber from 'bignumber.js'; +import { ibc } from 'quicksilverjs'; import { useState, useMemo, useEffect } from 'react'; import { ChooseChain } from '@/components/react/choose-chain'; @@ -43,7 +42,7 @@ const QWithdrawModal: React.FC = ({ token }) => { const [isLoading, setIsLoading] = useState(false); const chainOptions = useMemo(() => { - const desiredChains = ['osmosis', 'secretnetwork', 'umee']; + const desiredChains = ['osmosis', 'umee']; return chainRecords .filter((chainRecord) => desiredChains.includes(chainRecord.name)) .map((chainRecord) => ({ @@ -69,16 +68,14 @@ const QWithdrawModal: React.FC = ({ token }) => { const chooseChain = ; - const fromChain = chainName; - const toChain = 'quicksilver'; + const fromChain = 'quicksilver'; + const toChain = chainName; const { transfer } = ibc.applications.transfer.v1.MessageComposer.withTypeUrl; - const { address, connect, status, message, wallet } = useChain(fromChain ?? ''); + const { address } = useChain(toChain ?? ''); const { address: qAddress } = useChain('quicksilver'); const { balance } = useIbcBalanceQuery(fromChain ?? '', address ?? ''); const { tx } = useTx(fromChain ?? ''); - const qckBalance = - balance?.balances.find((b) => b.denom === 'ibc/635CB83EF1DFE598B10A3E90485306FD0D47D34217A4BE5FD9977FA010A5367D')?.amount ?? ''; const onSubmitClick = async () => { setIsLoading(true); @@ -96,13 +93,13 @@ const QWithdrawModal: React.FC = ({ token }) => { // Function to get the correct IBC denom trace based on chain and token type ChainDenomMappingKeys = keyof typeof ibcDenomWithdrawMapping; - type TokenKeys = keyof (typeof ibcDenomWithdrawMapping)['osmosis']; + type TokenKeys = keyof (typeof ibcDenomWithdrawMapping)['quicksilver']; const getIbcDenom = (chainName: string, token: string) => { const chain = chainName as ChainDenomMappingKeys; const chainDenoms = ibcDenomWithdrawMapping[chain]; - if (token in chainDenoms) { + if (chainDenoms && token in chainDenoms) { return chainDenoms[token as TokenKeys]; } @@ -123,7 +120,7 @@ const QWithdrawModal: React.FC = ({ token }) => { } const ibcToken = { - denom: ibcDenom ?? '', + denom: 'u' + ibcDenom ?? '', amount: transferAmount, }; @@ -133,8 +130,8 @@ const QWithdrawModal: React.FC = ({ token }) => { const msg = transfer({ sourcePort, sourceChannel, - sender: address ?? '', - receiver: qAddress ?? '', + sender: qAddress ?? '', + receiver: address ?? '', token: ibcToken, timeoutHeight: undefined, //@ts-ignore diff --git a/web-ui/components/Assets/modals/qckDepositModal.tsx b/web-ui/components/Assets/modals/qckDepositModal.tsx index f66d67efc..6cef3519f 100644 --- a/web-ui/components/Assets/modals/qckDepositModal.tsx +++ b/web-ui/components/Assets/modals/qckDepositModal.tsx @@ -13,19 +13,19 @@ import { useDisclosure, Spinner, } from '@chakra-ui/react'; -import { ibc } from '@chalabi/quicksilverjs'; import { StdFee } from '@cosmjs/stargate'; import { ChainName } from '@cosmos-kit/core'; import { useChain, useManager } from '@cosmos-kit/react'; import BigNumber from 'bignumber.js'; import { assets, chains } from 'chain-registry'; +import { ibc } from 'quicksilverjs'; import { useState, useMemo, useEffect } from 'react'; import { ChooseChain } from '@/components/react/choose-chain'; import { handleSelectChainDropdown, ChainOption } from '@/components/types'; import { useTx } from '@/hooks'; import { useIbcBalanceQuery } from '@/hooks/useQueries'; -import { getCoin, getIbcInfo, shiftDigits } from '@/utils'; +import { getIbcInfo, shiftDigits } from '@/utils'; export function DepositModal() { const { isOpen, onOpen, onClose } = useDisclosure(); @@ -107,7 +107,8 @@ export function DepositModal() { sender: address ?? '', receiver: qAddress ?? '', token, - timeoutHeight: undefined, + //@ts-ignore + timeoutHeight: 0, //@ts-ignore timeoutTimestamp: timeoutInNanos, memo: '', diff --git a/web-ui/components/Assets/modals/qckWithdrawModal.tsx b/web-ui/components/Assets/modals/qckWithdrawModal.tsx index f010f0c78..171671e41 100644 --- a/web-ui/components/Assets/modals/qckWithdrawModal.tsx +++ b/web-ui/components/Assets/modals/qckWithdrawModal.tsx @@ -11,20 +11,18 @@ import { FormLabel, Input, useDisclosure, - useToast, Spinner, } from '@chakra-ui/react'; -import { ibc } from '@chalabi/quicksilverjs'; import { StdFee, coins } from '@cosmjs/stargate'; import { ChainName } from '@cosmos-kit/core'; import { useChain, useManager } from '@cosmos-kit/react'; import BigNumber from 'bignumber.js'; +import { ibc } from 'quicksilverjs'; import { useState, useMemo, useEffect } from 'react'; import { ChooseChain } from '@/components/react/choose-chain'; import { handleSelectChainDropdown, ChainOption } from '@/components/types'; import { useTx } from '@/hooks'; -import { useIbcBalanceQuery } from '@/hooks/useQueries'; import { getCoin, getIbcInfo } from '@/utils'; export function WithdrawModal() { diff --git a/web-ui/components/Assets/modals/signalIntentProcess.tsx b/web-ui/components/Assets/modals/signalIntentProcess.tsx index 052e2623c..5fcaa24fd 100644 --- a/web-ui/components/Assets/modals/signalIntentProcess.tsx +++ b/web-ui/components/Assets/modals/signalIntentProcess.tsx @@ -19,20 +19,19 @@ import { import { StdFee } from '@cosmjs/amino'; import { useChain } from '@cosmos-kit/react'; import styled from '@emotion/styled'; - import { assets } from 'chain-registry'; import { quicksilver } from 'quicksilverjs'; - import React, { useEffect, useState } from 'react'; +import { useTx } from '@/hooks'; + import { IntentMultiModal } from './intentMultiModal'; -import { useTx } from '@/hooks'; const ChakraModalContent = styled(ModalContent)` position: relative; background: none; - max-height: 320px; + max-height: 350px; &::before, &::after { z-index: -1; @@ -254,7 +253,7 @@ export const SignalIntentModal: React.FC = ({ isOpen, onClose return ( - + diff --git a/web-ui/components/Assets/portfolio.tsx b/web-ui/components/Assets/portfolio.tsx index 2a8467b2d..e8f9b49bb 100644 --- a/web-ui/components/Assets/portfolio.tsx +++ b/web-ui/components/Assets/portfolio.tsx @@ -1,6 +1,6 @@ -import { Progress, Flex, Text, VStack, HStack, Heading, Spinner, Tooltip, Grid, Center, Box } from '@chakra-ui/react'; +import { Progress, Flex, Text, VStack, HStack, Heading, Spinner, Tooltip, Grid, Box } from '@chakra-ui/react'; -import { abbreviateNumber, shiftDigits } from '@/utils'; +import { abbreviateNumber, shiftDigits, formatQasset } from '@/utils'; interface PortfolioItemInterface { title: string; @@ -16,8 +16,16 @@ interface MyPortfolioProps { totalValue: number; averageApy: number; totalYearlyYield: number; + isLoading: boolean; } -const MyPortfolio: React.FC = ({ portfolioItems, isWalletConnected, totalValue, averageApy, totalYearlyYield }) => { +const MyPortfolio: React.FC = ({ + portfolioItems, + isWalletConnected, + totalValue, + averageApy, + totalYearlyYield, + isLoading, +}) => { if (!isWalletConnected) { return ( = ({ portfolioItems, isWalletConne ); } - if (!totalValue) { + if (isLoading) { return ( = ({ portfolioItems, isWalletConne AVG APY: - - {shiftDigits(averageApy.toFixed(2), 2)}% - + {Number.isNaN(averageApy) && ( + + 0% + + )} + {Number.isFinite(averageApy) && ( + + {shiftDigits(averageApy.toFixed(2), 2)}% + + )} @@ -103,9 +118,15 @@ const MyPortfolio: React.FC = ({ portfolioItems, isWalletConne - + {totalValue === 0 && ( + + + You have no liquid staked assets. + + + )} - + {portfolioItems .filter((item) => Number(item.amount) > 0) .map((item) => ( @@ -116,6 +137,7 @@ const MyPortfolio: React.FC = ({ portfolioItems, isWalletConne progressBarColor={item.progressBarColor} amount={item.amount} qTokenPrice={item.qTokenPrice} + totalValue={totalValue} /> ))} @@ -131,9 +153,10 @@ interface PortfolioItemProps { progressBarColor: string; amount: string; qTokenPrice: number; + totalValue: number; } -const PortfolioItem: React.FC = ({ title, percentage, progressBarColor, amount, qTokenPrice }) => { +const PortfolioItem: React.FC = ({ title, percentage, progressBarColor, amount, qTokenPrice, totalValue }) => { const amountLength = amount.toString().length; const amountWidth = Math.min(Math.max(amountLength * 8, 90), 100); @@ -146,7 +169,7 @@ const PortfolioItem: React.FC = ({ title, percentage, progre - {title} + {formatQasset(title)} diff --git a/web-ui/components/Assets/quickbox.tsx b/web-ui/components/Assets/quickbox.tsx index 7080b130f..eecc6e029 100644 --- a/web-ui/components/Assets/quickbox.tsx +++ b/web-ui/components/Assets/quickbox.tsx @@ -1,27 +1,28 @@ -import { Box, Flex, Text, Button, VStack, useColorModeValue, HStack, SkeletonCircle, Spinner } from '@chakra-ui/react'; +import { Box, Flex, Text, VStack, HStack, SkeletonCircle, Spinner } from '@chakra-ui/react'; import { useChain } from '@cosmos-kit/react'; import { BsCoin } from 'react-icons/bs'; -import { DepositModal } from './modals/qckDepositModal'; -import { WithdrawModal } from './modals/qckWithdrawModal'; - import { defaultChainName } from '@/config'; import { useBalanceQuery } from '@/hooks/useQueries'; import { shiftDigits } from '@/utils'; +import { DepositModal } from './modals/qckDepositModal'; +import { WithdrawModal } from './modals/qckWithdrawModal'; + + interface QuickBoxProps { stakingApy?: number; } const QuickBox: React.FC = ({ stakingApy }) => { - const { address, isWalletConnected } = useChain(defaultChainName); + const { address } = useChain(defaultChainName); const { balance, isLoading } = useBalanceQuery(defaultChainName, address ?? ''); const tokenBalance = Number(shiftDigits(balance?.balance?.amount ?? '', -6)) .toFixed(2) .toString(); - if (!isWalletConnected) { + if (!address) { return ( @@ -89,15 +90,15 @@ const QuickBox: React.FC = ({ stakingApy }) => { {quickStakingApy()} - - ON QUICKSILVER: + + ON QUICKSILVER: {isLoading === true && !balance && } {!isLoading && balance && ( - - {tokenBalance} + + {tokenBalance} QCK )} - + diff --git a/web-ui/components/Assets/rewardsClaim.tsx b/web-ui/components/Assets/rewardsClaim.tsx index 52831396e..eaea88cb2 100644 --- a/web-ui/components/Assets/rewardsClaim.tsx +++ b/web-ui/components/Assets/rewardsClaim.tsx @@ -1,16 +1,12 @@ import { CloseIcon } from '@chakra-ui/icons'; -import { Box, Flex, Text, VStack, Button, HStack, Checkbox, Spinner } from '@chakra-ui/react'; -import { useState } from 'react'; - -import { useLiquidEpochQuery } from '@/hooks/useQueries'; +import { Box, Flex, Text, VStack, Button, HStack, Spinner } from '@chakra-ui/react'; +import { assets } from 'chain-registry'; +import { GenericAuthorization } from 'interchain-query/cosmos/authz/v1beta1/authz'; +import { quicksilver, cosmos } from 'quicksilverjs'; +import React, { useState } from 'react'; -import { quicksilver } from 'quicksilverjs'; import { useTx } from '@/hooks'; -import { StdFee } from '@cosmjs/amino'; -import { assets } from 'chain-registry'; -import { cosmos } from 'interchain-query'; -import { Grant, GenericAuthorization } from 'interchain-query/cosmos/authz/v1beta1/authz'; -import { MsgSubmitClaim } from 'quicksilverjs/types/codegen/quicksilver/participationrewards/v1/messages'; +import { useLiquidEpochQuery } from '@/hooks/useQueries'; interface RewardsClaimInterface { address: string; @@ -48,20 +44,18 @@ export const RewardsClaim: React.FC = ({ address, onClose const { grant } = cosmos.authz.v1beta1.MessageComposer.withTypeUrl; - const msgTypeUrl = '/quicksilver.participationrewards.v1.MsgSubmitClaim'; - const genericAuth = { - msg: msgTypeUrl, + msg: quicksilver.participationrewards.v1.MsgSubmitClaim.typeUrl, }; const binaryMessage = GenericAuthorization.encode(genericAuth).finish(); const msgGrant = grant({ granter: address, - grantee: 'quick1dv3v662kd3pp6pxfagck4zyysas82adsdhugaf', + grantee: 'quick1w5ennfhdqrpyvewf35sv3y3t8yuzwq29mrmyal', grant: { authorization: { - typeUrl: '/cosmos.authz.v1beta1.GenericAuthorization', + typeUrl: cosmos.authz.v1beta1.GenericAuthorization.typeUrl, value: binaryMessage, }, }, @@ -70,11 +64,11 @@ export const RewardsClaim: React.FC = ({ address, onClose const mainTokens = assets.find(({ chain_name }) => chain_name === 'quicksilver'); const mainDenom = mainTokens?.assets[0].base ?? 'uqck'; - const fee: StdFee = { + const fee = { amount: [ { denom: mainDenom, - amount: '5000', + amount: '50', }, ], gas: '500000', @@ -133,11 +127,11 @@ export const RewardsClaim: React.FC = ({ address, onClose } }; - const [autoClaimEnabled, setAutoClaimEnabled] = useState(false); + const [autoClaimEnabled, setAutoClaimEnabled] = useState(true); - const handleAutoClaimToggle = () => { - setAutoClaimEnabled(!autoClaimEnabled); - }; + // const handleAutoClaimToggle = () => { + // setAutoClaimEnabled(!autoClaimEnabled); + // }; const transactionHandler = autoClaimEnabled ? handleAutoClaimRewards : handleClaimRewards; @@ -147,13 +141,13 @@ export const RewardsClaim: React.FC = ({ address, onClose - Participation Rewards + Cross Chain Claims (XCC) is coming! - Claim your participation rewards. Rewards will be sent to your wallet at the next epoch. + Click the button below to set your authz grant for automatic cross chain claims. - = ({ address, onClose boxShadow: '0 0 0 3px #FF8000', }} isChecked={autoClaimEnabled} - onChange={handleAutoClaimToggle} + //onChange={handleAutoClaimToggle} colorScheme="orange" > Enable Automatic Claiming - - + */} + {/* + + + Claiming Disabled + + Reward claiming is disabled until a governance proposal updating the claiming parameter is passed. + + You may still enable automatic claiming in advance. + + + + } + isDisabled={autoClaimEnabled} + placement="top" + hasArrow + > */} + + + + {/* */} diff --git a/web-ui/components/Assets/unbondingTable.tsx b/web-ui/components/Assets/unbondingTable.tsx index 56dea1f73..74dbe9978 100644 --- a/web-ui/components/Assets/unbondingTable.tsx +++ b/web-ui/components/Assets/unbondingTable.tsx @@ -3,7 +3,7 @@ import { Table, Thead, Tbody, Tr, Th, Td, TableContainer, Text, Box, Flex, IconB import { useState } from 'react'; import { useUnbondingQuery } from '@/hooks/useQueries'; -import { shiftDigits } from '@/utils'; +import { shiftDigits, formatQasset } from '@/utils'; const statusCodes = new Map([ [2, 'QUEUED'], @@ -17,7 +17,7 @@ const formatDate = (dateString: string | number | Date) => { }; const formatDenom = (denom: string) => { - return denom.startsWith('u') ? denom.substring(1).toUpperCase() : denom.toUpperCase(); + return denom.startsWith('u') ? formatQasset(denom.substring(1).toUpperCase()) : denom.toUpperCase(); }; interface UnbondingAssetsTableProps { @@ -26,7 +26,7 @@ interface UnbondingAssetsTableProps { } const UnbondingAssetsTable: React.FC = ({ address, isWalletConnected }) => { - const chains = ['Cosmos', 'Stargaze', 'Osmosis', 'Regen', 'Sommelier']; + const chains = ['Cosmos', 'Stargaze', 'Osmosis', 'Regen', 'Sommelier', 'Juno']; const [currentChainIndex, setCurrentChainIndex] = useState(0); const currentChainName = chains[currentChainIndex]; @@ -41,6 +41,8 @@ const UnbondingAssetsTable: React.FC = ({ address, is newChainName = 'regen'; } else if (currentChainName === 'Sommelier') { newChainName = 'sommelier'; + } else if (currentChainName === 'Juno') { + newChainName = 'juno'; } else { // Default case newChainName = currentChainName; @@ -57,7 +59,65 @@ const UnbondingAssetsTable: React.FC = ({ address, is setCurrentChainIndex((prevIndex: number) => (prevIndex === chains.length - 1 ? 0 : prevIndex + 1)); }; const noUnbondingAssets = isWalletConnected && unbondingData?.withdrawals.length === 0; - + if (!isWalletConnected) { + return ( + + + + Unbonding Assets + + + } + onClick={handleLeftArrowClick} + aria-label="Previous chain" + variant="ghost" + _hover={{ bgColor: 'transparent', color: 'complimentary.900' }} + _active={{ + transform: 'scale(0.75)', + color: 'complimentary.800', + }} + color="white" + /> + + {chains[currentChainIndex]} + + } + onClick={handleRightArrowClick} + aria-label="Next chain" + variant="ghost" + _hover={{ bgColor: 'transparent', color: 'complimentary.900' }} + _active={{ + transform: 'scale(0.75)', + color: 'complimentary.800', + }} + color="white" + /> + + + + + + Wallet is not connected! Please connect your wallet to view your unbonding assets. + + + + + ); + } if (isLoading) { return ( @@ -187,6 +247,9 @@ const UnbondingAssetsTable: React.FC = ({ address, is Redemption Amount + + Epoch Number + Completion Time @@ -194,13 +257,16 @@ const UnbondingAssetsTable: React.FC = ({ address, is {unbondingData?.withdrawals.map((withdrawal, index) => ( - - + + {Number(shiftDigits(withdrawal.burn_amount.amount, -6))} {formatDenom(withdrawal.burn_amount.denom)} - {statusCodes.get(withdrawal.status)} - {withdrawal.amount.map((amt) => `${shiftDigits(amt.amount, -6)} ${formatDenom(amt.denom)}`).join(', ')} - + {statusCodes.get(withdrawal.status)} + + {withdrawal.amount.map((amt) => `${shiftDigits(amt.amount, -6)} ${formatDenom(amt.denom)}`).join(', ')} + + {withdrawal.epoch_number} + {withdrawal.status === 2 ? 'Pending' : withdrawal.status === 4 diff --git a/web-ui/components/Defi/defiBox.tsx b/web-ui/components/Defi/defiBox.tsx index 5c678681d..a13f985c1 100644 --- a/web-ui/components/Defi/defiBox.tsx +++ b/web-ui/components/Defi/defiBox.tsx @@ -17,9 +17,8 @@ import { Tooltip, Center, Spinner, - useBreakpointValue, } from '@chakra-ui/react'; -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { useDefiData } from '@/hooks/useQueries'; @@ -70,15 +69,28 @@ const DefiTable = () => { const handleFilterClick = (filter: string) => { setActiveFilter(filter); }; - const isMobile = useBreakpointValue({ base: true, sm: true, md: false }); + const [isMobile, setIsMobile] = useState(typeof window !== 'undefined' && window.innerWidth < 1274); + + useEffect(() => { + const handleResize = () => { + setIsMobile(window.innerWidth < 1274); + }; + + window.addEventListener('resize', handleResize); + + // Clean up + return () => { + window.removeEventListener('resize', handleResize); + }; + }, []); const filteredData = defi ? defi.filter(filterCategories[activeFilter]) : []; type ProviderKey = 'osmosis' | 'ux' | 'shade'; const providerIcons: Record = { - osmosis: '/quicksilver/img/osmoIcon.svg', - ux: '/quicksilver/img/ux.png', - shade: '/quicksilver/img/shd.svg', + osmosis: '/img/osmoIcon.svg', + ux: '/img/ux.png', + shade: '/img/shd.svg', }; const isProviderKey = (key: string): key is ProviderKey => { @@ -166,7 +178,7 @@ const DefiTable = () => { ))} )} - + @@ -297,7 +309,7 @@ const DefiTable = () => { {' '} {/* Span across all columns */}
- No entries found for this category, please check back later! + Nothing here yet. Stay tuned!
diff --git a/web-ui/components/Governance/ProposalCard.tsx b/web-ui/components/Governance/ProposalCard.tsx index bd1e1d0cb..dbca96542 100644 --- a/web-ui/components/Governance/ProposalCard.tsx +++ b/web-ui/components/Governance/ProposalCard.tsx @@ -4,11 +4,12 @@ import { cosmos } from 'interchain-query'; import { Proposal } from 'interchain-query/cosmos/gov/v1/gov'; import React, { useMemo } from 'react'; -import { StatusBadge, VotedBadge } from './common'; import { Votes } from '@/hooks'; import { decodeUint8Arr, getPercentage } from '@/utils'; +import { StatusBadge, VotedBadge } from './common'; + enum VoteOption { YES = 'YES', NO = 'NO', diff --git a/web-ui/components/Governance/ProposalModal.tsx b/web-ui/components/Governance/ProposalModal.tsx index 29003d9b4..e0920ec96 100644 --- a/web-ui/components/Governance/ProposalModal.tsx +++ b/web-ui/components/Governance/ProposalModal.tsx @@ -14,19 +14,19 @@ import { Center, Divider, Heading, - useColorMode, } from '@chakra-ui/react'; import { cosmos } from 'interchain-query'; import { Proposal } from 'interchain-query/cosmos/gov/v1/gov'; import React, { useMemo, useState } from 'react'; import { PieChart } from 'react-minimal-pie-chart'; +import { Votes } from '@/hooks'; +import { decodeUint8Arr, exponentiate, formatDate, getCoin, getExponent, getPercentage } from '@/utils'; + import { VoteResult, TimeDisplay, VoteRatio, NewLineText, StatusBadge, VoteOption } from './common'; import { VoteColor } from './ProposalCard'; import { VoteModal } from './VoteModal'; -import { Votes } from '@/hooks'; -import { decodeUint8Arr, exponentiate, formatDate, getCoin, getExponent, getPercentage } from '@/utils'; const ProposalStatus = cosmos.gov.v1beta1.ProposalStatus; diff --git a/web-ui/components/Governance/VotingSection.tsx b/web-ui/components/Governance/VotingSection.tsx index 66c8d8b20..9da9083e2 100644 --- a/web-ui/components/Governance/VotingSection.tsx +++ b/web-ui/components/Governance/VotingSection.tsx @@ -14,6 +14,7 @@ import { Menu, MenuButton, MenuItem, + Image, } from '@chakra-ui/react'; import { ChainName } from '@cosmos-kit/core'; import { useChain } from '@cosmos-kit/react'; @@ -21,12 +22,13 @@ import { Proposal } from 'interchain-query/cosmos/gov/v1/gov'; import React, { useMemo, useState } from 'react'; import { FaSearch } from 'react-icons/fa'; +import { useVotingData } from '@/hooks'; +import { decodeUint8Arr } from '@/utils'; + import { DisconnectedContent, Loader } from './common'; import { ProposalCard } from './ProposalCard'; import { ProposalModal } from './ProposalModal'; -import { useVotingData } from '@/hooks'; -import { decodeUint8Arr } from '@/utils'; function RotateIcon({ isOpen }: { isOpen: boolean }) { return ( @@ -55,17 +57,18 @@ export const VotingSection = ({ chainName }: { chainName: ChainName }) => { return data.proposals.filter((proposal) => { const decodedContent = decodeUint8Arr(proposal.messages[0].value); + const contentToSearch = decodedContent.toLowerCase(); - const titleMatches = proposal.title.toLowerCase().includes(searchTerm.toLowerCase()); + const titleMatches = decodedContent.toLowerCase().includes(searchTerm.toLowerCase()); + const contentMatches = contentToSearch.includes(searchTerm.toLowerCase()); let periodMatches = true; let proposalMatches = true; - // Constants for proposal status (these values might be different in your application) - const VOTING_PERIOD_STATUS = 2; // Example value for 'Voting Period' - const PASSED_STATUS = 3; // Example value for 'Passed' - const REJECTED_STATUS = 4; // Example value for 'Rejected' + const VOTING_PERIOD_STATUS = 2; + const PASSED_STATUS = 3; + const REJECTED_STATUS = 4; // Filter by period switch (selectedPeriodOption) { @@ -278,6 +281,21 @@ export const VotingSection = ({ chainName }: { chainName: ChainName }) => { > {isLoading ? : content} + {address && ( + + + + )} {selectedProposal && ( diff --git a/web-ui/components/Governance/common.tsx b/web-ui/components/Governance/common.tsx index 690069fc5..dd54cdbd5 100644 --- a/web-ui/components/Governance/common.tsx +++ b/web-ui/components/Governance/common.tsx @@ -1,23 +1,9 @@ -import { - Badge, - Box, - Center, - Flex, - Icon, - Spinner, - Stack, - Text, - useColorModeValue, -} from '@chakra-ui/react'; +import { Badge, Box, Center, Flex, Icon, Spinner, Stack, Text, useColorModeValue } from '@chakra-ui/react'; import styled from '@emotion/styled'; import { cosmos } from 'interchain-query'; import { ProposalStatus } from 'interchain-query/cosmos/gov/v1beta1/gov'; import { IconType } from 'react-icons'; -import { - AiFillCheckCircle, - AiFillCloseCircle, - AiFillMinusCircle, -} from 'react-icons/ai'; +import { AiFillCheckCircle, AiFillCloseCircle, AiFillMinusCircle } from 'react-icons/ai'; import ReactMarkdown from 'react-markdown'; import { VoteColor } from './ProposalCard'; @@ -32,36 +18,20 @@ const MarkdownStyled = styled(ReactMarkdown)` `; export const Loader = () => ( -
+
); export const DisconnectedContent = () => ( -
+
Please connect your wallet to see the proposals
); -export const TimeDisplay = ({ - title, - time, -}: { - title: string; - time: string; -}) => ( +export const TimeDisplay = ({ title, time }: { title: string; time: string }) => ( {title} @@ -92,15 +62,7 @@ export const VoteRatio = ({ amount: string; token: string; }) => ( - + {type} {ratio} @@ -151,19 +113,11 @@ export const VoteResult = ({ voteOption }: { voteOption: number }) => { return ( <> - + You Voted - + {optionConfig.option} @@ -178,9 +132,7 @@ export const NewLineText = ({ text }: { text: string }) => { <> {text.split('\\n').map((str) => ( - - {str} - + {str} ))} diff --git a/web-ui/components/Staking/assetsAccordion.tsx b/web-ui/components/Staking/assetsAccordion.tsx index b55810d61..145a0b813 100644 --- a/web-ui/components/Staking/assetsAccordion.tsx +++ b/web-ui/components/Staking/assetsAccordion.tsx @@ -38,7 +38,7 @@ export const AssetsAccordian: React.FC = ({ selectedOption }; const renderAssets = () => { - if (Number(balance) > 0.000001) { + if (balance) { return ( {balanceDisplay} @@ -80,7 +80,7 @@ export const AssetsAccordian: React.FC = ({ selectedOption

- + Liquid Staked diff --git a/web-ui/components/Staking/infoBox.tsx b/web-ui/components/Staking/infoBox.tsx index 8ca2f5a1b..438b26ddd 100644 --- a/web-ui/components/Staking/infoBox.tsx +++ b/web-ui/components/Staking/infoBox.tsx @@ -159,7 +159,7 @@ export const InfoBox: React.FC = ({ selectedOption, displa Want to learn more about rewards, fees, and unbonding on Quicksilver? Check out the{' '} - + docs . diff --git a/web-ui/components/Staking/modals/stakingProcessModal.tsx b/web-ui/components/Staking/modals/stakingProcessModal.tsx index 38d943cb3..aaeb229cd 100644 --- a/web-ui/components/Staking/modals/stakingProcessModal.tsx +++ b/web-ui/components/Staking/modals/stakingProcessModal.tsx @@ -22,19 +22,16 @@ import { coins, StdFee } from '@cosmjs/amino'; import { useChain } from '@cosmos-kit/react'; import styled from '@emotion/styled'; import { bech32 } from 'bech32'; -import { assets } from 'chain-registry'; -import chains from 'chain-registry'; +import { assets, chains } from 'chain-registry'; import { cosmos } from 'interchain-query'; - import React, { useEffect, useState } from 'react'; -import { MultiModal } from './validatorSelectionModal'; +import { useTx } from '@/hooks'; import { useZoneQuery } from '@/hooks/useQueries'; - import { shiftDigits } from '@/utils'; -import { useTx } from '@/hooks'; +import { MultiModal } from './validatorSelectionModal'; const ChakraModalContent = styled(ModalContent)` position: relative; @@ -98,6 +95,8 @@ export const StakingProcessModal: React.FC = ({ isOpen, onClo newChainName = 'osmosistestnet'; } else if (selectedOption?.chainId === 'regen-redwood-1') { newChainName = 'regen'; + } else if (selectedOption?.chainId === 'sommelier-3') { + newChainName = 'sommelier'; } else { // Default case newChainName = selectedOption?.chainName; @@ -155,11 +154,11 @@ export const StakingProcessModal: React.FC = ({ isOpen, onClo const calculateIntents = () => { return selectedValidators.map((validator) => { // For each validator, calculate the weight based on whether default weights are used - const weight = useDefaultWeights ? defaultWeight : weights[validator.operatorAddress]; + const weight = useDefaultWeights ? defaultWeight : weights[validator.operatorAddress] || 0; return { address: validator.operatorAddress, - intent: weight.toFixed(4), // Ensure 4 decimal places + intent: weight.toFixed(4), }; }); }; @@ -167,6 +166,7 @@ export const StakingProcessModal: React.FC = ({ isOpen, onClo // Calculate defaultWeight as string useEffect(() => { setDefaultWeight(1 / numberOfValidators); + //eslint-disable-next-line react-hooks/exhaustive-deps }, [numberOfValidators]); const [useDefaultWeights, setUseDefaultWeights] = useState(true); @@ -182,6 +182,7 @@ export const StakingProcessModal: React.FC = ({ isOpen, onClo })); } } + //eslint-disable-next-line react-hooks/exhaustive-deps }, [selectedValidators, weights, useDefaultWeights]); interface ValidatorsSelect { @@ -245,16 +246,23 @@ export const StakingProcessModal: React.FC = ({ isOpen, onClo }); const mainTokens = assets.find(({ chain_name }) => chain_name === newChainName); - const fees = chains.chains.find(({ chain_name }) => chain_name === newChainName)?.fees?.fee_tokens; + const fees = chains.find(({ chain_name }) => chain_name === newChainName)?.fees?.fee_tokens; const mainDenom = mainTokens?.assets[0].base ?? ''; - const fixedMinGasPrice = fees?.find(({ denom }) => denom === mainDenom)?.average_gas_price ?? ''; - const feeAmount = shiftDigits(fixedMinGasPrice, 6); + let feeAmount; + if (selectedOption?.chainName === 'sommelier') { + // Hardcoded value for sommelier-3 + feeAmount = '10000'; + } else { + // Default case + const fixedMinGasPrice = fees?.find(({ denom }) => denom === mainDenom)?.average_gas_price ?? ''; + feeAmount = shiftDigits(fixedMinGasPrice, 6).toString(); + } const fee: StdFee = { amount: [ { denom: mainDenom, - amount: feeAmount.toString(), + amount: feeAmount, }, ], gas: '500000', @@ -350,7 +358,7 @@ export const StakingProcessModal: React.FC = ({ isOpen, onClo return ( - + diff --git a/web-ui/components/Staking/modals/transferProcessModal.tsx b/web-ui/components/Staking/modals/transferProcessModal.tsx index bbb8b292e..d0be01147 100644 --- a/web-ui/components/Staking/modals/transferProcessModal.tsx +++ b/web-ui/components/Staking/modals/transferProcessModal.tsx @@ -15,26 +15,21 @@ import { StatNumber, Spinner, } from '@chakra-ui/react'; -import chains from '@chalabi/chain-registry'; - import { coins, StdFee } from '@cosmjs/amino'; - import styled from '@emotion/styled'; - +import chains from 'chain-registry'; import { assets } from 'chain-registry'; - +import { cosmos } from 'quicksilverjs'; import React, { useEffect, useState } from 'react'; -import { cosmos } from 'stridejs'; import { useTx } from '@/hooks'; import { useZoneQuery } from '@/hooks/useQueries'; - import { shiftDigits } from '@/utils'; const ChakraModalContent = styled(ModalContent)` position: relative; background: none; - max-height: 400px; + max-height: 450px; &::before, &::after { z-index: -1; @@ -81,6 +76,7 @@ interface StakingModalProps { }; address: string; isTokenized: boolean; + denom: string; } export const TransferProcessModal: React.FC = ({ @@ -90,6 +86,7 @@ export const TransferProcessModal: React.FC = ({ selectedValidator, address, isTokenized, + denom, }) => { useEffect(() => { if (isTokenized === true) { @@ -148,7 +145,8 @@ export const TransferProcessModal: React.FC = ({ const fees = chains.chains.find(({ chain_name }) => chain_name === newChainName)?.fees?.fee_tokens; const mainDenom = mainTokens?.assets[0].base ?? ''; const fixedMinGasPrice = fees?.find(({ denom }) => denom === mainDenom)?.high_gas_price ?? ''; - const feeAmount = shiftDigits(fixedMinGasPrice, 6); + const feeAmount = Number(fixedMinGasPrice) * 750000; + const sendFeeAmount = Number(fixedMinGasPrice) * 100000; const fee: StdFee = { amount: [ @@ -157,12 +155,41 @@ export const TransferProcessModal: React.FC = ({ amount: feeAmount.toString(), }, ], - gas: '200000', + gas: '750000', // test txs were using well in excess of 600k + }; + + // don't use the same fee for both txs, as a send is piddly! + const sendFee: StdFee = { + amount: [ + { + denom: mainDenom, + amount: sendFeeAmount.toString(), + }, + ], + gas: '100000', }; - const { tx } = useTx(newChainName ?? ''); + const { tx, responseEvents } = useTx(newChainName ?? ''); + const [combinedDenom, setCombinedDenom] = useState(); + + // prettier-ignore + useEffect(() => { + + const tokenizeSharesEvent = responseEvents?.find(event => event.type === 'tokenize_shares'); + + if (tokenizeSharesEvent) { + + const validatorValue = tokenizeSharesEvent.attributes.find(attr => attr.key === 'validator')?.value; + const shareRecordIdValue = tokenizeSharesEvent.attributes.find(attr => attr.key === 'share_record_id')?.value; + - const hanleTokenizeShares = async (event: React.MouseEvent) => { + if (validatorValue && shareRecordIdValue) { + setCombinedDenom(`${validatorValue}/${shareRecordIdValue}`); + } + } + }, [responseEvents]); + + const handleTokenizeShares = async (event: React.MouseEvent) => { event.preventDefault(); setIsSigning(true); setTransactionStatus('Pending'); @@ -182,16 +209,18 @@ export const TransferProcessModal: React.FC = ({ setIsSigning(false); } }; + const { send } = cosmos.bank.v1beta1.MessageComposer.withTypeUrl; let numericAmount = selectedValidator.tokenAmount; if (isNaN(Number(numericAmount)) || Number(numericAmount) <= 0) { numericAmount = '0'; } + const msgSend = send({ fromAddress: address ?? '', toAddress: zone?.depositAddress?.address ?? '', - amount: coins(numericAmount, zone?.baseDenom ?? ''), + amount: coins(numericAmount, denom ?? combinedDenom), }); const handleSend = async (event: React.MouseEvent) => { @@ -200,7 +229,7 @@ export const TransferProcessModal: React.FC = ({ setTransactionStatus('Pending'); try { const result = await tx([msgSend], { - fee, + fee: sendFee, onSuccess: () => { setStep(3); setTransactionStatus('Success'); @@ -218,7 +247,7 @@ export const TransferProcessModal: React.FC = ({ return ( - + @@ -302,7 +331,7 @@ export const TransferProcessModal: React.FC = ({ bgColor: 'rgba(255,128,0, 0.25)', color: 'complimentary.300', }} - onClick={hanleTokenizeShares} + onClick={handleTokenizeShares} > {isError ? 'Try Again' : isSigning ? : 'Tokenize Shares'} @@ -341,21 +370,6 @@ export const TransferProcessModal: React.FC = ({ Your q{selectedOption?.value} will arrive to your wallet in a few minutes. - diff --git a/web-ui/components/Staking/modals/validatorSelectionModal.tsx b/web-ui/components/Staking/modals/validatorSelectionModal.tsx index 640f2007e..6ae24d4c7 100644 --- a/web-ui/components/Staking/modals/validatorSelectionModal.tsx +++ b/web-ui/components/Staking/modals/validatorSelectionModal.tsx @@ -24,10 +24,11 @@ import { import React from 'react'; import { FaSearch } from 'react-icons/fa'; -import { ValidatorsTable } from './validatorTable'; import { useValidatorsQuery } from '@/hooks/useQueries'; import { useValidatorLogos } from '@/hooks/useQueries'; + +import { ValidatorsTable } from './validatorTable'; interface MultiModalProps { isOpen: boolean; onClose: () => void; diff --git a/web-ui/components/Staking/stakingBox.tsx b/web-ui/components/Staking/stakingBox.tsx index 3d7092c84..285b161db 100644 --- a/web-ui/components/Staking/stakingBox.tsx +++ b/web-ui/components/Staking/stakingBox.tsx @@ -30,11 +30,9 @@ import { import { Coin, StdFee } from '@cosmjs/amino'; import { useChain } from '@cosmos-kit/react'; import { quicksilver } from 'quicksilverjs'; -import React, { useCallback, useEffect, useState } from 'react'; +import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { FaStar } from 'react-icons/fa'; -import StakingProcessModal from './modals/stakingProcessModal'; -import TransferProcessModal from './modals/transferProcessModal'; import { useTx } from '@/hooks'; import { @@ -46,8 +44,10 @@ import { useValidatorsQuery, useZoneQuery, } from '@/hooks/useQueries'; -import { getExponent } from '@/utils'; -import { shiftDigits } from '@/utils'; +import { getExponent, shiftDigits } from '@/utils'; + +import StakingProcessModal from './modals/stakingProcessModal'; +import TransferProcessModal from './modals/transferProcessModal'; type StakingBoxProps = { selectedOption: { @@ -87,7 +87,9 @@ export const StakingBox = ({ const { address: qAddress } = useChain('quicksilver'); const exp = getExponent(selectedOption.chainName); + const { balance, isLoading } = useBalanceQuery(selectedOption.chainName, address ?? ''); + const { balance: allBalances } = useAllBalancesQuery(selectedOption.chainName, address ?? ''); const { balance: qBalance } = useQBalanceQuery('quicksilver', qAddress ?? '', selectedOption.value.toLowerCase()); @@ -148,7 +150,7 @@ export const StakingBox = ({ amount: [ { denom: 'uqck', - amount: '7500', + amount: '50', }, ], gas: '500000', @@ -177,13 +179,19 @@ export const StakingBox = ({ const { delegations, delegationsIsError, delegationsIsLoading } = useNativeStakeQuery(selectedOption.chainName, address ?? ''); const delegationsResponse = delegations?.delegation_responses; - const nativeStakedAmount = delegationsResponse?.reduce((acc, delegationResponse) => { + const nativeStakedAmount = delegationsResponse?.reduce((acc: number, delegationResponse: { balance: { amount: any } }) => { const amount = Number(delegationResponse?.balance?.amount) || 0; return acc + amount; }, 0); const [useNativeStake, setUseNativeStake] = useState(false); + const hasTokenizedShares = (balances: any[]) => { + return balances.some((balance: { denom: string | string[] }) => balance.denom.includes('valoper')); + }; + + const hasTokenized = useMemo(() => hasTokenizedShares(allBalances?.balances || []), [allBalances]); + const handleSwitchChange = (event: { target: { checked: boolean | ((prevState: boolean) => boolean) } }) => { setUseNativeStake(event.target.checked); }; @@ -210,6 +218,7 @@ export const StakingBox = ({ moniker: string; tokenAmount: string; isTokenized: boolean; + denom: string; } const [selectedValidatorData, setSelectedValidatorData] = useState({ @@ -217,6 +226,7 @@ export const StakingBox = ({ moniker: '', tokenAmount: '', isTokenized: false, + denom: '', }); const isWalletConnected = !!address; @@ -229,6 +239,29 @@ export const StakingBox = ({ liquidStakeTooltip = 'Minimum amount to stake is 0.1'; } + const safeDelegationsResponse = delegationsResponse || []; + const safeAllBalances = allBalances?.balances || []; + + // Combine delegationsResponse with valoper entries from allBalances + const combinedDelegations = safeDelegationsResponse.concat( + safeAllBalances + .filter((balance) => balance.denom.includes('valoper')) + .map((balance) => { + const [validatorAddress, uniqueId] = balance.denom.split('/'); + return { + delegation: { + validator_address: validatorAddress, + unique_id: uniqueId, + }, + balance: { + amount: balance.amount, + }, + isTokenized: true, + denom: balance.denom, + }; + }), + ); + return ( @@ -278,25 +311,33 @@ export const StakingBox = ({ {selectedOption.name === 'Cosmos Hub' && ( - {!nativeStakedAmount && ( + {(nativeStakedAmount > 0 || hasTokenized) && ( 0 + ? `You currently have ${shiftDigits(nativeStakedAmount, -6)} ${ selectedOption.value - } natively staked to ${delegationsResponse?.length} validators. You can tokenize your shares and transfer them to quicksilver by clicking the switch and selecting a validator.` + } natively staked to ${delegationsResponse?.length} validators.` + : hasTokenized + ? 'You have tokenized shares available for transfer.' + : '' } > - - Use natively staked  + + Use staked  {selectedOption.value}? {delegationsIsLoading && } - {!delegationsIsLoading && !delegationsIsError && nativeStakedAmount && ( + {!delegationsIsLoading && !delegationsIsError && ( )} - - + )} - {nativeStakedAmount > 0 && ( - - - Use natively staked  - {selectedOption.value}? - - - - - - - - )} )} {!useNativeStake && ( @@ -397,7 +395,6 @@ export const StakingBox = ({ value={tokenAmount} type="text" onChange={(e) => { - // Allow any numeric input const validNumberPattern = /^\d*\.?\d*$/; if (validNumberPattern.test(e.target.value) || e.target.value === '') { setTokenAmount(e.target.value); @@ -542,27 +539,18 @@ export const StakingBox = ({ - + {/* Combine delegationsResponse with valoper entries from allBalances */} - {delegationsResponse - ?.concat( - allBalances?.balances - .filter((balance) => balance.denom.includes('valoper')) - .map((balance) => { - const [validatorAddress, uniqueId] = balance.denom.split('/'); - return { - delegation: { - validator_address: validatorAddress, - unique_id: uniqueId, // Including the unique ID - }, - balance: { - amount: balance.amount, - }, - isTokenized: true, - }; - }), - ) - .map((delegation, index) => { + {combinedDelegations.map( + ( + delegation: { + delegation: { validator_address: string | number; unique_id: any }; + balance: { amount: string | number }; + isTokenized: any; + denom: any; + }, + index: any, + ) => { const validator = validatorsData?.find((v) => v.address === delegation.delegation.validator_address); const uniqueKey = `${delegation.delegation.validator_address}-${delegation.delegation.unique_id}`; const isSelected = uniqueKey === selectedValidator; @@ -576,10 +564,11 @@ export const StakingBox = ({ onClick={() => { setSelectedValidator(uniqueKey); setSelectedValidatorData({ - operatorAddress: delegation.delegation.validator_address, + operatorAddress: delegation.delegation.validator_address.toString(), moniker: validator?.name ?? '', - tokenAmount: delegation.balance.amount, + tokenAmount: delegation.balance.amount.toString(), isTokenized: delegation.isTokenized, + denom: delegation.denom, }); }} _hover={{ bg: 'rgba(255, 128, 0, 0.25)' }} @@ -622,7 +611,8 @@ export const StakingBox = ({ ); - })} + }, + )} {isBottomVisible && ( )} @@ -731,7 +722,7 @@ export const StakingBox = ({ {address ? qAssets && Number(qAssets) !== 0 - ? `${qAssetsDisplay} ${selectedOption.value.toUpperCase()}` + ? `${qAssetsDisplay} q${selectedOption.value.toUpperCase()}` : `No q${selectedOption.value.toUpperCase()}` : '0'} diff --git a/web-ui/components/react/astronaut.tsx b/web-ui/components/react/astronaut.tsx index 0704133ad..946261f00 100644 --- a/web-ui/components/react/astronaut.tsx +++ b/web-ui/components/react/astronaut.tsx @@ -1,10 +1,5 @@ export const Astronaut = (props: any) => ( - + ( d="M207.344 119.9c.4.467 2.066 2.1 5 4.9-2.667 5.933-5.067 10.333-7.2 13.2-5 6.8-5.3 6.5-10 11.2l-7.9-3.8 20.1-25.5Z" fill="#839091" /> - + ( d="M180.844 148.9c1.933 5.933 3.933 13.767 6 23.5 3.7 17.5 2.9 36.9-4.1 39.9-2.8 1.2-5.4 3.6-16.1 0-7.2-2.4-22.134-12.133-44.8-29.2l59-34.2Z" fill="#D8DEDC" /> - + - + ( d="m79.844 106.3 14.8 30.1-20.1 6.9c-5.8-7.667-9.534-12.967-11.2-15.9-1.667-2.933-4.267-8.867-7.8-17.8l24.3-3.3Z" fill="#839091" /> - + = ({ chainName }) => { +const Header: React.FC<{ chainName: string }> = ({ chainName }) => { return ( - + - - + + ); }; + +export const DynamicHeaderSection = dynamic(() => Promise.resolve(Header), { + ssr: false, +}); diff --git a/web-ui/components/react/sideHeader.tsx b/web-ui/components/react/sideHeader.tsx index cbfff16ad..8f9afe9f0 100644 --- a/web-ui/components/react/sideHeader.tsx +++ b/web-ui/components/react/sideHeader.tsx @@ -21,10 +21,10 @@ import { import { keyframes } from '@emotion/react'; import { useRouter } from 'next/router'; import { useState, useEffect } from 'react'; -import { FaDiscord, FaTwitter, FaGithub, FaInfo } from 'react-icons/fa'; +import { FaDiscord, FaGithub, FaInfo } from 'react-icons/fa'; +import { FaXTwitter } from 'react-icons/fa6'; import { IoIosDocument } from 'react-icons/io'; -import { MdPrivacyTip } from 'react-icons/md'; -import { WalletButton } from '../wallet-button'; + import { DrawerControlProvider } from '@/state/chains/drawerControlProvider'; export const SideHeader = () => { @@ -34,13 +34,19 @@ export const SideHeader = () => { const [showSocialLinks, setShowSocialLinks] = useState(false); useEffect(() => { + const path = router.asPath.split('/')[1]; + setSelectedPage(path); + const handleRouteChange = (url: string) => { - const path = url.split('/quicksilver/')[1]; - setSelectedPage(path); + const newPath = url.split('/')[1]; + setSelectedPage(newPath); }; router.events.on('routeChangeComplete', handleRouteChange); - return () => router.events.off('routeChangeComplete', handleRouteChange); + + return () => { + router.events.off('routeChangeComplete', handleRouteChange); + }; }, [router]); const commonBoxShadowColor = 'rgba(255, 128, 0, 0.25)'; @@ -107,8 +113,9 @@ export const SideHeader = () => { alt="logo" h="75px" w="75px" + padding="5px" borderRadius="full" - src="/quicksilver/img/networks/quicksilver.svg" + src="/img/networks/quicksilver.svg" onClick={handleLogoClick} cursor="pointer" _hover={{ @@ -128,7 +135,7 @@ export const SideHeader = () => { QUICKSILVER - {['Airdrop', 'Assets', 'Defi', 'Governance', 'Staking'].map((item) => ( + {[/*'Airdrop', */ 'Assets', 'Defi', 'Governance', 'Staking'].map((item) => ( { ))} - - - + - - - - - - - - - + + + + + + + + + + + + + + + @@ -218,14 +229,14 @@ export const SideHeader = () => { }} > @@ -248,14 +259,14 @@ export const SideHeader = () => { }} > @@ -276,17 +287,17 @@ export const SideHeader = () => { }} > - + {/* { }} alt="DeFi" h="55px" - src="/quicksilver/img/airdrop.png" + src="/img/airdrop.png" /> - + */} { }} > @@ -346,17 +357,18 @@ export const SideHeader = () => { {showSocialLinks && ( - - router.push('/about')} - _hover={{ - cursor: 'pointer', - boxShadow: `0 0 15px 5px ${commonBoxShadowColor}, inset 0 0 50px 5px ${commonBoxShadowColor}`, - }} - > - - - + + + + + + + { transition: transitionStyle, }} > - + - + {/* router.push('/privacy-policy')} _hover={{ @@ -420,7 +432,7 @@ export const SideHeader = () => { > - + */} )} diff --git a/web-ui/components/react/wallet-connect.tsx b/web-ui/components/react/wallet-connect.tsx index ce55dd539..a44b924c2 100644 --- a/web-ui/components/react/wallet-connect.tsx +++ b/web-ui/components/react/wallet-connect.tsx @@ -1,23 +1,13 @@ import { Button, Icon, Stack, Text, useColorModeValue } from '@chakra-ui/react'; import { WalletStatus } from '@cosmos-kit/core'; -import { useChain, useWalletClient } from '@cosmos-kit/react'; -import React, { MouseEventHandler, ReactNode, useEffect } from 'react'; +import React, { MouseEventHandler, ReactNode } from 'react'; import { FiAlertTriangle } from 'react-icons/fi'; import { IoWallet } from 'react-icons/io5'; import { ConnectWalletType } from '../types'; -export const ConnectWalletButton = ({ buttonText, isLoading, isDisabled, icon }: ConnectWalletType) => { +export const ConnectWalletButton = ({ buttonText, isLoading, isDisabled, icon, onClickConnectBtn }: ConnectWalletType) => { const invertButtonTextColor = useColorModeValue('primary.50', 'primary.700'); - const { openView } = useChain('quicksilver'); - const { status, client } = useWalletClient(); - - useEffect(() => { - if (status === 'Done') { - client?.enable?.(['cosmoshub-4', 'osmosis-1', 'regen-1', 'sommelier-3', 'stargaze-1']); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [status]); return (