From 744c402639c7f19ed6a6f571f38f94c1f469d21e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Dugovi=C4=8D?= Date: Tue, 18 Aug 2026 12:33:10 +0200 Subject: [PATCH] refactor: remove systems default filter HMS-11196 There was a backend filter that the frontend filter counteracted. The backend filter was removed, the FE filter can now be removed as well. The BE now returns both fresh and stale systems by default. --- .../Filters/SystemStaleFilter.js | 2 +- .../Filters/SystemStaleFilter.test.js | 2 +- .../StatusReports/SystemsStatusReport.js | 5 +- .../Systems/SystemTable.test.js | 110 ++---------------- src/SmartComponents/Systems/SystemsTable.js | 3 +- src/Utilities/constants.js | 2 +- src/store/Reducers/SystemsStore.js | 3 - 7 files changed, 14 insertions(+), 113 deletions(-) diff --git a/src/PresentationalComponents/Filters/SystemStaleFilter.js b/src/PresentationalComponents/Filters/SystemStaleFilter.js index a0a712e6b..ef4d7703c 100644 --- a/src/PresentationalComponents/Filters/SystemStaleFilter.js +++ b/src/PresentationalComponents/Filters/SystemStaleFilter.js @@ -28,7 +28,7 @@ const systemsStaleFilter = (apply, currentFilter = {}) => { return { label: intl.formatMessage(messages.labelsFiltersStale), - type: conditionalFilterType.checkbox, + type: conditionalFilterType.singleSelect, filterValues: { onChange: (event, value) => { filterByStale(value); diff --git a/src/PresentationalComponents/Filters/SystemStaleFilter.test.js b/src/PresentationalComponents/Filters/SystemStaleFilter.test.js index b2f3717d7..1c1f76926 100644 --- a/src/PresentationalComponents/Filters/SystemStaleFilter.test.js +++ b/src/PresentationalComponents/Filters/SystemStaleFilter.test.js @@ -13,7 +13,7 @@ describe('SystemStaleFilter', () => { const response = systemStaleFilter(apply, currentFilter); expect(response.filterValues.value).toEqual(['filter']); expect(response.label).toEqual('Status'); - expect(response.type).toEqual('checkbox'); + expect(response.type).toEqual('singleSelect'); }); it('Should call apply with a test value', () => { diff --git a/src/PresentationalComponents/StatusReports/SystemsStatusReport.js b/src/PresentationalComponents/StatusReports/SystemsStatusReport.js index 80879c7d7..b85576e6e 100644 --- a/src/PresentationalComponents/StatusReports/SystemsStatusReport.js +++ b/src/PresentationalComponents/StatusReports/SystemsStatusReport.js @@ -44,7 +44,6 @@ const SystemsStatusReport = ({ apply, queryParams }) => { selectedTags: [...selectedTags, ...selectedGlobalTags], systemProfile, limit: 1, - 'filter[stale]': 'in:true,false', }).then((result) => { setSubtotals(result.meta?.subtotals); }); @@ -77,14 +76,14 @@ const SystemsStatusReport = ({ apply, queryParams }) => { color='var(--pf-t--global--icon--color--status--success--default)' value={subtotals?.patched} apply={apply} - filter={{ filter: { packages_updatable: 'eq:0', stale: false } }} // TODO: remove `stale: false` once default filter is gone + filter={{ filter: { packages_updatable: 'eq:0', stale: false } }} /> { value: undefined, }, label: 'Status', - type: 'checkbox', + type: 'singleSelect', }, { filterValues: { @@ -232,108 +232,12 @@ describe('SystemsTable', () => { ); }); - it('should keep default systems filters visible while hiding reset at baseline', async () => { - const filteredState = { - ...mockState, - SystemsStore: { - queryParams: { - filter: { stale: [true, false] }, - }, - }, - }; - - await renderComponent(filteredState); - expect(InventoryTable).toHaveBeenCalledWith( - expect.objectContaining({ - activeFiltersConfig: { - deleteTitle: 'Reset filters', - filters: [ - { - category: 'Status', - chips: [ - { - id: true, - name: 'Stale', - value: true, - }, - { - id: false, - name: 'Fresh', - value: false, - }, - ], - id: 'stale', - }, - ], - onDelete: expect.any(Function), - onDeleteGroup: expect.any(Function), - showDeleteButton: false, - }, - }), - {}, - ); - }); - - it('should show reset only when at least one filter differs from defaults', async () => { - const filteredState = { - ...mockState, - SystemsStore: { - queryParams: { - filter: { packages_updatable: 'eq:0', stale: [true, false] }, - }, - }, - }; - - await renderComponent(filteredState); - - expect(InventoryTable).toHaveBeenCalledWith( - expect.objectContaining({ - activeFiltersConfig: { - deleteTitle: 'Reset filters', - filters: [ - { - category: 'Patch status', - chips: [ - { - id: 'eq:0', - name: 'Systems up to date', - value: 'eq:0', - }, - ], - id: 'packages_updatable', - }, - { - category: 'Status', - chips: [ - { - id: true, - name: 'Stale', - value: true, - }, - { - id: false, - name: 'Fresh', - value: false, - }, - ], - id: 'stale', - }, - ], - onDelete: expect.any(Function), - onDeleteGroup: expect.any(Function), - showDeleteButton: true, - }, - }), - {}, - ); - }); - - it('should show reset when inventory-based operating system filters are active', async () => { + it('should show clear when inventory-based operating system filters are active', async () => { const filteredState = { ...mockState, SystemsStore: { queryParams: { - filter: { os: ['RHEL 8.8'], stale: [true, false] }, + filter: { os: ['RHEL 8.8'] }, }, }, }; @@ -343,7 +247,7 @@ describe('SystemsTable', () => { expect(InventoryTable).toHaveBeenCalledWith( expect.objectContaining({ activeFiltersConfig: expect.objectContaining({ - deleteTitle: 'Reset filters', + deleteTitle: 'Clear filters', showDeleteButton: true, }), customFilters: expect.objectContaining({ @@ -362,7 +266,7 @@ describe('SystemsTable', () => { ); }); - it('should show reset before an inventory-backed fetch resolves', async () => { + it('should show clear before an inventory-backed fetch resolves', async () => { let resolveFetch; fetchSystems.mockImplementationOnce( () => @@ -383,7 +287,7 @@ describe('SystemsTable', () => { page: 1, per_page: 20, patchParams: { - filter: { stale: [true, false] }, + filter: {}, selectedTags: [], systemProfile: {}, }, @@ -401,7 +305,7 @@ describe('SystemsTable', () => { expect(InventoryTable).toHaveBeenLastCalledWith( expect.objectContaining({ activeFiltersConfig: expect.objectContaining({ - deleteTitle: 'Reset filters', + deleteTitle: 'Clear filters', showDeleteButton: true, }), }), diff --git a/src/SmartComponents/Systems/SystemsTable.js b/src/SmartComponents/Systems/SystemsTable.js index 2601abe80..0d1390f43 100644 --- a/src/SmartComponents/Systems/SystemsTable.js +++ b/src/SmartComponents/Systems/SystemsTable.js @@ -144,7 +144,8 @@ const SystemsTable = ({ return { ...config, - showDeleteButton: config.showDeleteButton || hasInventoryFilterDeviation, + showDeleteButton: + config.showDeleteButton || config.filters.length > 0 || hasInventoryFilterDeviation, }; }, [deleteFilters, deleteFilterGroup, filter, hasInventoryFilterDeviation]); diff --git a/src/Utilities/constants.js b/src/Utilities/constants.js index 5a66178d0..14b28b39e 100644 --- a/src/Utilities/constants.js +++ b/src/Utilities/constants.js @@ -54,7 +54,7 @@ export const packagesListDefaultFilters = { }; export const systemsListDefaultFilters = { - filter: { stale: [true, false] }, + filter: {}, }; export const emptyDefaultFilters = { diff --git a/src/store/Reducers/SystemsStore.js b/src/store/Reducers/SystemsStore.js index 1f07aa7f3..bf0edaeb8 100644 --- a/src/store/Reducers/SystemsStore.js +++ b/src/store/Reducers/SystemsStore.js @@ -8,9 +8,6 @@ const initialState = { queryParams: { page: 1, perPage: 20, - filter: { - stale: [true, false], - }, }, };