diff options
Diffstat (limited to 'webapp/components/admin_console/admin_settings.jsx')
-rw-r--r-- | webapp/components/admin_console/admin_settings.jsx | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/webapp/components/admin_console/admin_settings.jsx b/webapp/components/admin_console/admin_settings.jsx new file mode 100644 index 000000000..d76e1331a --- /dev/null +++ b/webapp/components/admin_console/admin_settings.jsx @@ -0,0 +1,115 @@ +// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +import React from 'react'; + +import * as AsyncClient from 'utils/async_client.jsx'; +import Client from 'utils/web_client.jsx'; + +import FormError from 'components/form_error.jsx'; +import SaveButton from 'components/admin_console/save_button.jsx'; + +export default class AdminSettings extends React.Component { + static get propTypes() { + return { + config: React.PropTypes.object + }; + } + + constructor(props) { + super(props); + + this.handleChange = this.handleChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + + this.state = { + saveNeeded: false, + saving: false, + serverError: null + }; + } + + handleChange(id, value) { + this.setState({ + saveNeeded: true, + [id]: value + }); + } + + handleSubmit(e) { + e.preventDefault(); + + this.setState({ + saving: true, + serverError: null + }); + + const config = this.getConfigFromState(this.props.config); + + Client.saveConfig( + config, + () => { + AsyncClient.getConfig(); + this.setState({ + saveNeeded: false, + saving: false + }); + }, + (err) => { + this.setState({ + saving: false, + serverError: err.message + }); + } + ); + } + + parseInt(str) { + const n = parseInt(str, 10); + + if (isNaN(n)) { + return 0; + } + + return n; + } + + parseIntNonZero(str) { + const n = parseInt(str, 10); + + if (isNaN(n) || n < 1) { + return 1; + } + + return n; + } + + render() { + let saveClass = 'btn'; + if (this.state.saveNeeded) { + saveClass += 'btn-primary'; + } + + return ( + <div className='wrapper--fixed'> + {this.renderTitle()} + <form + className='form-horizontal' + role='form' + > + {this.renderSettings()} + <div className='form-group'> + <div className='col-sm-12'> + <FormError error={this.state.serverError}/> + <SaveButton + saving={this.state.saving} + disabled={!this.state.saveNeeded || (this.canSave && !this.canSave())} + onClick={this.handleSubmit} + /> + </div> + </div> + </form> + </div> + ); + } +} |