@@ -72,83 +72,91 @@ export default function ResourcesBySelector({
7272
7373	// Keep facets organized by filterable field for left sidebar 
7474
75- 	const  visibleResources  =  resources . filter ( ( resource )  =>  { 
76- 		// Handle top filter (ReactSelect) 
77- 		if  ( filterPlacement  ===  "top"  &&  selectedFilter  &&  filters )  { 
78- 			const  filterableValues : string [ ]  =  [ ] ; 
79- 			for  ( const  filter  of  filters )  { 
80- 				if  ( filter  ===  "products"  &&  resource . data . productTitles )  { 
81- 					// Use resolved product titles for products filter 
82- 					filterableValues . push ( ...resource . data . productTitles ) ; 
83- 				}  else  { 
84- 					const  val  =  resource . data [ filter  as  keyof  typeof  resource . data ] ; 
85- 					if  ( val )  { 
86- 						if  ( Array . isArray ( val )  &&  val . every ( ( v )  =>  typeof  v  ===  "string" ) )  { 
87- 							filterableValues . push ( ...val ) ; 
88- 						}  else  if  ( 
89- 							Array . isArray ( val )  && 
90- 							val . every ( ( v )  =>  typeof  v  ===  "object" ) 
91- 						)  { 
92- 							filterableValues . push ( ...val . map ( ( v )  =>  v . id ) ) ; 
93- 						}  else  if  ( typeof  val  ===  "string" )  { 
94- 							filterableValues . push ( val ) ; 
95- 						} 
96- 					} 
97- 				} 
98- 			} 
99- 			if  ( ! filterableValues . includes ( selectedFilter ) )  return  false ; 
100- 		} 
101- 
102- 		// Handle left sidebar filters 
103- 		if  ( filterPlacement  ===  "left"  &&  filters )  { 
104- 			// Check each filterable field separately 
105- 			for  ( const  [ filterField ,  selectedValues ]  of  Object . entries ( 
106- 				leftFilters . selectedValues , 
107- 			) )  { 
108- 				if  ( selectedValues . length  >  0 )  { 
109- 					const  resourceValues : string [ ]  =  [ ] ; 
110- 					if  ( filterField  ===  "products"  &&  resource . data . productTitles )  { 
75+ 	const  visibleResources  =  resources 
76+ 		. filter ( ( resource )  =>  { 
77+ 			// Handle top filter (ReactSelect) 
78+ 			if  ( filterPlacement  ===  "top"  &&  selectedFilter  &&  filters )  { 
79+ 				const  filterableValues : string [ ]  =  [ ] ; 
80+ 				for  ( const  filter  of  filters )  { 
81+ 					if  ( filter  ===  "products"  &&  resource . data . productTitles )  { 
11182						// Use resolved product titles for products filter 
112- 						resourceValues . push ( ...resource . data . productTitles ) ; 
83+ 						filterableValues . push ( ...resource . data . productTitles ) ; 
11384					}  else  { 
114- 						const  val  = 
115- 							resource . data [ filterField  as  keyof  typeof  resource . data ] ; 
85+ 						const  val  =  resource . data [ filter  as  keyof  typeof  resource . data ] ; 
11686						if  ( val )  { 
11787							if  ( 
11888								Array . isArray ( val )  && 
11989								val . every ( ( v )  =>  typeof  v  ===  "string" ) 
12090							)  { 
121- 								resourceValues . push ( ...val ) ; 
91+ 								filterableValues . push ( ...val ) ; 
12292							}  else  if  ( 
12393								Array . isArray ( val )  && 
12494								val . every ( ( v )  =>  typeof  v  ===  "object" ) 
12595							)  { 
126- 								resourceValues . push ( ...val . map ( ( v )  =>  v . id ) ) ; 
96+ 								filterableValues . push ( ...val . map ( ( v )  =>  v . id ) ) ; 
12797							}  else  if  ( typeof  val  ===  "string" )  { 
128- 								resourceValues . push ( val ) ; 
98+ 								filterableValues . push ( val ) ; 
12999							} 
130100						} 
131101					} 
132- 					if  ( ! resourceValues . some ( ( v )  =>  selectedValues . includes ( v ) ) )  { 
133- 						return  false ; 
134- 					} 
135102				} 
103+ 				if  ( ! filterableValues . includes ( selectedFilter ) )  return  false ; 
136104			} 
137105
138- 			// Search filter 
139- 			if  ( leftFilters . search )  { 
140- 				const  searchTerm  =  leftFilters . search . toLowerCase ( ) ; 
141- 				const  title  =  resource . data . title ?. toLowerCase ( )  ||  "" ; 
142- 				const  description  =  resource . data . description ?. toLowerCase ( )  ||  "" ; 
106+ 			// Handle left sidebar filters 
107+ 			if  ( filterPlacement  ===  "left"  &&  filters )  { 
108+ 				// Check each filterable field separately 
109+ 				for  ( const  [ filterField ,  selectedValues ]  of  Object . entries ( 
110+ 					leftFilters . selectedValues , 
111+ 				) )  { 
112+ 					if  ( selectedValues . length  >  0 )  { 
113+ 						const  resourceValues : string [ ]  =  [ ] ; 
114+ 						if  ( filterField  ===  "products"  &&  resource . data . productTitles )  { 
115+ 							// Use resolved product titles for products filter 
116+ 							resourceValues . push ( ...resource . data . productTitles ) ; 
117+ 						}  else  { 
118+ 							const  val  = 
119+ 								resource . data [ filterField  as  keyof  typeof  resource . data ] ; 
120+ 							if  ( val )  { 
121+ 								if  ( 
122+ 									Array . isArray ( val )  && 
123+ 									val . every ( ( v )  =>  typeof  v  ===  "string" ) 
124+ 								)  { 
125+ 									resourceValues . push ( ...val ) ; 
126+ 								}  else  if  ( 
127+ 									Array . isArray ( val )  && 
128+ 									val . every ( ( v )  =>  typeof  v  ===  "object" ) 
129+ 								)  { 
130+ 									resourceValues . push ( ...val . map ( ( v )  =>  v . id ) ) ; 
131+ 								}  else  if  ( typeof  val  ===  "string" )  { 
132+ 									resourceValues . push ( val ) ; 
133+ 								} 
134+ 							} 
135+ 						} 
136+ 						if  ( ! resourceValues . some ( ( v )  =>  selectedValues . includes ( v ) ) )  { 
137+ 							return  false ; 
138+ 						} 
139+ 					} 
140+ 				} 
141+ 
142+ 				// Search filter 
143+ 				if  ( leftFilters . search )  { 
144+ 					const  searchTerm  =  leftFilters . search . toLowerCase ( ) ; 
145+ 					const  title  =  resource . data . title ?. toLowerCase ( )  ||  "" ; 
146+ 					const  description  =  resource . data . description ?. toLowerCase ( )  ||  "" ; 
143147
144- 				if  ( ! title . includes ( searchTerm )  &&  ! description . includes ( searchTerm ) )  { 
145- 					return  false ; 
148+ 					if  ( 
149+ 						! title . includes ( searchTerm )  && 
150+ 						! description . includes ( searchTerm ) 
151+ 					)  { 
152+ 						return  false ; 
153+ 					} 
146154				} 
147155			} 
148- 		} 
149156
150- 		return  true ; 
151- 	} ) ; 
157+ 			return  true ; 
158+ 		} ) 
159+ 		. sort ( ( a ,  b )  =>  ( b ?. data ?. reviewed  ||  100 )  -  ( a ?. data ?. reviewed  ||  100 ) ) ; 
152160
153161	useEffect ( ( )  =>  { 
154162		const  params  =  new  URLSearchParams ( window . location . search ) ; 
0 commit comments