import { cx } from '@emotion/css'; import { FormEvent, useMemo, useState } from 'react'; import { useEffectOnce } from 'react-use'; import { AzureCredentials } from '@grafana/azure-sdk'; import { config } from '@grafana/runtime'; import { InlineField, InlineFieldRow, InlineSwitch, Input } from '@grafana/ui'; import { HttpSettingsBaseProps } from '@grafana/ui/src/components/DataSourceSettings/types'; import { getAzureCloudOptions, getCredentials, updateCredentials } from './AzureCredentialsConfig'; import { AzureCredentialsForm } from './AzureCredentialsForm'; export const AzureAuthSettings = (props: HttpSettingsBaseProps) => { const { dataSourceConfig, onChange } = props; const [overrideAudienceAllowed] = useState(!!config.featureToggles.prometheusAzureOverrideAudience); const [overrideAudienceChecked, setOverrideAudienceChecked] = useState( !!dataSourceConfig.jsonData.azureEndpointResourceId ); const credentials = useMemo(() => getCredentials(dataSourceConfig), [dataSourceConfig]); const onCredentialsChange = (credentials: AzureCredentials): void => { onChange(updateCredentials(dataSourceConfig, credentials)); }; const onOverrideAudienceChange = (ev: FormEvent): void => { setOverrideAudienceChecked(ev.currentTarget.checked); if (!ev.currentTarget.checked) { onChange({ ...dataSourceConfig, jsonData: { ...dataSourceConfig.jsonData, azureEndpointResourceId: undefined }, }); } }; const onResourceIdChange = (ev: FormEvent): void => { if (overrideAudienceChecked) { onChange({ ...dataSourceConfig, jsonData: { ...dataSourceConfig.jsonData, azureEndpointResourceId: ev.currentTarget.value }, }); } }; // The auth type needs to be set on the first load of the data source useEffectOnce(() => { if (!dataSourceConfig.jsonData.authType) { onCredentialsChange(credentials); } }); return ( <>
Azure authentication
{overrideAudienceAllowed && ( <>
Azure configuration
{overrideAudienceChecked && ( )}
)} ); }; export default AzureAuthSettings;