// 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} 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';
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.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
};
}
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
});
}
super.handleChange(id, value);
}
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();
},
(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={
}
disabled={!this.state.enableIndexing}
/>
}
helpText={
}
value={this.state.enableSearching}
disabled={!this.state.enableIndexing || !this.state.configTested}
onChange={this.handleChange}
/>
);
}
}