@@ -293,16 +293,18 @@ export const encodeURLParams = parameters => {
293
293
return encodeParams ( removeUndefinedObjectItems ( urlParams ) , false ) ;
294
294
} ;
295
295
296
- export const decomposeFilterValue = filterValue => {
297
- if ( typeof ( filterValue ) === 'string' && filterValue . startsWith ( 'in:' ) ) {
296
+ export const decomposeFilterValue = ( filterValue , parser ) => {
297
+ if ( parser ) {
298
+ return parser ( filterValue ) ;
299
+ } else if ( typeof ( filterValue ) === 'string' && filterValue . startsWith ( 'in:' ) ) {
298
300
const values = filterValue . slice ( 3 ) ;
299
301
return values . split ( ',' ) ;
302
+ } else {
303
+ return filterValue ;
300
304
}
301
-
302
- return filterValue ;
303
305
} ;
304
306
305
- export const decodeQueryparams = queryString => {
307
+ export const decodeQueryparams = ( queryString , parsers = { } ) => {
306
308
const parsed = qs . parse ( queryString ) ;
307
309
const res = { } ;
308
310
Object . keys ( parsed ) . forEach ( key => {
@@ -313,9 +315,10 @@ export const decodeQueryparams = queryString => {
313
315
if ( bracketIndex > 0 ) {
314
316
const objParent = key . slice ( 0 , bracketIndex ) ;
315
317
const objKey = key . slice ( bracketIndex + 1 , - 1 ) ;
318
+ const parser = parsers [ objKey ] ;
316
319
res [ objParent ] = {
317
320
...res [ objParent ] ,
318
- [ objKey ] : decomposeFilterValue ( typeHandledParam )
321
+ [ objKey ] : decomposeFilterValue ( typeHandledParam , parser )
319
322
} ;
320
323
} else {
321
324
res [ key ] = typeHandledParam ;
@@ -325,11 +328,13 @@ export const decodeQueryparams = queryString => {
325
328
return res ;
326
329
} ;
327
330
328
- export const buildFilterChips = ( filters , search , searchChipLabel = 'Search' ) => {
331
+ export const buildFilterChips = ( filters , search , searchChipLabel = 'Search' , parsers = { } ) => {
329
332
330
333
let filterConfig = [ ] ;
331
334
const buildChips = ( filters , category ) => {
332
- if ( multiValueFilters . includes ( category ) ) {
335
+ if ( parsers [ category ] ) {
336
+ return parsers [ category ] ( filters [ category ] ) ;
337
+ } else if ( multiValueFilters . includes ( category ) ) {
333
338
const filterValues = filters [ category ] && ( typeof ( filters [ category ] ) === 'string' && filters [ category ] . split ( ',' )
334
339
|| filters [ category ] ) || [ ] ;
335
340
return filterValues . map ( value => ( {
@@ -396,15 +401,29 @@ export const buildFilterChips = (filters, search, searchChipLabel = 'Search') =>
396
401
return filterConfig ;
397
402
} ;
398
403
404
+ export const buildOsFilter = ( osFilter = { } ) => {
405
+ const osVersions = Object . entries ( osFilter ) . reduce ( ( acc , [ , osGroupValues ] ) => {
406
+ return [
407
+ ...acc ,
408
+ ...Object . entries ( osGroupValues ) . filter ( ( [ , value ] ) => ( value === true ) ) . map ( ( [ key ] ) => {
409
+ const keyParts = key . split ( '-' ) ;
410
+ return keyParts . slice ( 0 , keyParts . length - 2 ) + ' ' + keyParts [ keyParts . length - 1 ] ;
411
+ } )
412
+ ] ;
413
+ } , [ ] ) ;
414
+
415
+ return osVersions . length > 0 ? {
416
+ os : osVersions . join ( ',' )
417
+ } : { } ;
418
+ } ;
419
+
399
420
export const buildApiFilters = ( patchFilters , inventoryFilters ) => (
400
421
{
401
422
...patchFilters ,
402
423
...( Array . isArray ( inventoryFilters . hostGroupFilter ) && inventoryFilters . hostGroupFilter . length > 0
403
424
? { group_name : inventoryFilters . hostGroupFilter }
404
425
: { } ) ,
405
- ...inventoryFilters ?. osFilter ?. length > 0 ? {
406
- os : inventoryFilters . osFilter . map ( ( { value } ) => 'RHEL ' + value ) . join ( ',' )
407
- } : { }
426
+ ...buildOsFilter ( inventoryFilters ?. osFilter )
408
427
} ) ;
409
428
410
429
export const changeListParams = ( oldParams , newParams ) => {
0 commit comments