|
|
|
@ -72,6 +72,12 @@ export class DataSourceSettingsPage extends PureComponent<Props, State> { |
|
|
|
|
this.testDataSource(); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
onTest = async (evt: React.FormEvent<HTMLFormElement>) => { |
|
|
|
|
evt.preventDefault(); |
|
|
|
|
|
|
|
|
|
this.testDataSource(); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
onDelete = () => { |
|
|
|
|
appEvents.emit('confirm-modal', { |
|
|
|
|
title: 'Delete', |
|
|
|
@ -180,52 +186,55 @@ export class DataSourceSettingsPage extends PureComponent<Props, State> { |
|
|
|
|
return ( |
|
|
|
|
<Page navModel={navModel}> |
|
|
|
|
<Page.Contents isLoading={!this.hasDataSource}> |
|
|
|
|
{this.hasDataSource && <div className="page-container page-body"> |
|
|
|
|
<div> |
|
|
|
|
<form onSubmit={this.onSubmit}> |
|
|
|
|
{this.isReadOnly() && this.renderIsReadOnlyMessage()} |
|
|
|
|
{this.shouldRenderInfoBox() && <div className="grafana-info-box">{this.getInfoText()}</div>} |
|
|
|
|
|
|
|
|
|
<BasicSettings |
|
|
|
|
dataSourceName={dataSource.name} |
|
|
|
|
isDefault={dataSource.isDefault} |
|
|
|
|
onDefaultChange={state => setIsDefault(state)} |
|
|
|
|
onNameChange={name => setDataSourceName(name)} |
|
|
|
|
/> |
|
|
|
|
|
|
|
|
|
{dataSourceMeta.module && ( |
|
|
|
|
<PluginSettings |
|
|
|
|
dataSource={dataSource} |
|
|
|
|
dataSourceMeta={dataSourceMeta} |
|
|
|
|
onModelChange={this.onModelChange} |
|
|
|
|
{this.hasDataSource && ( |
|
|
|
|
<div className="page-container page-body"> |
|
|
|
|
<div> |
|
|
|
|
<form onSubmit={this.onSubmit}> |
|
|
|
|
{this.isReadOnly() && this.renderIsReadOnlyMessage()} |
|
|
|
|
{this.shouldRenderInfoBox() && <div className="grafana-info-box">{this.getInfoText()}</div>} |
|
|
|
|
|
|
|
|
|
<BasicSettings |
|
|
|
|
dataSourceName={dataSource.name} |
|
|
|
|
isDefault={dataSource.isDefault} |
|
|
|
|
onDefaultChange={state => setIsDefault(state)} |
|
|
|
|
onNameChange={name => setDataSourceName(name)} |
|
|
|
|
/> |
|
|
|
|
)} |
|
|
|
|
|
|
|
|
|
<div className="gf-form-group section"> |
|
|
|
|
{testingMessage && ( |
|
|
|
|
<div className={`alert-${testingStatus} alert`}> |
|
|
|
|
<div className="alert-icon"> |
|
|
|
|
{testingStatus === 'error' ? ( |
|
|
|
|
<i className="fa fa-exclamation-triangle" /> |
|
|
|
|
) : ( |
|
|
|
|
<i className="fa fa-check" /> |
|
|
|
|
)} |
|
|
|
|
</div> |
|
|
|
|
<div className="alert-body"> |
|
|
|
|
<div className="alert-title">{testingMessage}</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
{dataSourceMeta.module && ( |
|
|
|
|
<PluginSettings |
|
|
|
|
dataSource={dataSource} |
|
|
|
|
dataSourceMeta={dataSourceMeta} |
|
|
|
|
onModelChange={this.onModelChange} |
|
|
|
|
/> |
|
|
|
|
)} |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<ButtonRow |
|
|
|
|
onSubmit={event => this.onSubmit(event)} |
|
|
|
|
isReadOnly={this.isReadOnly()} |
|
|
|
|
onDelete={this.onDelete} |
|
|
|
|
/> |
|
|
|
|
</form> |
|
|
|
|
|
|
|
|
|
<div className="gf-form-group section"> |
|
|
|
|
{testingMessage && ( |
|
|
|
|
<div className={`alert-${testingStatus} alert`}> |
|
|
|
|
<div className="alert-icon"> |
|
|
|
|
{testingStatus === 'error' ? ( |
|
|
|
|
<i className="fa fa-exclamation-triangle" /> |
|
|
|
|
) : ( |
|
|
|
|
<i className="fa fa-check" /> |
|
|
|
|
)} |
|
|
|
|
</div> |
|
|
|
|
<div className="alert-body"> |
|
|
|
|
<div className="alert-title">{testingMessage}</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
)} |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<ButtonRow |
|
|
|
|
onSubmit={event => this.onSubmit(event)} |
|
|
|
|
isReadOnly={this.isReadOnly()} |
|
|
|
|
onDelete={this.onDelete} |
|
|
|
|
onTest={event => this.onTest(event)} |
|
|
|
|
/> |
|
|
|
|
</form> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div>} |
|
|
|
|
)} |
|
|
|
|
</Page.Contents> |
|
|
|
|
</Page> |
|
|
|
|
); |
|
|
|
|