VRFS-3036 more refactoring

This commit is contained in:
Jonathan Kolyer 2015-05-07 17:11:24 +00:00
parent 4cf7f20844
commit 6a23477c4e
4 changed files with 235 additions and 9 deletions

View File

@ -221,6 +221,7 @@ require "jam_ruby/models/online_presence"
require "jam_ruby/models/json_store"
require "jam_ruby/models/base_search"
require "jam_ruby/models/musician_search"
require "jam_ruby/models/band_search"
include Jampb

View File

@ -1,5 +1,5 @@
module JamRuby
class MusicianSearch < BaseSearch
class BandSearch < BaseSearch
attr_accessor :user_counters
@ -16,7 +16,7 @@ module JamRuby
SORT_VALS = %W{ distance latency }
SORT_ORDERS = {
SORT_VALS[0] => 'Distance to Me'
SORT_VALS[0] => 'Distance to Me',
SORT_VALS[1] => 'Latency to Me',
}
@ -25,9 +25,9 @@ module JamRuby
GenrePlayer::TRADITIONAL_BAND,
]
BAND_TYPES = {
INTEREST_VALS[0] => 'Any',
INTEREST_VALS[1] => 'Virtual Band',
INTEREST_VALS[2] => 'Traditional Band',
BAND_TYPE_VALS[0] => 'Any',
BAND_TYPE_VALS[1] => 'Virtual Band',
BAND_TYPE_VALS[2] => 'Traditional Band',
}
PLAY_COMMIT_VALS = [ANY_VAL_STR,

View File

@ -51,10 +51,11 @@ context.JK.BaseSearchFilter = class BaseSearchFilter
@resultsListContainer.empty()
renderSearchFilter: () =>
$.when(@restGet()).done (sFilter) =>
this.loadSearchFilter(sFilter)
loadSearchFilter: (sFilter) =>
_populateSelectWithKeys: (struct, selection, keys, element) =>
element.children().remove()
$.each keys, (idx, value) =>

View File

@ -2,12 +2,237 @@ $ = 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 = @searchMeta[identifier]['map']
keys = @searchMeta[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
@restPost({ 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()
context.JK.MusicianSearchFilter = class MusicianSearchFilter extends BaseSearchFilter
constructor: () ->
super()
@searchType = 'musician'
@searchTypeS = @searchTypeS+'s'
@searchTypeS = @searchType+'s'
@restGet = @rest.getMusicianSearchFilter
@restPost = @rest.postMusicianSearchFilter
@searchMeta = gon.musician_search_meta
@ -16,8 +241,7 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter extends BaseSearchF
super(app)
renderSearchFilter: () =>
$.when(this.rest.getMusicianSearchFilter()).done (sFilter) =>
this.loadSearchFilter(sFilter)
super()
loadSearchFilter: (sFilter) =>
super(sFilter)