Merge pull request #152 from MetalCar/editTeamsInSettings

Edit teams in settings window
This commit is contained in:
Yuya Ochiai
2016-06-04 01:46:31 +09:00

View File

@@ -28,14 +28,21 @@ var SettingsPage = React.createClass({
} catch (e) { } catch (e) {
config = settings.loadDefault(); config = settings.loadDefault();
} }
this.setState({
showAddTeamForm: false
});
return config; return config;
}, },
handleTeamsChange: function(teams) { handleTeamsChange: function(teams) {
this.setState({ this.setState({
teams: teams teams: teams
}); });
this.handleSave(false);
}, },
handleSave: function() { handleSave: function(toIndex) {
var config = { var config = {
teams: this.state.teams, teams: this.state.teams,
hideMenuBar: this.state.hideMenuBar, hideMenuBar: this.state.hideMenuBar,
@@ -50,7 +57,10 @@ var SettingsPage = React.createClass({
currentWindow.setAutoHideMenuBar(config.hideMenuBar); currentWindow.setAutoHideMenuBar(config.hideMenuBar);
currentWindow.setMenuBarVisibility(!config.hideMenuBar); currentWindow.setMenuBarVisibility(!config.hideMenuBar);
} }
if (typeof toIndex == 'undefined' || toIndex) {
backToIndex(); backToIndex();
}
}, },
handleCancel: function() { handleCancel: function() {
backToIndex(); backToIndex();
@@ -75,12 +85,27 @@ var SettingsPage = React.createClass({
trayIconTheme: this.refs.trayIconTheme.getValue() trayIconTheme: this.refs.trayIconTheme.getValue()
}); });
}, },
handleShowTeamForm: function() {
if (!this.state.showAddTeamForm) {
this.setState({
showAddTeamForm: true
});
} else {
this.setState({
showAddTeamForm: false
});
}
},
render: function() { render: function() {
var buttonStyle = {
marginTop: 20
};
var teams_row = ( var teams_row = (
<Row> <Row>
<Col md={ 12 }> <Col md={ 12 }>
<h2>Teams</h2> <TeamList teams={ this.state.teams } showAddTeamForm={ this.state.showAddTeamForm } onTeamsChange={ this.handleTeamsChange } />
<TeamList teams={ this.state.teams } onTeamsChange={ this.handleTeamsChange } />
</Col> </Col>
</Row> </Row>
); );
@@ -113,6 +138,16 @@ var SettingsPage = React.createClass({
return ( return (
<Grid className="settingsPage"> <Grid className="settingsPage">
<Row>
<Col xs={ 4 } sm={ 1 } md={ 2 } lg={ 2 }>
<h2>Teams</h2>
</Col>
<Col xs={ 4 } sm={ 2 } md={ 1 } lg={ 1 } mdPull={ 1 }>
<Button className="pull-right" style={ buttonStyle } bsSize="small" onClick={ this.handleShowTeamForm }>
<Glyphicon glyph="plus" />
</Button>
</Col>
</Row>
{ teams_row } { teams_row }
{ options_row } { options_row }
<Row> <Row>
@@ -128,6 +163,16 @@ var SettingsPage = React.createClass({
}); });
var TeamList = React.createClass({ var TeamList = React.createClass({
getInitialState: function() {
return {
showTeamListItemNew: false,
team: {
url: '',
name: '',
index: false
}
};
},
handleTeamRemove: function(index) { handleTeamRemove: function(index) {
console.log(index); console.log(index);
var teams = this.props.teams; var teams = this.props.teams;
@@ -136,23 +181,64 @@ var TeamList = React.createClass({
}, },
handleTeamAdd: function(team) { handleTeamAdd: function(team) {
var teams = this.props.teams; var teams = this.props.teams;
// check if team already exists and then change existing team or add new one
if (!team.index && teams[team.index]) {
teams[team.index].name = team.name;
teams[team.index].url = team.url;
} else {
teams.push(team); teams.push(team);
}
this.setState({
showTeamListItemNew: false,
team: {
url: '',
name: '',
index: false
}
});
this.props.onTeamsChange(teams); this.props.onTeamsChange(teams);
}, },
handleTeamEditing: function(teamName, teamUrl, teamIndex) {
this.setState({
showTeamListItemNew: true,
team: {
url: teamUrl,
name: teamName,
index: teamIndex
}
})
},
render: function() { render: function() {
var thisObj = this; var thisObj = this;
var teamNodes = this.props.teams.map(function(team, i) { var teamNodes = this.props.teams.map(function(team, i) {
var handleTeamRemove = function() { var handleTeamRemove = function() {
thisObj.handleTeamRemove(i); thisObj.handleTeamRemove(i);
}; };
var handleTeamEditing = function() {
thisObj.handleTeamEditing(team.name, team.url, i);
};
return ( return (
<TeamListItem index={ i } key={ "teamListItem" + i } name={ team.name } url={ team.url } onTeamRemove={ handleTeamRemove } /> <TeamListItem index={ i } key={ "teamListItem" + i } name={ team.name } url={ team.url } onTeamRemove={ handleTeamRemove } onTeamEditing={ handleTeamEditing }
/>
); );
}); });
var addTeamForm;
if (this.props.showAddTeamForm || this.state.showTeamListItemNew) {
addTeamForm = <TeamListItemNew onTeamAdd={ this.handleTeamAdd } teamIndex={ this.state.team.index } teamName={ this.state.team.name } teamUrl={ this.state.team.url } />;
} else {
addTeamForm = '';
}
return ( return (
<ListGroup class="teamList"> <ListGroup class="teamList">
{ teamNodes } { teamNodes }
<TeamListItemNew onTeamAdd={ this.handleTeamAdd } /> { addTeamForm }
</ListGroup> </ListGroup>
); );
} }
@@ -162,6 +248,9 @@ var TeamListItem = React.createClass({
handleTeamRemove: function() { handleTeamRemove: function() {
this.props.onTeamRemove(); this.props.onTeamRemove();
}, },
handleTeamEditing: function() {
this.props.onTeamEditing();
},
render: function() { render: function() {
var style = { var style = {
left: { left: {
@@ -177,6 +266,10 @@ var TeamListItem = React.createClass({
</p> </p>
</div> </div>
<div className="pull-right"> <div className="pull-right">
<Button bsSize="xsmall" onClick={ this.handleTeamEditing }>
<Glyphicon glyph="pencil" />
</Button>
{ ' ' }
<Button bsSize="xsmall" onClick={ this.handleTeamRemove }> <Button bsSize="xsmall" onClick={ this.handleTeamRemove }>
<Glyphicon glyph="remove" /> <Glyphicon glyph="remove" />
</Button> </Button>
@@ -189,8 +282,9 @@ var TeamListItem = React.createClass({
var TeamListItemNew = React.createClass({ var TeamListItemNew = React.createClass({
getInitialState: function() { getInitialState: function() {
return { return {
name: '', name: this.props.teamName,
url: '' url: this.props.teamUrl,
index: this.props.teamIndex
}; };
}, },
handleSubmit: function(e) { handleSubmit: function(e) {
@@ -198,9 +292,15 @@ var TeamListItemNew = React.createClass({
e.preventDefault(); e.preventDefault();
this.props.onTeamAdd({ this.props.onTeamAdd({
name: this.state.name.trim(), name: this.state.name.trim(),
url: this.state.url.trim() url: this.state.url.trim(),
index: this.state.index,
});
this.setState({
name: '',
url: '',
index: ''
}); });
this.setState(this.getInitialState());
}, },
handleNameChange: function(e) { handleNameChange: function(e) {
console.log('name'); console.log('name');
@@ -215,9 +315,23 @@ var TeamListItemNew = React.createClass({
}); });
}, },
shouldEnableAddButton: function() { shouldEnableAddButton: function() {
return (this.state.name.trim() !== '') && (this.state.url.trim() !== ''); return (this.state.name.trim() !== '' || this.props.teamName !== '')
&& (this.state.url.trim() !== '' || this.props.teamUrl !== '');
}, },
render: function() { render: function() {
var existingTeam = false;
if (this.state.name !== '' && this.state.url !== '') {
existingTeam = true;
}
var btnAddText;
if (existingTeam) {
btnAddText = 'Save';
} else {
btnAddText = 'Add';
}
return ( return (
<ListGroupItem> <ListGroupItem>
<form className="form-inline" onSubmit={ this.handleSubmit }> <form className="form-inline" onSubmit={ this.handleSubmit }>
@@ -233,7 +347,9 @@ var TeamListItemNew = React.createClass({
<input type="url" className="form-control" id="inputTeamURL" placeholder="https://example.com/team" value={ this.state.url } onChange={ this.handleURLChange } /> <input type="url" className="form-control" id="inputTeamURL" placeholder="https://example.com/team" value={ this.state.url } onChange={ this.handleURLChange } />
</div> </div>
{ ' ' } { ' ' }
<Button type="submit" disabled={ !this.shouldEnableAddButton() }>Add</Button> <Button type="submit" disabled={ !this.shouldEnableAddButton() }>
{ btnAddText }
</Button>
</form> </form>
</ListGroupItem> </ListGroupItem>
); );