@@ -2,6 +2,8 @@ import { DatabaseHeaderProps } from "cdm/FolderModel";
22import { DynamicDebouncedInput } from "components/behavior/DebouncedInputFn" ;
33import DatePicker from "react-datepicker" ;
44import React , { useState } from "react" ;
5+ import { ChangeEventHandler } from "react" ;
6+ import { StyleVariables } from "helpers/Constants" ;
57
68/**
79 * Filter input for text columns
@@ -42,10 +44,10 @@ export function TextFilter(headerProps: DatabaseHeaderProps) {
4244 ) ;
4345
4446 return (
45- < >
46- < datalist id = { `${ column . id } -list` } >
47- { sortedUniqueValues . slice ( 0 , 5000 ) . map ( ( value : any ) => (
48- < option value = { value } key = { value } />
47+ < div key = { ` ${ column . id } -text-filter` } >
48+ < datalist id = { `${ column . id } -list` } key = { ` ${ column . id } -datalist` } >
49+ { sortedUniqueValues . slice ( 0 , 5000 ) . map ( ( value , index ) => (
50+ < option value = { value } key = { ` ${ column . id } -option- ${ index } ` } />
4951 ) ) }
5052 </ datalist >
5153 < DynamicDebouncedInput
@@ -60,7 +62,7 @@ export function TextFilter(headerProps: DatabaseHeaderProps) {
6062 } }
6163 />
6264 < div className = "h-1" />
63- </ >
65+ </ div >
6466 ) ;
6567}
6668
@@ -72,7 +74,7 @@ export function NumberFilter(headerProps: DatabaseHeaderProps) {
7274 const maxValue = ( column . getFilterValue ( ) as [ number , number ] ) ?. [ 1 ] ?? "" ;
7375 return (
7476 < >
75- < div className = "flex space-x-2" >
77+ < div className = "flex space-x-2" key = { ` ${ column . id } -number-filter` } >
7678 < DynamicDebouncedInput
7779 type = "number"
7880 min = { min }
@@ -93,8 +95,8 @@ export function NumberFilter(headerProps: DatabaseHeaderProps) {
9395 />
9496 < DynamicDebouncedInput
9597 type = "number"
96- min = { min }
97- max = { max }
98+ min = { Number . isNaN ( min ) ? undefined : min }
99+ max = { Number . isNaN ( max ) ? undefined : max }
98100 value = { maxValue }
99101 onChange = { ( value ) =>
100102 column . setFilterValue ( ( old : [ number , number ] ) => [ old ?. [ 0 ] , value ] )
@@ -126,6 +128,7 @@ export function DateRangeFilter(headerProps: DatabaseHeaderProps) {
126128 style = { {
127129 display : "flex" ,
128130 } }
131+ key = { `${ column . id } -date-filter` }
129132 >
130133 < div
131134 className = "w-24 border shadow rounded"
@@ -173,3 +176,35 @@ export function DateRangeFilter(headerProps: DatabaseHeaderProps) {
173176 </ >
174177 ) ;
175178}
179+
180+ export function BooleanFilter ( headerProps : DatabaseHeaderProps ) {
181+ const { column } = headerProps ;
182+ const [ value , setValue ] = useState < number | string > ( "All" ) ;
183+
184+ const handlerOnChange : ChangeEventHandler < HTMLSelectElement > = ( event ) => {
185+ const newValue =
186+ event . target . value !== "All" ? Number ( event . target . value ) : null ;
187+ column . setFilterValue ( newValue ) ;
188+ setValue ( newValue ) ;
189+ } ;
190+ return (
191+ < >
192+ < select
193+ typeof = "select"
194+ value = { value }
195+ onChange = { handlerOnChange }
196+ className = "w-36 border shadow rounded"
197+ style = { {
198+ width : "100%" ,
199+ background : StyleVariables . BACKGROUND_MODIFIER_FORM_FIELD ,
200+ } }
201+ key = { `${ column . id } -select-filter` }
202+ >
203+ < option value = { "All" } > All</ option >
204+ < option value = { 1 } > True</ option >
205+ < option value = { 0 } > False</ option >
206+ </ select >
207+ < div className = "h-1" />
208+ </ >
209+ ) ;
210+ }
0 commit comments