1- import { Dropdown , DropdownItem , MenuToggle , MenuToggleAction , MenuToggleElement } from '@patternfly/react-core' ;
1+ import { Badge , Dropdown , DropdownItem , MenuToggle , MenuToggleElement } from '@patternfly/react-core' ;
22import * as React from 'react' ;
33import { useTranslation } from 'react-i18next' ;
44import { FilterComponent } from '../../../model/filters' ;
@@ -20,49 +20,23 @@ export const CompareFilter: React.FC<CompareFilterProps> = ({ value, setValue, c
2020 const [ isOpen , setOpen ] = React . useState ( false ) ;
2121 const prevComponent = usePrevious ( component ) ;
2222
23- const dropdownItems = [
24- < DropdownItem key = "equal" id = "equal" component = "button" onClick = { ( ) => onSelect ( FilterCompare . equal ) } >
25- { t ( 'Equals' ) }
26- </ DropdownItem > ,
27- < DropdownItem key = "not-equal" id = "not-equal" component = "button" onClick = { ( ) => onSelect ( FilterCompare . notEqual ) } >
28- { t ( 'Not equals' ) }
29- </ DropdownItem >
30- ] ;
31-
32- if ( component === 'number' ) {
33- dropdownItems . push (
34- < DropdownItem
35- key = "more-than"
36- id = "more-than"
37- component = "button"
38- onClick = { ( ) => onSelect ( FilterCompare . moreThanOrEqual ) }
39- >
40- { t ( 'More than' ) }
41- </ DropdownItem >
42- ) ;
43- }
44-
45- const onSelect = ( v : FilterCompare ) => {
46- setValue ( v ) ;
47- setOpen ( false ) ;
48- } ;
49-
50- const onSwitch = React . useCallback ( ( ) => {
51- const filterCompareValues = [ FilterCompare . equal , FilterCompare . notEqual ] ;
52- if ( component === 'number' ) {
53- filterCompareValues . push ( FilterCompare . moreThanOrEqual ) ;
54- }
55-
56- const nextIndex = filterCompareValues . indexOf ( value ) + 1 ;
57- if ( nextIndex < filterCompareValues . length ) {
58- setValue ( filterCompareValues [ nextIndex ] ) ;
59- } else {
60- setValue ( filterCompareValues [ 0 ] ) ;
61- }
62- } , [ component , value , setValue ] ) ;
23+ const getText = React . useCallback (
24+ ( v : FilterCompare ) => {
25+ switch ( v ) {
26+ case FilterCompare . notEqual :
27+ return t ( 'Not equals' ) ;
28+ case FilterCompare . moreThanOrEqual :
29+ return t ( 'More than' ) ;
30+ case FilterCompare . equal :
31+ default :
32+ return t ( 'Equals' ) ;
33+ }
34+ } ,
35+ [ t ]
36+ ) ;
6337
64- const getSymbol = React . useCallback ( ( ) => {
65- switch ( value ) {
38+ const getSymbol = React . useCallback ( ( v : FilterCompare ) => {
39+ switch ( v ) {
6640 case FilterCompare . notEqual :
6741 return '!=' ;
6842 case FilterCompare . moreThanOrEqual :
@@ -71,7 +45,53 @@ export const CompareFilter: React.FC<CompareFilterProps> = ({ value, setValue, c
7145 default :
7246 return '=' ;
7347 }
74- } , [ value ] ) ;
48+ } , [ ] ) ;
49+
50+ const onSelect = React . useCallback (
51+ ( v : FilterCompare ) => {
52+ setValue ( v ) ;
53+ setOpen ( false ) ;
54+ } ,
55+ [ setValue ]
56+ ) ;
57+
58+ const getItems = React . useCallback ( ( ) => {
59+ const dropdownItems = [
60+ < DropdownItem
61+ key = "equal"
62+ id = "equal"
63+ component = "button"
64+ description = { getText ( FilterCompare . equal ) }
65+ onClick = { ( ) => onSelect ( FilterCompare . equal ) }
66+ >
67+ { getSymbol ( FilterCompare . equal ) }
68+ </ DropdownItem > ,
69+ < DropdownItem
70+ key = "not-equal"
71+ id = "not-equal"
72+ component = "button"
73+ description = { getText ( FilterCompare . notEqual ) }
74+ onClick = { ( ) => onSelect ( FilterCompare . notEqual ) }
75+ >
76+ { getSymbol ( FilterCompare . notEqual ) }
77+ </ DropdownItem >
78+ ] ;
79+
80+ if ( component === 'number' ) {
81+ dropdownItems . push (
82+ < DropdownItem
83+ key = "more-than"
84+ id = "more-than"
85+ component = "button"
86+ description = { getText ( FilterCompare . moreThanOrEqual ) }
87+ onClick = { ( ) => onSelect ( FilterCompare . moreThanOrEqual ) }
88+ >
89+ { getSymbol ( FilterCompare . moreThanOrEqual ) }
90+ </ DropdownItem >
91+ ) ;
92+ }
93+ return dropdownItems ;
94+ } , [ component , getSymbol , getText , onSelect ] ) ;
7595
7696 React . useEffect ( ( ) => {
7797 // reset to equal when component change
@@ -89,21 +109,16 @@ export const CompareFilter: React.FC<CompareFilterProps> = ({ value, setValue, c
89109 < MenuToggle
90110 ref = { toggleRef }
91111 id = "filter-compare-toggle-button"
92- splitButtonOptions = { {
93- variant : 'action' ,
94- items : [
95- < MenuToggleAction key = "action" id = "filter-compare-switch-button" onClick = { onSwitch } >
96- { getSymbol ( ) }
97- </ MenuToggleAction >
98- ]
99- } }
112+ badge = { < Badge > { getSymbol ( value ) } </ Badge > }
100113 onClick = { ( ) => setOpen ( ! isOpen ) }
101114 isExpanded = { isOpen }
102115 onBlur = { ( ) => setTimeout ( ( ) => setOpen ( false ) , 500 ) }
103- />
116+ >
117+ { getText ( value ) }
118+ </ MenuToggle >
104119 ) }
105120 >
106- { dropdownItems }
121+ { getItems ( ) }
107122 </ Dropdown >
108123 </ >
109124 ) ;
0 commit comments