@@ -30,6 +30,7 @@ import {
3030} from './processIncidents' ;
3131import {
3232 filterIncident ,
33+ getIncidentIdOptions ,
3334 onDeleteGroupIncidentFilterChip ,
3435 onDeleteIncidentFilterChip ,
3536 onIncidentFiltersSelect ,
@@ -58,7 +59,7 @@ import IncidentsChart from './IncidentsChart/IncidentsChart';
5859import AlertsChart from './AlertsChart/AlertsChart' ;
5960import { usePatternFlyTheme } from '../hooks/usePatternflyTheme' ;
6061import { MonitoringState } from 'src/reducers/observe' ;
61- import { Incident } from './model' ;
62+ import { Incident , IncidentsPageFiltersExpandedState } from './model' ;
6263import { useAlertsPoller } from '../hooks/useAlertsPoller' ;
6364import { Rule } from '@openshift-console/dynamic-plugin-sdk' ;
6465import IncidentFilterToolbarItem , { severityOptions , stateOptions } from './ToolbarItemFilter' ;
@@ -84,24 +85,30 @@ const IncidentsPage = () => {
8485 > ( [ ] ) ;
8586 const [ hideCharts , setHideCharts ] = useState ( false ) ;
8687
87- const [ daysFilterIsExpanded , setDaysFilterIsExpanded ] = useState ( false ) ;
88- const [ filterTypeIsExpanded , setFilterTypeIsExpanded ] = useState ( false ) ;
89- const [ severityFilterExpanded , setSeverityFilterExpanded ] = useState ( false ) ;
90- const [ stateFilterExpanded , setStateFilterExpanded ] = useState ( false ) ;
88+ const [ filtersExpanded , setFiltersExpanded ] = useState < IncidentsPageFiltersExpandedState > ( {
89+ severity : false ,
90+ state : false ,
91+ groupId : false ,
92+ } ) ;
9193
92- const onFilterTypeToggle = ( ev ) => {
93- ev . stopPropagation ( ) ;
94- setFilterTypeIsExpanded ( ! filterTypeIsExpanded ) ;
95- } ;
96- const onSeverityFilterToggle = ( ev ) => {
97- ev . stopPropagation ( ) ;
98- setSeverityFilterExpanded ( ! severityFilterExpanded ) ;
99- } ;
100- const onStateFilterToggle = ( ev ) => {
94+ const [ filterTypeExpanded , setFilterTypeExpanded ] = useState ( {
95+ filterType : false ,
96+ } ) ;
97+
98+ const onFilterToggle = (
99+ ev : React . MouseEvent ,
100+ filterName : keyof IncidentsPageFiltersExpandedState | 'filterType' ,
101+ setter ,
102+ ) => {
101103 ev . stopPropagation ( ) ;
102- setStateFilterExpanded ( ! stateFilterExpanded ) ;
104+ setter ( ( prevFilters ) => ( {
105+ ...prevFilters ,
106+ [ filterName ] : ! prevFilters [ filterName ] ,
107+ } ) ) ;
103108 } ;
104109
110+ const [ daysFilterIsExpanded , setDaysFilterIsExpanded ] = useState ( false ) ;
111+
105112 const onToggleClick = ( ev ) => {
106113 ev . stopPropagation ( ) ;
107114 setDaysFilterIsExpanded ( ! daysFilterIsExpanded ) ;
@@ -146,6 +153,7 @@ const IncidentsPage = () => {
146153 days : urlParams . days ? urlParams . days : [ '7 days' ] ,
147154 severity : urlParams . severity ? urlParams . severity : [ ] ,
148155 state : urlParams . state ? urlParams . state : [ ] ,
156+ groupId : urlParams . groupId ? urlParams . groupId : [ ] ,
149157 } ,
150158 } ) ,
151159 ) ;
@@ -313,6 +321,8 @@ const IncidentsPage = () => {
313321 setDaysFilterIsExpanded ( false ) ;
314322 } ;
315323
324+ const incidentIdFilterOptions = incidents ? getIncidentIdOptions ( incidents ) : [ ] ;
325+
316326 return (
317327 < >
318328 < Helmet >
@@ -345,19 +355,22 @@ const IncidentsPage = () => {
345355 < ToolbarItem >
346356 < Select
347357 aria-label = "Filter type selection"
348- isOpen = { filterTypeIsExpanded }
358+ isOpen = { filterTypeExpanded . filterType }
349359 role = "menu"
350360 selected = { incidentPageFilterTypeSelected }
351- onOpenChange = { ( isOpen ) => setFilterTypeIsExpanded ( isOpen ) }
352- onSelect = { ( event , selection ) =>
353- dispatch ( setIncidentPageFilterType ( { incidentPageFilterType : selection } ) )
361+ onOpenChange = { ( isOpen ) =>
362+ setFiltersExpanded ( ( prev ) => ( { ...prev , filterType : isOpen } ) )
354363 }
364+ onSelect = { ( event , selection ) => {
365+ dispatch ( setIncidentPageFilterType ( { incidentPageFilterType : selection } ) ) ;
366+ setFilterTypeExpanded ( ( prev ) => ( { ...prev , filterType : false } ) ) ;
367+ } }
355368 shouldFocusToggleOnSelect
356369 toggle = { ( toggleRef ) => (
357370 < MenuToggle
358371 ref = { toggleRef }
359- onClick = { onFilterTypeToggle }
360- isExpanded = { filterTypeIsExpanded }
372+ onClick = { ( ev ) => onFilterToggle ( ev , 'filterType' , setFilterTypeExpanded ) }
373+ isExpanded = { filterTypeExpanded . filterType }
361374 icon = { < FilterIcon /> }
362375 >
363376 { incidentPageFilterTypeSelected }
@@ -376,6 +389,12 @@ const IncidentsPage = () => {
376389 >
377390 State
378391 </ SelectOption >
392+ < SelectOption
393+ value = "Incident ID"
394+ isSelected = { incidentPageFilterTypeSelected ?. includes ( 'Incident ID' ) }
395+ >
396+ Incident ID
397+ </ SelectOption >
379398 </ Select >
380399 </ ToolbarItem >
381400 < ToolbarItem >
@@ -386,10 +405,14 @@ const IncidentsPage = () => {
386405 incidentsActiveFilters = { incidentsActiveFilters }
387406 onDeleteIncidentFilterChip = { onDeleteIncidentFilterChip }
388407 onDeleteGroupIncidentFilterChip = { onDeleteGroupIncidentFilterChip }
389- incidentFilterIsExpanded = { severityFilterExpanded }
408+ incidentFilterIsExpanded = { filtersExpanded . severity }
390409 onIncidentFiltersSelect = { onIncidentFiltersSelect }
391- setIncidentIsExpanded = { setSeverityFilterExpanded }
392- onIncidentFilterToggle = { onSeverityFilterToggle }
410+ setIncidentIsExpanded = { ( isExpanded ) =>
411+ setFiltersExpanded ( ( prev ) => ( { ...prev , severity : isExpanded } ) )
412+ }
413+ onIncidentFilterToggle = { ( ev ) =>
414+ onFilterToggle ( ev , 'severity' , setFiltersExpanded )
415+ }
393416 dispatch = { dispatch }
394417 showToolbarItem = { incidentPageFilterTypeSelected ?. includes ( 'Severity' ) }
395418 />
@@ -402,14 +425,38 @@ const IncidentsPage = () => {
402425 incidentsActiveFilters = { incidentsActiveFilters }
403426 onDeleteIncidentFilterChip = { onDeleteIncidentFilterChip }
404427 onDeleteGroupIncidentFilterChip = { onDeleteGroupIncidentFilterChip }
405- incidentFilterIsExpanded = { stateFilterExpanded }
428+ incidentFilterIsExpanded = { filtersExpanded . state }
406429 onIncidentFiltersSelect = { onIncidentFiltersSelect }
407- setIncidentIsExpanded = { setStateFilterExpanded }
408- onIncidentFilterToggle = { onStateFilterToggle }
430+ setIncidentIsExpanded = { ( isExpanded ) =>
431+ setFiltersExpanded ( ( prev ) => ( { ...prev , state : isExpanded } ) )
432+ }
433+ onIncidentFilterToggle = { ( ev ) =>
434+ onFilterToggle ( ev , 'state' , setFiltersExpanded )
435+ }
409436 dispatch = { dispatch }
410437 showToolbarItem = { incidentPageFilterTypeSelected ?. includes ( 'State' ) }
411438 />
412439 </ ToolbarItem >
440+ < ToolbarItem >
441+ < IncidentFilterToolbarItem
442+ categoryName = "Incident ID"
443+ toggleLabel = "Incident ID filters"
444+ options = { incidentIdFilterOptions }
445+ incidentsActiveFilters = { incidentsActiveFilters }
446+ onDeleteIncidentFilterChip = { onDeleteIncidentFilterChip }
447+ onDeleteGroupIncidentFilterChip = { onDeleteGroupIncidentFilterChip }
448+ incidentFilterIsExpanded = { filtersExpanded . groupId }
449+ onIncidentFiltersSelect = { onIncidentFiltersSelect }
450+ setIncidentIsExpanded = { ( isExpanded ) =>
451+ setFiltersExpanded ( ( prev ) => ( { ...prev , incidentId : isExpanded } ) )
452+ }
453+ onIncidentFilterToggle = { ( ev ) =>
454+ onFilterToggle ( ev , 'groupId' , setFiltersExpanded )
455+ }
456+ dispatch = { dispatch }
457+ showToolbarItem = { incidentPageFilterTypeSelected ?. includes ( 'Incident ID' ) }
458+ />
459+ </ ToolbarItem >
413460 </ ToolbarGroup >
414461 < ToolbarItem align = { { default : 'alignEnd' } } >
415462 < Stack >
0 commit comments