11import { useContext } from 'react' ;
22import {
3- breakpoints ,
43 DataTable , DataTableContext ,
54 CheckboxFilter ,
65 Stack ,
76 TextFilter ,
8- useWindowSize ,
7+ Button ,
98} from '@openedx/paragon' ;
109
1110import MultipleChoiceFilter from './MultipleChoiceFilter' ;
@@ -15,6 +14,8 @@ import SearchFilter from './SearchFilter';
1514const TableControlBar = ( ) => {
1615 const {
1716 columns,
17+ setAllFilters,
18+ state,
1819 } = useContext < DataTableContext > ( DataTableContext ) ;
1920
2021 const availableFilters = columns . filter ( ( column ) => column . canFilter ) ;
@@ -23,36 +24,40 @@ const TableControlBar = () => {
2324 . filter ( ( column ) => column . Filter === TextFilter )
2425 . map ( ( column ) => column . Header ) ;
2526
26- const isSmallScreen = useWindowSize ( ) . width ! < breakpoints . medium . minWidth ! ;
27-
2827 return (
29- < div className = "pgn__data-table-status-bar" >
30- < Stack className = "mb-3" direction = { isSmallScreen ? 'vertical' : 'horizontal' } gap = { 3 } >
31-
32- { availableFilters . map ( ( column ) => {
33- if ( column . Filter === CheckboxFilter ) {
34- return < MultipleChoiceFilter { ...column } /> ;
35- }
36-
37- if ( column . Filter === TextFilter ) {
38- return (
39- < SearchFilter
40- filterValue = { column . filterValue }
41- setFilter = { column . setFilter }
42- placeholder = { `Search by ${ columnTextFilterHeaders . map ( ( header ) => header ) . join ( ' or ' ) } ` }
43- />
44- ) ;
45- }
46-
47- return null ;
48- } ) }
49-
50- < SortDropdown />
51- </ Stack >
52-
53- < DataTable . RowStatus />
54- < DataTable . BulkActions />
55- </ div >
28+ < Stack className = "pgn__data-table-status-bar mb-3 flex-wrap" gap = { 2 } direction = "horizontal" >
29+
30+ { availableFilters . map ( ( column ) => {
31+ if ( column . Filter === CheckboxFilter ) {
32+ return < MultipleChoiceFilter { ...column } /> ;
33+ }
34+
35+ if ( column . Filter === TextFilter ) {
36+ return (
37+ < SearchFilter
38+ filterValue = { column . filterValue }
39+ setFilter = { column . setFilter }
40+ placeholder = { `Search by ${ columnTextFilterHeaders . map ( ( header ) => header ) . join ( ' or ' ) } ` }
41+ />
42+ ) ;
43+ }
44+
45+ return null ;
46+ } ) }
47+
48+ < SortDropdown />
49+
50+ { state . filters . length > 0 && (
51+ < Button
52+ variant = "link"
53+ onClick = { ( ) => setAllFilters ( [ ] ) }
54+ >
55+ Clear filters
56+ </ Button >
57+ ) }
58+
59+ < DataTable . RowStatus className = "ml-auto" />
60+ </ Stack >
5661 ) ;
5762} ;
5863
0 commit comments