VRFS-2795 search filter front end start

This commit is contained in:
Jonathan Kolyer 2015-03-02 09:41:53 +00:00
parent bfd3f3fac6
commit 0e9f78ccdd
8 changed files with 170 additions and 1 deletions

View File

@ -92,6 +92,13 @@ module JamRuby
KEY_AGES => [AGE_COUNTS[0]]
}
def self.user_search_filter(user)
unless ms = user.musician_search
ms = self.create_search(user)
end
ms.json
end
def self.create_search(user)
ms = self.new
ms.user = user
@ -219,10 +226,15 @@ module JamRuby
rel = self._skills(rel)
rel = self._instruments(rel)
rel = self._interests(rel)
rel, page = self.pagination(rel, params)
rel
end
def search_results_page(params={})
rel = do_search(params)
rel, page = self.pagination(rel, params)
rel.to_json
end
end
end

View File

@ -1577,6 +1577,17 @@
});
}
function getMusicianSearchFilter() {
return $.get("/api/search/musicians.json");
}
function postMusicianSearchFilter(query) {
return $.ajax({
type: "POST",
url: "/api/search/musicians.json?" + $.param(query)
});
}
function getMount(options) {
var id = getId(options);
return $.ajax({
@ -1760,6 +1771,8 @@
this.validateUrlSite = validateUrlSite;
this.markRecordedBackingTrackSilent = markRecordedBackingTrackSilent;
this.addRecordingTimeline = addRecordingTimeline;
this.getMusicianSearchFilter = getMusicianSearchFilter;
this.postMusicianSearchFilter = postMusicianSearchFilter;
return this;
};

View File

@ -0,0 +1,61 @@
$ = jQuery
context = window
context.JK ||= {};
context.JK.MusicianSearchFilter = class MusicianSearchFilter
constructor: (app) ->
@rest = context.JK.Rest()
@logger = context.JK.logger
@userId = null
@searchFilter = null
init: () =>
@screenBindings = { 'beforeShow': this.beforeShow, 'afterShow': this.afterShow }
renderSearchFilter: () =>
@logger.debug("*** renderSearchFilter: ")
$.when(this.rest.getMusicianSearchFilter()).done (sFilter) =>
this.loadSearchFilter(sFilter)
beforeShow: (data) =>
userId = data.id
afterShow: () =>
this.renderSearchFilter()
loadSearchFilter: (sFilter) =>
@searchFilter = sFilter
args =
interests: @searchFilter.interests
status: @searchFilter.skill_level
studio_sessions: @searchFilter.studio_session_count
concert_gigs: @searchFilter.gig_count
template = context.JK.fillTemplate($('#template-musician-search-filter').html(), args)
content_root = $('#musician-search-filter-builder')
content_root.html template
this.loadGenres()
this.loadInstruments()
loadInstruments: () =>
loadGenres: () =>
$('#search-filter-genres').empty()
@rest.getGenres().done (genres) =>
$.each genres, (index, genre) =>
genreTemplate = $('#template-search-filter-setup-genres').html()
selected = ''
if 0 < @searchFilter.genres.length
genreMatch = $.grep(@searchFilter.genres, (n, i) ->
n.id == genre.id
)
if genreMatch.length > 0
selected = 'checked'
genreHtml = context.JK.fillTemplate(genreTemplate,
id: genre.id
description: genre.description
checked: selected)
$('#search-filter-genres').append genreHtml

View File

@ -21,4 +21,15 @@ class ApiSearchController < ApiController
@search = Search.text_search(params, current_user)
end
end
def musicians
if request.get?
render :json => MusicianSearch.user_search_filter(current_user), :status => 200
elsif request.post?
ms = MusicianSearch.user_search_filter(current_user)
render :json => ms.json_search_results(params), :status => 200
end
end
end

View File

@ -60,4 +60,9 @@ class SpikesController < ApplicationController
def recording_source
render :layout => 'web'
end
def musician_search_filter
render :layout => 'web'
end
end

View File

@ -0,0 +1,51 @@
div#musician-search-filter-builder
script#template-musician-search-filter type="text/template"
.field
label Interests:
select.w80 disabled="disabled" name="interests"
option selected="selected" value="{interests}" {interests)
.field
label Status:
select.w80 disabled="disabled" name="status"
option selected="selected" value="{status}" {status)
.field
label Studio Sessions Played:
select.w80 disabled="disabled" name="studio_sessions"
option selected="selected" value="{studio_sessions}" {studio_sessions)
.field
label Concert Gigs Played:
select.w80 disabled="disabled" name="concert_gigs"
option selected="selected" value="{concert_gigs}" {concert_gigs)
.field
| What instruments can you play?
.profile-instrumentlist.w90
table.instrument_selector cellpadding="0" cellspacing="6" width="100%"
.field
label for="search-filter-genres" Genres:
.search-filter-setup-genres
table#search-filter-genres cellpadding="10" cellspacing="6" width="100%"
.field
label for="filter-ages" Ages:
.filter-setup-ages
table#filter-ages cellpadding="10" cellspacing="6" width="100%"
script#musician-search-filter-instrument type="text/template"
tr data-instrument-id="{id}"
td <input type="checkbox" checked} />{description
td align="right" width="50%"
select.proficiency_selector name="proficiency"
option value="1" Beginner
option value="2" Intermediate
option value="3" Expert
script#template-search-filter-setup-genres type="text/template"
tr
td <input value=" id}" {checked} type="checkbox" />{description

View File

@ -0,0 +1,14 @@
= javascript_include_tag "musician_search_filter"
= stylesheet_link_tag "client/musician"
#musician_search_spike
= render "clients/musician_search_filter"
javascript:
var initialized = false;
$(document).on('JAMKAZAM_READY', function(e, data) {
setTimeout(function() {
window.musician_search_filter = new JK.MusicianSearchFilter();
musician_search_filter.init();
musician_search_filter.afterShow();
}, 1)
});

View File

@ -97,6 +97,7 @@ SampleApp::Application.routes.draw do
match '/widgets/download_jam_track', to: 'spikes#download_jam_track'
match '/site_validate', to: 'spikes#site_validate'
match '/recording_source', to: 'spikes#recording_source'
match '/musician_search_filter', to: 'spikes#musician_search_filter'
# junk pages
match '/help', to: 'static_pages#help'
@ -429,6 +430,7 @@ SampleApp::Application.routes.draw do
# search
match '/search' => 'api_search#index', :via => :get
match '/search/musicians' => 'api_search#musicians', :via => [:get, :post]
# join requests
match '/join_requests/:id' => 'api_join_requests#show', :via => :get, :as => 'api_join_request_detail'