mirror of
https://github.com/ThatGuySam/doesitarm.git
synced 2026-05-21 06:54:08 -07:00
Enable toggleable filters class
This commit is contained in:
parent
a9278e7ba4
commit
127d6db399
2 changed files with 105 additions and 0 deletions
|
|
@ -226,3 +226,73 @@ export class StorkClient {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export class StorkFilters {
|
||||||
|
constructor({
|
||||||
|
initialFilters = {}
|
||||||
|
} = {}) {
|
||||||
|
this.filters = {
|
||||||
|
...initialFilters
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
get filtersForQuery () {
|
||||||
|
return Object.entries( this.filters ).map( ([ filterKey, filterValue ]) => {
|
||||||
|
return `${ filterKey }_${ filterValue }`
|
||||||
|
} ).join(' ')
|
||||||
|
}
|
||||||
|
|
||||||
|
isQueryValue ( filterNameOrQueryValue ) {
|
||||||
|
return filterNameOrQueryValue.includes('_')
|
||||||
|
}
|
||||||
|
|
||||||
|
getKeyAndValue ( filterQueryValue ) {
|
||||||
|
const [ key, value ] = filterQueryValue.split('_')
|
||||||
|
return { key, value }
|
||||||
|
}
|
||||||
|
|
||||||
|
getFilterNameAndValueFromString ( filterNameOrQueryValue ) {
|
||||||
|
if ( this.isQueryValue( filterNameOrQueryValue ) ) {
|
||||||
|
return this.getKeyAndValue( filterNameOrQueryValue )
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
key: filterNameOrQueryValue,
|
||||||
|
value: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleFilter ( filterNameOrQueryValue, filterValue = null ) {
|
||||||
|
|
||||||
|
const fromString = this.getFilterNameAndValueFromString( filterNameOrQueryValue )
|
||||||
|
|
||||||
|
const filterName = fromString.key
|
||||||
|
filterValue = filterValue || fromString.value
|
||||||
|
|
||||||
|
if ( !!this.filters[ filterName ] ) {
|
||||||
|
delete this.filters[ filterName ]
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Throw error if filter value is not a string
|
||||||
|
if ( typeof filterValue !== 'string' ) {
|
||||||
|
throw new Error(`Filter value must be a string. Got ${ typeof filterValue }`)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.filters[ filterName ] = filterValue
|
||||||
|
}
|
||||||
|
|
||||||
|
hasFilter ( filterNameOrQueryValue ) {
|
||||||
|
|
||||||
|
const {
|
||||||
|
key : filterName,
|
||||||
|
} = this.getFilterNameAndValueFromString( filterNameOrQueryValue )
|
||||||
|
|
||||||
|
|
||||||
|
return !!this.filters[ filterName ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
35
test/prebuild/filters.js
Normal file
35
test/prebuild/filters.js
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
import test from 'ava'
|
||||||
|
// import MarkdownIt from 'markdown-it'
|
||||||
|
|
||||||
|
// import { isValidHttpUrl } from '~/helpers/check-types.js'
|
||||||
|
import { StorkFilters } from '~/helpers/stork/browser.js'
|
||||||
|
|
||||||
|
|
||||||
|
require('dotenv').config()
|
||||||
|
|
||||||
|
|
||||||
|
test('Can Toggle off existing filter' , async t => {
|
||||||
|
const filters = new StorkFilters({
|
||||||
|
initialFilters: {
|
||||||
|
'test': 'yes'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
filters.toggleFilter('test')
|
||||||
|
|
||||||
|
t.deepEqual(filters.hasFilter('test'), false)
|
||||||
|
|
||||||
|
filters.toggleFilter('test', 'yes')
|
||||||
|
filters.toggleFilter('status', 'native')
|
||||||
|
|
||||||
|
t.deepEqual(filters.hasFilter('test'), true)
|
||||||
|
|
||||||
|
t.deepEqual(filters.filtersForQuery, 'test_yes status_native')
|
||||||
|
|
||||||
|
filters.toggleFilter('status_native')
|
||||||
|
|
||||||
|
t.deepEqual(filters.filtersForQuery, 'test_yes')
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// Can handle query values with multiple underscores
|
||||||
Loading…
Add table
Add a link
Reference in a new issue