Enable setting filters via string

This commit is contained in:
Sam Carlton 2022-06-05 10:28:34 -05:00
parent 62401d1f76
commit 25708dccae
2 changed files with 43 additions and 14 deletions

View file

@ -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,

View file

@ -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')
})