Skip to content

Commit 1cda788

Browse files
authored
NETOBSERV-1540 fix panels filter chips (#562)
* fix panels filter chips * fix chip onclick
1 parent 1bc55ad commit 1cda788

File tree

3 files changed

+52
-12
lines changed

3 files changed

+52
-12
lines changed

web/src/components/modals/__tests__/overview-panels-modal.spec.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ describe('<OverviewPanelsModal />', () => {
1313
panels: ShuffledDefaultPanels,
1414
setPanels: jest.fn(),
1515
customIds: [],
16+
features: [],
1617
id: 'panels-modal'
1718
};
1819
it('should render component', async () => {

web/src/components/modals/modals.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export const Modals: React.FC<ModalsProps> = props => {
5353
panels={props.panels}
5454
setPanels={props.setPanels}
5555
customIds={props.config.panels}
56+
features={props.config.features}
5657
/>
5758
<ColumnsModal
5859
id="columns-modal"

web/src/components/modals/overview-panels-modal.tsx

Lines changed: 50 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,20 @@ import {
2121
import * as _ from 'lodash';
2222
import * as React from 'react';
2323
import { useTranslation } from 'react-i18next';
24+
import { Feature } from '../../model/config';
2425
import { RecordType } from '../../model/flow-query';
2526
import { getDefaultOverviewPanels, getOverviewPanelInfo, OverviewPanel } from '../../utils/overview-panels';
2627
import Modal from './modal';
2728
import './overview-panels-modal.css';
2829

29-
export const panelFilterKeys = ['top', 'total', 'dns', 'dropped', 'bar', 'donut', 'line'];
30-
3130
export 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

Comments
 (0)