22
33import { GroupResponse , SemaphoreSubgraph } from "@semaphore-protocol/data"
44import { SupportedNetwork } from "@semaphore-protocol/utils"
5- import { usePathname } from "next/navigation"
6- import { useCallback , useEffect , useState } from "react"
5+ import { usePathname , useSearchParams } from "next/navigation"
6+ import { useCallback , useEffect , useState , useMemo } from "react"
77import SearchBar from "@/components/SearchBar"
88
99export default function Network ( ) {
@@ -12,9 +12,13 @@ export default function Network() {
1212
1313 const [ allGroups , setAllGroups ] = useState < GroupResponse [ ] > ( [ ] )
1414 const [ filteredGroups , setFilteredGroups ] = useState < GroupResponse [ ] > ( [ ] )
15-
1615 const [ loading , setLoading ] = useState ( false )
1716
17+ const searchParams = useSearchParams ( )
18+ const adminParam = useMemo ( ( ) => new URLSearchParams ( searchParams ) . get ( "admin" ) , [ searchParams . toString ( ) ] )
19+ const groupIdParam = useMemo ( ( ) => new URLSearchParams ( searchParams ) . get ( "groupid" ) , [ searchParams . toString ( ) ] )
20+ const queryParam = adminParam || groupIdParam
21+
1822 useEffect ( ( ) => {
1923 const fetchData = async ( ) => {
2024 setLoading ( true )
@@ -40,24 +44,34 @@ export default function Network() {
4044 let groups : GroupResponse [ ]
4145 if ( groupIdOrAdmin . startsWith ( "0x" ) ) {
4246 groupIdOrAdmin = groupIdOrAdmin . toLowerCase ( )
43- groups = allGroups . filter ( ( group ) => ( ! groupIdOrAdmin ? true : group . admin ?. includes ( groupIdOrAdmin ) ) )
47+ groups = allGroups . filter ( ( group ) => group . admin ?. includes ( groupIdOrAdmin ) )
4448 } else {
45- groups = allGroups . filter ( ( group ) => ( ! groupIdOrAdmin ? true : group . id . includes ( groupIdOrAdmin ) ) )
49+ groups = allGroups . filter (
50+ ( group ) => group . id . includes ( groupIdOrAdmin ) || group . admin === groupIdOrAdmin
51+ )
4652 }
47-
4853 setFilteredGroups ( groups )
4954 } ,
5055 [ allGroups ]
5156 )
5257
58+ useEffect ( ( ) => {
59+ filterGroups ( adminParam || groupIdParam || "" )
60+ } , [ adminParam , groupIdParam , filterGroups ] )
61+
5362 return loading ? (
5463 < div className = "flex justify-center items-center h-screen" >
5564 < div className = "loader" />
5665 </ div >
5766 ) : (
5867 allGroups && (
5968 < div className = "mx-auto max-w-7xl px-4 lg:px-8 pt-20" >
60- < SearchBar className = "mb-6" placeholder = "Group ID, Admin" onChange = { filterGroups } />
69+ < SearchBar
70+ className = "mb-6"
71+ placeholder = "Group ID, Admin"
72+ onChange = { filterGroups }
73+ queryParam = { queryParam }
74+ />
6175
6276 < div className = "flex justify-center flex-col pb-10 font-[family-name:var(--font-geist-sans)]" >
6377 < ul className = "divide-y divide-gray-300 min-w-xl" >
0 commit comments