mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
Support both chain slug and chain id in multichain page parameters (#3338)
* Support both chain slug and chain id in page parameters in multichain explorer mode Resolves #3320 * fix test
This commit is contained in:
@@ -4,7 +4,7 @@ import React from 'react';
|
||||
import type { ClusterChainConfig } from 'types/multichain';
|
||||
|
||||
import multichainConfig from 'configs/multichain';
|
||||
import getChainIdFromSlug from 'lib/multichain/getChainIdFromSlug';
|
||||
import getChainIdFromSlugOrId from 'lib/multichain/getChainIdFromSlugOrId';
|
||||
import getQueryParamString from 'lib/router/getQueryParamString';
|
||||
|
||||
interface MultichainProviderProps {
|
||||
@@ -20,13 +20,13 @@ export const MultichainContext = React.createContext<TMultichainContext | null>(
|
||||
|
||||
export function MultichainProvider({ children, chainId: chainIdProp }: MultichainProviderProps) {
|
||||
const router = useRouter();
|
||||
const chainSlugQueryParam = router.pathname.includes('chain_slug') ? getQueryParamString(router.query.chain_slug) : undefined;
|
||||
const chainSlugOrIdQueryParam = router.pathname.includes('chain_slug_or_id') ? getQueryParamString(router.query.chain_slug_or_id) : undefined;
|
||||
const chainIdQueryParam = router.query.chain_id ? getQueryParamString(router.query.chain_id) : undefined;
|
||||
|
||||
const [ chainId, setChainId ] = React.useState<string | undefined>(
|
||||
chainIdProp ??
|
||||
chainIdQueryParam ??
|
||||
(chainSlugQueryParam ? getChainIdFromSlug(chainSlugQueryParam) : undefined),
|
||||
(chainSlugOrIdQueryParam ? getChainIdFromSlugOrId(chainSlugOrIdQueryParam) : undefined),
|
||||
);
|
||||
|
||||
React.useEffect(() => {
|
||||
|
||||
@@ -42,7 +42,7 @@ export default function useNavItems(): ReturnType {
|
||||
text: 'Blocks',
|
||||
nextRoute: { pathname: '/blocks' as const },
|
||||
icon: 'navigation/block',
|
||||
isActive: pathname === '/blocks' || pathname === '/block/[height_or_hash]' || pathname === '/chain/[chain_slug]/block/[height_or_hash]',
|
||||
isActive: pathname === '/blocks' || pathname === '/block/[height_or_hash]' || pathname === '/chain/[chain_slug_or_id]/block/[height_or_hash]',
|
||||
};
|
||||
const txs: NavItem | null = {
|
||||
text: 'Transactions',
|
||||
@@ -52,7 +52,7 @@ export default function useNavItems(): ReturnType {
|
||||
// sorry, but this is how it was designed
|
||||
(pathname === '/txs' && (!config.features.zetachain.isEnabled || !tab || !tab.includes('cctx'))) ||
|
||||
pathname === '/tx/[hash]' ||
|
||||
pathname === '/chain/[chain_slug]/tx/[hash]',
|
||||
pathname === '/chain/[chain_slug_or_id]/tx/[hash]',
|
||||
};
|
||||
const cctxs: NavItem | null = config.features.zetachain.isEnabled ? {
|
||||
text: 'Cross-chain transactions',
|
||||
@@ -76,7 +76,7 @@ export default function useNavItems(): ReturnType {
|
||||
text: 'User operations',
|
||||
nextRoute: { pathname: '/ops' as const },
|
||||
icon: 'navigation/user_op',
|
||||
isActive: pathname === '/ops' || pathname === '/op/[hash]' || pathname === '/chain/[chain_slug]/op/[hash]',
|
||||
isActive: pathname === '/ops' || pathname === '/op/[hash]' || pathname === '/chain/[chain_slug_or_id]/op/[hash]',
|
||||
} : null;
|
||||
|
||||
const verifiedContracts: NavItem | null =
|
||||
|
||||
@@ -72,17 +72,17 @@ const OG_TYPE_DICT: Record<Route['pathname'], OGPageType> = {
|
||||
'/cross-chain-tx/[id]': 'Regular page',
|
||||
|
||||
// multichain routes
|
||||
'/chain/[chain_slug]/accounts/label/[slug]': 'Root page',
|
||||
'/chain/[chain_slug]/advanced-filter': 'Regular page',
|
||||
'/chain/[chain_slug]/block/[height_or_hash]': 'Regular page',
|
||||
'/chain/[chain_slug]/block/countdown': 'Regular page',
|
||||
'/chain/[chain_slug]/block/countdown/[height]': 'Regular page',
|
||||
'/chain/[chain_slug]/csv-export': 'Regular page',
|
||||
'/chain/[chain_slug]/op/[hash]': 'Regular page',
|
||||
'/chain/[chain_slug]/token/[hash]': 'Regular page',
|
||||
'/chain/[chain_slug]/token/[hash]/instance/[id]': 'Regular page',
|
||||
'/chain/[chain_slug]/tx/[hash]': 'Regular page',
|
||||
'/chain/[chain_slug]/visualize/sol2uml': 'Regular page',
|
||||
'/chain/[chain_slug_or_id]/accounts/label/[slug]': 'Root page',
|
||||
'/chain/[chain_slug_or_id]/advanced-filter': 'Regular page',
|
||||
'/chain/[chain_slug_or_id]/block/[height_or_hash]': 'Regular page',
|
||||
'/chain/[chain_slug_or_id]/block/countdown': 'Regular page',
|
||||
'/chain/[chain_slug_or_id]/block/countdown/[height]': 'Regular page',
|
||||
'/chain/[chain_slug_or_id]/csv-export': 'Regular page',
|
||||
'/chain/[chain_slug_or_id]/op/[hash]': 'Regular page',
|
||||
'/chain/[chain_slug_or_id]/token/[hash]': 'Regular page',
|
||||
'/chain/[chain_slug_or_id]/token/[hash]/instance/[id]': 'Regular page',
|
||||
'/chain/[chain_slug_or_id]/tx/[hash]': 'Regular page',
|
||||
'/chain/[chain_slug_or_id]/visualize/sol2uml': 'Regular page',
|
||||
'/ecosystems': 'Root page',
|
||||
|
||||
// service routes, added only to make typescript happy
|
||||
|
||||
@@ -75,17 +75,17 @@ const TEMPLATE_MAP: Record<Route['pathname'], string> = {
|
||||
'/cross-chain-tx/[id]': DEFAULT_TEMPLATE,
|
||||
|
||||
// multichain routes
|
||||
'/chain/[chain_slug]/accounts/label/[slug]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug]/advanced-filter': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug]/block/[height_or_hash]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug]/block/countdown': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug]/block/countdown/[height]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug]/csv-export': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug]/op/[hash]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug]/token/[hash]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug]/token/[hash]/instance/[id]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug]/tx/[hash]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug]/visualize/sol2uml': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug_or_id]/accounts/label/[slug]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug_or_id]/advanced-filter': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug_or_id]/block/[height_or_hash]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug_or_id]/block/countdown': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug_or_id]/block/countdown/[height]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug_or_id]/csv-export': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug_or_id]/op/[hash]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug_or_id]/token/[hash]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug_or_id]/token/[hash]/instance/[id]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug_or_id]/tx/[hash]': DEFAULT_TEMPLATE,
|
||||
'/chain/[chain_slug_or_id]/visualize/sol2uml': DEFAULT_TEMPLATE,
|
||||
'/ecosystems': DEFAULT_TEMPLATE,
|
||||
|
||||
// service routes, added only to make typescript happy
|
||||
|
||||
@@ -77,17 +77,17 @@ const TEMPLATE_MAP: Record<Route['pathname'], string> = {
|
||||
'/cross-chain-tx/[id]': '%network_name% cross-chain transaction %id% details',
|
||||
|
||||
// multichain routes
|
||||
'/chain/[chain_slug]/accounts/label/[slug]': '%network_name% addresses search by label',
|
||||
'/chain/[chain_slug]/advanced-filter': '%network_name% advanced filter',
|
||||
'/chain/[chain_slug]/block/[height_or_hash]': '%network_name% block %height_or_hash% details',
|
||||
'/chain/[chain_slug]/block/countdown': '%network_name% block countdown index',
|
||||
'/chain/[chain_slug]/block/countdown/[height]': '%network_name% block %height% countdown',
|
||||
'/chain/[chain_slug]/csv-export': '%network_name% export data to CSV',
|
||||
'/chain/[chain_slug]/op/[hash]': '%network_name% user operation %hash% details',
|
||||
'/chain/[chain_slug]/token/[hash]': '%network_name% token details',
|
||||
'/chain/[chain_slug]/token/[hash]/instance/[id]': '%network_name% token NFT instance',
|
||||
'/chain/[chain_slug]/tx/[hash]': '%network_name% transaction %hash% details',
|
||||
'/chain/[chain_slug]/visualize/sol2uml': '%network_name% Solidity UML diagram',
|
||||
'/chain/[chain_slug_or_id]/accounts/label/[slug]': '%network_name% addresses search by label',
|
||||
'/chain/[chain_slug_or_id]/advanced-filter': '%network_name% advanced filter',
|
||||
'/chain/[chain_slug_or_id]/block/[height_or_hash]': '%network_name% block %height_or_hash% details',
|
||||
'/chain/[chain_slug_or_id]/block/countdown': '%network_name% block countdown index',
|
||||
'/chain/[chain_slug_or_id]/block/countdown/[height]': '%network_name% block %height% countdown',
|
||||
'/chain/[chain_slug_or_id]/csv-export': '%network_name% export data to CSV',
|
||||
'/chain/[chain_slug_or_id]/op/[hash]': '%network_name% user operation %hash% details',
|
||||
'/chain/[chain_slug_or_id]/token/[hash]': '%network_name% token details',
|
||||
'/chain/[chain_slug_or_id]/token/[hash]/instance/[id]': '%network_name% token NFT instance',
|
||||
'/chain/[chain_slug_or_id]/tx/[hash]': '%network_name% transaction %hash% details',
|
||||
'/chain/[chain_slug_or_id]/visualize/sol2uml': '%network_name% Solidity UML diagram',
|
||||
'/ecosystems': '%network_name% ecosystems',
|
||||
|
||||
// service routes, added only to make typescript happy
|
||||
|
||||
+11
-11
@@ -70,17 +70,17 @@ export const PAGE_TYPE_DICT: Record<Route['pathname'], string> = {
|
||||
'/cross-chain-tx/[id]': 'Cross-chain transaction details',
|
||||
|
||||
// multichain routes
|
||||
'/chain/[chain_slug]/accounts/label/[slug]': 'Chain addresses search by label',
|
||||
'/chain/[chain_slug]/advanced-filter': 'Chain advanced filter',
|
||||
'/chain/[chain_slug]/block/[height_or_hash]': 'Chain block details',
|
||||
'/chain/[chain_slug]/block/countdown': 'Chain block countdown index',
|
||||
'/chain/[chain_slug]/block/countdown/[height]': 'Chain block countdown',
|
||||
'/chain/[chain_slug]/csv-export': 'Chain export data to CSV',
|
||||
'/chain/[chain_slug]/op/[hash]': 'Chain user operation details',
|
||||
'/chain/[chain_slug]/token/[hash]': 'Chain token details',
|
||||
'/chain/[chain_slug]/token/[hash]/instance/[id]': 'Chain token NFT instance',
|
||||
'/chain/[chain_slug]/tx/[hash]': 'Chain transaction details',
|
||||
'/chain/[chain_slug]/visualize/sol2uml': 'Chain Solidity UML diagram',
|
||||
'/chain/[chain_slug_or_id]/accounts/label/[slug]': 'Chain addresses search by label',
|
||||
'/chain/[chain_slug_or_id]/advanced-filter': 'Chain advanced filter',
|
||||
'/chain/[chain_slug_or_id]/block/[height_or_hash]': 'Chain block details',
|
||||
'/chain/[chain_slug_or_id]/block/countdown': 'Chain block countdown index',
|
||||
'/chain/[chain_slug_or_id]/block/countdown/[height]': 'Chain block countdown',
|
||||
'/chain/[chain_slug_or_id]/csv-export': 'Chain export data to CSV',
|
||||
'/chain/[chain_slug_or_id]/op/[hash]': 'Chain user operation details',
|
||||
'/chain/[chain_slug_or_id]/token/[hash]': 'Chain token details',
|
||||
'/chain/[chain_slug_or_id]/token/[hash]/instance/[id]': 'Chain token NFT instance',
|
||||
'/chain/[chain_slug_or_id]/tx/[hash]': 'Chain transaction details',
|
||||
'/chain/[chain_slug_or_id]/visualize/sol2uml': 'Chain Solidity UML diagram',
|
||||
'/ecosystems': 'Ecosystems',
|
||||
|
||||
// service routes, added only to make typescript happy
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
import multichainConfig from 'configs/multichain';
|
||||
|
||||
export default function getChainIdFromSlug(slug: string) {
|
||||
const config = multichainConfig();
|
||||
if (!config) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return config.chains.find((chain) => chain.slug === slug)?.id;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
import multichainConfig from 'configs/multichain';
|
||||
|
||||
export default function getChainIdFromSlugOrId(slugOrId: string) {
|
||||
const config = multichainConfig();
|
||||
if (!config) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return config.chains.find((chain) => chain.slug === slugOrId || chain.id === slugOrId)?.id;
|
||||
}
|
||||
@@ -14,7 +14,7 @@ export default function getChainValueFromQuery(
|
||||
}
|
||||
|
||||
const chainId = getQueryParamString(query.chain_id);
|
||||
const chainSlug = getQueryParamString(query.chain_slug);
|
||||
const chainSlugOrId = getQueryParamString(query.chain_slug_or_id);
|
||||
|
||||
if (chainId) {
|
||||
if (config.chains.some((chain) => chain.id === chainId)) {
|
||||
@@ -22,8 +22,8 @@ export default function getChainValueFromQuery(
|
||||
}
|
||||
}
|
||||
|
||||
if (chainSlug) {
|
||||
const chain = config.chains.find((chain) => chain.slug === chainSlug);
|
||||
if (chainSlugOrId) {
|
||||
const chain = config.chains.find((chain) => chain.slug === chainSlugOrId || chain.id === chainSlugOrId);
|
||||
if (chain) {
|
||||
return chain.id;
|
||||
}
|
||||
|
||||
@@ -35,8 +35,8 @@ export const factory = (guards: Array<Guard | Array<Guard>>, chainConfig = confi
|
||||
|
||||
export const factoryMultichain = (guards: Array<Guard>) => {
|
||||
return async(context: GetServerSidePropsContext) => {
|
||||
const chainSlug = context.params?.chain_slug;
|
||||
const chain = multichainConfig()?.chains.find((chain) => chain.slug === chainSlug);
|
||||
const chainSlugOrId = context.params?.chain_slug_or_id;
|
||||
const chain = multichainConfig()?.chains.find((chain) => chain.slug === chainSlugOrId || chain.id === chainSlugOrId);
|
||||
|
||||
if (!chain?.app_config) {
|
||||
return {
|
||||
|
||||
Vendored
+11
-11
@@ -45,17 +45,17 @@ declare module "nextjs-routes" {
|
||||
| DynamicRoute<"/block/countdown/[height]", { "height": string }>
|
||||
| StaticRoute<"/blocks">
|
||||
| DynamicRoute<"/cc/tx/[hash]", { "hash": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug]/accounts/label/[slug]", { "chain_slug": string; "slug": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug]/advanced-filter", { "chain_slug": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug]/block/[height_or_hash]", { "chain_slug": string; "height_or_hash": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug]/block/countdown", { "chain_slug": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug]/block/countdown/[height]", { "chain_slug": string; "height": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug]/csv-export", { "chain_slug": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug]/op/[hash]", { "chain_slug": string; "hash": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug]/token/[hash]", { "chain_slug": string; "hash": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug]/token/[hash]/instance/[id]", { "chain_slug": string; "hash": string; "id": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug]/tx/[hash]", { "chain_slug": string; "hash": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug]/visualize/sol2uml", { "chain_slug": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug_or_id]/accounts/label/[slug]", { "chain_slug_or_id": string; "slug": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug_or_id]/advanced-filter", { "chain_slug_or_id": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug_or_id]/block/[height_or_hash]", { "chain_slug_or_id": string; "height_or_hash": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug_or_id]/block/countdown", { "chain_slug_or_id": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug_or_id]/block/countdown/[height]", { "chain_slug_or_id": string; "height": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug_or_id]/csv-export", { "chain_slug_or_id": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug_or_id]/op/[hash]", { "chain_slug_or_id": string; "hash": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug_or_id]/token/[hash]", { "chain_slug_or_id": string; "hash": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug_or_id]/token/[hash]/instance/[id]", { "chain_slug_or_id": string; "hash": string; "id": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug_or_id]/tx/[hash]", { "chain_slug_or_id": string; "hash": string }>
|
||||
| DynamicRoute<"/chain/[chain_slug_or_id]/visualize/sol2uml", { "chain_slug_or_id": string }>
|
||||
| StaticRoute<"/chakra">
|
||||
| StaticRoute<"/contract-verification">
|
||||
| DynamicRoute<"/cross-chain-tx/[id]", { "id": string }>
|
||||
|
||||
+2
-2
@@ -22,8 +22,8 @@ export const route = (route: Route, params?: RouteParams | null) => {
|
||||
|
||||
export const routeParams = (route: Route, params?: RouteParams | null): Route => {
|
||||
if (!params?.external && params?.chain?.slug) {
|
||||
const pathname = '/chain/[chain_slug]' + route.pathname;
|
||||
return { ...route, pathname, query: { ...route.query, chain_slug: params.chain.slug } } as Route;
|
||||
const pathname = '/chain/[chain_slug_or_id]' + route.pathname;
|
||||
return { ...route, pathname, query: { ...route.query, chain_slug_or_id: params.chain.slug } } as Route;
|
||||
}
|
||||
return route;
|
||||
};
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ const AccountsLabelSearch = dynamic(() => import('ui/pages/AccountsLabelSearch')
|
||||
|
||||
const Page: NextPage = () => {
|
||||
return (
|
||||
<PageNextJs pathname="/chain/[chain_slug]/accounts/label/[slug]">
|
||||
<PageNextJs pathname="/chain/[chain_slug_or_id]/accounts/label/[slug]">
|
||||
<MultichainProvider>
|
||||
<AccountsLabelSearch/>
|
||||
</MultichainProvider>
|
||||
+1
-1
@@ -8,7 +8,7 @@ import AdvancedFilter from 'ui/pages/AdvancedFilter';
|
||||
|
||||
const Page: NextPage = () => {
|
||||
return (
|
||||
<PageNextJs pathname="/chain/[chain_slug]/advanced-filter">
|
||||
<PageNextJs pathname="/chain/[chain_slug_or_id]/advanced-filter">
|
||||
<MultichainProvider>
|
||||
<AdvancedFilter/>
|
||||
</MultichainProvider>
|
||||
+1
-1
@@ -9,7 +9,7 @@ const MultichainBlock = dynamic(() => import('ui/multichain/block/MultichainBloc
|
||||
|
||||
const Page: NextPage<Props> = (props: Props) => {
|
||||
return (
|
||||
<PageNextJs pathname="/chain/[chain_slug]/block/[height_or_hash]" query={ props.query }>
|
||||
<PageNextJs pathname="/chain/[chain_slug_or_id]/block/[height_or_hash]" query={ props.query }>
|
||||
<MultichainBlock/>
|
||||
</PageNextJs>
|
||||
);
|
||||
+1
-1
@@ -11,7 +11,7 @@ const BlockCountdown = dynamic(() => import('ui/pages/BlockCountdown'), { ssr: f
|
||||
|
||||
const Page: NextPage<Props> = (props: Props) => {
|
||||
return (
|
||||
<PageNextJs pathname="/chain/[chain_slug]/block/countdown/[height]" query={ props.query }>
|
||||
<PageNextJs pathname="/chain/[chain_slug_or_id]/block/countdown/[height]" query={ props.query }>
|
||||
<MultichainProvider>
|
||||
<BlockCountdown/>
|
||||
</MultichainProvider>
|
||||
+1
-1
@@ -11,7 +11,7 @@ const BlockCountdownIndex = dynamic(() => import('ui/pages/BlockCountdownIndex')
|
||||
|
||||
const Page: NextPage<Props> = (props: Props) => {
|
||||
return (
|
||||
<PageNextJs pathname="/chain/[chain_slug]/block/countdown" query={ props.query }>
|
||||
<PageNextJs pathname="/chain/[chain_slug_or_id]/block/countdown" query={ props.query }>
|
||||
<MultichainProvider>
|
||||
<BlockCountdownIndex/>
|
||||
</MultichainProvider>
|
||||
+1
-1
@@ -8,7 +8,7 @@ import CsvExport from 'ui/pages/CsvExport';
|
||||
|
||||
const Page: NextPage = () => {
|
||||
return (
|
||||
<PageNextJs pathname="/chain/[chain_slug]/csv-export">
|
||||
<PageNextJs pathname="/chain/[chain_slug_or_id]/csv-export">
|
||||
<MultichainProvider>
|
||||
<CsvExport/>
|
||||
</MultichainProvider>
|
||||
+1
-1
@@ -11,7 +11,7 @@ const UserOp = dynamic(() => import('ui/pages/UserOp'), { ssr: false });
|
||||
|
||||
const Page: NextPage<Props> = (props: Props) => {
|
||||
return (
|
||||
<PageNextJs pathname="/chain/[chain_slug]/op/[hash]" query={ props.query }>
|
||||
<PageNextJs pathname="/chain/[chain_slug_or_id]/op/[hash]" query={ props.query }>
|
||||
<MultichainProvider>
|
||||
<UserOp/>
|
||||
</MultichainProvider>
|
||||
+1
-1
@@ -9,7 +9,7 @@ const MultichainTx = dynamic(() => import('ui/multichain/tx/MultichainTx'), { ss
|
||||
|
||||
const Page: NextPage<Props> = (props: Props) => {
|
||||
return (
|
||||
<PageNextJs pathname="/chain/[chain_slug]/tx/[hash]" query={ props.query }>
|
||||
<PageNextJs pathname="/chain/[chain_slug_or_id]/tx/[hash]" query={ props.query }>
|
||||
<MultichainTx/>
|
||||
</PageNextJs>
|
||||
);
|
||||
@@ -22,11 +22,11 @@ const formatValue = (value: unknown): string | undefined => {
|
||||
};
|
||||
|
||||
const formatValueTitle = (valueTitle: unknown): string | undefined => {
|
||||
if (typeof valueTitle !== 'string' || typeof valueTitle !== 'number' || typeof valueTitle !== 'boolean') {
|
||||
if (typeof valueTitle !== 'string' && typeof valueTitle !== 'number' && typeof valueTitle !== 'boolean') {
|
||||
return;
|
||||
}
|
||||
|
||||
return valueTitle;
|
||||
return String(valueTitle);
|
||||
};
|
||||
|
||||
interface Props {
|
||||
|
||||
@@ -8,8 +8,8 @@ import Block from 'ui/pages/Block';
|
||||
|
||||
const MultichainBlock = () => {
|
||||
const router = useRouter();
|
||||
const chainSlug = getQueryParamString(router.query.chain_slug);
|
||||
const chainData = multichainConfig()?.chains.find(chain => chain.slug === chainSlug);
|
||||
const chainSlugOrId = getQueryParamString(router.query.chain_slug_or_id);
|
||||
const chainData = multichainConfig()?.chains.find(chain => chain.slug === chainSlugOrId || chain.id === chainSlugOrId);
|
||||
|
||||
return (
|
||||
<MultichainProvider chainId={ chainData?.id }>
|
||||
|
||||
@@ -36,8 +36,8 @@ export default function useSearchRedirect({ checkRedirectQuery, hasSearchTerm }:
|
||||
const chainInfo = multichainConfig()?.chains.find((chain) => chain.id === checkRedirectQuery.data.chain_id);
|
||||
if (chainInfo) {
|
||||
router.replace({
|
||||
pathname: '/chain/[chain_slug]/block/[height_or_hash]',
|
||||
query: { height_or_hash: checkRedirectQuery.data.parameter, chain_slug: chainInfo?.slug },
|
||||
pathname: '/chain/[chain_slug_or_id]/block/[height_or_hash]',
|
||||
query: { height_or_hash: checkRedirectQuery.data.parameter, chain_slug_or_id: chainInfo.slug },
|
||||
});
|
||||
return;
|
||||
}
|
||||
@@ -51,10 +51,10 @@ export default function useSearchRedirect({ checkRedirectQuery, hasSearchTerm }:
|
||||
const chainInfo = multichainConfig()?.chains.find((chain) => chain.id === checkRedirectQuery.data.chain_id);
|
||||
if (chainInfo) {
|
||||
router.replace({
|
||||
pathname: '/chain/[chain_slug]/tx/[hash]',
|
||||
pathname: '/chain/[chain_slug_or_id]/tx/[hash]',
|
||||
query: {
|
||||
hash: checkRedirectQuery.data.parameter,
|
||||
chain_slug: chainInfo?.slug,
|
||||
chain_slug_or_id: chainInfo.slug,
|
||||
},
|
||||
});
|
||||
return;
|
||||
|
||||
@@ -10,8 +10,8 @@ import Token from 'ui/pages/Token';
|
||||
|
||||
const MultichainToken = () => {
|
||||
const router = useRouter();
|
||||
const chainSlug = getQueryParamString(router.query.chain_slug);
|
||||
const chainData = multichainConfig()?.chains.find(chain => chain.slug === chainSlug);
|
||||
const chainSlugOrId = getQueryParamString(router.query.chain_slug_or_id);
|
||||
const chainData = multichainConfig()?.chains.find(chain => chain.slug === chainSlugOrId || chain.id === chainSlugOrId);
|
||||
|
||||
return (
|
||||
<MultichainProvider chainId={ chainData?.id }>
|
||||
|
||||
@@ -10,8 +10,8 @@ import TokenInstance from 'ui/pages/TokenInstance';
|
||||
|
||||
const MultichainTokenInstance = () => {
|
||||
const router = useRouter();
|
||||
const chainSlug = getQueryParamString(router.query.chain_slug);
|
||||
const chainData = multichainConfig()?.chains.find(chain => chain.slug === chainSlug);
|
||||
const chainSlugOrId = getQueryParamString(router.query.chain_slug_or_id);
|
||||
const chainData = multichainConfig()?.chains.find(chain => chain.slug === chainSlugOrId || chain.id === chainSlugOrId);
|
||||
|
||||
return (
|
||||
<MultichainProvider chainId={ chainData?.id }>
|
||||
|
||||
@@ -8,8 +8,8 @@ import Transaction from 'ui/pages/Transaction';
|
||||
|
||||
const MultichainTx = () => {
|
||||
const router = useRouter();
|
||||
const chainSlug = getQueryParamString(router.query.chain_slug);
|
||||
const chainData = multichainConfig()?.chains.find(chain => chain.slug === chainSlug);
|
||||
const chainSlugOrId = getQueryParamString(router.query.chain_slug_or_id);
|
||||
const chainData = multichainConfig()?.chains.find(chain => chain.slug === chainSlugOrId || chain.id === chainSlugOrId);
|
||||
|
||||
return (
|
||||
<MultichainProvider chainId={ chainData?.id }>
|
||||
|
||||
@@ -51,7 +51,7 @@ const TokenDetails = ({ tokenQuery }: Props) => {
|
||||
|
||||
router.push(
|
||||
chainSlug ?
|
||||
{ pathname: '/chain/[chain_slug]/token/[hash]', query: { hash: hash || '', tab, chain_slug: chainSlug } } :
|
||||
{ pathname: '/chain/[chain_slug_or_id]/token/[hash]', query: { hash: hash || '', tab, chain_slug_or_id: chainSlug } } :
|
||||
{ pathname: '/token/[hash]', query: { hash: hash || '', tab } },
|
||||
undefined,
|
||||
{ shallow: true },
|
||||
|
||||
Reference in New Issue
Block a user