Add suppor for underscores in filter values

This commit is contained in:
Sam Carlton 2022-06-04 19:13:57 -05:00
parent 4f5b7e7cbf
commit be18f711d6
2 changed files with 42 additions and 10 deletions

View file

@ -228,29 +228,33 @@ export class StorkClient {
} }
const statusFilterSeparator = '_'
export class StorkFilters { export class StorkFilters {
constructor({ constructor({
initialFilters = {} initialFilters = {}
} = {}) { } = {}) {
this.initialFilters = initialFilters
this.filters = { this.filters = {
...initialFilters ...initialFilters
} }
} }
get filtersForQuery () { get filtersForQuery () {
return Object.entries( this.filters ).map( ([ filterKey, filterValue ]) => { return Object.entries( this.filters ).map( ([ filterKey, filterValue ]) => {
return `${ filterKey }_${ filterValue }` return `${ filterKey }${ statusFilterSeparator }${ filterValue }`
} ).join(' ') } ).join(' ')
} }
isQueryValue ( filterNameOrQueryValue ) { isQueryValue ( filterNameOrQueryValue ) {
return filterNameOrQueryValue.includes('_') return filterNameOrQueryValue.includes( statusFilterSeparator )
} }
getKeyAndValue ( filterQueryValue ) { getKeyAndValue ( filterQueryValue ) {
const [ key, value ] = filterQueryValue.split('_') const key = filterQueryValue.substring(0, filterQueryValue.indexOf( statusFilterSeparator ))
const value = filterQueryValue.substring(filterQueryValue.indexOf( statusFilterSeparator )+1)
return { key, value } return { key, value }
} }
@ -265,6 +269,13 @@ export class StorkFilters {
} }
} }
removeFilter ( filterName ) {
// Throw error if it's not a valid filter name
if ( this.isQueryValue( filterName ) ) throw new Error(`${ filterName } is not a valid filter name`)
delete this.filters[ filterName ]
}
toggleFilter ( filterNameOrQueryValue, filterValue = null ) { toggleFilter ( filterNameOrQueryValue, filterValue = null ) {
const fromString = this.getFilterNameAndValueFromString( filterNameOrQueryValue ) const fromString = this.getFilterNameAndValueFromString( filterNameOrQueryValue )
@ -272,8 +283,9 @@ export class StorkFilters {
const filterName = fromString.key const filterName = fromString.key
filterValue = filterValue || fromString.value filterValue = filterValue || fromString.value
if ( !!this.filters[ filterName ] ) { // If the filter is already set, remove it
delete this.filters[ filterName ] if ( this.hasFilter( filterName ) ) {
this.removeFilter( filterName )
return return
} }
@ -290,8 +302,13 @@ export class StorkFilters {
const { const {
key : filterName, key : filterName,
value : filterValue = null
} = this.getFilterNameAndValueFromString( filterNameOrQueryValue ) } = this.getFilterNameAndValueFromString( filterNameOrQueryValue )
// If this filter is a name and value, check if it's set
if ( isString( filterValue ) ) {
return !!this.filters[ filterName ] && this.filters[ filterName ] === filterValue
}
return !!this.filters[ filterName ] return !!this.filters[ filterName ]
} }

View file

@ -22,14 +22,29 @@ test('Can Toggle off existing filter' , async t => {
filters.toggleFilter('test', 'yes') filters.toggleFilter('test', 'yes')
filters.toggleFilter('status', 'native') filters.toggleFilter('status', 'native')
t.deepEqual(filters.hasFilter('test'), true) t.deepEqual(filters.hasFilter('test'), true, 'Has test filter')
t.deepEqual(filters.filtersForQuery, 'test_yes status_native') t.deepEqual(filters.filtersForQuery, 'test_yes status_native', 'Has correct filters for query')
filters.toggleFilter('status_native') filters.toggleFilter('status_native')
t.deepEqual(filters.filtersForQuery, 'test_yes') t.deepEqual(filters.filtersForQuery, 'test_yes', 'Has only test filter')
}) })
test('Can handle query values with multiple underscores', async t => {
const filters = new StorkFilters({
initialFilters: {
'test': 'value_with_multiple_underscores'
}
})
t.log( 'filters.filtersForQuery', filters.filtersForQuery )
t.assert( filters.hasFilter( 'test_value_with_multiple_underscores' ) , 'Has correct filters for query' )
})
// Can handle query values with multiple underscores // Can handle query values with multiple underscores
// Can update existing filter