The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/public/app/plugins/datasource/grafana-azure-monitor-datas.../components/AzureCredentialsForm.tsx

158 lines
5.6 KiB

import React, { ChangeEvent, PureComponent } from 'react';
import { SelectableValue } from '@grafana/data';
import { FormLabel, LegacyForms, Button } from '@grafana/ui';
const { Select, Input } = LegacyForms;
export interface Props {
selectedAzureCloud?: string;
selectedSubscription?: string;
azureCloudOptions?: SelectableValue[];
tenantId: string;
clientId: string;
clientSecret: string;
clientSecretConfigured: boolean;
subscriptionOptions?: SelectableValue[];
onAzureCloudChange?: (value: SelectableValue<string>) => void;
onSubscriptionSelectChange?: (value: SelectableValue<string>) => void;
onTenantIdChange: (event: ChangeEvent<HTMLInputElement>) => void;
onClientIdChange: (event: ChangeEvent<HTMLInputElement>) => void;
onClientSecretChange: (event: ChangeEvent<HTMLInputElement>) => void;
onResetClientSecret: () => void;
onLoadSubscriptions?: () => void;
}
export class AzureCredentialsForm extends PureComponent<Props> {
render() {
const {
selectedAzureCloud,
selectedSubscription,
tenantId,
clientId,
clientSecret,
clientSecretConfigured,
azureCloudOptions,
subscriptionOptions,
onAzureCloudChange,
onSubscriptionSelectChange,
onTenantIdChange,
onClientIdChange,
onClientSecretChange,
onResetClientSecret,
onLoadSubscriptions,
} = this.props;
const hasRequiredFields = tenantId && clientId && (clientSecret || clientSecretConfigured);
const hasSubscriptions = onLoadSubscriptions && subscriptionOptions;
return (
<>
<div className="gf-form-group">
{azureCloudOptions && (
<div className="gf-form-inline">
<div className="gf-form">
<FormLabel className="width-12" tooltip="Choose an Azure Cloud.">
Azure Cloud
</FormLabel>
<Select
className="width-15"
value={azureCloudOptions.find(azureCloud => azureCloud.value === selectedAzureCloud)}
options={azureCloudOptions}
defaultValue={selectedAzureCloud}
onChange={onAzureCloudChange}
/>
</div>
</div>
)}
<div className="gf-form-inline">
<div className="gf-form">
<FormLabel className="width-12">Directory (tenant) ID</FormLabel>
<div className="width-15">
<Input
className="width-30"
placeholder="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
value={tenantId || ''}
onChange={onTenantIdChange}
/>
</div>
</div>
</div>
<div className="gf-form-inline">
<div className="gf-form">
<FormLabel className="width-12">Application (client) ID</FormLabel>
<div className="width-15">
<Input
className="width-30"
placeholder="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
value={clientId || ''}
onChange={onClientIdChange}
/>
</div>
</div>
</div>
{clientSecretConfigured ? (
<div className="gf-form-inline">
<div className="gf-form">
<FormLabel className="width-12">Client Secret</FormLabel>
<Input className="width-25" placeholder="configured" disabled={true} />
</div>
<div className="gf-form">
<div className="max-width-30 gf-form-inline">
<Button variant="secondary" type="button" onClick={onResetClientSecret}>
reset
</Button>
</div>
</div>
</div>
) : (
<div className="gf-form-inline">
<div className="gf-form">
<FormLabel className="width-12">Client Secret</FormLabel>
<div className="width-15">
<Input
className="width-30"
placeholder="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
value={clientSecret || ''}
onChange={onClientSecretChange}
/>
</div>
</div>
</div>
)}
{hasSubscriptions && (
<>
<div className="gf-form-inline">
<div className="gf-form">
<FormLabel className="width-12">Default Subscription</FormLabel>
<div className="width-25">
<Select
value={subscriptionOptions.find(subscription => subscription.value === selectedSubscription)}
options={subscriptionOptions}
defaultValue={selectedSubscription}
onChange={onSubscriptionSelectChange}
/>
</div>
</div>
</div>
<div className="gf-form-inline">
<div className="gf-form">
<div className="max-width-30 gf-form-inline">
<Button
variant="secondary"
size="sm"
type="button"
onClick={onLoadSubscriptions}
disabled={!hasRequiredFields}
>
Load Subscriptions
</Button>
</div>
</div>
</div>
</>
)}
</div>
</>
);
}
}
export default AzureCredentialsForm;