@@ -21,20 +21,20 @@ import {
2121import * as _ from 'lodash' ;
2222import * as React from 'react' ;
2323import { useTranslation } from 'react-i18next' ;
24+ import { Feature } from '../../model/config' ;
2425import { RecordType } from '../../model/flow-query' ;
2526import { getDefaultOverviewPanels , getOverviewPanelInfo , OverviewPanel } from '../../utils/overview-panels' ;
2627import Modal from './modal' ;
2728import './overview-panels-modal.css' ;
2829
29- export const panelFilterKeys = [ 'top' , 'total' , 'dns' , 'dropped' , 'bar' , 'donut' , 'line' ] ;
30-
3130export interface OverviewPanelsModalProps {
3231 isModalOpen : boolean ;
3332 setModalOpen : ( v : boolean ) => void ;
3433 recordType : RecordType ;
3534 panels : OverviewPanel [ ] ;
3635 setPanels : ( v : OverviewPanel [ ] ) => void ;
3736 customIds ?: string [ ] ;
37+ features : Feature [ ] ;
3838 id ?: string ;
3939}
4040
@@ -45,7 +45,8 @@ export const OverviewPanelsModal: React.FC<OverviewPanelsModalProps> = ({
4545 recordType,
4646 panels,
4747 setPanels,
48- customIds
48+ customIds,
49+ features
4950} ) => {
5051 const [ updatedPanels , setUpdatedPanels ] = React . useState < OverviewPanel [ ] > ( [ ] ) ;
5152 const [ filterKeys , setFilterKeys ] = React . useState < string [ ] > ( [ ] ) ;
@@ -64,6 +65,26 @@ export const OverviewPanelsModal: React.FC<OverviewPanelsModalProps> = ({
6465 // eslint-disable-next-line react-hooks/exhaustive-deps
6566 } , [ isModalOpen , panels ] ) ;
6667
68+ const getFilterKeys = React . useCallback ( ( ) => {
69+ let panelFilterKeys = [ 'total' , 'bar' , 'donut' , 'line' ] ;
70+
71+ if ( features . includes ( 'pktDrop' ) ) {
72+ panelFilterKeys . push ( 'dropped' ) ;
73+ }
74+
75+ if ( features . includes ( 'dnsTracking' ) || features . includes ( 'flowRTT' ) ) {
76+ panelFilterKeys = panelFilterKeys . concat ( [ 'rate' , 'top' , 'bottom' , 'min' , 'avg' , 'max' , 'p90' , 'p99' ] ) ;
77+ if ( features . includes ( 'dnsTracking' ) ) {
78+ panelFilterKeys . push ( 'dns' ) ;
79+ }
80+ if ( features . includes ( 'flowRTT' ) ) {
81+ panelFilterKeys . push ( 'rtt' ) ;
82+ }
83+ }
84+
85+ return panelFilterKeys ;
86+ } , [ features ] ) ;
87+
6788 const onDrop = React . useCallback (
6889 ( source , dest ) => {
6990 if ( dest ) {
@@ -102,9 +123,25 @@ export const OverviewPanelsModal: React.FC<OverviewPanelsModalProps> = ({
102123
103124 const isFilteredPanel = React . useCallback (
104125 ( p : OverviewPanel ) => {
105- return _ . isEmpty ( filterKeys ) || _ . reduce ( filterKeys , ( acc , fk ) => ( acc = acc && p . id . includes ( fk ) ) , true ) ;
126+ return (
127+ _ . isEmpty ( filterKeys ) ||
128+ _ . reduce (
129+ filterKeys ,
130+ ( acc , fk ) => {
131+ const panelInfo = getOverviewPanelInfo (
132+ t ,
133+ p . id ,
134+ undefined ,
135+ recordType === 'flowLog' ? t ( 'flow' ) : t ( 'conversation' )
136+ ) ;
137+ const str = `${ p . id } : ${ panelInfo . title } - ${ panelInfo . chartType } ` ;
138+ return ( acc = acc && str . toLowerCase ( ) . includes ( fk ) ) ;
139+ } ,
140+ true
141+ )
142+ ) ;
106143 } ,
107- [ filterKeys ]
144+ [ filterKeys , recordType , t ]
108145 ) ;
109146
110147 const filteredPanels = React . useCallback ( ( ) => {
@@ -141,10 +178,10 @@ export const OverviewPanelsModal: React.FC<OverviewPanelsModalProps> = ({
141178 if ( filterKeys . includes ( key ) ) {
142179 setFilterKeys ( filterKeys . filter ( k => k !== key ) ) ;
143180 } else {
144- setFilterKeys ( panelFilterKeys . filter ( f => f === key || filterKeys . includes ( f ) ) ) ;
181+ setFilterKeys ( getFilterKeys ( ) . filter ( f => f === key || filterKeys . includes ( f ) ) ) ;
145182 }
146183 } ,
147- [ filterKeys ]
184+ [ filterKeys , getFilterKeys ]
148185 ) ;
149186
150187 const draggableItems = filteredPanels ( ) . map ( ( panel , i ) => {
@@ -203,15 +240,16 @@ export const OverviewPanelsModal: React.FC<OverviewPanelsModalProps> = ({
203240 < Flex className = "popup-header-margin" >
204241 < FlexItem flex = { { default : 'flex_4' } } >
205242 < Flex className = "flex-gap" >
206- { panelFilterKeys . map ( key => {
243+ { getFilterKeys ( ) . map ( key => {
207244 return (
208245 < FlexItem
209246 key = { key }
210- className = { `custom-chip ${ filterKeys . includes ( key ) ? 'selected' : 'unselected' } buttonless gap` }
247+ onClick = { ( ) => toggleChip ( key ) }
248+ className = { `custom-chip ${
249+ filterKeys . includes ( key ) ? 'selected' : 'unselected'
250+ } buttonless gap pointer`}
211251 >
212- < Text component = { TextVariants . p } onClick = { ( ) => toggleChip ( key ) } >
213- { key }
214- </ Text >
252+ < Text component = { TextVariants . p } > { key } </ Text >
215253 </ FlexItem >
216254 ) ;
217255 } ) }
0 commit comments