VRFS-2795 search filter front end start
This commit is contained in:
parent
bfd3f3fac6
commit
0e9f78ccdd
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -60,4 +60,9 @@ class SpikesController < ApplicationController
|
|||
def recording_source
|
||||
render :layout => 'web'
|
||||
end
|
||||
|
||||
def musician_search_filter
|
||||
render :layout => 'web'
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
});
|
||||
|
|
@ -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'
|
||||
|
|
|
|||
Loading…
Reference in New Issue