import React, { PureComponent } from 'react'; import { FormLabel, Select, Input, Button } from '@grafana/ui'; import { DataSourcePluginOptionsEditorProps, onUpdateDatasourceJsonDataOptionSelect, onUpdateDatasourceOption, onUpdateDatasourceResetOption, onUpdateDatasourceJsonDataOption, onUpdateDatasourceSecureJsonDataOption, } from '@grafana/data'; import { SelectableValue } from '@grafana/data'; import { getDatasourceSrv } from 'app/features/plugins/datasource_srv'; import CloudWatchDatasource from '../datasource'; import { CloudWatchJsonData, CloudWatchSecureJsonData } from '../types'; import { CancelablePromise, makePromiseCancelable } from 'app/core/utils/CancelablePromise'; const authProviderOptions = [ { label: 'Access & secret key', value: 'keys' }, { label: 'Credentials file', value: 'credentials' }, { label: 'ARN', value: 'arn' }, ] as SelectableValue[]; export type Props = DataSourcePluginOptionsEditorProps; export interface State { regions: SelectableValue[]; } export class ConfigEditor extends PureComponent { constructor(props: Props) { super(props); this.state = { regions: [], }; } loadRegionsPromise: CancelablePromise = null; componentDidMount() { this.loadRegionsPromise = makePromiseCancelable(this.loadRegions()); this.loadRegionsPromise.promise.catch(({ isCanceled }) => { if (isCanceled) { console.warn('Cloud Watch ConfigEditor has unmounted, intialization was canceled'); } }); } componentWillUnmount() { if (this.loadRegionsPromise) { this.loadRegionsPromise.cancel(); } } async loadRegions() { await getDatasourceSrv() .loadDatasource(this.props.options.name) .then((ds: CloudWatchDatasource) => { return ds.getRegions(); }) .then( (regions: any) => { this.setState({ regions: regions.map((region: any) => { return { value: region.value, label: region.text, }; }), }); }, (err: any) => { const regions = [ 'ap-east-1', 'ap-northeast-1', 'ap-northeast-2', 'ap-northeast-3', 'ap-south-1', 'ap-southeast-1', 'ap-southeast-2', 'ca-central-1', 'cn-north-1', 'cn-northwest-1', 'eu-central-1', 'eu-north-1', 'eu-west-1', 'eu-west-2', 'eu-west-3', 'me-south-1', 'sa-east-1', 'us-east-1', 'us-east-2', 'us-gov-east-1', 'us-gov-west-1', 'us-iso-east-1', 'us-isob-east-1', 'us-west-1', 'us-west-2', ]; this.setState({ regions: regions.map((region: string) => { return { value: region, label: region, }; }), }); // expected to fail when creating new datasource // console.error('failed to get latest regions', err); } ); } render() { const { regions } = this.state; const { options } = this.props; const secureJsonData = (options.secureJsonData || {}) as CloudWatchSecureJsonData; return ( <>

CloudWatch Details

Auth Provider
)} {options.jsonData.authType === 'keys' && (
{options.secureJsonFields.accessKey ? (
Access Key ID
) : (
Access Key ID
)} {options.secureJsonFields.secretKey ? (
Secret Access Key
) : (
Secret Access Key
)}
)} {options.jsonData.authType === 'arn' && (
Assume Role ARN
)}
Default Region
); } } export default ConfigEditor;