Skip to content

Commit 8d87d59

Browse files
Merge pull request #16199 from rhamilto/OCPBUGS-80931
[release-4.21] OCPBUGS-80931: Hide filter category selector when only one filter exists
2 parents 06ea05c + d9023b9 commit 8d87d59

8 files changed

Lines changed: 53 additions & 7 deletions

File tree

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Hide the filter category selector when there's only one filter.
2+
// We use CSS instead of TypeScript prop changes because PatternFly's
3+
// DataViewFilters component doesn't expose a prop to hide the category selector.
4+
// This CSS-only solution avoids forking or patching the upstream component.
5+
.co-console-data-view-single-filter .pf-v6-c-toolbar__group.pf-m-filter-group > *:first-child {
6+
display: none !important;
7+
}

frontend/packages/console-app/src/components/data-view/ConsoleDataView.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as React from 'react';
2+
import './ConsoleDataView.scss';
23
import {
34
ResponsiveAction,
45
ResponsiveActions,
@@ -13,6 +14,7 @@ import {
1314
} from '@patternfly/react-data-view';
1415
import DataViewFilters from '@patternfly/react-data-view/dist/cjs/DataViewFilters';
1516
import { ColumnsIcon } from '@patternfly/react-icons';
17+
import { css } from '@patternfly/react-styles';
1618
import { InnerScrollContainer, Tbody, Td, Tr } from '@patternfly/react-table';
1719
import { useTranslation } from 'react-i18next';
1820
import { ColumnLayout } from '@console/dynamic-plugin-sdk/src/extensions/console-types';
@@ -187,7 +189,10 @@ export const ConsoleDataView = <
187189
loadError={loadError}
188190
skeleton={<div className="loading-skeleton--table" />}
189191
>
190-
<DataView activeState={activeState}>
192+
<DataView
193+
activeState={activeState}
194+
className={css(dataViewFilterNodes.length === 1 && 'co-console-data-view-single-filter')}
195+
>
191196
<DataViewToolbar
192197
filters={
193198
dataViewFilterNodes.length > 0 && (

frontend/packages/integration-tests-cypress/tests/app/filtering-and-searching.cy.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,25 @@ import * as yamlEditor from '../../views/yaml-editor';
99
const SEARCH_NAMESPACE = 'openshift-authentication-operator';
1010
const SEARCH_DEPLOYMENT_NAME = 'authentication-operator';
1111

12+
const SINGLE_FILTER_GROUP_SELECTOR =
13+
'.co-console-data-view-single-filter .pf-v6-c-toolbar__group.pf-m-filter-group';
14+
15+
const verifySingleFilterCategoryHidden = (expectedToggles: number) => {
16+
cy.get('[data-test="data-view-table"]').should('exist');
17+
cy.get(SINGLE_FILTER_GROUP_SELECTOR)
18+
.find('.pf-v6-c-menu-toggle')
19+
.should('have.length', expectedToggles);
20+
21+
if (expectedToggles === 1) {
22+
cy.get(SINGLE_FILTER_GROUP_SELECTOR).find('.pf-v6-c-menu-toggle').should('not.be.visible');
23+
} else {
24+
cy.get(SINGLE_FILTER_GROUP_SELECTOR)
25+
.find('.pf-v6-c-menu-toggle')
26+
.first()
27+
.should('not.be.visible');
28+
}
29+
};
30+
1231
describe('Filtering and Searching', () => {
1332
let WORKLOAD_NAME;
1433
let WORKLOAD_LABEL;
@@ -105,4 +124,15 @@ describe('Filtering and Searching', () => {
105124
});
106125
listPage.dvRows.countShouldBe(3);
107126
});
127+
128+
it('ConsoleDataView filter toolbar should not display a filter select', () => {
129+
cy.log('when a text filter is the only filter');
130+
cy.visit('/settings/cluster/alertmanagerconfig?page=1&perPage=50');
131+
verifySingleFilterCategoryHidden(1);
132+
133+
cy.log('when a select filter is the only filter');
134+
cy.visit('/search/all-namespaces?page=1&perPage=50&kind=core~v1~Pod');
135+
listPage.dvRows.shouldBeLoaded();
136+
verifySingleFilterCategoryHidden(2);
137+
});
108138
});

frontend/packages/integration-tests-cypress/tests/cluster-settings/alertmanager/receivers/email.cy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ describe('Alertmanager: Email Receiver Form', () => {
4949
alertmanager.save();
5050

5151
cy.log('verify Email Receiver was created correctly');
52-
alertmanager.validateCreation(receiverName);
52+
alertmanager.validateCreation(receiverName, 'integration-types', 'routing-labels');
5353
alertmanager.visitYAMLPage();
5454
yamlEditor.getEditorContent().then((content) => {
5555
const configs = getGlobalsAndReceiverConfig(receiverName, configName, content);

frontend/packages/integration-tests-cypress/tests/cluster-settings/alertmanager/receivers/pagerduty.cy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ describe('Alertmanager: PagerDuty Receiver Form', () => {
5050
alertmanager.save();
5151

5252
cy.log('verify PagerDuty Receiver was created correctly');
53-
alertmanager.validateCreation(receiverName);
53+
alertmanager.validateCreation(receiverName, 'integration-types', 'routing-labels');
5454

5555
cy.log('update pagerduty_url');
5656
listPage.dvRows.clickKebabAction(receiverName, 'Edit Receiver');

frontend/packages/integration-tests-cypress/tests/cluster-settings/alertmanager/receivers/slack.cy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ describe('Alertmanager: Slack Receiver Form', () => {
5252
alertmanager.save();
5353

5454
cy.log('verify Slack Receiver was created correctly');
55-
alertmanager.validateCreation(receiverName);
55+
alertmanager.validateCreation(receiverName, 'integration-types', 'routing-labels');
5656
alertmanager.visitYAMLPage();
5757
yamlEditor.getEditorContent().then((content) => {
5858
const configs = getGlobalsAndReceiverConfig(receiverName, configName, content);

frontend/packages/integration-tests-cypress/tests/cluster-settings/alertmanager/receivers/webhook.cy.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ describe('Alertmanager: Webhook Receiver Form', () => {
3434
alertmanager.save();
3535

3636
cy.log('verify Webhook Receiver was created correctly');
37-
alertmanager.validateCreation(receiverName);
37+
alertmanager.validateCreation(receiverName, 'integration-types', 'routing-labels');
3838
alertmanager.visitYAMLPage();
3939
yamlEditor.getEditorContent().then((content) => {
4040
const configs = getGlobalsAndReceiverConfig(receiverName, configName, content);

frontend/packages/integration-tests-cypress/views/alertmanager.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,14 @@ export const alertmanager = {
6868
cy.exec(
6969
`kubectl patch secret 'alertmanager-main' -n 'openshift-monitoring' --type='json' -p='[{ op: 'replace', path: '/data/alertmanager.yaml', value: ${defaultAlertmanagerYaml}}]'`,
7070
),
71-
save: () => cy.byTestID('save-changes').should('be.enabled').click(),
71+
save: () => {
72+
cy.byTestID('save-changes').should('be.enabled').click();
73+
// wait for the changes to rollout
74+
// eslint-disable-next-line cypress/no-unnecessary-waiting
75+
cy.wait(10000);
76+
},
7277
showAdvancedConfiguration: () => cy.byTestID('advanced-configuration').find('button').click(),
7378
validateCreation: (receiverName: string, typeCellName: string, labelCellName: string) => {
74-
listPage.dvFilter.byName(receiverName);
7579
listPage.dvRows.shouldExist(receiverName);
7680
listPage.dvRows.shouldExist(receiverName, typeCellName);
7781
listPage.dvRows.shouldExist(receiverName, labelCellName);

0 commit comments

Comments
 (0)