* VRFS-3647 - add search capability to jamtrack page, and VRFS-3676 - poke redeem users

This commit is contained in:
Seth Call 2015-10-22 05:51:49 -05:00
parent d3d9a2db49
commit 0c5dbe2c68
4 changed files with 81 additions and 23 deletions

View File

@ -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

View File

@ -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
`<Select
placeholder="Search for JamTracks"
placeholder={this.props.placeholder}
name="search-field"
asyncOptions={this.getOptions}
autoload={false}
@ -30,6 +31,8 @@ MIX_MODES = context.JK.MIX_MODES
clearable={false}
/>`
getDefaultProps: () ->
{placeholder:'Search for JamTracks'}
getInitialState: () ->
({search: ''})

View File

@ -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 `<tr><td>&nbsp;</td></tr>`
if @state.user?.purchased_jamtracks_count > 20
autocomplete = `<div className="my-autocomplete"><JamTrackAutoComplete placeholder="Search your JamTracks" onSearch={this.searchMyJamTracks} /><button onClick={this.searchMyJamTracksByString} className="search-by-string-btn button-orange ">SEARCH</button></div>`
playableJamTracks =
`<div className="purchased-jam-tracks">
<table className="jamtable" cellspacing="0" cellpadding="0" border="0">
<thead>
<tr><th className="jamtrack-name" align="left">JAMTRACKS</th></tr>
</thead>
<tbody>
{playJamTracks}
</tbody>
</table>
`<div className="purchased-jam-tracks-holder">
{autocomplete}
<div className="purchased-jam-tracks">
<table className="jamtable" cellspacing="0" cellpadding="0" border="0">
<thead>
<tr><th className="jamtrack-name" align="left">JAMTRACKS</th></tr>
</thead>
<tbody>
{playJamTracks}
</tbody>
</table>
</div>
</div>`
`<div className="content-body-scroller">
@ -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})

View File

@ -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 {