mirror of
https://github.com/ThatGuySam/doesitarm.git
synced 2026-05-15 06:35:20 -07:00
Add suppor for underscores in filter values
This commit is contained in:
parent
4f5b7e7cbf
commit
be18f711d6
2 changed files with 42 additions and 10 deletions
|
|
@ -228,29 +228,33 @@ export class StorkClient {
|
|||
}
|
||||
|
||||
|
||||
const statusFilterSeparator = '_'
|
||||
|
||||
export class StorkFilters {
|
||||
constructor({
|
||||
initialFilters = {}
|
||||
} = {}) {
|
||||
this.initialFilters = initialFilters
|
||||
|
||||
this.filters = {
|
||||
...initialFilters
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
get filtersForQuery () {
|
||||
return Object.entries( this.filters ).map( ([ filterKey, filterValue ]) => {
|
||||
return `${ filterKey }_${ filterValue }`
|
||||
return `${ filterKey }${ statusFilterSeparator }${ filterValue }`
|
||||
} ).join(' ')
|
||||
}
|
||||
|
||||
isQueryValue ( filterNameOrQueryValue ) {
|
||||
return filterNameOrQueryValue.includes('_')
|
||||
return filterNameOrQueryValue.includes( statusFilterSeparator )
|
||||
}
|
||||
|
||||
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 }
|
||||
}
|
||||
|
||||
|
|
@ -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 ) {
|
||||
|
||||
const fromString = this.getFilterNameAndValueFromString( filterNameOrQueryValue )
|
||||
|
|
@ -272,8 +283,9 @@ export class StorkFilters {
|
|||
const filterName = fromString.key
|
||||
filterValue = filterValue || fromString.value
|
||||
|
||||
if ( !!this.filters[ filterName ] ) {
|
||||
delete this.filters[ filterName ]
|
||||
// If the filter is already set, remove it
|
||||
if ( this.hasFilter( filterName ) ) {
|
||||
this.removeFilter( filterName )
|
||||
|
||||
return
|
||||
}
|
||||
|
|
@ -290,8 +302,13 @@ export class StorkFilters {
|
|||
|
||||
const {
|
||||
key : filterName,
|
||||
value : filterValue = null
|
||||
} = 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 ]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,14 +22,29 @@ test('Can Toggle off existing filter' , async t => {
|
|||
filters.toggleFilter('test', 'yes')
|
||||
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')
|
||||
|
||||
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 update existing filter
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue