From e7b2f38565ee997ae2b65625988eb146074452ad Mon Sep 17 00:00:00 2001 From: songwongtp <16089160+songwongtp@users.noreply.github.com> Date: Wed, 24 Apr 2024 11:58:39 +0700 Subject: [PATCH 1/6] feat: update collection and nft lists and search --- CHANGELOG.md | 2 + .../components/nfts/NftsByCollection.tsx | 4 +- .../components/CollectionSupplies.tsx | 6 ++- .../pages/nft-collection-details/index.tsx | 18 ++++---- .../components/CollectionCard.tsx | 41 +++++++++++++++---- .../components/Collections.tsx | 6 ++- src/lib/query/collection.ts | 10 ++++- src/lib/query/nft.ts | 21 +++++++--- src/lib/services/nft/collection.ts | 2 + src/lib/services/nft/nft.ts | 2 +- 10 files changed, 81 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ddd8a18e3..2284f0eba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Improvements +- [#895](https://github.com/alleslabs/celatone-frontend/pull/895) Show collection address and creator on the collection list page + ### Bug fixes - [#893](https://github.com/alleslabs/celatone-frontend/pull/893) Fix validator list percent diff --git a/src/lib/pages/account-details/components/nfts/NftsByCollection.tsx b/src/lib/pages/account-details/components/nfts/NftsByCollection.tsx index b63a7b4f5..1eeec4ee8 100644 --- a/src/lib/pages/account-details/components/nfts/NftsByCollection.tsx +++ b/src/lib/pages/account-details/components/nfts/NftsByCollection.tsx @@ -54,10 +54,12 @@ export const NftsByCollection = ({ setSearchKeyword(""); }, [collectionAddress, setPageSize, setCurrentPage]); + useEffect(() => setCurrentPage(1), [debouncedSearch, setCurrentPage]); + return ( setSearchKeyword(e.target.value)} diff --git a/src/lib/pages/nft-collection-details/components/CollectionSupplies.tsx b/src/lib/pages/nft-collection-details/components/CollectionSupplies.tsx index 31f204b45..8ddb99d2f 100644 --- a/src/lib/pages/nft-collection-details/components/CollectionSupplies.tsx +++ b/src/lib/pages/nft-collection-details/components/CollectionSupplies.tsx @@ -1,5 +1,5 @@ import { Box } from "@chakra-ui/react"; -import { useState } from "react"; +import { useEffect, useState } from "react"; import InputWithIcon from "lib/components/InputWithIcon"; import { NftList } from "lib/components/nft"; @@ -43,10 +43,12 @@ export const CollectionSupplies = ({ debouncedSearch ); + useEffect(() => setCurrentPage(1), [debouncedSearch, setCurrentPage]); + return ( setSearchKeyword(e.target.value)} diff --git a/src/lib/pages/nft-collection-details/index.tsx b/src/lib/pages/nft-collection-details/index.tsx index 054b63942..2c34e17de 100644 --- a/src/lib/pages/nft-collection-details/index.tsx +++ b/src/lib/pages/nft-collection-details/index.tsx @@ -140,16 +140,14 @@ const CollectionDetailsBody = ({ Collection: - - - + diff --git a/src/lib/pages/nft-collections/components/CollectionCard.tsx b/src/lib/pages/nft-collections/components/CollectionCard.tsx index bc07f2150..af46e570f 100644 --- a/src/lib/pages/nft-collections/components/CollectionCard.tsx +++ b/src/lib/pages/nft-collections/components/CollectionCard.tsx @@ -1,5 +1,6 @@ import { Box, Flex, Heading, Image, Text } from "@chakra-ui/react"; +import { ExplorerLink } from "lib/components/ExplorerLink"; import { NFT_IMAGE_PLACEHOLDER } from "lib/data"; import { useMetadata } from "lib/services/nft"; import type { Collection } from "lib/services/nft"; @@ -15,6 +16,7 @@ export const CollectionCard = ({ collectionInfo }: CollectionCardProps) => { return ( { bg: "gray.800", }} > - + { fallbackSrc={NFT_IMAGE_PLACEHOLDER} fallbackStrategy="beforeLoadOrError" /> - + { > {description} + + + + + Created by + + + + + + Collection + + + + diff --git a/src/lib/pages/nft-collections/components/Collections.tsx b/src/lib/pages/nft-collections/components/Collections.tsx index d3ed559b4..4016f7f60 100644 --- a/src/lib/pages/nft-collections/components/Collections.tsx +++ b/src/lib/pages/nft-collections/components/Collections.tsx @@ -44,11 +44,13 @@ export const Collections = () => { // eslint-disable-next-line react-hooks/exhaustive-deps }, [router.isReady]); + useEffect(() => setCurrentPage(1), [debouncedSearch, setCurrentPage]); + return ( <> setSearchKeyword(e.target.value)} @@ -60,7 +62,7 @@ export const Collections = () => { isLoading={isLoading} /> - {!isLoading && collections && ( + {!isLoading && collections && collections.total > 0 && ( ({ description: val.description, uri: val.uri, name: val.name, collectionAddress: val.vm_address.vm_address, + creator: val.vmAddressByCreator.vm_address, })); export type Collection = z.infer; diff --git a/src/lib/services/nft/nft.ts b/src/lib/services/nft/nft.ts index bd516ac06..059fd5281 100644 --- a/src/lib/services/nft/nft.ts +++ b/src/lib/services/nft/nft.ts @@ -56,7 +56,7 @@ export const getNfts = async ( collectionAddress, limit: pageSize, offset, - search: `%${search}%`, + search, }, }) .then(({ data: res }) => parseWithError(zNft.array(), res.data.nfts)); From 1fa6e6fc43cdbf19a94f761b2df512b03b0a8da5 Mon Sep 17 00:00:00 2001 From: songwongtp <16089160+songwongtp@users.noreply.github.com> Date: Wed, 24 Apr 2024 14:04:47 +0700 Subject: [PATCH 2/6] fix: copier icon --- src/lib/components/copy/CopyTemplate.tsx | 1 + src/lib/pages/nft-collections/components/CollectionCard.tsx | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/src/lib/components/copy/CopyTemplate.tsx b/src/lib/components/copy/CopyTemplate.tsx index a81230043..6c56bd6f9 100644 --- a/src/lib/components/copy/CopyTemplate.tsx +++ b/src/lib/components/copy/CopyTemplate.tsx @@ -31,6 +31,7 @@ export const CopyTemplate = ({ onClick={(e) => { onCopy(); e.stopPropagation(); + e.preventDefault(); }} w={w} ml={ml} diff --git a/src/lib/pages/nft-collections/components/CollectionCard.tsx b/src/lib/pages/nft-collections/components/CollectionCard.tsx index af46e570f..8f69fe9e9 100644 --- a/src/lib/pages/nft-collections/components/CollectionCard.tsx +++ b/src/lib/pages/nft-collections/components/CollectionCard.tsx @@ -1,5 +1,6 @@ import { Box, Flex, Heading, Image, Text } from "@chakra-ui/react"; +import { useMobile } from "lib/app-provider"; import { ExplorerLink } from "lib/components/ExplorerLink"; import { NFT_IMAGE_PLACEHOLDER } from "lib/data"; import { useMetadata } from "lib/services/nft"; @@ -10,6 +11,7 @@ interface CollectionCardProps { } export const CollectionCard = ({ collectionInfo }: CollectionCardProps) => { + const isMobile = useMobile(); const { uri, description, name } = collectionInfo; const { data: metadata } = useMetadata(uri); @@ -81,6 +83,8 @@ export const CollectionCard = ({ collectionInfo }: CollectionCardProps) => { @@ -91,6 +95,8 @@ export const CollectionCard = ({ collectionInfo }: CollectionCardProps) => { From 9ab36009fd73034eae99cbec94243bdb40b977a7 Mon Sep 17 00:00:00 2001 From: songwongtp <16089160+songwongtp@users.noreply.github.com> Date: Thu, 25 Apr 2024 11:41:46 +0700 Subject: [PATCH 3/6] feat: add tier config --- src/config/chain/default.ts | 1 + src/config/chain/initia.ts | 5 +++++ src/config/chain/neutron.ts | 2 ++ src/config/chain/osmosis.ts | 3 +++ src/config/chain/sei.ts | 2 ++ src/config/chain/stargaze.ts | 2 ++ src/config/chain/terra.ts | 2 ++ src/config/chain/types.ts | 1 + src/lib/app-provider/hooks/useConfig.ts | 22 ++++++++++++++++++++++ 9 files changed, 40 insertions(+) diff --git a/src/config/chain/default.ts b/src/config/chain/default.ts index 96e74fa5f..7aca8eb5a 100644 --- a/src/config/chain/default.ts +++ b/src/config/chain/default.ts @@ -1,6 +1,7 @@ import type { ChainConfig } from "./types"; export const DEFAULT_CHAIN_CONFIG: ChainConfig = { + tier: "lite", chain: "", registryChainName: "", prettyName: "", diff --git a/src/config/chain/initia.ts b/src/config/chain/initia.ts index a0a0b70a3..9ac171a26 100644 --- a/src/config/chain/initia.ts +++ b/src/config/chain/initia.ts @@ -8,6 +8,7 @@ const INITIA_DECODER = export const INITIA_CHAIN_CONFIGS: ChainConfigs = { "mahalo-2": { + tier: "full", chain: "initia", registryChainName: "initiadevnet2", prettyName: "Initia Closed Testnet 2", @@ -55,6 +56,7 @@ export const INITIA_CHAIN_CONFIGS: ChainConfigs = { extra: {}, }, "minimove-2": { + tier: "full", chain: "initia", registryChainName: "minitiamovedevnet2", prettyName: "Minitia Move Closed Testnet 2", @@ -102,6 +104,7 @@ export const INITIA_CHAIN_CONFIGS: ChainConfigs = { }, }, "miniwasm-2": { + tier: "full", chain: "initia", registryChainName: "minitiawasmdevnet2", prettyName: "Minitia Wasm Closed Testnet 2", @@ -148,6 +151,7 @@ export const INITIA_CHAIN_CONFIGS: ChainConfigs = { }, }, "tomcat-1": { + tier: "full", chain: "initia", registryChainName: "blackwingdevnet1", prettyName: "Blackwing Closed Testnet 1", @@ -195,6 +199,7 @@ export const INITIA_CHAIN_CONFIGS: ChainConfigs = { }, }, "stone-13": { + tier: "full", chain: "initia", registryChainName: "initiatestnet13", prettyName: "Initia Testnet 13", diff --git a/src/config/chain/neutron.ts b/src/config/chain/neutron.ts index 1c43ffb45..50075767c 100644 --- a/src/config/chain/neutron.ts +++ b/src/config/chain/neutron.ts @@ -4,6 +4,7 @@ import type { ChainConfigs } from "./types"; export const NEUTRON_CHAIN_CONFIGS: ChainConfigs = { "neutron-1": { + tier: "full", chain: "neutron", registryChainName: "neutron", prettyName: "Neutron", @@ -49,6 +50,7 @@ export const NEUTRON_CHAIN_CONFIGS: ChainConfigs = { }, }, "pion-1": { + tier: "full", chain: "neutron", registryChainName: "neutrontestnet", prettyName: "Neutron Testnet", diff --git a/src/config/chain/osmosis.ts b/src/config/chain/osmosis.ts index b14c7dd0d..b2a428033 100644 --- a/src/config/chain/osmosis.ts +++ b/src/config/chain/osmosis.ts @@ -4,6 +4,7 @@ import type { ChainConfigs } from "./types"; export const OSMOSIS_CHAIN_CONFIGS: ChainConfigs = { "osmosis-1": { + tier: "full", chain: "osmosis", registryChainName: "osmosis", prettyName: "Osmosis", @@ -53,6 +54,7 @@ export const OSMOSIS_CHAIN_CONFIGS: ChainConfigs = { }, }, "osmo-test-5": { + tier: "full", chain: "osmosis", registryChainName: "osmosistestnet", prettyName: "Osmosis Testnet", @@ -103,6 +105,7 @@ export const OSMOSIS_CHAIN_CONFIGS: ChainConfigs = { }, }, localosmosis: { + tier: "full", chain: "osmosis", registryChainName: "localosmosis", prettyName: "Local Osmosis", diff --git a/src/config/chain/sei.ts b/src/config/chain/sei.ts index 2061cd803..ef088d681 100644 --- a/src/config/chain/sei.ts +++ b/src/config/chain/sei.ts @@ -10,6 +10,7 @@ import type { ChainConfigs } from "./types"; */ export const SEI_CHAIN_CONFIGS: ChainConfigs = { "pacific-1": { + tier: "full", chain: "sei", registryChainName: "sei", prettyName: "Sei", @@ -58,6 +59,7 @@ export const SEI_CHAIN_CONFIGS: ChainConfigs = { }, }, "atlantic-2": { + tier: "full", chain: "sei", registryChainName: "seitestnet2", prettyName: "Sei Testnet2", diff --git a/src/config/chain/stargaze.ts b/src/config/chain/stargaze.ts index 94da555db..745b20447 100644 --- a/src/config/chain/stargaze.ts +++ b/src/config/chain/stargaze.ts @@ -4,6 +4,7 @@ import type { ChainConfigs } from "./types"; export const STARGAZE_CHAIN_CONFIGS: ChainConfigs = { "stargaze-1": { + tier: "full", chain: "stargaze", registryChainName: "stargaze", prettyName: "Stargaze", @@ -50,6 +51,7 @@ export const STARGAZE_CHAIN_CONFIGS: ChainConfigs = { }, }, "elgafar-1": { + tier: "full", chain: "stargaze", registryChainName: "stargazetestnet", prettyName: "Stargaze Testnet", diff --git a/src/config/chain/terra.ts b/src/config/chain/terra.ts index d696a954e..03a1247d1 100644 --- a/src/config/chain/terra.ts +++ b/src/config/chain/terra.ts @@ -5,6 +5,7 @@ import type { ChainConfigs } from "./types"; export const TERRA_CHAIN_CONFIGS: ChainConfigs = { "phoenix-1": { + tier: "full", chain: "terra", registryChainName: "terra2", prettyName: "Terra", @@ -52,6 +53,7 @@ export const TERRA_CHAIN_CONFIGS: ChainConfigs = { }, }, "pisco-1": { + tier: "full", chain: "terra", registryChainName: "terra2testnet", prettyName: "Terra Testnet", diff --git a/src/config/chain/types.ts b/src/config/chain/types.ts index 2b94c8399..73eb22efc 100644 --- a/src/config/chain/types.ts +++ b/src/config/chain/types.ts @@ -52,6 +52,7 @@ type GovConfig = type NftConfig = { enabled: boolean }; export interface ChainConfig { + tier: "lite" | "full"; chain: string; registryChainName: string; prettyName: string; diff --git a/src/lib/app-provider/hooks/useConfig.ts b/src/lib/app-provider/hooks/useConfig.ts index af36c0b85..34a7e3c1d 100644 --- a/src/lib/app-provider/hooks/useConfig.ts +++ b/src/lib/app-provider/hooks/useConfig.ts @@ -3,6 +3,28 @@ import type { ChainConfig } from "config/chain/types"; import { useInternalNavigate } from "./useInternalNavigate"; +const TierMap: Record = { + lite: 0, + // new metric 1 + full: 2, +}; + +export const useTierConfig = ({ + minTier = "lite", +}: { + minTier?: ChainConfig["tier"]; +}) => { + const { + chainConfig: { tier }, + } = useCelatoneApp(); + const navigate = useInternalNavigate(); + + if (TierMap[tier] < TierMap[minTier]) + navigate({ pathname: "/", replace: true }); + + return tier; +}; + type Features = ChainConfig["features"]; type FeatureVariant = Features[keyof Features]; From 63f40683d1f845cdff2095da9e12836c61ab2ca0 Mon Sep 17 00:00:00 2001 From: songwongtp <16089160+songwongtp@users.noreply.github.com> Date: Thu, 25 Apr 2024 11:43:33 +0700 Subject: [PATCH 4/6] fix: add changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ddd8a18e3..107cdc706 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Features +- [#897](https://github.com/alleslabs/celatone-frontend/pull/897) Add config for lite version support + ### Improvements ### Bug fixes From e1f519ef7a6634c7150a2700b532473c9ecbca0b Mon Sep 17 00:00:00 2001 From: songwongtp <16089160+songwongtp@users.noreply.github.com> Date: Thu, 25 Apr 2024 12:15:39 +0700 Subject: [PATCH 5/6] fix: add lite configs --- src/config/chain/initia.ts | 48 +++++++++++++++++++++++++ src/config/chain/terra.ts | 48 +++++++++++++++++++++++++ src/lib/app-provider/hooks/useConfig.ts | 14 +++++--- 3 files changed, 105 insertions(+), 5 deletions(-) diff --git a/src/config/chain/initia.ts b/src/config/chain/initia.ts index 9ac171a26..3f0ff9061 100644 --- a/src/config/chain/initia.ts +++ b/src/config/chain/initia.ts @@ -7,6 +7,54 @@ const INITIA_DECODER = "https://initia-api-jiod42ec2q-as.a.run.app/decode_module"; export const INITIA_CHAIN_CONFIGS: ChainConfigs = { + "mahalo-2-lite": { + tier: "lite", + chain: "initia", + registryChainName: "initiadevnet2", + prettyName: "Initia Closed Testnet 2 Lite", + lcd: "https://lcd.mahalo-2.initia.xyz", + rpc: "https://rpc.mahalo-2.initia.xyz:443", + indexer: "https://mahalo-2-graphql.alleslabs.dev/v1/graphql", + wallets: [...initiaWallets, ...keplrWallets], + features: { + faucet: { + enabled: false, + // url: process.env.NEXT_PUBLIC_INITIA_DEVNET_FAUCET_URL ?? "", + }, + wasm: { + enabled: false, + }, + move: { + enabled: true, + moduleMaxFileSize: 1_048_576, + decodeApi: INITIA_DECODER, + verify: "https://compiler.mahalo-2.initia.xyz/contracts/verify", + }, + pool: { + enabled: false, + }, + publicProject: { + enabled: true, + }, + gov: { + enabled: true, + version: "v1", + hideOpenProposal: true, + }, + nft: { + enabled: true, + }, + }, + gas: { + gasPrice: { + tokenPerGas: 0.151, + denom: "uinit", + }, + gasAdjustment: 1.5, + maxGasLimit: 25_000_000, + }, + extra: {}, + }, "mahalo-2": { tier: "full", chain: "initia", diff --git a/src/config/chain/terra.ts b/src/config/chain/terra.ts index 03a1247d1..93661dee6 100644 --- a/src/config/chain/terra.ts +++ b/src/config/chain/terra.ts @@ -4,6 +4,54 @@ import { wallets as staionWallets } from "@cosmos-kit/station"; import type { ChainConfigs } from "./types"; export const TERRA_CHAIN_CONFIGS: ChainConfigs = { + "pisco-1-lite": { + tier: "lite", + chain: "terra", + registryChainName: "terra2testnet", + prettyName: "Terra Testnet Lite", + lcd: "https://pisco-lcd.terra.dev:443", + rpc: "https://terra-testnet-rpc.polkachu.com:443", + indexer: "https://pisco-1-graphql.alleslabs.dev/v1/graphql", + wallets: [...staionWallets, ...keplrWallets], + features: { + faucet: { + enabled: false, + }, + wasm: { + enabled: true, + storeCodeMaxFileSize: 800_000, + clearAdminGas: 50_000, + }, + move: { + enabled: false, + }, + pool: { + enabled: false, + }, + publicProject: { + enabled: false, + }, + gov: { + enabled: true, + version: "v1", + hideOpenProposal: true, + }, + nft: { + enabled: false, + }, + }, + gas: { + gasPrice: { + tokenPerGas: 0.151, + denom: "uluna", + }, + gasAdjustment: 1.5, + maxGasLimit: 25_000_000, + }, + extra: { + singleStakingDenom: "uluna", + }, + }, "phoenix-1": { tier: "full", chain: "terra", diff --git a/src/lib/app-provider/hooks/useConfig.ts b/src/lib/app-provider/hooks/useConfig.ts index 34a7e3c1d..d4963caad 100644 --- a/src/lib/app-provider/hooks/useConfig.ts +++ b/src/lib/app-provider/hooks/useConfig.ts @@ -9,11 +9,15 @@ const TierMap: Record = { full: 2, }; -export const useTierConfig = ({ - minTier = "lite", -}: { - minTier?: ChainConfig["tier"]; -}) => { +export const useTierConfig = ( + { + minTier, + }: { + minTier: ChainConfig["tier"]; + } = { + minTier: "lite", + } +) => { const { chainConfig: { tier }, } = useCelatoneApp(); From 3934d62bbf46d7770acc12e9b73f51972ecb890f Mon Sep 17 00:00:00 2001 From: songwongtp <16089160+songwongtp@users.noreply.github.com> Date: Thu, 25 Apr 2024 12:18:02 +0700 Subject: [PATCH 6/6] fix: change initia to tomcat --- src/config/chain/initia.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/config/chain/initia.ts b/src/config/chain/initia.ts index 3f0ff9061..291d547a8 100644 --- a/src/config/chain/initia.ts +++ b/src/config/chain/initia.ts @@ -7,19 +7,18 @@ const INITIA_DECODER = "https://initia-api-jiod42ec2q-as.a.run.app/decode_module"; export const INITIA_CHAIN_CONFIGS: ChainConfigs = { - "mahalo-2-lite": { + "tomcat-1-lite": { tier: "lite", chain: "initia", - registryChainName: "initiadevnet2", - prettyName: "Initia Closed Testnet 2 Lite", - lcd: "https://lcd.mahalo-2.initia.xyz", - rpc: "https://rpc.mahalo-2.initia.xyz:443", - indexer: "https://mahalo-2-graphql.alleslabs.dev/v1/graphql", + registryChainName: "blackwingdevnet1", + prettyName: "Blackwing Closed Testnet 1 Lite", + lcd: "https://maze-rest-c64ef367-a391-4e71-901e-87951e5e9030.ue1-prod.newmetric.xyz", + rpc: "https://maze-rpc-c64ef367-a391-4e71-901e-87951e5e9030.ue1-prod.newmetric.xyz", + indexer: "https://tomcat-1-graphql.alleslabs.dev/v1/graphql", wallets: [...initiaWallets, ...keplrWallets], features: { faucet: { enabled: false, - // url: process.env.NEXT_PUBLIC_INITIA_DEVNET_FAUCET_URL ?? "", }, wasm: { enabled: false, @@ -28,7 +27,7 @@ export const INITIA_CHAIN_CONFIGS: ChainConfigs = { enabled: true, moduleMaxFileSize: 1_048_576, decodeApi: INITIA_DECODER, - verify: "https://compiler.mahalo-2.initia.xyz/contracts/verify", + verify: "", }, pool: { enabled: false, @@ -37,9 +36,7 @@ export const INITIA_CHAIN_CONFIGS: ChainConfigs = { enabled: true, }, gov: { - enabled: true, - version: "v1", - hideOpenProposal: true, + enabled: false, }, nft: { enabled: true, @@ -48,12 +45,15 @@ export const INITIA_CHAIN_CONFIGS: ChainConfigs = { gas: { gasPrice: { tokenPerGas: 0.151, - denom: "uinit", + denom: + "l2/ad2344d0c17127cc6bce67e360f43cd6c5fa09a7b5f6f9b7b80f9dc3e0c4876e", }, gasAdjustment: 1.5, maxGasLimit: 25_000_000, }, - extra: {}, + extra: { + isValidatorExternalLink: null, + }, }, "mahalo-2": { tier: "full",