Skip to content

Commit 0b4cfd6

Browse files
committed
on Refactor... BoostIO#4
1 parent 484dfe6 commit 0b4cfd6

16 files changed

Lines changed: 377 additions & 114 deletions

browser/main/Components/EditProfileModal.jsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,20 @@ var UserStore = require('../Stores/UserStore')
1111
module.exports = React.createClass({
1212
mixins: [LinkedState],
1313
propTypes: {
14-
targetUser: React.PropTypes.shape({
14+
user: React.PropTypes.shape({
1515
name: React.PropTypes.string,
1616
profileName: React.PropTypes.string,
1717
email: React.PropTypes.string
1818
})
1919
},
2020
getInitialState: function () {
21-
var targetUser = this.props.targetUser
21+
var user = this.props.user
2222
return {
2323
currentTab: 'userInfo',
2424
user: {
25-
name: targetUser.name,
26-
profileName: targetUser.profileName,
27-
email: targetUser.email
25+
name: user.name,
26+
profileName: user.profileName,
27+
email: user.email
2828
},
2929
userSubmitStatus: null,
3030
password: {
@@ -44,7 +44,7 @@ module.exports = React.createClass({
4444
this.setState({
4545
userSubmitStatus: 'sending'
4646
}, function () {
47-
Hq.updateUser(this.props.targetUser.name, this.state.user)
47+
Hq.updateUser(this.props.user.name, this.state.user)
4848
.then(function (res) {
4949
this.setState({userSubmitStatus: 'done'}, function () {
5050
localStorage.setItem('currentUser', JSON.stringify(res.body))
@@ -138,7 +138,7 @@ module.exports = React.createClass({
138138
},
139139
renderPasswordTab: function () {
140140
return (
141-
<div className='paswordTab'>
141+
<div className='passwordTab'>
142142
<div className='formField'>
143143
<label>Current password</label>
144144
<input valueLink={this.linkState('password.currentPassword')}/>

browser/main/Components/HomeNavigator.jsx

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,36 @@ module.exports = React.createClass({
2727
onUserChange: function (res) {
2828
switch (res.status) {
2929
case 'userUpdated':
30-
if (this.state.currentUser.id === res.data.id) {
31-
this.setState({currentUser: res.data})
30+
var user = res.data
31+
var currentUser = this.state.currentUser
32+
if (currentUser.id === user.id) {
33+
this.setState({currentUser: user})
34+
return
35+
}
36+
37+
if (user.userType === 'team') {
38+
var isMyTeam = user.Members.some(function (member) {
39+
if (currentUser.id === member.id) {
40+
return true
41+
}
42+
return false
43+
})
44+
45+
if (isMyTeam) {
46+
var isNew = !currentUser.Teams.some(function (team, index) {
47+
if (user.id === team.id) {
48+
currentUser.Teams.splice(index, 1, user)
49+
return true
50+
}
51+
return false
52+
})
53+
54+
if (isNew) {
55+
currentUser.Teams.push(user)
56+
}
57+
58+
this.setState({currentUser: currentUser})
59+
}
3260
}
3361
break
3462
}
@@ -104,7 +132,10 @@ module.exports = React.createClass({
104132
<ul className='planetList'>
105133
{planets}
106134
</ul>
107-
<button onClick={this.openPlanetCreateModal} className='newPlanet'><i className='fa fa-plus'/></button>
135+
<button onClick={this.openPlanetCreateModal} className='newPlanet'>
136+
<i className='fa fa-plus'/>
137+
<div className='newPlanetTooltip'>Create new planet</div>
138+
</button>
108139
</div>
109140
)
110141
},

browser/main/Components/PlanetCreateModal.jsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
/* global localStorage */
22

33
var React = require('react/addons')
4-
var Select = require('react-select')
54

65
var Hq = require('../Services/Hq')
76

87
var LinkedState = require('../Mixins/LinkedState')
98

10-
var UserStore = require('../Stores/UserStore')
119
var PlanetStore = require('../Stores/PlanetStore')
1210

1311
module.exports = React.createClass({
1412
mixins: [LinkedState],
1513
propTypes: {
14+
ownerName: React.PropTypes.string,
1615
transitionTo: React.PropTypes.func,
1716
close: React.PropTypes.func
1817
},
1918
getInitialState: function () {
2019
var currentUser = JSON.parse(localStorage.getItem('currentUser'))
20+
var ownerName = this.props.ownerName != null ? this.props.ownerName : currentUser.name
2121
return {
2222
user: currentUser,
2323
planet: {
2424
name: '',
2525
public: true
2626
},
27-
ownerName: currentUser.name
27+
ownerName: ownerName
2828
}
2929
},
3030
componentDidMount: function () {
@@ -42,7 +42,10 @@ module.exports = React.createClass({
4242

4343
PlanetStore.Actions.update(planet)
4444

45-
this.props.transitionTo('planetHome', {userName: planet.userName, planetName: planet.name})
45+
if (this.props.transitionTo != null) {
46+
this.props.transitionTo('planetHome', {userName: planet.userName, planetName: planet.name})
47+
}
48+
4649
this.props.close()
4750
}.bind(this))
4851
.catch(function (err) {
@@ -52,7 +55,7 @@ module.exports = React.createClass({
5255
render: function () {
5356
var teamOptions = this.state.user.Teams.map(function (team) {
5457
return (
55-
<option value={team.name}>{team.profileName} ({team.name})</option>
58+
<option key={'user-' + team.id} value={team.name}>{team.profileName} ({team.name})</option>
5659
)
5760
})
5861
return (

browser/main/Components/TeamCreateModal.jsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ module.exports = React.createClass({
3333
currentUser.Teams.push(team)
3434
localStorage.setItem('currentUser', JSON.stringify(currentUser))
3535
UserStore.Actions.update(currentUser)
36-
this.props.transitionTo('userHome', {userName: team.name})
36+
37+
if (this.props.transitionTo != null) {
38+
this.props.transitionTo('userHome', {userName: team.name})
39+
}
3740
this.props.close()
3841
}.bind(this))
3942
.catch(function (err) {
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
/* global localStorage */
2+
3+
var React = require('react/addons')
4+
5+
var Hq = require('../Services/Hq')
6+
7+
var LinkedState = require('../Mixins/LinkedState')
8+
9+
var UserStore = require('../Stores/UserStore')
10+
11+
module.exports = React.createClass({
12+
mixins: [LinkedState],
13+
propTypes: {
14+
team: React.PropTypes.shape({
15+
name: React.PropTypes.string,
16+
profileName: React.PropTypes.string,
17+
email: React.PropTypes.string
18+
})
19+
},
20+
getInitialState: function () {
21+
var team = this.props.team
22+
return {
23+
currentTab: 'teamInfo',
24+
team: {
25+
name: team.name,
26+
profileName: team.profileName
27+
},
28+
userSubmitStatus: null
29+
}
30+
},
31+
selectTab: function (tabName) {
32+
return function () {
33+
this.setState({currentTab: tabName})
34+
}.bind(this)
35+
},
36+
saveUserInfo: function () {
37+
this.setState({
38+
userSubmitStatus: 'sending'
39+
}, function () {
40+
Hq.updateUser(this.props.team.name, this.state.team)
41+
.then(function (res) {
42+
this.setState({userSubmitStatus: 'done'}, function () {
43+
UserStore.Actions.update(res.body)
44+
})
45+
}.bind(this))
46+
.catch(function (err) {
47+
console.error(err)
48+
this.setState({userSubmitStatus: 'error'})
49+
}.bind(this))
50+
})
51+
},
52+
render: function () {
53+
var content
54+
55+
switch (this.state.currentTab) {
56+
case 'teamInfo':
57+
content = this.renderTeamInfoTab()
58+
break
59+
case 'members':
60+
content = this.renderMembersTab()
61+
break
62+
}
63+
64+
return (
65+
<div className='EditProfileModal modal tabModal'>
66+
<div className='leftPane'>
67+
<div className='tabLabel'>Team settings</div>
68+
<div className='tabList'>
69+
<button className={this.state.currentTab === 'teamInfo' ? 'active' : ''} onClick={this.selectTab('teamInfo')}><i className='fa fa-info-circle fa-fw'/> Team Info</button>
70+
<button className={this.state.currentTab === 'members' ? 'active' : ''} onClick={this.selectTab('members')}><i className='fa fa-users fa-fw'/> Members</button>
71+
</div>
72+
</div>
73+
<div className='rightPane'>
74+
{content}
75+
</div>
76+
</div>
77+
)
78+
},
79+
renderTeamInfoTab: function () {
80+
return (
81+
<div className='userInfoTab'>
82+
<div className='formField'>
83+
<label>Profile Name</label>
84+
<input valueLink={this.linkState('team.profileName')}/>
85+
</div>
86+
<div className='formField'>
87+
<label>Name</label>
88+
<input valueLink={this.linkState('team.name')}/>
89+
</div>
90+
<div className='formConfirm'>
91+
<button disabled={this.state.userSubmitStatus === 'sending'} onClick={this.saveUserInfo}>Save</button>
92+
93+
<div className={'alertInfo' + (this.state.userSubmitStatus === 'sending' ? '' : ' hide')}>on Sending...</div>
94+
95+
<div className={'alertError' + (this.state.userSubmitStatus === 'error' ? '' : ' hide')}>Connection failed.. Try again.</div>
96+
97+
<div className={'alertSuccess' + (this.state.userSubmitStatus === 'done' ? '' : ' hide')}>Successfully done!!</div>
98+
</div>
99+
</div>
100+
)
101+
},
102+
renderMembersTab: function () {
103+
return (
104+
<div className='membersTab'>
105+
</div>
106+
)
107+
}
108+
})

browser/main/Containers/LoginContainer.jsx

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,17 +76,6 @@ module.exports = React.createClass({
7676

7777
<nav className='authNavigator text-center'><Link to='login'>Log In</Link> / <Link to='signup'>Sign Up</Link></nav>
7878

79-
<div className='socialControl'>
80-
<p>Connect with</p>
81-
<button className='facebookBtn'><i className='fa fa-facebook fa-fw'/></button>
82-
<button className='githubBtn'><i className='fa fa-github fa-fw'/></button>
83-
</div>
84-
85-
<div className='divider'>
86-
<hr/>
87-
<div className='dividerLabel'>or</div>
88-
</div>
89-
9079
<form onSubmit={this.handleSubmit}>
9180
<div className='form-group'>
9281
<input className='stripInput' valueLink={this.linkState('user.email')} type='text' placeholder='E-mail'/>

browser/main/Containers/MainContainer.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,16 @@ module.exports = React.createClass({
4949

5050
Hq.getUser()
5151
.then(function (res) {
52+
console.log(res.body)
5253
localStorage.setItem('currentUser', JSON.stringify(res.body))
5354
UserStore.Actions.update(res.body)
5455
})
5556
.catch(function (err) {
5657
if (err.status === 401) {
58+
console.log('Not logged in yet')
5759
localStorage.removeItem('currentUser')
5860
this.transitionTo('login')
61+
return
5962
}
6063
console.error(err)
6164
}.bind(this))

browser/main/Containers/SignupContainer.jsx

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ module.exports = React.createClass({
3030
}, function () {
3131
Hq.signup(this.state.user)
3232
.then(function (res) {
33-
console.log(res.body)
3433
localStorage.setItem('token', res.body.token)
3534
localStorage.setItem('currentUser', JSON.stringify(res.body.user))
3635

@@ -91,11 +90,6 @@ module.exports = React.createClass({
9190

9291
<nav className='authNavigator text-center'><Link to='login'>Log In</Link> / <Link to='signup'>Sign Up</Link></nav>
9392

94-
<div className='divider'>
95-
<hr/>
96-
<div className='dividerLabel'>or</div>
97-
</div>
98-
9993
<form onSubmit={this.handleSubmit}>
10094
<div className='form-group'>
10195
<input className='stripInput' valueLink={this.linkState('user.email')} type='text' placeholder='E-mail'/>

0 commit comments

Comments
 (0)