ember-filter-params
Version:
Easy filter and multi-filtering via queryParams for your controllers
115 lines (90 loc) • 3.33 kB
text/coffeescript
`import Ember from 'ember'`
FilterParamsMixin = Ember.Mixin.create(
filters: Ember.computed(->
[]
)
multiFilters: Ember.computed(->
[]
)
_filters: (->
Ember.keys()
).property('filters')
_multiFilters: (->
Ember.keys()
).property('multiFilters')
init: ->
.forEach (filter) =>
filterName = "#{filter}Selected"
filterValue = Ember.computed(filter,)
.forEach (multiFilter) =>
return
setupMultiFilter: (key) ->
Ember.run.next(@,->
multiFilter = key
multiFilterSelected = Ember.A([])
filterParam =
filterParams = filterParam?.split(',') || []
allFilters =
if !!allFilters
allFilters?.then((multiFilters) =>
multiFilters.forEach (filter) =>
filter.set('isFiltering',filterParams?.contains(filter.get('id')))
).finally =>
)
filterSelected: (key,value,prevValue) ->
key = key.replace('Selected','')
filter = null
# setter
if !!value
filterId =
if !!filterId
key = [key]
if !!key
?.then (filters) =>
filters.findBy('id',filterId)
multiFilterSelected: (key,value,prevValue) ->
key = key.replace('Selected','')
.filterBy('isFiltering')
multiFilterObserver: (sender, multiFilter) ->
.setEach('isFiltering',false) unless
multiFilterSelectedObserver: (sender, key) ->
key = key.replace('.@each.id','')
multiFilterSelected =
key = key.replace('Selected','')
newValue = multiFilterSelected.mapBy('id').toString()
newValue = if newValue.length then newValue else null
multiFilterAllSelected: (key,value,prevValue) ->
key = key.replace('AllSelected','')
.isEvery('isFiltering')
_allFilters: (filterName) ->
_selectMultiple: (filterName, filters) ->
.setEach('isFiltering',false)
filters.setEach('isFiltering',true)
return
_select: (filterName, filter) ->
filter.set('isFiltering',!filter.get('isFiltering'))
return
actions:
selectAll: (filterName) ->
allFilters =
allSelected =
allFilters.setEach('isFiltering',!allSelected)
select: (filterName, filters) ->
if Ember.isArray(filters)
else
)
`export default FilterParamsMixin`