@@ -2,20 +2,19 @@ import { useEffect, useState, type ChangeEvent } from "react";
22import FieldBadges from "./fields/FieldBadges" ;
33import Markdown from "react-markdown" ;
44import type { CollectionEntry } from "astro:content" ;
5+ import { setSearchParams } from "~/util/url" ;
56
67type Fields = CollectionEntry < "fields" > [ "data" ] [ "entries" ] ;
78
89type Filters = {
910 search : string ;
1011 categories : string [ ] ;
11- keywords : string [ ] ;
1212} ;
1313
1414const FieldCatalog = ( { fields } : { fields : Fields } ) => {
1515 const [ filters , setFilters ] = useState < Filters > ( {
1616 search : "" ,
1717 categories : [ ] ,
18- keywords : [ ] ,
1918 } ) ;
2019
2120 const mapped = fields . sort ( ( f1 , f2 ) => {
@@ -58,7 +57,6 @@ const FieldCatalog = ({ fields }: { fields: Fields }) => {
5857 } ) ;
5958
6059 useEffect ( ( ) => {
61- // On component load, check for deep-links to categories in the query param
6260 const params = new URLSearchParams ( window . location . search ) ;
6361 const categories = params . getAll ( "field-category" ) ;
6462 const searchTerm = params . get ( "search-term" ) ?? "" ;
@@ -72,6 +70,22 @@ const FieldCatalog = ({ fields }: { fields: Fields }) => {
7270 } ) ;
7371 } , [ ] ) ;
7472
73+ useEffect ( ( ) => {
74+ const params = new URLSearchParams ( ) ;
75+
76+ if ( filters . search ) {
77+ params . set ( "search-term" , filters . search ) ;
78+ }
79+
80+ if ( filters . categories . length > 0 ) {
81+ filters . categories . forEach ( ( category ) =>
82+ params . append ( "field-category" , category ) ,
83+ ) ;
84+ }
85+
86+ setSearchParams ( params ) ;
87+ } , [ filters ] ) ;
88+
7589 return (
7690 < div className = "md:flex" >
7791 < div className = "mr-8 w-full md:w-1/4" >
0 commit comments