@@ -10,6 +10,7 @@ import {
10
10
SelectOption ,
11
11
ToolbarFilter ,
12
12
} from '@patternfly/react-core' ;
13
+ import { FilterIcon } from '@patternfly/react-icons' ;
13
14
14
15
import { FilterTypeProps } from './types' ;
15
16
@@ -40,6 +41,8 @@ export const GroupedEnumFilter = ({
40
41
supportedGroups = [ ] ,
41
42
placeholderLabel,
42
43
showFilter = true ,
44
+ showFilterIcon,
45
+ hasMultipleResources,
43
46
} : FilterTypeProps ) => {
44
47
const [ isOpen , setIsOpen ] = useState ( false ) ;
45
48
@@ -52,23 +55,54 @@ export const GroupedEnumFilter = ({
52
55
supportedEnumValues . map ( ( { label, ...rest } ) => [ label , { label, ...rest } ] ) ,
53
56
) ;
54
57
55
- const deleteGroup = ( groupId : string ) : void =>
58
+ const deleteGroup = ( groupId : string ) : void => {
59
+ if ( hasMultipleResources ) {
60
+ return onSelectedEnumIdsChange ( [ ] , groupId ) ;
61
+ }
62
+
56
63
onSelectedEnumIdsChange (
57
- selectedEnumIds
58
- . filter ( ( id ) => id2enum [ id ] )
59
- . filter ( ( enumId ) => id2enum [ enumId ] . groupId !== groupId ) ,
64
+ selectedEnumIds . filter ( ( id ) => id2enum [ id ] && id2enum [ id ] . groupId !== groupId ) ,
60
65
) ;
66
+ } ;
67
+
68
+ const deleteFilter = ( id : string ) : void => {
69
+ if ( hasMultipleResources ) {
70
+ onSelectedEnumIdsChange (
71
+ selectedEnumIds . filter (
72
+ ( selectedId ) =>
73
+ id2enum [ selectedId ] ?. resourceFieldId === id2enum [ id ] ?. resourceFieldId &&
74
+ selectedId !== id ,
75
+ ) ,
76
+ id2enum [ id ] . resourceFieldId ,
77
+ ) ;
78
+ }
61
79
62
- const deleteFilter = ( id : string ) : void =>
63
80
onSelectedEnumIdsChange (
64
- selectedEnumIds . filter ( ( id ) => id2enum [ id ] ) . filter ( ( enumId ) => enumId !== id ) ,
81
+ selectedEnumIds . filter ( ( id ) => id2enum [ id ] && id !== id ) ,
82
+ id2enum [ id ] . resourceFieldId ,
65
83
) ;
84
+ } ;
66
85
67
86
const hasFilter = ( id : string ) : boolean =>
68
87
! ! id2enum [ id ] && ! ! selectedEnumIds . find ( ( enumId ) => enumId === id ) ;
69
88
70
89
const addFilter = ( id : string ) : void => {
71
- onSelectedEnumIdsChange ( [ ...selectedEnumIds . filter ( ( id ) => id2enum [ id ] ) , id ] ) ;
90
+ if ( hasMultipleResources ) {
91
+ onSelectedEnumIdsChange (
92
+ [
93
+ ...selectedEnumIds . filter (
94
+ ( selectedId ) => id2enum [ selectedId ] ?. resourceFieldId === id2enum [ id ] ?. resourceFieldId ,
95
+ ) ,
96
+ id ,
97
+ ] ,
98
+ id2enum [ id ] . resourceFieldId ,
99
+ ) ;
100
+ }
101
+
102
+ onSelectedEnumIdsChange (
103
+ [ ...selectedEnumIds . filter ( ( id ) => id2enum [ id ] ) , id ] ,
104
+ id2enum [ id ] . resourceFieldId ,
105
+ ) ;
72
106
} ;
73
107
74
108
const onSelect = (
@@ -85,7 +119,13 @@ export const GroupedEnumFilter = ({
85
119
} ;
86
120
87
121
const toggle = ( toggleRef : Ref < MenuToggleElement > ) => (
88
- < MenuToggle ref = { toggleRef } onClick = { onToggleClick } isExpanded = { isOpen } isFullWidth >
122
+ < MenuToggle
123
+ ref = { toggleRef }
124
+ onClick = { onToggleClick }
125
+ isExpanded = { isOpen }
126
+ isFullWidth
127
+ { ...( showFilterIcon && { icon : < FilterIcon /> } ) }
128
+ >
89
129
{ placeholderLabel }
90
130
{ selectedEnumIds . length > 0 && < Badge isRead > { selectedEnumIds . length } </ Badge > }
91
131
</ MenuToggle >
0 commit comments