Skip to content

Commit 0c27a7c

Browse files
chore: handle unknown network
* handle unknown network * chore: alternative solution (#102) --------- Co-authored-by: Neil Campbell <neil.campbell@makerx.com.au>
1 parent e45fc7c commit 0c27a7c

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

src/App.routes.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export const routes = evalTemplates([
3434
},
3535
{
3636
template: Urls.Explore,
37+
errorElement: <ErrorPage />,
3738
element: (
3839
<NetworkPage>
3940
<Outlet />

src/features/deep-link/hooks/use-deep-link.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { useCallback, useEffect } from 'react'
22
import { listen } from '@tauri-apps/api/event'
33
import { useNavigate } from 'react-router-dom'
4-
import { useSelectedNetwork } from '@/features/settings/data'
4+
import { useSetSelectedNetwork } from '@/features/settings/data'
55
import { parseDeepLink } from '@/features/deep-link/parse-deep-link'
66
import { Urls } from '@/routes/urls'
77

88
export function useDeepLink() {
9-
const [_, setSelectedNetwork] = useSelectedNetwork()
9+
const setSelectedNetwork = useSetSelectedNetwork()
1010
const navigate = useNavigate()
1111

1212
const handleDeepLink = useCallback(
Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
11
import { useRequiredParam } from '@/features/common/hooks/use-required-param'
2-
import { UrlParams, Urls } from '@/routes/urls'
3-
import { networksConfigs } from '@/features/settings/data'
4-
import { useNavigate } from 'react-router-dom'
2+
import { UrlParams } from '@/routes/urls'
3+
import { networksConfigs, useSelectedNetwork } from '@/features/settings/data'
4+
import { useLocation, useNavigate } from 'react-router-dom'
55
import { useEffect } from 'react'
66

77
type Props = {
88
children: React.ReactNode
99
}
1010
export function NetworkPage({ children }: Props) {
11+
const [selectedNetwork] = useSelectedNetwork()
1112
const { networkId } = useRequiredParam(UrlParams.NetworkId)
1213
const navigate = useNavigate()
14+
const { pathname, search, hash } = useLocation()
15+
const isWildcardNetworkRoute = networkId === '_'
16+
const isValidNetwork = isWildcardNetworkRoute || (networksConfigs.find((c) => c.id === networkId) ? true : false)
17+
if (!isValidNetwork) {
18+
throw new Error(`"${networkId}" is not a valid network.`)
19+
}
1320

1421
useEffect(() => {
15-
if (!networksConfigs.find((c) => c.id === networkId)) {
16-
navigate(Urls.Index.build({}))
22+
if (isWildcardNetworkRoute) {
23+
navigate(pathname.replace('_', selectedNetwork) + search + hash)
1724
}
18-
}, [navigate, networkId])
25+
}, [hash, pathname, search, navigate, selectedNetwork, isWildcardNetworkRoute])
1926

2027
return children
2128
}

0 commit comments

Comments
 (0)