@@ -3,24 +3,50 @@ import { FilterProps } from "react-table";
33
44import { Select } from "../../select/select.component" ;
55
6- export function SelectColumnFilter < D extends Record < string , unknown > = { } > ( { column } : FilterProps < D > ) {
7- const { id, preFilteredRows, filterValue, setFilter } = column ;
6+ export function useSelectColumnFilter < D extends Record < string , unknown > = { } > ( props : FilterProps < D > ) {
7+ const { column } = props ;
8+ const { id, preFilteredRows } = column ;
89 const { choices : customChoices } = column as any ;
10+ const { filterValue, setFilter } = column ;
911
10- const choices =
11- customChoices ||
12- [ ...new Set ( preFilteredRows . map ( ( row ) => row . values [ id ] ) ) ] . filter ( ( value ) => value ) . map ( ( value ) => ( { label : value , value } ) ) ;
12+ const choices = ( ( ) => {
13+ if ( customChoices ) {
14+ if ( typeof customChoices === "function" ) {
15+ return customChoices ( props ) ;
16+ }
17+ return customChoices ;
18+ }
19+
20+ return [ ...new Set ( preFilteredRows . map ( ( row ) => row . values [ id ] ) ) ]
21+ . filter ( ( value ) => value )
22+ . map ( ( value ) => ( {
23+ label : value ,
24+ value
25+ } ) ) ;
26+ } ) ( ) ;
27+
28+ const onChange = ( _ : string , value : any ) => {
29+ setFilter ( value || undefined ) ;
30+ } ;
31+
32+ return {
33+ value : filterValue ,
34+ onChange,
35+ choices : [ { value : "" , label : "All" } ] . concat ( choices )
36+ } ;
37+ }
38+
39+ export function SelectColumnFilter < D extends Record < string , unknown > = { } > ( props : FilterProps < D > ) {
40+ const { value, choices, onChange } = useSelectColumnFilter ( props ) ;
1341
1442 return (
1543 < Select
16- key = { `filter-${ column . id } ` }
17- name = { `filter-${ column . id } ` }
44+ key = { `filter-${ props . column . id } ` }
45+ name = { `filter-${ props . column . id } ` }
1846 size = { "sm" }
19- value = { filterValue }
20- choices = { [ { value : "" , label : "All" } ] . concat ( choices ) }
21- onChange = { ( name , value ) => {
22- setFilter ( value || undefined ) ;
23- } }
47+ value = { value }
48+ choices = { choices }
49+ onChange = { onChange }
2450 />
2551 ) ;
2652}
0 commit comments