1- import h from "@macrostrat/hyper" ;
1+ import hyper from "@macrostrat/hyper" ;
22import { InfiniteScrollProps , InfiniteScrollView } from "./infinite-scroll" ;
33import { useAPIResult } from "./api" ;
44import { useMemo , useState } from "react" ;
55import { MultiSelect , ItemRenderer , ItemPredicate } from "@blueprintjs/select" ;
66import { MenuItem , Spinner , InputGroup } from "@blueprintjs/core" ;
7+ import styles from "./postgrest.module.sass" ;
8+
9+ const h = hyper . styled ( styles ) ;
710
811interface PostgRESTInfiniteScrollProps extends InfiniteScrollProps < any > {
912 id_key : string ;
@@ -13,7 +16,7 @@ interface PostgRESTInfiniteScrollProps extends InfiniteScrollProps<any> {
1316 filterable ?: boolean ;
1417 order_key ?: string ;
1518 key ?: string ;
16- toggles : any ;
19+ toggles ? : any ;
1720 SearchBarComponent ?: React . ComponentType < {
1821 onChange : ( value : string ) => void ;
1922 } > ;
@@ -48,6 +51,7 @@ export function PostgRESTInfiniteScrollView(
4851 MultiSelectComponent,
4952 extraParams = { } ,
5053 key,
54+ toggles = null ,
5155 ...rest
5256 } = props ;
5357
@@ -195,27 +199,30 @@ export function PostgRESTInfiniteScrollView(
195199 } ;
196200
197201 const newKey =
198- key || `${ filterValue } -${ selectedItems . join ( "," ) } -${ props . toString ( ) } ` ;
202+ key || `${ filterValue } -${ selectedItems . join ( "," ) } -${ JSON . stringify ( props ) } ` ;
199203
200204 return h ( "div.postgrest-infinite-scroll" , [
201- h . if ( filterable ) ( "div.search-bar" , [
202- h ( SearchBarToUse , {
203- onChange : ( value ) => setFilterValue ( value || "" ) ,
204- } ) ,
205- h ( MultiSelectToUse , {
206- items : keys . filter ( ( item ) => ! selectedItems . includes ( item ) ) ,
207- itemRenderer,
208- itemPredicate : filterItem ,
209- selectedItems,
210- onItemSelect : handleSelect ,
211- tagRenderer : ( item ) => item ,
212- onRemove : handleRemove ,
213- tagInputProps : {
205+ h ( "div.header" , [
206+ h . if ( filterable ) ( "div.search-bar" , [
207+ h ( SearchBarToUse , {
208+ onChange : ( value ) => setFilterValue ( value || "" ) ,
209+ } ) ,
210+ h ( MultiSelectToUse , {
211+ items : keys . filter ( ( item ) => ! selectedItems . includes ( item ) ) ,
212+ itemRenderer,
213+ itemPredicate : filterItem ,
214+ selectedItems,
215+ onItemSelect : handleSelect ,
216+ tagRenderer : ( item ) => item ,
214217 onRemove : handleRemove ,
215- placeholder : "Select a column(s) to filter by..." ,
216- } ,
217- popoverProps : { minimal : true } ,
218- } ) ,
218+ tagInputProps : {
219+ onRemove : handleRemove ,
220+ placeholder : "Select a column(s) to filter by..." ,
221+ } ,
222+ popoverProps : { minimal : true } ,
223+ } ) ,
224+ ] ) ,
225+ h . if ( toggles ) ( "div.toggles" , toggles ) ,
219226 ] ) ,
220227 h ( InfiniteScrollView , {
221228 ...rest ,
0 commit comments