VRFS-3036 more refactoring
This commit is contained in:
parent
13c1c5311e
commit
6fb07d8a31
|
|
@ -124,8 +124,8 @@ module JamRuby
|
|||
end
|
||||
|
||||
def _sort_order(rel)
|
||||
val = json[KEY_SORT_ORDER]
|
||||
if SORT_VALS[1] == val
|
||||
val = json[self.class::KEY_SORT_ORDER]
|
||||
if self.class::SORT_VALS[1] == val
|
||||
locidispid = self.user.last_jam_locidispid || 0
|
||||
my_locid = locidispid / 1000000
|
||||
rel = rel.joins("LEFT JOIN geoiplocations AS my_geo ON my_geo.locid = #{my_locid}")
|
||||
|
|
@ -160,7 +160,7 @@ module JamRuby
|
|||
rel = do_search(filter)
|
||||
|
||||
@page_number = [page.to_i, 1].max
|
||||
rel = rel.paginate(:page => @page_number, :per_page => PER_PAGE)
|
||||
rel = rel.paginate(:page => @page_number, :per_page => self.class::PER_PAGE)
|
||||
|
||||
rel = self.search_includes(rel)
|
||||
@page_count = rel.total_pages
|
||||
|
|
@ -169,7 +169,7 @@ module JamRuby
|
|||
end
|
||||
|
||||
def reset_filter
|
||||
self.data_blob = JSON_SCHEMA
|
||||
self.data_blob = self.class::JSON_SCHEMA
|
||||
self.save
|
||||
end
|
||||
|
||||
|
|
@ -183,7 +183,7 @@ module JamRuby
|
|||
end
|
||||
|
||||
def is_blank?
|
||||
self.data_blob == JSON_SCHEMA
|
||||
self.data_blob == self.class::JSON_SCHEMA
|
||||
end
|
||||
|
||||
def description
|
||||
|
|
|
|||
|
|
@ -1,227 +0,0 @@
|
|||
$ = jQuery
|
||||
context = window
|
||||
context.JK ||= {};
|
||||
|
||||
context.JK.BaseSearchFilter = class BaseSearchFilter
|
||||
|
||||
constructor: () ->
|
||||
@rest = context.JK.Rest()
|
||||
@logger = context.JK.logger
|
||||
@searchFilter = null
|
||||
@profileUtils = context.JK.ProfileUtils
|
||||
@helpBubble = context.JK.HelpBubbleHelper
|
||||
@searchResults = null
|
||||
@isSearching = false
|
||||
@pageNumber = 1
|
||||
@instrument_logo_map = context.JK.getInstrumentIconMap24()
|
||||
@searchType = ''
|
||||
@searchTypeS = ''
|
||||
@restGet = null
|
||||
@restPost = null
|
||||
@searchMeta = null
|
||||
|
||||
init: (app) =>
|
||||
@app = app
|
||||
@screenBindings = { 'afterShow': this.afterShow, 'afterHide': this.afterHide }
|
||||
@app.bindScreen(@searchTypeS, @screenBindings)
|
||||
|
||||
@screen = $('#'+@searchTypeS+'-screen')
|
||||
@resultsListContainer = @screen.find('#'+@searchType+'-search-filter-results-list')
|
||||
@spinner = @screen.find('.paginate-wait')
|
||||
|
||||
this.registerResultsPagination()
|
||||
|
||||
@screen.find('#btn-'+@searchType+'-search-builder').on 'click', =>
|
||||
this.showBuilder()
|
||||
|
||||
@screen.find('#btn-'+@searchType+'-search-reset').on 'click', =>
|
||||
this.resetFilter()
|
||||
|
||||
afterShow: () =>
|
||||
@screen.find('#'+@searchType+'-search-filter-results').show()
|
||||
@screen.find('#'+@searchType+'-search-filter-builder').hide()
|
||||
this.getUserFilterResults()
|
||||
|
||||
showBuilder: () =>
|
||||
@screen.find('#'+@searchType+'-search-filter-results').hide()
|
||||
@screen.find('#'+@searchType+'-search-filter-builder').show()
|
||||
@resultsListContainer.empty()
|
||||
|
||||
afterHide: () =>
|
||||
@resultsListContainer.empty()
|
||||
|
||||
renderSearchFilter: () =>
|
||||
$.when(@restGet()).done (sFilter) =>
|
||||
this.loadSearchFilter(sFilter)
|
||||
|
||||
loadSearchFilter: (sFilter) =>
|
||||
|
||||
_populateSelectWithKeys: (struct, selection, keys, element) =>
|
||||
element.children().remove()
|
||||
$.each keys, (idx, value) =>
|
||||
label = struct[value]
|
||||
blankOption = $ '<option value=""></option>'
|
||||
blankOption.text label
|
||||
blankOption.attr 'value', value
|
||||
blankOption.attr 'selected', '' if value == selection
|
||||
element.append(blankOption)
|
||||
context.JK.dropdown(element)
|
||||
|
||||
_populateSelectIdentifier: (identifier) =>
|
||||
elem = $ '#'+@searchType+'-search-filter-builder select[name='+identifier+']'
|
||||
struct = gon.band_search_meta[identifier]['map']
|
||||
keys = gon.band_search_meta[identifier]['keys']
|
||||
this._populateSelectWithKeys(struct, @searchFilter[identifier], keys, elem)
|
||||
|
||||
_populateSelectWithInt: (sourceStruct, selection, element) =>
|
||||
struct =
|
||||
'-1': 'Any'
|
||||
$.extend(struct, sourceStruct)
|
||||
this._populateSelectWithKeys(struct, selection, Object.keys(struct).sort(), element)
|
||||
|
||||
_populateSortOrder: () =>
|
||||
this._populateSelectIdentifier('sort_order')
|
||||
|
||||
_populateGenres: () =>
|
||||
@screen.find('#search-filter-genres').empty()
|
||||
@rest.getGenres().done (genres) =>
|
||||
genreTemplate = @screen.find('#template-search-filter-setup-genres').html()
|
||||
selected = ''
|
||||
$.each genres, (index, genre) =>
|
||||
if 0 < @searchFilter.data_blob.genres.length
|
||||
genreMatch = $.grep(@searchFilter.data_blob.genres, (n, i) ->
|
||||
n == genre.id)
|
||||
else
|
||||
genreMatch = []
|
||||
selected = 'checked' if genreMatch.length > 0
|
||||
genreHtml = context.JK.fillTemplate(genreTemplate,
|
||||
id: genre.id
|
||||
description: genre.description
|
||||
checked: selected)
|
||||
@screen.find('#search-filter-genres').append genreHtml
|
||||
|
||||
_populateInstruments: () =>
|
||||
@screen.find('#search-filter-instruments').empty()
|
||||
@rest.getInstruments().done (instruments) =>
|
||||
$.each instruments, (index, instrument) =>
|
||||
instrumentTemplate = @screen.find('#template-search-filter-setup-instrument').html()
|
||||
selected = ''
|
||||
proficiency = '1'
|
||||
if 0 < @searchFilter.data_blob.instruments.length
|
||||
instMatch = $.grep(@searchFilter.data_blob.instruments, (inst, i) ->
|
||||
yn = inst.instrument_id == instrument.id
|
||||
proficiency = inst.proficiency_level if yn
|
||||
yn)
|
||||
selected = 'checked' if instMatch.length > 0
|
||||
instrumentHtml = context.JK.fillTemplate(instrumentTemplate,
|
||||
id: instrument.id
|
||||
description: instrument.description
|
||||
checked: selected)
|
||||
@screen.find('#search-filter-instruments').append instrumentHtml
|
||||
profsel = '#search-filter-instruments tr[data-instrument-id="'+instrument.id+'"] select'
|
||||
jprofsel = @screen.find(profsel)
|
||||
jprofsel.val(proficiency)
|
||||
context.JK.dropdown(jprofsel)
|
||||
return true
|
||||
|
||||
_builderSelectValue: (identifier) =>
|
||||
elem = $ '#'+@searchType+'-search-filter-builder select[name='+identifier+']'
|
||||
elem.val()
|
||||
|
||||
_builderSelectMultiValue: (identifier) =>
|
||||
vals = []
|
||||
elem = $ '#search-filter-'+identifier+' input[type=checkbox]:checked'
|
||||
if 'instruments' == identifier
|
||||
elem.each (idx) ->
|
||||
row = $(this).parent().parent()
|
||||
instrument =
|
||||
instrument_id: row.data('instrument-id')
|
||||
proficiency_level: row.find('select').val()
|
||||
vals.push instrument
|
||||
else
|
||||
elem.each (idx) ->
|
||||
vals.push $(this).val()
|
||||
vals
|
||||
|
||||
willSearch: (reload) =>
|
||||
return false if @isSearching
|
||||
@isSearching = true
|
||||
if reload
|
||||
@pageNumber = 1
|
||||
@screen.find('#'+@searchType+'-search-filter-spinner').show()
|
||||
@resultsListContainer.empty()
|
||||
@screen.find('#'+@searchType+'-search-filter-builder').hide()
|
||||
@screen.find('#'+@searchType+'-search-filter-results').show()
|
||||
true
|
||||
|
||||
didSearch: (response) =>
|
||||
this.loadSearchFilter(response.filter_json)
|
||||
@searchResults = response
|
||||
@screen.find('#'+@searchType+'-search-filter-spinner').hide()
|
||||
this.renderResultsPage()
|
||||
@screen.find('.paginate-wait').hide()
|
||||
@isSearching = false
|
||||
|
||||
resetFilter: () =>
|
||||
if this.willSearch(true)
|
||||
@restPost({ filter: 'reset' }).done(this.didSearch)
|
||||
|
||||
cancelFilter: () =>
|
||||
this.resetFilter()
|
||||
|
||||
getUserFilterResults: () =>
|
||||
if this.willSearch(true)
|
||||
@restGet('results=true').done(this.didSearch)
|
||||
|
||||
performSearch: () =>
|
||||
if this.willSearch(true)
|
||||
$.each @searchMeta.filter_keys.single, (index, key) =>
|
||||
@searchFilter[key] = this._builderSelectValue(key)
|
||||
$.each @searchMeta.filter_keys.multi, (index, key) =>
|
||||
@searchFilter[key] = this._builderSelectMultiValue(key)
|
||||
@restPost({ filter: JSON.stringify(@searchFilter), page: @pageNumber }).done(this.didSearch)
|
||||
|
||||
renderResultsHeader: () =>
|
||||
@screen.find('#'+@searchType+'-search-filter-description').html(@searchResults.description)
|
||||
if @searchResults.is_blank_filter
|
||||
@screen.find('#btn-'+@searchType+'-search-reset').hide()
|
||||
else
|
||||
@screen.find('#btn-'+@searchType+'-search-reset').show()
|
||||
|
||||
renderResultsPage: () =>
|
||||
|
||||
_formatLocation: (band) ->
|
||||
if band.city and band.state
|
||||
band.city + ', ' + band.state
|
||||
else if band.city
|
||||
band.city
|
||||
else if band.regionname
|
||||
band.regionname
|
||||
else
|
||||
'Location Unavailable'
|
||||
|
||||
friendRequestCallback: (user_id)=>
|
||||
# TODO:
|
||||
|
||||
paginate: () =>
|
||||
if @pageNumber < @searchResults.page_count && this.willSearch(false)
|
||||
@screen.find('.paginate-wait').show()
|
||||
@pageNumber += 1
|
||||
@rest.postBandSearchFilter({ filter: JSON.stringify(@searchFilter), page: @pageNumber }).done(this.didSearch)
|
||||
return true
|
||||
false
|
||||
|
||||
registerResultsPagination: () =>
|
||||
_resultsListContainer = @resultsListContainer
|
||||
_headerHeight = @screen.find('#'+@searchType+'-search-filter-results-header').height()
|
||||
_paginator = this.paginate
|
||||
|
||||
@screen.find('.content-body-scroller').scroll ->
|
||||
if _resultsListContainer.is(':visible')
|
||||
jthis = $(this)
|
||||
wintop = jthis.scrollTop()
|
||||
winheight = jthis.innerHeight()
|
||||
docheight = jthis[0].scrollHeight - _headerHeight
|
||||
scrollTrigger = 0.98;
|
||||
if ((wintop / (docheight - winheight)) >= scrollTrigger)
|
||||
_paginator()
|
||||
Loading…
Reference in New Issue