import { toOption } from '@grafana/data'; import { Select, Switch } from '@grafana/ui'; import React, { useEffect, useMemo } from 'react'; import { STATISTICS } from '../../cloudwatch-sql/language'; import { CloudWatchDatasource } from '../../datasource'; import { useDimensionKeys, useMetrics, useNamespaces } from '../../hooks'; import { CloudWatchMetricsQuery } from '../../types'; import { appendTemplateVariables } from '../../utils/utils'; import EditorField from '../ui/EditorField'; import EditorFieldGroup from '../ui/EditorFieldGroup'; import { stringArrayToDimensions, getMetricNameFromExpression, getNamespaceFromExpression, getSchemaLabelKeys as getSchemaLabels, isUsingWithSchema, setAggregation, setMetricName, setNamespace, setSchemaLabels, setWithSchema, } from './utils'; interface SQLBuilderSelectRowProps { query: CloudWatchMetricsQuery; datasource: CloudWatchDatasource; onQueryChange: (query: CloudWatchMetricsQuery) => void; } const AGGREGATIONS = STATISTICS.map(toOption); const SQLBuilderSelectRow: React.FC = ({ datasource, query, onQueryChange }) => { const sql = query.sql ?? {}; const aggregation = sql.select?.name; useEffect(() => { if (!aggregation) { onQueryChange(setAggregation(query, STATISTICS[0])); } }, [aggregation, onQueryChange, query]); const metricName = getMetricNameFromExpression(sql.select); const namespace = getNamespaceFromExpression(sql.from); const schemaLabels = getSchemaLabels(sql.from); const withSchemaEnabled = isUsingWithSchema(sql.from); const namespaceOptions = useNamespaces(datasource); const metricOptions = useMetrics(datasource, query.region, namespace); const existingFilters = useMemo(() => stringArrayToDimensions(schemaLabels ?? []), [schemaLabels]); const unusedDimensionKeys = useDimensionKeys(datasource, query.region, namespace, metricName, existingFilters); const dimensionKeys = useMemo( () => (schemaLabels?.length ? [...unusedDimensionKeys, ...schemaLabels.map(toOption)] : unusedDimensionKeys), [unusedDimensionKeys, schemaLabels] ); return ( <> item && onQueryChange(setSchemaLabels(query, item))} menuShouldPortal /> )} value && onQueryChange(setAggregation(query, value))} menuShouldPortal /> ); }; export default SQLBuilderSelectRow;