@@ -8,8 +8,10 @@ import messages from '../../Messages';
8
8
import Header from '../../PresentationalComponents/Header/Header' ;
9
9
import ErrorHandler from '../../PresentationalComponents/Snippets/ErrorHandler' ;
10
10
import { defaultReducers } from '../../store' ;
11
- import { changeSystemsParams , clearInventoryReducer ,
12
- changeSystemsMetadata , changeTags , systemSelectAction } from '../../store/Actions/Actions' ;
11
+ import {
12
+ changeSystemsParams , clearInventoryReducer ,
13
+ changeSystemsMetadata , changeTags , systemSelectAction
14
+ } from '../../store/Actions/Actions' ;
13
15
import { inventoryEntitiesReducer , modifyInventory } from '../../store/Reducers/InventoryEntitiesReducer' ;
14
16
import {
15
17
exportSystemsCSV , exportSystemsJSON , fetchSystems
@@ -18,7 +20,8 @@ import { DEFAULT_PATCH_TITLE, systemsListDefaultFilters } from '../../Utilities/
18
20
import {
19
21
arrayFromObj , decodeQueryparams , persistantParams , filterSelectedActiveSystemIDs
20
22
} from '../../Utilities/Helpers' ;
21
- import { useBulkSelectConfig , useGetEntities , useOnExport ,
23
+ import {
24
+ useBulkSelectConfig , useGetEntities , useOnExport ,
22
25
useRemoveFilter
23
26
} from '../../Utilities/Hooks' ;
24
27
import { intl } from '../../Utilities/IntlProvider' ;
@@ -41,7 +44,7 @@ const Systems = () => {
41
44
const inventory = useRef ( null ) ;
42
45
43
46
const chrome = useChrome ( ) ;
44
- useEffect ( ( ) => {
47
+ useEffect ( ( ) => {
45
48
chrome . updateDocumentTitle ( `${ intl . formatMessage ( messages . titlesSystems ) } ${ DEFAULT_PATCH_TITLE } ` ) ;
46
49
} , [ chrome , intl ] ) ;
47
50
@@ -82,7 +85,23 @@ const Systems = () => {
82
85
] ) ;
83
86
84
87
const { systemProfile, selectedTags,
85
- filter, search, page, perPage, sort } = queryParams ;
88
+ filter : queryParamsFilter , search, page, perPage, sort
89
+ } = queryParams ;
90
+ const { os : operatingSystemFilter , ...filter } = queryParamsFilter || { } ;
91
+ const osFilter = operatingSystemFilter && [ {
92
+ osFilter : operatingSystemFilter . reduce ( ( osFilter , os ) => {
93
+ const [ osName , osVersion ] = os . split ( ' ' ) ;
94
+ const [ major ] = osVersion . split ( '.' ) ;
95
+
96
+ return {
97
+ ...osFilter ,
98
+ [ `${ osName } -${ major } ` ] : {
99
+ ...osFilter [ `${ osName } -${ major } ` ] || { } ,
100
+ [ `${ osName } -${ major } -${ osVersion } ` ] : true
101
+ }
102
+ } ;
103
+ } , { } )
104
+ } ] ;
86
105
87
106
React . useEffect ( ( ) => {
88
107
apply ( decodedParams ) ;
@@ -156,89 +175,93 @@ const Systems = () => {
156
175
< React . Fragment >
157
176
< Header title = { intl . formatMessage ( messages . titlesPatchSystems ) } headerOUIA = { 'systems' } />
158
177
{ ( hasError || metadata ?. has_systems === false )
159
- && < ErrorHandler code = { code } metadata = { metadata } />
160
- || < React . Fragment >
161
- < SystemsStatusReport apply = { apply } queryParams = { queryParams } />
162
- < PatchSetWrapper patchSetState = { patchSetState } setPatchSetState = { setPatchSetState } />
163
- { isRemediationOpen && < RemediationModalCmp /> || null }
164
- < Main >
165
- < InventoryTable
166
- ref = { inventory }
167
- isFullView
168
- autoRefresh
169
- initialLoading
170
- hideFilters = { { all : true , tags : false , hostGroupFilter : false , operatingSystem : false } }
171
- columns = { ( defaultColumns ) => systemsColumnsMerger ( defaultColumns , systemsListColumns ) }
172
- showTags
173
- customFilters = { {
174
- patchParams : {
175
- search,
176
- filter,
177
- systemProfile,
178
- selectedTags
179
- }
180
- } }
181
- paginationProps = { {
182
- isDisabled : totalItems === 0
183
- } }
184
- onLoad = { ( { mergeWithEntities } ) => {
185
- store . replaceReducer ( combineReducers ( {
186
- ...defaultReducers ,
187
- ...mergeWithEntities (
188
- inventoryEntitiesReducer ( systemsListColumns ( ) , modifyInventory ) ,
189
- persistantParams ( { page, perPage, sort, search } , decodedParams )
190
- )
191
- } ) ) ;
192
- } }
193
- getEntities = { getEntities }
194
- tableProps = { {
195
- actionResolver : ( row ) =>
196
- systemsRowActions (
197
- showRemediationModal ,
198
- openAssignSystemsModal ,
199
- openUnassignSystemsModal ,
200
- row ,
201
- hasTemplateAccess
202
- ) ,
203
- canSelectAll : false ,
204
- variant : TableVariant . compact ,
205
- className : 'patchCompactInventory' ,
206
- isStickyHeader : true
207
- } }
208
- bulkSelect = { bulkSelectConfig }
209
- exportConfig = { {
210
- isDisabled : totalItems === 0 ,
211
- onSelect : onExport
212
- } }
213
- actionsConfig = { {
214
- actions : [
215
- < AsyncRemediationButton
216
- key = 'remediate-multiple-systems'
217
- remediationProvider = { remediationDataProvider }
218
- isDisabled = {
219
- arrayFromObj ( selectedRows ) . length === 0 || isRemediationLoading
220
- }
221
- isLoading = { isRemediationLoading }
222
- /> ,
223
- {
224
- key : 'assign-multiple-systems' ,
225
- label : intl . formatMessage ( messages . titlesTemplateAssign ) ,
226
- onClick : ( ) => openAssignSystemsModal ( selectedRows ) ,
227
- props : { isDisabled : ! hasTemplateAccess || selectedCount === 0 }
228
- } ,
229
- {
230
- key : 'remove-multiple-systems' ,
231
- label : intl . formatMessage ( messages . titlesTemplateRemoveMultipleButton ) ,
232
- onClick : ( ) => openUnassignSystemsModal ( filterSelectedActiveSystemIDs ( selectedRows ) ) ,
233
- props : { isDisabled : ! hasTemplateAccess || selectedCount === 0 }
178
+ && < ErrorHandler code = { code } metadata = { metadata } />
179
+ || < React . Fragment >
180
+ < SystemsStatusReport apply = { apply } queryParams = { queryParams } />
181
+ < PatchSetWrapper patchSetState = { patchSetState } setPatchSetState = { setPatchSetState } />
182
+ { isRemediationOpen && < RemediationModalCmp /> || null }
183
+ < Main >
184
+ < InventoryTable
185
+ ref = { inventory }
186
+ isFullView
187
+ autoRefresh
188
+ initialLoading
189
+ hideFilters = { { all : true , tags : false , hostGroupFilter : false , operatingSystem : false } }
190
+ columns = { ( defaultColumns ) => systemsColumnsMerger ( defaultColumns , systemsListColumns ) }
191
+ showTags
192
+ customFilters = { {
193
+ ...operatingSystemFilter ? {
194
+ filters : [ ...( osFilter || [ ] ) ]
195
+ } : { } ,
196
+ patchParams : {
197
+ search,
198
+ filter,
199
+ systemProfile,
200
+ selectedTags
201
+
234
202
}
235
- ]
236
- } }
237
- filterConfig = { filterConfig }
238
- activeFiltersConfig = { activeFiltersConfig }
239
- />
240
- </ Main >
241
- </ React . Fragment > }
203
+ } }
204
+ paginationProps = { {
205
+ isDisabled : totalItems === 0
206
+ } }
207
+ onLoad = { ( { mergeWithEntities } ) => {
208
+ store . replaceReducer ( combineReducers ( {
209
+ ...defaultReducers ,
210
+ ...mergeWithEntities (
211
+ inventoryEntitiesReducer ( systemsListColumns ( ) , modifyInventory ) ,
212
+ persistantParams ( { page, perPage, sort, search } , decodedParams )
213
+ )
214
+ } ) ) ;
215
+ } }
216
+ getEntities = { getEntities }
217
+ tableProps = { {
218
+ actionResolver : ( row ) =>
219
+ systemsRowActions (
220
+ showRemediationModal ,
221
+ openAssignSystemsModal ,
222
+ openUnassignSystemsModal ,
223
+ row ,
224
+ hasTemplateAccess
225
+ ) ,
226
+ canSelectAll : false ,
227
+ variant : TableVariant . compact ,
228
+ className : 'patchCompactInventory' ,
229
+ isStickyHeader : true
230
+ } }
231
+ bulkSelect = { bulkSelectConfig }
232
+ exportConfig = { {
233
+ isDisabled : totalItems === 0 ,
234
+ onSelect : onExport
235
+ } }
236
+ actionsConfig = { {
237
+ actions : [
238
+ < AsyncRemediationButton
239
+ key = 'remediate-multiple-systems'
240
+ remediationProvider = { remediationDataProvider }
241
+ isDisabled = {
242
+ arrayFromObj ( selectedRows ) . length === 0 || isRemediationLoading
243
+ }
244
+ isLoading = { isRemediationLoading }
245
+ /> ,
246
+ {
247
+ key : 'assign-multiple-systems' ,
248
+ label : intl . formatMessage ( messages . titlesTemplateAssign ) ,
249
+ onClick : ( ) => openAssignSystemsModal ( selectedRows ) ,
250
+ props : { isDisabled : ! hasTemplateAccess || selectedCount === 0 }
251
+ } ,
252
+ {
253
+ key : 'remove-multiple-systems' ,
254
+ label : intl . formatMessage ( messages . titlesTemplateRemoveMultipleButton ) ,
255
+ onClick : ( ) => openUnassignSystemsModal ( filterSelectedActiveSystemIDs ( selectedRows ) ) ,
256
+ props : { isDisabled : ! hasTemplateAccess || selectedCount === 0 }
257
+ }
258
+ ]
259
+ } }
260
+ filterConfig = { filterConfig }
261
+ activeFiltersConfig = { activeFiltersConfig }
262
+ />
263
+ </ Main >
264
+ </ React . Fragment > }
242
265
</ React . Fragment >
243
266
) ;
244
267
} ;
0 commit comments