136 lines
3.8 KiB
CoffeeScript
136 lines
3.8 KiB
CoffeeScript
context = window
|
|
MIX_MODES = context.JK.MIX_MODES
|
|
AppStore = context.AppStore
|
|
|
|
SessionsActions = @SessionsActions
|
|
|
|
@FindSessionScreen = React.createClass({
|
|
|
|
mixins: [Reflux.listenTo(@AppStore, "onAppInit"), Reflux.listenTo(@UserStore, "onUserChanged")]
|
|
|
|
LIMIT: 20
|
|
instrument_logo_map: context.JK.getInstrumentIconMap24()
|
|
|
|
getInitialState: () ->
|
|
{activeTab: '', search: '', type: 'user-input', screenActive: false}
|
|
|
|
|
|
generateProperties: (tab) ->
|
|
properties = {}
|
|
properties['active'] = @state.activeTab == tab
|
|
properties
|
|
|
|
generateTabClasses: (tab) ->
|
|
classes = {}
|
|
classes['find-tab'] = true
|
|
classes[tab] = true
|
|
|
|
if @state.activeTab == tab
|
|
classes['active'] = true
|
|
|
|
classNames(classes)
|
|
|
|
tabActivate: (tab) ->
|
|
@setState({activeTab: tab})
|
|
|
|
render: () ->
|
|
|
|
myTabClasses = @generateTabClasses('my')
|
|
openTabClasses = @generateTabClasses('open')
|
|
upcomingTabClasses = @generateTabClasses('upcoming')
|
|
|
|
myProperties = @generateProperties('my')
|
|
openProperties = @generateProperties('open')
|
|
upcomingProperties = @generateProperties('upcoming')
|
|
|
|
search = ''
|
|
|
|
`<div className="FindSessionScreen">
|
|
<form id="find-session-form">
|
|
<div className="session-filter">
|
|
<div style={{minWidth:'770px'}}>
|
|
<div className="tabs">
|
|
<a className={myTabClasses} onClick={this.tabActivate.bind(this, 'my')}>
|
|
For Me
|
|
</a>
|
|
|
|
<a className={openTabClasses} onClick={this.tabActivate.bind(this, 'open')}>
|
|
Open Jams
|
|
</a>
|
|
|
|
<a className={upcomingTabClasses} onClick={this.tabActivate.bind(this, 'upcoming')}>
|
|
Upcoming
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
<FindSessionOpen mode='my' active={myProperties.active} screenActive={this.state.screenActive}/>
|
|
<FindSessionOpen mode='open' active={openProperties.active} screenActive={this.state.screenActive} />
|
|
<FindSessionOpen mode='upcoming' active={upcomingProperties.active} screenActive={this.state.screenActive} />
|
|
</div>`
|
|
|
|
|
|
|
|
componentDidMount: () ->
|
|
return
|
|
|
|
componentDidUpdate: (prevProps, prevState) ->
|
|
return
|
|
|
|
beforeShow: () ->
|
|
@initCustomUrlScheme()
|
|
return
|
|
|
|
ensuredCallback: (sessionId) ->
|
|
context.JK.SessionUtils.joinSession(sessionId)
|
|
|
|
joinSession: (sessionId) ->
|
|
context.JK.SessionUtils.ensureValidClient(AppStore.app, context.JK.GearUtils, @ensuredCallback.bind(this, sessionId))
|
|
|
|
initCustomUrlScheme: () ->
|
|
hash = decodeURIComponent(context.location.hash)
|
|
qStr = hash.substring(hash.lastIndexOf('/') + 1)
|
|
qParamsArr = qStr.split('|')
|
|
isCustom = undefined
|
|
sessionId = undefined
|
|
qParamsArr.forEach (q) ->
|
|
qp = q.split('~')
|
|
if qp[0] == 'custom'
|
|
isCustom = qp[1]
|
|
if qp[0] == 'joinSessionId'
|
|
sessionId = qp[1]
|
|
if !isCustom || isCustom != 'yes'
|
|
return
|
|
unless sessionId
|
|
return
|
|
@joinSession(sessionId)
|
|
|
|
afterShow: () ->
|
|
SessionsActions.watching.trigger(true)
|
|
|
|
if @state.activeTab == ''
|
|
@setState({activeTab: 'my'})
|
|
|
|
@setState({screenActive:true})
|
|
beforeHide: () ->
|
|
SessionsActions.watching.trigger(false)
|
|
SessionsActions.resetSessions.trigger()
|
|
@setState({screenActive:false})
|
|
|
|
onAppInit: (@app) ->
|
|
@EVENTS = context.JK.EVENTS
|
|
@rest = context.JK.Rest()
|
|
@logger = context.JK.logger
|
|
|
|
screenBindings =
|
|
'beforeShow': @beforeShow
|
|
'afterShow': @afterShow
|
|
'beforeHide': @beforeHide
|
|
|
|
@app.bindScreen('findSession', screenBindings)
|
|
|
|
onUserChanged: (userState) ->
|
|
@user = userState?.user
|
|
}) |