diff --git a/ruby/lib/jam_ruby/models/affiliate_partner.rb b/ruby/lib/jam_ruby/models/affiliate_partner.rb
index c0b67c2d5..db41ddd12 100644
--- a/ruby/lib/jam_ruby/models/affiliate_partner.rb
+++ b/ruby/lib/jam_ruby/models/affiliate_partner.rb
@@ -124,7 +124,7 @@ class JamRuby::AffiliatePartner < ActiveRecord::Base
product_info = shopping_cart.product_info
# subtract the total quantity from the freebie quantity, to see how much we should attribute to them
real_quantity = product_info[:quantity].to_i - product_info[:marked_for_redeem].to_i
- {fee_in_cents: (1.99 * 100 * real_quantity * rate).round}
+ {fee_in_cents: (1.99 * 100 * real_quantity * rate.to_f).round}
else
false
end
diff --git a/web/app/assets/javascripts/react-components/JamTrackAutoComplete.js.jsx.coffee b/web/app/assets/javascripts/react-components/JamTrackAutoComplete.js.jsx.coffee
index f1bf96cc4..a38252509 100644
--- a/web/app/assets/javascripts/react-components/JamTrackAutoComplete.js.jsx.coffee
+++ b/web/app/assets/javascripts/react-components/JamTrackAutoComplete.js.jsx.coffee
@@ -9,6 +9,7 @@ MIX_MODES = context.JK.MIX_MODES
logger: context.JK.logger
+
render: () ->
window.JamTrackSearchInput = '' unless window.JamTrackSearchInput? # can't pass null to react-select
@@ -16,7 +17,7 @@ MIX_MODES = context.JK.MIX_MODES
searchValue = if @state.search == 'SEPARATOR' then '' else window.JamTrackSearchInput
``
+ getDefaultProps: () ->
+ {placeholder:'Search for JamTracks'}
getInitialState: () ->
({search: ''})
diff --git a/web/app/assets/javascripts/react-components/JamTrackLandingScreen.js.jsx.coffee b/web/app/assets/javascripts/react-components/JamTrackLandingScreen.js.jsx.coffee
index fa031dbfc..7c0092dc1 100644
--- a/web/app/assets/javascripts/react-components/JamTrackLandingScreen.js.jsx.coffee
+++ b/web/app/assets/javascripts/react-components/JamTrackLandingScreen.js.jsx.coffee
@@ -7,6 +7,8 @@ rest = context.JK.Rest()
mixins: [Reflux.listenTo(@AppStore,"onAppInit"), Reflux.listenTo(@UserStore, "onUserChanged")]
+ cookieName: 'jamtrack_play_search'
+
getInitialState: () ->
{user: null, purchasedJamTracks: []}
@@ -40,16 +42,21 @@ rest = context.JK.Rest()
for x in [@state.purchasedJamTracks.length...(6 - @state.purchasedJamTracks.length )] by 1
playJamTracks.push `
| |
`
+ if @state.user?.purchased_jamtracks_count > 20
+ autocomplete = `
`
playableJamTracks =
- `
-
-
- | JAMTRACKS |
-
-
- {playJamTracks}
-
-
+ `
+ {autocomplete}
+
+
+
+ | JAMTRACKS |
+
+
+ {playJamTracks}
+
+
+
`
`
@@ -111,6 +118,55 @@ rest = context.JK.Rest()
componentDidMount: () ->
$root = $(@getDOMNode())
+ doPurchasedSearch: (searchQuery) ->
+ if !searchQuery?
+ #searchQuery = $.cookie(@cookieName)
+
+ # and parse that cookie if defined
+ if searchQuery
+ try
+ searchQuery = JSON.parse(searchQuery)
+ catch e
+ searchQuery = {searchType: 'user-input', searchData: ''}
+ logger.error("unable to parse search query: " + e)
+
+
+ # if still no query (after checking cookie and what was specified in function, then default to anything
+ if !searchQuery?
+ searchQuery = {searchType: 'user-input', searchData: ''}
+
+ query = {page:1, per_page:20}
+
+ if searchQuery && searchQuery.searchData && searchQuery.searchData.length > 0 && searchQuery.searchType && searchQuery.searchType.length > 0
+
+ if searchQuery.searchType == 'user-input'
+ query.search = searchQuery.searchData
+ else if searchQuery.searchType == 'artist-select'
+ query.artist_search = searchQuery.searchData
+ else if searchQuery.searchType == 'song-select'
+ query.song_search = searchQuery.searchData
+
+ rest.getPurchasedJamTracks(query)
+ .done((purchasedJamTracks) =>
+ if @redeemedFlow
+ setTimeout((() => @preparePlayJamTrackProd()), 200)
+ @redeemedFlow = false
+ @setState({purchasedJamTracks: purchasedJamTracks.jamtracks})
+ )
+ .fail((jqXHR, textStatus, errorMessage) =>
+ @app.ajaxError(jqXHR, textStatus, errorMessage)
+ )
+
+ searchMyJamTracks: (searchType, searchData) ->
+ searchQuery = {searchType: searchType, searchData: searchData}
+ #$.cookie(@cookieName, JSON.stringify(searchQuery))
+ @doPurchasedSearch(searchQuery)
+
+ searchMyJamTracksByString: (e) ->
+ e.preventDefault()
+
+ @doPurchasedSearch(searchType:'user-input',searchData: window.JamTrackSearchInput)
+
search: (searchType, searchData) ->
context.JamTrackActions.requestSearch(searchType, searchData)
@@ -160,16 +216,7 @@ rest = context.JK.Rest()
onUser:(user) ->
@setState({user: user})
- rest.getPurchasedJamTracks({page:1, per_page:20})
- .done((purchasedJamTracks) =>
- if @redeemedFlow
- @preparePlayJamTrackProd()
- @redeemedFlow = false
- @setState({purchasedJamTracks: purchasedJamTracks.jamtracks})
- )
- .fail((jqXHR, textStatus, errorMessage) =>
- @app.ajaxError(jqXHR, textStatus, errorMessage);
- )
+ @doPurchasedSearch()
# Get artist names and build links
#@rest.getJamTrackArtists({group_artist: true, per_page:100})
diff --git a/web/app/assets/stylesheets/client/jamtrack_landing.css.scss b/web/app/assets/stylesheets/client/jamtrack_landing.css.scss
index 4090b3618..821495362 100644
--- a/web/app/assets/stylesheets/client/jamtrack_landing.css.scss
+++ b/web/app/assets/stylesheets/client/jamtrack_landing.css.scss
@@ -25,14 +25,22 @@
.autocompleter {
width: calc(100% - 90px);
- margin-bottom: 20px;
+
display:inline-block;
}
+ .search-controls {
+ .autocompleter {
+ margin-bottom: 20px;
+ }
+ }
+ .purchased-jam-tracks-holder {
+ margin-top:20px;
+ }
.purchased-jam-tracks {
height:167px;
overflow:auto;
- margin-top:20px;
+ margin-top:10px;
}
.jamtable {