// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import React from 'react'; import PropTypes from 'prop-types'; import FormError from 'components/form_error.jsx'; import SaveButton from 'components/admin_console/save_button.jsx'; import {saveConfig} from 'actions/admin_actions.jsx'; export default class AdminSettings extends React.Component { static propTypes = { /* * Object representing the config file */ config: PropTypes.object } constructor(props) { super(props); this.handleChange = this.handleChange.bind(this); this.handleSubmit = this.handleSubmit.bind(this); this.doSubmit = this.doSubmit.bind(this); this.state = Object.assign(this.getStateFromConfig(props.config), { saveNeeded: false, saving: false, serverError: null }); } handleChange(id, value) { this.setState({ saveNeeded: true, [id]: value }); } handleSubmit(e) { e.preventDefault(); this.doSubmit(); } doSubmit(callback) { this.setState({ saving: true, serverError: null }); // clone config so that we aren't modifying data in the stores let config = JSON.parse(JSON.stringify(this.props.config)); config = this.getConfigFromState(config); saveConfig( config, (savedConfig) => { this.setState(this.getStateFromConfig(savedConfig)); this.setState({ saveNeeded: false, saving: false }); if (callback) { callback(); } if (this.handleSaved) { this.handleSaved(config); } }, (err) => { this.setState({ saving: false, serverError: err.message }); if (callback) { callback(); } if (this.handleSaved) { this.handleSaved(config); } } ); } parseInt(str, defaultValue) { const n = parseInt(str, 10); if (isNaN(n)) { if (defaultValue) { return defaultValue; } return 0; } return n; } parseIntNonZero(str, defaultValue) { const n = parseInt(str, 10); if (isNaN(n) || n < 1) { if (defaultValue) { return defaultValue; } return 1; } return n; } render() { return (