// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import React from 'react'; import * as Utils from 'utils/utils.jsx'; import AdminSettings from './admin_settings.jsx'; import {elasticsearchTest, elasticsearchPurgeIndexes} from 'actions/admin_actions.jsx'; import BooleanSetting from './boolean_setting.jsx'; import {FormattedMessage} from 'react-intl'; import SettingsGroup from './settings_group.jsx'; import TextSetting from './text_setting.jsx'; import RequestButton from './request_button/request_button.jsx'; import ElasticsearchStatus from './elasticsearch_status'; export default class ElasticsearchSettings extends AdminSettings { constructor(props) { super(props); this.getConfigFromState = this.getConfigFromState.bind(this); this.doTestConfig = this.doTestConfig.bind(this); this.handleChange = this.handleChange.bind(this); this.handleSaved = this.handleSaved.bind(this); this.renderSettings = this.renderSettings.bind(this); } getConfigFromState(config) { config.ElasticsearchSettings.ConnectionUrl = this.state.connectionUrl; config.ElasticsearchSettings.Username = this.state.username; config.ElasticsearchSettings.Password = this.state.password; config.ElasticsearchSettings.Sniff = this.state.sniff; config.ElasticsearchSettings.EnableIndexing = this.state.enableIndexing; config.ElasticsearchSettings.EnableSearching = this.state.enableSearching; return config; } getStateFromConfig(config) { return { connectionUrl: config.ElasticsearchSettings.ConnectionUrl, username: config.ElasticsearchSettings.Username, password: config.ElasticsearchSettings.Password, sniff: config.ElasticsearchSettings.Sniff, enableIndexing: config.ElasticsearchSettings.EnableIndexing, enableSearching: config.ElasticsearchSettings.EnableSearching, configTested: true, canSave: true, canPurgeAndIndex: config.ElasticsearchSettings.EnableIndexing }; } handleChange(id, value) { if (id === 'enableIndexing') { if (value === false) { this.setState({ enableSearching: false }); } else { this.setState({ canSave: false, configTested: false }); } } if (id === 'connectionUrl' || id === 'username' || id === 'password' || id === 'sniff') { this.setState({ configTested: false, canSave: false }); } if (id !== 'enableSearching') { this.setState({ canPurgeAndIndex: false }); } super.handleChange(id, value); } handleSaved() { this.setState({ canPurgeAndIndex: this.state.enableIndexing }); } canSave() { return this.state.canSave; } doTestConfig(success, error) { const config = JSON.parse(JSON.stringify(this.props.config)); this.getConfigFromState(config); elasticsearchTest( config, () => { this.setState({ configTested: true, canSave: true }); success(); this.doSubmit(); }, (err) => { this.setState({ configTested: false, canSave: false }); error(err); } ); } renderTitle() { return ( ); } renderSettings() { return (
} helpText={ ) }} /> } value={this.state.enableIndexing} onChange={this.handleChange} /> } placeholder={Utils.localizeMessage('admin.elasticsearch.connectionUrlExample', 'E.g.: "https://elasticsearch.example.org:9200"')} helpText={ ) }} /> } value={this.state.connectionUrl} disabled={!this.state.enableIndexing} onChange={this.handleChange} /> } placeholder={Utils.localizeMessage('admin.elasticsearch.usernameExample', 'E.g.: "elastic"')} helpText={ } value={this.state.username} disabled={!this.state.enableIndexing} onChange={this.handleChange} /> } placeholder={Utils.localizeMessage('admin.elasticsearch.password', 'E.g.: "yourpassword"')} helpText={ } value={this.state.password} disabled={!this.state.enableIndexing} onChange={this.handleChange} /> } helpText={ } value={this.state.sniff} disabled={!this.state.enableIndexing} onChange={this.handleChange} /> } buttonText={ } successMessage={{ id: 'admin.elasticsearch.testConfigSuccess', defaultMessage: 'Test successful. Configuration saved.' }} disabled={!this.state.enableIndexing} /> } buttonText={ } successMessage={{ id: 'admin.elasticsearch.purgeIndexesButton.success', defaultMessage: 'Indexes purged successfully.' }} errorMessage={{ id: 'admin.elasticsearch.purgeIndexesButton.error', defaultMessage: 'Failed to purge indexes: {error}' }} disabled={!this.state.canPurgeAndIndex} label={( )} /> } helpText={ } value={this.state.enableSearching} disabled={!this.state.enableIndexing || !this.state.configTested} onChange={this.handleChange} />
); } }