mirror of
https://github.com/ThatGuySam/doesitarm.git
synced 2026-05-18 06:44:46 -07:00
Enable setting filters via string
This commit is contained in:
parent
62401d1f76
commit
25708dccae
2 changed files with 43 additions and 14 deletions
|
|
@ -241,10 +241,14 @@ export class StorkFilters {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get filtersForQuery () {
|
get list () {
|
||||||
return Object.entries( this.filters ).map( ([ filterKey, filterValue ]) => {
|
return Object.entries( this.filters ).map( ([ filterKey, filterValue ]) => {
|
||||||
return `${ filterKey }${ statusFilterSeparator }${ filterValue }`
|
return `${ filterKey }${ statusFilterSeparator }${ filterValue }`
|
||||||
} ).join(' ')
|
} )
|
||||||
|
}
|
||||||
|
|
||||||
|
get asQuery () {
|
||||||
|
return this.list.join(' ')
|
||||||
}
|
}
|
||||||
|
|
||||||
isQueryValue ( filterNameOrQueryValue ) {
|
isQueryValue ( filterNameOrQueryValue ) {
|
||||||
|
|
@ -269,13 +273,32 @@ export class StorkFilters {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
removeFilter ( filterName ) {
|
remove ( filterName ) {
|
||||||
// Throw error if it's not a valid filter name
|
// Throw error if it's not a valid filter name
|
||||||
if ( this.isQueryValue( filterName ) ) throw new Error(`${ filterName } is not a valid filter name`)
|
if ( this.isQueryValue( filterName ) ) throw new Error(`${ filterName } is not a valid filter name`)
|
||||||
|
|
||||||
delete this.filters[ filterName ]
|
delete this.filters[ filterName ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setFromString ( filterNameOrQueryValue ) {
|
||||||
|
const {
|
||||||
|
key,
|
||||||
|
value = ''
|
||||||
|
} = this.getFilterNameAndValueFromString( filterNameOrQueryValue )
|
||||||
|
|
||||||
|
// Throw for empty values
|
||||||
|
if ( value.trim().length === 0 ) throw new Error(`${ filterNameOrQueryValue } is not a valid filter value`)
|
||||||
|
|
||||||
|
this.set( key, value )
|
||||||
|
}
|
||||||
|
|
||||||
|
set ( filterName, filterValue ) {
|
||||||
|
// Throw error if it's not a valid filter name
|
||||||
|
if ( this.isQueryValue( filterName ) ) throw new Error(`${ filterName } is not a valid filter name`)
|
||||||
|
|
||||||
|
this.filters[ filterName ] = filterValue
|
||||||
|
}
|
||||||
|
|
||||||
toggleFilter ( filterNameOrQueryValue, filterValue = null ) {
|
toggleFilter ( filterNameOrQueryValue, filterValue = null ) {
|
||||||
|
|
||||||
const fromString = this.getFilterNameAndValueFromString( filterNameOrQueryValue )
|
const fromString = this.getFilterNameAndValueFromString( filterNameOrQueryValue )
|
||||||
|
|
@ -284,8 +307,8 @@ export class StorkFilters {
|
||||||
filterValue = filterValue || fromString.value
|
filterValue = filterValue || fromString.value
|
||||||
|
|
||||||
// If the filter is already set, remove it
|
// If the filter is already set, remove it
|
||||||
if ( this.hasFilter( filterNameOrQueryValue ) ) {
|
if ( this.has( filterNameOrQueryValue ) ) {
|
||||||
this.removeFilter( filterName )
|
this.remove( filterName )
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -295,10 +318,10 @@ export class StorkFilters {
|
||||||
throw new Error(`Filter value must be a string. Got ${ typeof filterValue }`)
|
throw new Error(`Filter value must be a string. Got ${ typeof filterValue }`)
|
||||||
}
|
}
|
||||||
|
|
||||||
this.filters[ filterName ] = filterValue
|
this.set( filterName, filterValue )
|
||||||
}
|
}
|
||||||
|
|
||||||
hasFilter ( filterNameOrQueryValue ) {
|
has ( filterNameOrQueryValue ) {
|
||||||
|
|
||||||
const {
|
const {
|
||||||
key : filterName,
|
key : filterName,
|
||||||
|
|
|
||||||
|
|
@ -17,18 +17,18 @@ test('Can Toggle off existing filter' , async t => {
|
||||||
|
|
||||||
filters.toggleFilter('test')
|
filters.toggleFilter('test')
|
||||||
|
|
||||||
t.deepEqual(filters.hasFilter('test'), false)
|
t.deepEqual(filters.has('test'), false)
|
||||||
|
|
||||||
filters.toggleFilter('test', 'yes')
|
filters.toggleFilter('test', 'yes')
|
||||||
filters.toggleFilter('status', 'native')
|
filters.toggleFilter('status', 'native')
|
||||||
|
|
||||||
t.deepEqual(filters.hasFilter('test'), true, 'Has test filter')
|
t.deepEqual(filters.has('test'), true, 'Has test filter')
|
||||||
|
|
||||||
t.deepEqual(filters.filtersForQuery, 'test_yes status_native', 'Has correct filters for query')
|
t.deepEqual(filters.asQuery, 'test_yes status_native', 'Has correct filters for query')
|
||||||
|
|
||||||
filters.toggleFilter('status_native')
|
filters.toggleFilter('status_native')
|
||||||
|
|
||||||
t.deepEqual(filters.filtersForQuery, 'test_yes', 'Has only test filter')
|
t.deepEqual(filters.asQuery, 'test_yes', 'Has only test filter')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -39,9 +39,9 @@ test('Can handle query values with multiple underscores', async t => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
t.log( 'filters.filtersForQuery', filters.filtersForQuery )
|
t.log( 'filters.asQuery', filters.asQuery )
|
||||||
|
|
||||||
t.assert( filters.hasFilter( 'test_value_with_multiple_underscores' ) , 'Has correct filters for query' )
|
t.assert( filters.has( 'test_value_with_multiple_underscores' ) , 'Has correct filters for query' )
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -54,8 +54,14 @@ test( 'Can update existing filter', async t => {
|
||||||
|
|
||||||
filters.toggleFilter('test_works_yes')
|
filters.toggleFilter('test_works_yes')
|
||||||
|
|
||||||
t.deepEqual( filters.filtersForQuery, 'test_works_yes', 'Has updated filter')
|
t.deepEqual( filters.asQuery, 'test_works_yes', 'Has updated filter')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
test( 'Can set filters from string', async t => {
|
||||||
|
const filters = new StorkFilters()
|
||||||
|
|
||||||
|
filters.setFromString( 'test_works_yes' )
|
||||||
|
|
||||||
|
t.deepEqual( filters.asQuery, 'test_works_yes', 'Has updated filter')
|
||||||
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue