@@ -53,9 +53,20 @@ export default function Roles() {
5353
5454 const [ isSidebarOpen , setIsSidebarOpen ] = useState ( false ) ;
5555
56+ const typeParam = searchParams . get ( "type" ) ;
57+
5658 const [ selectedType , setSelectedType ] = useState <
5759 "roles" | "companies" | "all"
58- > ( "all" ) ;
60+ > ( ( ) => {
61+ if (
62+ typeParam === "roles" ||
63+ typeParam === "companies" ||
64+ typeParam === "all"
65+ ) {
66+ return typeParam ;
67+ }
68+ return "all" ;
69+ } ) ;
5970
6071 const [ selectedFilter , setSelectedFilter ] = useState <
6172 "default" | "rating" | "newest" | "oldest" | undefined
@@ -275,44 +286,39 @@ export default function Roles() {
275286 const companySlug = roleItem . companySlug ?? createSlug ( companyName ) ;
276287 const roleSlug = roleItem . slug ;
277288
278- if (
279- companyName &&
280- ( companyParam !== companySlug || roleParam !== roleSlug )
281- ) {
282- // Preserve search param
283- const currentSearch = params . get ( "search" ) ;
284- params . delete ( "search" ) ;
285-
286- params . set ( "company" , companySlug ) ;
287- params . set ( "role" , roleSlug ) ;
289+ // Preserve search param
290+ const currentSearch = params . get ( "search" ) ;
291+ params . delete ( "search" ) ;
288292
289- // Add search back at the end
290- if ( currentSearch ) {
291- params . set ( "search" , currentSearch ) ;
292- }
293+ params . set ( "company" , companySlug ) ;
294+ params . set ( "role" , roleSlug ) ;
295+ params . set ( "type" , selectedType ) ;
293296
294- router . push ( `/?${ params . toString ( ) } ` ) ;
297+ // Add search back at the end
298+ if ( currentSearch ) {
299+ params . set ( "search" , currentSearch ) ;
295300 }
301+
302+ router . push ( `/?${ params . toString ( ) } ` ) ;
296303 } else {
297304 // For companies, use the company parameter with the name
298305 const companyItem = selectedItem as CompanyType & { slug ?: string } ;
299306 const companySlug = companyItem . slug ;
300307
301- if ( companyParam !== companySlug || roleParam !== null ) {
302- // Preserve search param
303- const currentSearch = params . get ( "search" ) ;
304- params . delete ( "search" ) ;
308+ // Preserve search param
309+ const currentSearch = params . get ( "search" ) ;
310+ params . delete ( "search" ) ;
305311
306- params . delete ( "role" ) ;
307- params . set ( "company" , companySlug ) ;
312+ params . delete ( "role" ) ;
313+ params . set ( "company" , companySlug ) ;
314+ params . set ( "type" , selectedType ) ;
308315
309- // Add search back at the end
310- if ( currentSearch ) {
311- params . set ( "search" , currentSearch ) ;
312- }
313-
314- router . push ( `/?${ params . toString ( ) } ` ) ;
316+ // Add search back at the end
317+ if ( currentSearch ) {
318+ params . set ( "search" , currentSearch ) ;
315319 }
320+
321+ router . push ( `/?${ params . toString ( ) } ` ) ;
316322 }
317323 }
318324 } , [
@@ -388,6 +394,17 @@ export default function Roles() {
388394 setCurrentPage ( 1 ) ;
389395 } , [ selectedFilter , searchValue , selectedType ] ) ;
390396
397+ useEffect ( ( ) => {
398+ const typeParam = searchParams . get ( "type" ) ;
399+ if (
400+ typeParam === "roles" ||
401+ typeParam === "companies" ||
402+ typeParam === "all"
403+ ) {
404+ setSelectedType ( typeParam ) ;
405+ }
406+ } , [ searchParams ] ) ;
407+
391408 const totalPages =
392409 rolesAndCompanies . data &&
393410 "totalCount" in rolesAndCompanies . data &&
0 commit comments