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 {
|
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 ]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue