2015-10-01 10:22:23 +00:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
var App = React.createClass({
|
|
|
|
getDefaultProps() {
|
|
|
|
return {
|
|
|
|
gather: {
|
|
|
|
gatherers: []
|
|
|
|
},
|
|
|
|
users: [],
|
2015-10-02 14:53:11 +00:00
|
|
|
messages: [],
|
|
|
|
maps: [],
|
|
|
|
servers: [],
|
|
|
|
archive: [],
|
|
|
|
soundController: null
|
2015-10-01 10:22:23 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2015-10-03 22:39:51 +00:00
|
|
|
updateTitle() {
|
|
|
|
let gather = this.props.gather;
|
|
|
|
if (gather) {
|
|
|
|
document.title = `NSL Gathers (${gather.gatherers.length}/12)`;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2015-10-02 17:52:04 +00:00
|
|
|
thisGatherer() {
|
|
|
|
let gather = this.props.gather;
|
|
|
|
let user = this.props.user;
|
|
|
|
if (gather && user && gather.gatherers.length) {
|
|
|
|
return gather.gatherers
|
|
|
|
.filter(gatherer => gatherer.id === user.id)
|
|
|
|
.pop() || null;
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
|
2015-10-01 10:22:23 +00:00
|
|
|
componentDidMount() {
|
|
|
|
let self = this;
|
2015-10-02 14:53:11 +00:00
|
|
|
let socket = this.props.socket;
|
2015-10-02 17:52:04 +00:00
|
|
|
let soundController = this.props.soundController;
|
|
|
|
|
|
|
|
socket.on('notification', data => {
|
|
|
|
if (data && data.sound === 'gather_starting'
|
|
|
|
&& this.thisGatherer()) {
|
|
|
|
soundController.playGatherMusic();
|
|
|
|
}
|
|
|
|
});
|
2015-10-01 10:22:23 +00:00
|
|
|
|
|
|
|
socket.on('users:update',
|
2015-10-02 14:53:11 +00:00
|
|
|
data => self.setProps({
|
|
|
|
users: data.users,
|
|
|
|
user: data.currentUser
|
|
|
|
})
|
|
|
|
);
|
2015-10-01 10:22:23 +00:00
|
|
|
|
|
|
|
socket.on("message:append", data => {
|
|
|
|
self.setProps({
|
2015-10-02 14:53:11 +00:00
|
|
|
messages: self.props.messages.concat(data.messages)
|
2015-10-01 10:22:23 +00:00
|
|
|
.sort((a, b) => {
|
|
|
|
return new Date(a.createdAt) - new Date(b.createdAt);
|
|
|
|
})
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
socket.on("message:refresh", data => {
|
|
|
|
self.setProps({
|
2015-10-02 14:53:11 +00:00
|
|
|
messages: data.messages
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
socket.on("gather:refresh", (data) => {
|
|
|
|
self.setProps({
|
|
|
|
gather: data.gather,
|
|
|
|
maps: data.maps,
|
|
|
|
servers: data.servers,
|
|
|
|
previousGather: data.previousGather
|
|
|
|
});
|
2015-10-03 22:39:51 +00:00
|
|
|
this.updateTitle();
|
2015-10-02 14:53:11 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
socket.on("gather:archive:refresh", data => {
|
|
|
|
self.setProps({
|
|
|
|
archive: data.archive,
|
|
|
|
maps: data.maps,
|
|
|
|
servers: data.servers
|
2015-10-01 10:22:23 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
socket.emit("users:refresh");
|
|
|
|
socket.emit("message:refresh");
|
|
|
|
},
|
|
|
|
|
|
|
|
render() {
|
|
|
|
return <div id="wrapper">
|
|
|
|
<nav className="navbar navbar-default navbar-static-top"
|
|
|
|
role="navigation"
|
|
|
|
style={{marginBottom: "0"}}>
|
|
|
|
<div className="navbar-header">
|
2015-10-04 12:25:00 +00:00
|
|
|
<a className="navbar-brand" href="/">NSL Gathers <small><i>Alpha</i></small></a>
|
2015-10-01 10:22:23 +00:00
|
|
|
</div>
|
|
|
|
<ul className="nav navbar-top-links navbar-right" id="currentuser">
|
|
|
|
<CurrentUser user={this.props.user} />
|
|
|
|
</ul>
|
|
|
|
<ul className="nav navbar-top-links navbar-right" id="soundcontroller">
|
2015-10-02 14:53:11 +00:00
|
|
|
<SoundPanel soundController={this.props.soundController} />
|
2015-10-01 10:22:23 +00:00
|
|
|
</ul>
|
2015-10-20 16:36:16 +00:00
|
|
|
<TeamSpeakButton />
|
2015-10-01 10:22:23 +00:00
|
|
|
<ul className="nav navbar-top-links navbar-right">
|
|
|
|
<li className="dropdown">
|
|
|
|
<a className="dropdown-toggle" data-toggle="dropdown" href="#">
|
|
|
|
Info <i className="fa fa-caret-down"></i>
|
|
|
|
</a>
|
|
|
|
<ul className="dropdown-menu">
|
|
|
|
<li>
|
|
|
|
<a href="https://github.com/cblanc/sws_gathers" target="_blank">
|
|
|
|
Github <i className="fa fa-github"> </i>
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<a href="http://steamcommunity.com/id/nslgathers" target="_blank">
|
|
|
|
Steam Bot <i className="fa fa-external-link"> </i>
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
<li>
|
|
|
|
<a href="http://www.ensl.org/articles/464" target="_blank">
|
|
|
|
Gather Rules <i className="fa fa-external-link"> </i>
|
|
|
|
</a>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
</nav>
|
|
|
|
<AdminPanel />
|
2015-10-20 16:36:16 +00:00
|
|
|
<TeamSpeakModal />
|
2015-10-01 10:22:23 +00:00
|
|
|
<ProfileModal user={this.props.user} />
|
|
|
|
<div style={{minHeight: "750px"}}>
|
|
|
|
<div className="container-fluid">
|
|
|
|
<div className="row">
|
|
|
|
<div className="col-md-2 hidden-xs">
|
|
|
|
<ul className="nav" id="side-menu">
|
|
|
|
<UserMenu users={this.props.users} />
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
<div className="col-md-4" id="chatroom">
|
|
|
|
<Chatroom
|
|
|
|
messages={this.props.messages}
|
|
|
|
user={this.props.user} />
|
|
|
|
</div>
|
|
|
|
<div className="col-md-6" id="gathers">
|
2015-10-02 14:53:11 +00:00
|
|
|
<Gather
|
|
|
|
gather={this.props.gather}
|
2015-10-02 17:52:04 +00:00
|
|
|
thisGatherer={this.thisGatherer()}
|
2015-10-02 14:53:11 +00:00
|
|
|
user={this.props.user}
|
|
|
|
maps={this.props.maps}
|
|
|
|
servers={this.props.servers}
|
|
|
|
previousGather={this.props.previousGather}/>
|
2015-10-20 22:54:28 +00:00
|
|
|
<hr />
|
2015-10-02 14:53:11 +00:00
|
|
|
<ArchivedGathers archive={this.props.archive}
|
|
|
|
maps={this.props.maps}
|
|
|
|
servers={this.props.servers} />
|
2015-10-01 10:22:23 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
}
|
|
|
|
});
|