From e794ccc7af875c028b6accbbcd66fd939a9cb35b Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Tue, 19 May 2015 05:48:29 +0000 Subject: [PATCH] VRFS-3036 bands to_join builder controls --- ruby/lib/jam_ruby/models/band_search.rb | 8 +- web/Gemfile | 2 +- .../member_search_filter.js.coffee | 92 +++++++++++-------- web/app/views/api_search/index.rabl | 25 ++--- .../views/spikes/band_search_filter.html.slim | 6 +- 5 files changed, 71 insertions(+), 62 deletions(-) diff --git a/ruby/lib/jam_ruby/models/band_search.rb b/ruby/lib/jam_ruby/models/band_search.rb index 0dae6a088..c7a6c64dd 100644 --- a/ruby/lib/jam_ruby/models/band_search.rb +++ b/ruby/lib/jam_ruby/models/band_search.rb @@ -88,8 +88,14 @@ module JamRuby def self.search_filter_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 = { - 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]], { keys: HIRE_SORT_VALS, map: HIRE_SORT_ORDERS }), } diff --git a/web/Gemfile b/web/Gemfile index c06ceac7d..d0c2911fe 100644 --- a/web/Gemfile +++ b/web/Gemfile @@ -102,7 +102,7 @@ group :development, :test do # gem 'teaspoon' # gem 'teaspoon-jasmine' - # gem 'puma' + gem 'puma' end group :unix do gem 'therubyracer' #, '0.11.0beta8' diff --git a/web/app/assets/javascripts/member_search_filter.js.coffee b/web/app/assets/javascripts/member_search_filter.js.coffee index e8c82727e..06199b524 100644 --- a/web/app/assets/javascripts/member_search_filter.js.coffee +++ b/web/app/assets/javascripts/member_search_filter.js.coffee @@ -47,6 +47,9 @@ context.JK.BaseSearchFilter = class BaseSearchFilter searchMetaData: () => @searchMeta + filterData: () => + @searchFilter.data_blob + renderSearchFilter: () => $.when(@restGet()).done (sFilter) => this.loadSearchFilter(sFilter) @@ -68,7 +71,7 @@ context.JK.BaseSearchFilter = class BaseSearchFilter elem = $ '#'+@searchType+'-search-filter-builder select[name='+identifier+']' struct = this.searchMetaData()[identifier]['map'] keys = this.searchMetaData()[identifier]['keys'] - this._populateSelectWithKeys(struct, @searchFilter[identifier], keys, elem) + this._populateSelectWithKeys(struct, this.filterData()[identifier], keys, elem) _populateSelectWithInt: (sourceStruct, selection, element) => struct = @@ -79,14 +82,22 @@ context.JK.BaseSearchFilter = class BaseSearchFilter _populateSortOrder: () => 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: () => @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) -> + if 0 < this.filterData().genres.length + genreMatch = $.grep(this.filterData().genres, (n, i) -> n == genre.id) else genreMatch = [] @@ -104,8 +115,8 @@ context.JK.BaseSearchFilter = class BaseSearchFilter 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) -> + if 0 < this.filterData().instruments.length + instMatch = $.grep(this.filterData().instruments, (inst, i) -> yn = inst.instrument_id == instrument.id proficiency = inst.proficiency_level if yn yn) @@ -179,10 +190,10 @@ context.JK.BaseSearchFilter = class BaseSearchFilter performSearch: () => if this.willSearch(true) $.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) => - @searchFilter[key] = this._builderSelectMultiValue(key) - @restPost({ filter: JSON.stringify(@searchFilter), page: @pageNumber }).done(this.didSearch) + this.filterData()[key] = this._builderSelectMultiValue(key) + @restPost({ filter: JSON.stringify(this.filterData()), page: @pageNumber }).done(this.didSearch) renderResultsHeader: () => @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) @screen.find('.paginate-wait').show() @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 false @@ -255,10 +266,10 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter extends BaseSearchF @searchFilter = JSON.parse(sFilter) args = - interests: @searchFilter.data_blob.interests - skill_level: @searchFilter.data_blob.skill_level - studio_sessions: @searchFilter.data_blob.studio_sessions - concert_gigs: @searchFilter.data_blob.concert_gigs + interests: this.filterData().interests + skill_level: this.filterData().skill_level + studio_sessions: this.filterData().studio_sessions + concert_gigs: this.filterData().concert_gigs template = context.JK.fillTemplate(@screen.find('#template-musician-search-filter').html(), args) @@ -288,15 +299,7 @@ context.JK.MusicianSearchFilter = class MusicianSearchFilter extends BaseSearchF _populateStudio: () => elem = $ '#musician-search-filter-builder select[name=studio_sessions]' - this._populateSelectWithInt(@profileUtils.studioMap, @searchFilter.data_blob.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) + this._populateSelectWithInt(@profileUtils.studioMap, this.filterData().studio_sessions.toString(), elem) _populateAges: () => @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() selected = '' ageLabel = ages_map[key] - if 0 < @searchFilter.data_blob.ages.length + if 0 < this.filterData().ages.length key_val = key.toString() - ageMatch = $.grep(@searchFilter.data_blob.ages, (n, i) -> + ageMatch = $.grep(this.filterData().ages, (n, i) -> n == key_val) selected = 'checked' if ageMatch.length > 0 ageHtml = context.JK.fillTemplate(ageTemplate, @@ -534,19 +537,19 @@ context.JK.BandSearchFilter = class BandSearchFilter extends BaseSearchFilter _searchFilterArgsToJoin: () => args = - tour_option: @searchFilter.data_blob.tour_option - skill_level: @searchFilter.data_blob.skill_level - play_commit: @searchFilter.data_blob.play_commit - band_type: @searchFilter.data_blob.band_type - concert_gigs: @searchFilter.data_blob.concert_gigs + tour_option: this.filterData().tour_option + skill_level: this.filterData().skill_level + play_commit: this.filterData().play_commit + band_type: this.filterData().band_type + concert_gigs: this.filterData().concert_gigs _searchFilterArgsToHire: () => args = - skill_level: @searchFilter.data_blob.skill_level - concert_gigs: @searchFilter.data_blob.concert_gigs - perform_samples: @searchFilter.data_blob.perform_samples - max_cost: @searchFilter.data_blob.max_cost - free_gigs: @searchFilter.data_blob.free_gigs + skill_level: this.filterData().skill_level + concert_gigs: this.filterData().concert_gigs + perform_samples: this.filterData().perform_samples + max_cost: this.filterData().max_cost + free_gigs: this.filterData().free_gigs _populateSearchFilterToJoin: () => this._populateInstruments() @@ -563,8 +566,8 @@ context.JK.BandSearchFilter = class BandSearchFilter extends BaseSearchFilter @searchFilter = JSON.parse(sFilter) switch @searchSubType - when 'to_join' then args = _searchFilterArgsToJoin() - when 'to_hire' then args = _searchFilterArgsToHire() + when 'to_join' then args = this._searchFilterArgsToJoin() + when 'to_hire' then args = this._searchFilterArgsToHire() 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() switch @searchSubType - when 'to_join' then _populateSearchFilterToJoin() - when 'to_hire' then _populateSearchFilterToHire() + when 'to_join' then this._populateSearchFilterToJoin() + when 'to_hire' then this._populateSearchFilterToHire() + + _populateBandType: () => + this._populateSelectIdentifier('band_type') + + _populatePlayCommit: () => + this._populateSelectIdentifier('play_commit') + + _populateTourOption: () => + this._populateSelectIdentifier('tour_option') _populateSortOrder: () => this._populateSelectIdentifier('sort_order') @@ -642,3 +654,7 @@ context.JK.BandSearchFilter = class BandSearchFilter extends BaseSearchFilter registerResultsPagination: () => super() + + filterData: () => + super()[@searchSubType] + diff --git a/web/app/views/api_search/index.rabl b/web/app/views/api_search/index.rabl index 14a00b499..d35bfcb3b 100644 --- a/web/app/views/api_search/index.rabl +++ b/web/app/views/api_search/index.rabl @@ -1,8 +1,6 @@ object @search -node :search_type do |ss| ss.search_type end - -if @search.is_a?(MusicianSearch) +if @search.is_a?(BaseSearch) node :page_count do |foo| @search.page_count @@ -19,7 +17,8 @@ if @search.is_a?(MusicianSearch) node :filter_json do |foo| @search.to_json end - + + if @search.is_a? MusicianSearch child(:results => :musicians) { 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) - node :page_count do |foo| - @search.page_count - end - child(:results => :bands) { 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 attributes :genre_id, :description 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 +node :search_type do |ss| ss.search_type end + if @search.session_invite_search? child(:results => :suggestions) { node :value do |uu| uu.name end diff --git a/web/app/views/spikes/band_search_filter.html.slim b/web/app/views/spikes/band_search_filter.html.slim index 9dff2e51e..a98478205 100644 --- a/web/app/views/spikes/band_search_filter.html.slim +++ b/web/app/views/spikes/band_search_filter.html.slim @@ -1,15 +1,15 @@ = javascript_include_tag "profile_utils" = javascript_include_tag "member_search_filter" = stylesheet_link_tag "client/band" -#band_search_spike -= render "clients/band_search_filter" +#bands-screen + = render "clients/band_search_filter" javascript: var initialized = false; $(document).on('JAMKAZAM_READY', function(e, data) { setTimeout(function() { window.band_search_filter = new JK.BandSearchFilter(); - band_search_filter.init(); + band_search_filter.init(data.app); band_search_filter.afterShow(); }, 1) });