VRFS-3036 bands to_join builder controls

This commit is contained in:
Jonathan Kolyer 2015-05-19 05:48:29 +00:00
parent d76f54b40e
commit e794ccc7af
5 changed files with 71 additions and 62 deletions

View File

@ -88,8 +88,14 @@ module JamRuby
def self.search_filter_meta def self.search_filter_meta
return @@search_meta if @@search_meta return @@search_meta if @@search_meta
toJoinMeta = super(self.json_schema[BAND_SEARCH_TYPE_VALS[0]])
toJoinMeta.merge!({
KEY_BAND_TYPE => { keys: BAND_TYPE_VALS, map: BAND_TYPES },
KEY_PLAY_COMMIT => { keys: PLAY_COMMIT_VALS, map: PLAY_COMMITS },
KEY_TOUR_OPTION => { keys: TOUR_OPTION_VALS, map: TOUR_OPTIONS }
})
@@search_meta = { @@search_meta = {
BAND_SEARCH_TYPE_VALS[0] => super(self.json_schema[BAND_SEARCH_TYPE_VALS[0]]), BAND_SEARCH_TYPE_VALS[0] => toJoinMeta,
BAND_SEARCH_TYPE_VALS[1] => super(self.json_schema[BAND_SEARCH_TYPE_VALS[1]], BAND_SEARCH_TYPE_VALS[1] => super(self.json_schema[BAND_SEARCH_TYPE_VALS[1]],
{ keys: HIRE_SORT_VALS, map: HIRE_SORT_ORDERS }), { keys: HIRE_SORT_VALS, map: HIRE_SORT_ORDERS }),
} }

View File

@ -102,7 +102,7 @@ group :development, :test do
# gem 'teaspoon' # gem 'teaspoon'
# gem 'teaspoon-jasmine' # gem 'teaspoon-jasmine'
# gem 'puma' gem 'puma'
end end
group :unix do group :unix do
gem 'therubyracer' #, '0.11.0beta8' gem 'therubyracer' #, '0.11.0beta8'

View File

@ -47,6 +47,9 @@ context.JK.BaseSearchFilter = class BaseSearchFilter
searchMetaData: () => searchMetaData: () =>
@searchMeta @searchMeta
filterData: () =>
@searchFilter.data_blob
renderSearchFilter: () => renderSearchFilter: () =>
$.when(@restGet()).done (sFilter) => $.when(@restGet()).done (sFilter) =>
this.loadSearchFilter(sFilter) this.loadSearchFilter(sFilter)
@ -68,7 +71,7 @@ context.JK.BaseSearchFilter = class BaseSearchFilter
elem = $ '#'+@searchType+'-search-filter-builder select[name='+identifier+']' elem = $ '#'+@searchType+'-search-filter-builder select[name='+identifier+']'
struct = this.searchMetaData()[identifier]['map'] struct = this.searchMetaData()[identifier]['map']
keys = this.searchMetaData()[identifier]['keys'] keys = this.searchMetaData()[identifier]['keys']
this._populateSelectWithKeys(struct, @searchFilter[identifier], keys, elem) this._populateSelectWithKeys(struct, this.filterData()[identifier], keys, elem)
_populateSelectWithInt: (sourceStruct, selection, element) => _populateSelectWithInt: (sourceStruct, selection, element) =>
struct = struct =
@ -79,14 +82,22 @@ context.JK.BaseSearchFilter = class BaseSearchFilter
_populateSortOrder: () => _populateSortOrder: () =>
this._populateSelectIdentifier('sort_order') this._populateSelectIdentifier('sort_order')
_populateSkill: () =>
elem = $ '#musician-search-filter-builder select[name=skill_level]'
this._populateSelectWithInt(@profileUtils.skillLevelMap, this.filterData().skill_level.toString(), elem)
_populateGigs: () =>
elem = $ '#musician-search-filter-builder select[name=concert_gigs]'
this._populateSelectWithInt(@profileUtils.gigMap, this.filterData().concert_gigs.toString(), elem)
_populateGenres: () => _populateGenres: () =>
@screen.find('#search-filter-genres').empty() @screen.find('#search-filter-genres').empty()
@rest.getGenres().done (genres) => @rest.getGenres().done (genres) =>
genreTemplate = @screen.find('#template-search-filter-setup-genres').html() genreTemplate = @screen.find('#template-search-filter-setup-genres').html()
selected = '' selected = ''
$.each genres, (index, genre) => $.each genres, (index, genre) =>
if 0 < @searchFilter.data_blob.genres.length if 0 < this.filterData().genres.length
genreMatch = $.grep(@searchFilter.data_blob.genres, (n, i) -> genreMatch = $.grep(this.filterData().genres, (n, i) ->
n == genre.id) n == genre.id)
else else
genreMatch = [] genreMatch = []
@ -104,8 +115,8 @@ context.JK.BaseSearchFilter = class BaseSearchFilter
instrumentTemplate = @screen.find('#template-search-filter-setup-instrument').html() instrumentTemplate = @screen.find('#template-search-filter-setup-instrument').html()
selected = '' selected = ''
proficiency = '1' proficiency = '1'
if 0 < @searchFilter.data_blob.instruments.length if 0 < this.filterData().instruments.length
instMatch = $.grep(@searchFilter.data_blob.instruments, (inst, i) -> instMatch = $.grep(this.filterData().instruments, (inst, i) ->
yn = inst.instrument_id == instrument.id yn = inst.instrument_id == instrument.id
proficiency = inst.proficiency_level if yn proficiency = inst.proficiency_level if yn
yn) yn)
@ -179,10 +190,10 @@ context.JK.BaseSearchFilter = class BaseSearchFilter
performSearch: () => performSearch: () =>
if this.willSearch(true) if this.willSearch(true)
$.each this.searchMetaData().filter_keys.single, (index, key) => $.each this.searchMetaData().filter_keys.single, (index, key) =>
@searchFilter[key] = this._builderSelectValue(key) this.filterData()[key] = this._builderSelectValue(key)
$.each this.searchMetaData().filter_keys.multi, (index, key) => $.each this.searchMetaData().filter_keys.multi, (index, key) =>
@searchFilter[key] = this._builderSelectMultiValue(key) this.filterData()[key] = this._builderSelectMultiValue(key)
@restPost({ filter: JSON.stringify(@searchFilter), page: @pageNumber }).done(this.didSearch) @restPost({ filter: JSON.stringify(this.filterData()), page: @pageNumber }).done(this.didSearch)
renderResultsHeader: () => renderResultsHeader: () =>
@screen.find('#'+@searchType+'-search-filter-description').html(@searchResults.description) @screen.find('#'+@searchType+'-search-filter-description').html(@searchResults.description)
@ -210,7 +221,7 @@ context.JK.BaseSearchFilter = class BaseSearchFilter
if @pageNumber < @searchResults.page_count && this.willSearch(false) if @pageNumber < @searchResults.page_count && this.willSearch(false)
@screen.find('.paginate-wait').show() @screen.find('.paginate-wait').show()
@pageNumber += 1 @pageNumber += 1
@restPost({ filter: JSON.stringify(@searchFilter), page: @pageNumber }).done(this.didSearch) @restPost({ filter: JSON.stringify(this.filterData()), page: @pageNumber }).done(this.didSearch)
return true return true
false false
@ -255,10 +266,10 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter extends BaseSearchF
@searchFilter = JSON.parse(sFilter) @searchFilter = JSON.parse(sFilter)
args = args =
interests: @searchFilter.data_blob.interests interests: this.filterData().interests
skill_level: @searchFilter.data_blob.skill_level skill_level: this.filterData().skill_level
studio_sessions: @searchFilter.data_blob.studio_sessions studio_sessions: this.filterData().studio_sessions
concert_gigs: @searchFilter.data_blob.concert_gigs concert_gigs: this.filterData().concert_gigs
template = context.JK.fillTemplate(@screen.find('#template-musician-search-filter').html(), args) template = context.JK.fillTemplate(@screen.find('#template-musician-search-filter').html(), args)
@ -288,15 +299,7 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter extends BaseSearchF
_populateStudio: () => _populateStudio: () =>
elem = $ '#musician-search-filter-builder select[name=studio_sessions]' elem = $ '#musician-search-filter-builder select[name=studio_sessions]'
this._populateSelectWithInt(@profileUtils.studioMap, @searchFilter.data_blob.studio_sessions.toString(), elem) this._populateSelectWithInt(@profileUtils.studioMap, this.filterData().studio_sessions.toString(), elem)
_populateGigs: () =>
elem = $ '#musician-search-filter-builder select[name=concert_gigs]'
this._populateSelectWithInt(@profileUtils.gigMap, @searchFilter.data_blob.concert_gigs.toString(), elem)
_populateSkill: () =>
elem = $ '#musician-search-filter-builder select[name=skill_level]'
this._populateSelectWithInt(@profileUtils.skillLevelMap, @searchFilter.data_blob.skill_level.toString(), elem)
_populateAges: () => _populateAges: () =>
@screen.find('#search-filter-ages').empty() @screen.find('#search-filter-ages').empty()
@ -305,9 +308,9 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter extends BaseSearchF
ageTemplate = @screen.find('#template-search-filter-setup-ages').html() ageTemplate = @screen.find('#template-search-filter-setup-ages').html()
selected = '' selected = ''
ageLabel = ages_map[key] ageLabel = ages_map[key]
if 0 < @searchFilter.data_blob.ages.length if 0 < this.filterData().ages.length
key_val = key.toString() key_val = key.toString()
ageMatch = $.grep(@searchFilter.data_blob.ages, (n, i) -> ageMatch = $.grep(this.filterData().ages, (n, i) ->
n == key_val) n == key_val)
selected = 'checked' if ageMatch.length > 0 selected = 'checked' if ageMatch.length > 0
ageHtml = context.JK.fillTemplate(ageTemplate, ageHtml = context.JK.fillTemplate(ageTemplate,
@ -534,19 +537,19 @@ context.JK.BandSearchFilter = class BandSearchFilter extends BaseSearchFilter
_searchFilterArgsToJoin: () => _searchFilterArgsToJoin: () =>
args = args =
tour_option: @searchFilter.data_blob.tour_option tour_option: this.filterData().tour_option
skill_level: @searchFilter.data_blob.skill_level skill_level: this.filterData().skill_level
play_commit: @searchFilter.data_blob.play_commit play_commit: this.filterData().play_commit
band_type: @searchFilter.data_blob.band_type band_type: this.filterData().band_type
concert_gigs: @searchFilter.data_blob.concert_gigs concert_gigs: this.filterData().concert_gigs
_searchFilterArgsToHire: () => _searchFilterArgsToHire: () =>
args = args =
skill_level: @searchFilter.data_blob.skill_level skill_level: this.filterData().skill_level
concert_gigs: @searchFilter.data_blob.concert_gigs concert_gigs: this.filterData().concert_gigs
perform_samples: @searchFilter.data_blob.perform_samples perform_samples: this.filterData().perform_samples
max_cost: @searchFilter.data_blob.max_cost max_cost: this.filterData().max_cost
free_gigs: @searchFilter.data_blob.free_gigs free_gigs: this.filterData().free_gigs
_populateSearchFilterToJoin: () => _populateSearchFilterToJoin: () =>
this._populateInstruments() this._populateInstruments()
@ -563,8 +566,8 @@ context.JK.BandSearchFilter = class BandSearchFilter extends BaseSearchFilter
@searchFilter = JSON.parse(sFilter) @searchFilter = JSON.parse(sFilter)
switch @searchSubType switch @searchSubType
when 'to_join' then args = _searchFilterArgsToJoin() when 'to_join' then args = this._searchFilterArgsToJoin()
when 'to_hire' then args = _searchFilterArgsToHire() when 'to_hire' then args = this._searchFilterArgsToHire()
template = context.JK.fillTemplate(@screen.find('#template-band-search-filter-'+@searchSubType).html(), args) template = context.JK.fillTemplate(@screen.find('#template-band-search-filter-'+@searchSubType).html(), args)
@ -581,8 +584,17 @@ context.JK.BandSearchFilter = class BandSearchFilter extends BaseSearchFilter
this._populateSortOrder() this._populateSortOrder()
switch @searchSubType switch @searchSubType
when 'to_join' then _populateSearchFilterToJoin() when 'to_join' then this._populateSearchFilterToJoin()
when 'to_hire' then _populateSearchFilterToHire() when 'to_hire' then this._populateSearchFilterToHire()
_populateBandType: () =>
this._populateSelectIdentifier('band_type')
_populatePlayCommit: () =>
this._populateSelectIdentifier('play_commit')
_populateTourOption: () =>
this._populateSelectIdentifier('tour_option')
_populateSortOrder: () => _populateSortOrder: () =>
this._populateSelectIdentifier('sort_order') this._populateSelectIdentifier('sort_order')
@ -642,3 +654,7 @@ context.JK.BandSearchFilter = class BandSearchFilter extends BaseSearchFilter
registerResultsPagination: () => registerResultsPagination: () =>
super() super()
filterData: () =>
super()[@searchSubType]

View File

@ -1,8 +1,6 @@
object @search object @search
node :search_type do |ss| ss.search_type end if @search.is_a?(BaseSearch)
if @search.is_a?(MusicianSearch)
node :page_count do |foo| node :page_count do |foo|
@search.page_count @search.page_count
@ -19,7 +17,8 @@ if @search.is_a?(MusicianSearch)
node :filter_json do |foo| node :filter_json do |foo|
@search.to_json @search.to_json
end end
if @search.is_a? MusicianSearch
child(:results => :musicians) { child(:results => :musicians) {
attributes :id, :first_name, :last_name, :name, :city, :state, :country, :online, :musician, :photo_url, :biography, :regionname, :score, :full_score attributes :id, :first_name, :last_name, :name, :city, :state, :country, :online, :musician, :photo_url, :biography, :regionname, :score, :full_score
@ -61,10 +60,6 @@ if @search.is_a?(MusicianSearch)
elsif @search.is_a?(BandSearch) elsif @search.is_a?(BandSearch)
node :page_count do |foo|
@search.page_count
end
child(:results => :bands) { child(:results => :bands) {
attributes :id, :name, :city, :state, :country, :photo_url, :biography, :logo_url, :website attributes :id, :name, :city, :state, :country, :photo_url, :biography, :logo_url, :website
@ -79,21 +74,13 @@ elsif @search.is_a?(BandSearch)
child :genres => :genres do child :genres => :genres do
attributes :genre_id, :description attributes :genre_id, :description
end end
child :users => :players do |pl|
node :user_id do |uu| uu.id end
node :photo_url do |uu| uu.photo_url end
node :name do |uu| uu.name end
node :instruments do |uu| uu.instruments.map(&:id).join(',') end
end
node :follow_count do |band| @search.follow_count(band) end
node :recording_count do |band| @search.record_count(band) end
node :session_count do |band| @search.session_count(band) end
} }
end
else else
node :search_type do |ss| ss.search_type end
if @search.session_invite_search? if @search.session_invite_search?
child(:results => :suggestions) { child(:results => :suggestions) {
node :value do |uu| uu.name end node :value do |uu| uu.name end

View File

@ -1,15 +1,15 @@
= javascript_include_tag "profile_utils" = javascript_include_tag "profile_utils"
= javascript_include_tag "member_search_filter" = javascript_include_tag "member_search_filter"
= stylesheet_link_tag "client/band" = stylesheet_link_tag "client/band"
#band_search_spike #bands-screen
= render "clients/band_search_filter" = render "clients/band_search_filter"
javascript: javascript:
var initialized = false; var initialized = false;
$(document).on('JAMKAZAM_READY', function(e, data) { $(document).on('JAMKAZAM_READY', function(e, data) {
setTimeout(function() { setTimeout(function() {
window.band_search_filter = new JK.BandSearchFilter(); window.band_search_filter = new JK.BandSearchFilter();
band_search_filter.init(); band_search_filter.init(data.app);
band_search_filter.afterShow(); band_search_filter.afterShow();
}, 1) }, 1)
}); });