@@ -293,16 +293,18 @@ export const encodeURLParams = parameters => {
293293 return encodeParams ( removeUndefinedObjectItems ( urlParams ) , false ) ;
294294} ;
295295
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:' ) ) {
298300 const values = filterValue . slice ( 3 ) ;
299301 return values . split ( ',' ) ;
302+ } else {
303+ return filterValue ;
300304 }
301-
302- return filterValue ;
303305} ;
304306
305- export const decodeQueryparams = queryString => {
307+ export const decodeQueryparams = ( queryString , parsers = { } ) => {
306308 const parsed = qs . parse ( queryString ) ;
307309 const res = { } ;
308310 Object . keys ( parsed ) . forEach ( key => {
@@ -313,9 +315,10 @@ export const decodeQueryparams = queryString => {
313315 if ( bracketIndex > 0 ) {
314316 const objParent = key . slice ( 0 , bracketIndex ) ;
315317 const objKey = key . slice ( bracketIndex + 1 , - 1 ) ;
318+ const parser = parsers [ objKey ] ;
316319 res [ objParent ] = {
317320 ...res [ objParent ] ,
318- [ objKey ] : decomposeFilterValue ( typeHandledParam )
321+ [ objKey ] : decomposeFilterValue ( typeHandledParam , parser )
319322 } ;
320323 } else {
321324 res [ key ] = typeHandledParam ;
@@ -325,11 +328,13 @@ export const decodeQueryparams = queryString => {
325328 return res ;
326329} ;
327330
328- export const buildFilterChips = ( filters , search , searchChipLabel = 'Search' ) => {
331+ export const buildFilterChips = ( filters , search , searchChipLabel = 'Search' , parsers = { } ) => {
329332
330333 let filterConfig = [ ] ;
331334 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 ) ) {
333338 const filterValues = filters [ category ] && ( typeof ( filters [ category ] ) === 'string' && filters [ category ] . split ( ',' )
334339 || filters [ category ] ) || [ ] ;
335340 return filterValues . map ( value => ( {
@@ -396,15 +401,29 @@ export const buildFilterChips = (filters, search, searchChipLabel = 'Search') =>
396401 return filterConfig ;
397402} ;
398403
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+
399420export const buildApiFilters = ( patchFilters , inventoryFilters ) => (
400421 {
401422 ...patchFilters ,
402423 ...( Array . isArray ( inventoryFilters . hostGroupFilter ) && inventoryFilters . hostGroupFilter . length > 0
403424 ? { group_name : inventoryFilters . hostGroupFilter }
404425 : { } ) ,
405- ...inventoryFilters ?. osFilter ?. length > 0 ? {
406- os : inventoryFilters . osFilter . map ( ( { value } ) => 'RHEL ' + value ) . join ( ',' )
407- } : { }
426+ ...buildOsFilter ( inventoryFilters ?. osFilter )
408427 } ) ;
409428
410429export const changeListParams = ( oldParams , newParams ) => {
0 commit comments