grafana/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/SubscriptionField.tsx
Andreas Christou 37aa45001f
AzureMonitor: Correctly update subscriptions value in ARG editor (#55860)
* Correctly update subscriptions prop in query

* Simplify setting of subscriptions value
2022-09-28 11:59:07 +01:00

95 lines
2.4 KiB
TypeScript

import React, { useCallback, useMemo } from 'react';
import { SelectableValue } from '@grafana/data';
import { Select, MultiSelect } from '@grafana/ui';
import { AzureMonitorQuery, AzureQueryEditorFieldProps, AzureMonitorOption, AzureQueryType } from '../types';
import { findOptions } from '../utils/common';
import { Field } from './Field';
interface SubscriptionFieldProps extends AzureQueryEditorFieldProps {
onQueryChange: (newQuery: AzureMonitorQuery) => void;
subscriptions: AzureMonitorOption[];
multiSelect?: boolean;
}
const SubscriptionField: React.FC<SubscriptionFieldProps> = ({
query,
subscriptions,
variableOptionGroup,
onQueryChange,
multiSelect = false,
}) => {
const handleChange = useCallback(
(change: SelectableValue<string>) => {
if (!change.value) {
return;
}
let newQuery: AzureMonitorQuery = {
...query,
subscription: change.value,
};
if (query.queryType === AzureQueryType.AzureMonitor) {
newQuery.azureMonitor = {
...newQuery.azureMonitor,
resourceGroup: undefined,
metricNamespace: undefined,
resourceName: undefined,
metricName: undefined,
aggregation: undefined,
timeGrain: '',
dimensionFilters: [],
};
}
onQueryChange(newQuery);
},
[query, onQueryChange]
);
const onSubscriptionsChange = useCallback(
(change: Array<SelectableValue<string>>) => {
if (!change) {
return;
}
onQueryChange({
...query,
subscriptions: change.map((c) => c.value ?? ''),
});
},
[query, onQueryChange]
);
const options = useMemo(() => [...subscriptions, variableOptionGroup], [subscriptions, variableOptionGroup]);
return multiSelect ? (
<Field label="Subscriptions">
<MultiSelect
isClearable
value={findOptions([...subscriptions, ...variableOptionGroup.options], query.subscriptions)}
inputId="azure-monitor-subscriptions-field"
onChange={onSubscriptionsChange}
options={options}
width={38}
/>
</Field>
) : (
<Field label="Subscription">
<Select
value={query.subscription}
inputId="azure-monitor-subscriptions-field"
onChange={handleChange}
options={options}
width={38}
allowCustomValue
/>
</Field>
);
};
export default SubscriptionField;