@@ -76,10 +76,11 @@ export function CampaignsTable({
7676 const [ searchParams , setSearchParams ] = useSearchParams ( ) ;
7777 const urlSort = ( searchParams . get ( 'sort' ) as SortOption | null ) ?? 'newest' ;
7878 const urlOrder = ( searchParams . get ( 'order' ) as 'asc' | 'desc' | null ) ?? 'desc' ;
79+ const urlStatus = ( searchParams . get ( 'status' ) as StatusFilterValue | null ) ?? '' ;
7980 const VALID_SORTS : SortOption [ ] = [ 'newest' , 'deadline' , 'percentFunded' , 'totalPledged' ] ;
8081 const sortBy : SortOption = VALID_SORTS . includes ( urlSort ) ? urlSort : 'newest' ;
8182 const [ assetCode , setAssetCode ] = useState ( "" ) ;
82- const [ statusFilter , setStatusFilter ] = useState < StatusFilterValue > ( "" ) ;
83+ const [ statusFilter , setStatusFilter ] = useState < StatusFilterValue > ( urlStatus ) ;
8384 const [ searchQuery , setSearchQuery ] = useState ( "" ) ;
8485 const loadMoreRef = useRef < HTMLDivElement | null > ( null ) ;
8586 const debouncedSearchQuery = useDebounce ( searchQuery , 300 ) ;
@@ -96,6 +97,19 @@ export function CampaignsTable({
9697 onSortChange ?.( newSort , newOrder ) ;
9798 }
9899
100+ function handleStatusFilterChange ( value : StatusFilterValue ) {
101+ setStatusFilter ( value ) ;
102+ setSearchParams ( ( prev ) => {
103+ const next = new URLSearchParams ( prev ) ;
104+ if ( value === '' ) {
105+ next . delete ( 'status' ) ;
106+ } else {
107+ next . set ( 'status' , value ) ;
108+ }
109+ return next ;
110+ } , { replace : true } ) ;
111+ }
112+
99113 function handleSearchChange ( value : string ) {
100114 setSearchQuery ( value ) ;
101115 if ( value === '' ) {
@@ -109,6 +123,10 @@ export function CampaignsTable({
109123 }
110124 } , [ debouncedSearchQuery , onSearchChange ] ) ;
111125
126+ useEffect ( ( ) => {
127+ setStatusFilter ( urlStatus ) ;
128+ } , [ urlStatus ] ) ;
129+
112130 useEffect ( ( ) => {
113131 const sentinel = loadMoreRef . current ;
114132 if ( ! sentinel || ! onLoadMore || ! hasMore ) {
@@ -243,7 +261,7 @@ export function CampaignsTable({
243261 key = { filter . label }
244262 type = "button"
245263 className = { `status-filter-tab ${ isActive ? "status-filter-tab-active" : "" } ` }
246- onClick = { ( ) => setStatusFilter ( filter . value ) }
264+ onClick = { ( ) => handleStatusFilterChange ( filter . value ) }
247265 aria-pressed = { isActive }
248266 disabled = { isLoading }
249267 >
0 commit comments