@@ -5,19 +5,16 @@ import { useMemo, useState } from "react";
55import { MultiSelect , ItemRenderer , ItemPredicate } from "@blueprintjs/select" ;
66import { MenuItem , Spinner , InputGroup } from "@blueprintjs/core" ;
77import styles from "./postgrest.module.sass" ;
8- import "@blueprintjs/core/lib/css/blueprint.css" ;
9- import "@blueprintjs/select/lib/css/blueprint-select.css" ;
108
119const h = hyper . styled ( styles ) ;
12- const b = hyper ;
1310
1411interface PostgRESTInfiniteScrollProps extends InfiniteScrollProps < any > {
1512 id_key : string ;
1613 limit : number ;
1714 extraParams ?: Record < string , any > ;
1815 ascending ?: boolean ;
1916 filterable ?: boolean ;
20- searchColumns ?: string [ ] ;
17+ searchColumns ?: Array < { value : string ; label : string } > ;
2118 order_key ?: string ;
2219 key ?: string ;
2320 toggles ?: any ;
@@ -65,8 +62,9 @@ export function PostgRESTInfiniteScrollView(
6562 }
6663
6764 const [ selectedItems , setSelectedItems ] = useState < string [ ] > (
68- searchColumns || [ ] ,
65+ ( searchColumns ?? [ ] ) . map ( ( col ) => col . value ) ,
6966 ) ;
67+
7068 const [ filterValue , setFilterValue ] = useState < string > ( "" ) ;
7169
7270 const SearchBarToUse = SearchBarComponent ?? SearchBar ;
@@ -137,16 +135,25 @@ export function PostgRESTInfiniteScrollView(
137135 }
138136
139137 const keys =
140- searchColumns ||
141- Object . keys ( res [ 0 ] || { } ) . filter ( ( key ) => typeof res [ 0 ] [ key ] === "string" ) ;
138+ searchColumns ??
139+ ( res ?. [ 0 ]
140+ ? Object . keys ( res [ 0 ] )
141+ . filter ( ( key ) => typeof res [ 0 ] [ key ] === "string" )
142+ . map ( ( key ) => ( {
143+ label : key . replace ( / _ / g, " " ) ,
144+ value : key ,
145+ } ) )
146+ : [ ] ) ;
142147
143148 // Filtering function
144- const filterItem : ItemPredicate < string > = ( query , item ) =>
145- item . toLowerCase ( ) . includes ( query . toLowerCase ( ) ) ;
149+ const filterItem : ItemPredicate < { label : string ; value : string } > = (
150+ query ,
151+ item ,
152+ ) => item . label . toLowerCase ( ) . includes ( query . toLowerCase ( ) ) ;
146153
147- const handleSelect = ( item : string ) => {
148- if ( ! selectedItems . includes ( item ) ) {
149- setSelectedItems ( [ ...selectedItems , item ] ) ;
154+ const handleSelect = ( item : { label : string ; value : string } ) => {
155+ if ( ! selectedItems . includes ( item . value ) ) {
156+ setSelectedItems ( [ ...selectedItems , item . value ] ) ;
150157 }
151158 } ;
152159
@@ -198,14 +205,14 @@ export function PostgRESTInfiniteScrollView(
198205 } ;
199206
200207 // Function to render each item in dropdown
201- const itemRenderer : ItemRenderer < string > = (
208+ const itemRenderer : ItemRenderer < { label : string ; value : string } > = (
202209 item ,
203210 { handleClick, modifiers } ,
204211 ) => {
205212 if ( ! modifiers . matchesPredicate ) return null ;
206213 return h ( MenuItem , {
207- key : item ,
208- text : item ,
214+ key : item . value ,
215+ text : item . label ,
209216 active : modifiers . active ,
210217 onClick : handleClick ,
211218 shouldDismissPopover : false ,
@@ -226,16 +233,19 @@ export function PostgRESTInfiniteScrollView(
226233 return h ( "div.postgrest-infinite-scroll" , [
227234 h ( "div.header" , [
228235 h . if ( filterable ) ( "div.search-bar" , [
229- b ( SearchBarToUse , {
236+ h ( SearchBarToUse , {
230237 onChange : ( value ) => setFilterValue ( value || "" ) ,
231238 } ) ,
232- b ( MultiSelectToUse , {
233- items : keys . filter ( ( item ) => ! selectedItems . includes ( item ) ) ,
239+ h ( MultiSelectToUse , {
240+ items : keys . filter ( ( item ) => ! selectedItems . includes ( item . value ) ) ,
234241 itemRenderer,
235242 itemPredicate : filterItem ,
236243 selectedItems,
237244 onItemSelect : handleSelect ,
238- tagRenderer : ( item ) => item ,
245+ tagRenderer : ( value ) => {
246+ const found = keys . find ( ( k ) => k . value === value ) ;
247+ return found ? found . label : value ;
248+ } ,
239249 onRemove : handleRemove ,
240250 tagInputProps : {
241251 onRemove : handleRemove ,
0 commit comments