@@ -3,17 +3,12 @@ import { useTranslation } from "react-i18next";
33import DatePicker from "react-datepicker" ;
44import {
55 getFilters ,
6- getSecondFilter ,
7- getSelectedFilter ,
86 getTextFilter ,
97} from "../../selectors/tableFilterSelectors" ;
108import {
119 FilterData ,
1210 editFilterValue ,
13- editSelectedFilter ,
1411 editTextFilter ,
15- removeSecondFilter ,
16- removeSelectedFilter ,
1712 removeTextFilter ,
1813 resetFilterValues ,
1914} from "../../slices/tableFilterSlice" ;
@@ -52,8 +47,8 @@ const TableFilters = ({
5247 const dispatch = useAppDispatch ( ) ;
5348
5449 const filterMap = useAppSelector ( state => getFilters ( state , resource ) ) ;
55- const secondFilter = useAppSelector ( state => getSecondFilter ( state ) ) ;
56- const selectedFilter = useAppSelector ( state => getSelectedFilter ( state ) ) ;
50+ const [ selectedFilter , setSelectedFilter ] = useState ( "" ) ;
51+ const [ secondFilter , setSecondFilter ] = useState ( "" ) ;
5752 const textFilter = useAppSelector ( state => getTextFilter ( state , resource ) ) ;
5853
5954 // Variables for showing different dialogs depending on what was clicked
@@ -76,8 +71,7 @@ const TableFilters = ({
7671 setFilterSelector ( false ) ;
7772
7873 dispatch ( removeTextFilter ( resource ) ) ;
79- dispatch ( removeSelectedFilter ( ) ) ;
80- dispatch ( removeSelectedFilter ( ) ) ;
74+ setSelectedFilter ( "" ) ;
8175
8276 // Set all values of the filters in filterMap back to ""
8377 dispatch ( resetFilterValues ( ) ) ;
@@ -119,7 +113,7 @@ const TableFilters = ({
119113 }
120114
121115 if ( name === "selectedFilter" ) {
122- dispatch ( editSelectedFilter ( value ) ) ;
116+ setSelectedFilter ( value ) ;
123117 setOpenSecondFilterMenu ( true ) ;
124118 }
125119
@@ -130,8 +124,8 @@ const TableFilters = ({
130124 if ( filter ) {
131125 dispatch ( editFilterValue ( { filterName : filter . name , value : value , resource } ) ) ;
132126 setFilterSelector ( false ) ;
133- dispatch ( removeSelectedFilter ( ) ) ;
134- dispatch ( removeSecondFilter ( ) ) ;
127+ setSelectedFilter ( "" ) ;
128+ setSecondFilter ( "" ) ;
135129 setOpenSecondFilterMenu ( false ) ;
136130 mustApplyChanges = true ;
137131 }
@@ -211,7 +205,7 @@ const TableFilters = ({
211205 resource,
212206 } ) ) ;
213207 setFilterSelector ( false ) ;
214- dispatch ( removeSelectedFilter ( ) ) ;
208+ setSelectedFilter ( "" ) ;
215209 // Reload of resource after going to very first page.
216210 dispatch ( goToPage ( 0 ) ) ;
217211 await dispatch ( loadResource ( ) ) ;
@@ -493,6 +487,52 @@ const FilterSwitch = ({
493487 />
494488 </ div >
495489 ) ;
490+ case "freetext" :
491+ return (
492+ < div >
493+ < DropDown
494+ creatable = { true }
495+ value = { secondFilter }
496+ text = { secondFilter }
497+ options = {
498+ ! ! filter . options && filter . options . length > 0
499+ ? filter . options . map ( option => {
500+ if ( ! filter . translatable ) {
501+ return {
502+ ...option ,
503+ label : option . label . substr ( 0 , 40 ) ,
504+ } ;
505+ } else {
506+ return {
507+ ...option ,
508+ label : t ( option . label as ParseKeys ) . substr ( 0 , 40 ) ,
509+ } ;
510+ }
511+ } )
512+ : [ ]
513+ }
514+ required = { true }
515+ handleChange = { element => handleChange ( "secondFilter" , element ! . value ) }
516+ placeholder = {
517+ ! ! filter . options && filter . options . length > 0
518+ ? t (
519+ "TABLE_FILTERS.FILTER_VALUE_SELECTION.PLACEHOLDER" ,
520+ )
521+ : t (
522+ "TABLE_FILTERS.FILTER_SELECTION.NO_OPTIONS" ,
523+ )
524+ }
525+ autoFocus
526+ defaultOpen
527+ openMenuOnFocus
528+ menuIsOpen = { openSecondFilterMenu }
529+ handleMenuIsOpen = { setOpenSecondFilterMenu }
530+ skipTranslate = { ! filter . translatable }
531+ customCSS = { { width : 200 , optionPaddingTop : 5 } }
532+ />
533+ { /* For text filter, there is no secondary filter, so nothing is shown here */ }
534+ </ div >
535+ ) ;
496536 // This should never happen
497537 default :
498538 return null ;
0 commit comments