From 8d9a865751ad723335db36edf7dae319955577da Mon Sep 17 00:00:00 2001 From: Yunus M Date: Sat, 20 Sep 2025 16:34:20 +0530 Subject: [PATCH] feat: enable users to query meter specific data in alerts --- .../QueryBuilderV2/QueryBuilderV2.styles.scss | 2 +- .../QueryBuilderV2/QueryBuilderV2.tsx | 6 ++++ .../MetricsSelect/MetricsSelect.styles.scss | 9 ++++-- .../QueryV2/MetricsSelect/MetricsSelect.tsx | 32 +++++++++++++++++-- .../QueryBuilderV2/QueryV2/QueryV2.tsx | 12 +++++-- .../container/FormAlertRules/QuerySection.tsx | 9 ++++++ .../MeterExplorer/Breakdown/BreakDown.tsx | 2 +- .../QueryBuilder/QueryBuilder.interfaces.ts | 2 ++ 8 files changed, 66 insertions(+), 8 deletions(-) diff --git a/frontend/src/components/QueryBuilderV2/QueryBuilderV2.styles.scss b/frontend/src/components/QueryBuilderV2/QueryBuilderV2.styles.scss index fcfafc3688cc..e0195ef0fed5 100644 --- a/frontend/src/components/QueryBuilderV2/QueryBuilderV2.styles.scss +++ b/frontend/src/components/QueryBuilderV2/QueryBuilderV2.styles.scss @@ -398,7 +398,7 @@ } .qb-search-container { - .metrics-select-container { + .metrics-container { margin-bottom: 12px; } } diff --git a/frontend/src/components/QueryBuilderV2/QueryBuilderV2.tsx b/frontend/src/components/QueryBuilderV2/QueryBuilderV2.tsx index 7be666c27084..086cf490bf93 100644 --- a/frontend/src/components/QueryBuilderV2/QueryBuilderV2.tsx +++ b/frontend/src/components/QueryBuilderV2/QueryBuilderV2.tsx @@ -22,6 +22,8 @@ export const QueryBuilderV2 = memo(function QueryBuilderV2({ showOnlyWhereClause = false, showTraceOperator = false, version, + onSignalSourceChange, + signalSourceChangeEnabled = false, }: QueryBuilderProps): JSX.Element { const { currentQuery, @@ -175,6 +177,8 @@ export const QueryBuilderV2 = memo(function QueryBuilderV2({ queryVariant={config?.queryVariant || 'dropdown'} showOnlyWhereClause={showOnlyWhereClause} isListViewPanel={isListViewPanel} + onSignalSourceChange={onSignalSourceChange || ((): void => {})} + signalSourceChangeEnabled={signalSourceChangeEnabled} /> ) : ( currentQuery.builder.queryData.map((query, index) => ( @@ -194,6 +198,8 @@ export const QueryBuilderV2 = memo(function QueryBuilderV2({ showOnlyWhereClause={showOnlyWhereClause} isListViewPanel={isListViewPanel} signalSource={config?.signalSource || ''} + onSignalSourceChange={onSignalSourceChange || ((): void => {})} + signalSourceChangeEnabled={signalSourceChangeEnabled} /> )) )} diff --git a/frontend/src/components/QueryBuilderV2/QueryV2/MetricsSelect/MetricsSelect.styles.scss b/frontend/src/components/QueryBuilderV2/QueryV2/MetricsSelect/MetricsSelect.styles.scss index 9038e8ce433a..6d6638ae6020 100644 --- a/frontend/src/components/QueryBuilderV2/QueryV2/MetricsSelect/MetricsSelect.styles.scss +++ b/frontend/src/components/QueryBuilderV2/QueryV2/MetricsSelect/MetricsSelect.styles.scss @@ -1,5 +1,10 @@ -.metrics-select-container { +.metrics-source-select-container { margin-bottom: 8px; + display: flex; + flex-direction: row; + align-items: flex-start; + gap: 8px; + width: 100%; .ant-select-selector { width: 100%; @@ -42,7 +47,7 @@ } .lightMode { - .metrics-select-container { + .metrics-source-select-container { .ant-select-selector { border: 1px solid var(--bg-vanilla-300) !important; background: var(--bg-vanilla-100); diff --git a/frontend/src/components/QueryBuilderV2/QueryV2/MetricsSelect/MetricsSelect.tsx b/frontend/src/components/QueryBuilderV2/QueryV2/MetricsSelect/MetricsSelect.tsx index b04e1d303ffc..e52afb2a1010 100644 --- a/frontend/src/components/QueryBuilderV2/QueryV2/MetricsSelect/MetricsSelect.tsx +++ b/frontend/src/components/QueryBuilderV2/QueryV2/MetricsSelect/MetricsSelect.tsx @@ -1,20 +1,31 @@ import './MetricsSelect.styles.scss'; +import { Select } from 'antd'; import { AggregatorFilter } from 'container/QueryBuilder/filters'; import { useQueryOperations } from 'hooks/queryBuilder/useQueryBuilderOperations'; -import { memo } from 'react'; +import { memo, useState } from 'react'; import { IBuilderQuery } from 'types/api/queryBuilder/queryBuilderData'; +import { SelectOption } from 'types/common/select'; + +export const SOURCE_OPTIONS: SelectOption[] = [ + { value: 'metrics', label: 'Metrics' }, + { value: 'meter', label: 'Meter' }, +]; export const MetricsSelect = memo(function MetricsSelect({ query, index, version, signalSource, + onSignalSourceChange, + signalSourceChangeEnabled = false, }: { query: IBuilderQuery; index: number; version: string; signalSource: 'meter' | ''; + onSignalSourceChange: (value: string) => void; + signalSourceChangeEnabled: boolean; }): JSX.Element { const { handleChangeAggregatorAttribute } = useQueryOperations({ index, @@ -22,8 +33,25 @@ export const MetricsSelect = memo(function MetricsSelect({ entityVersion: version, }); + const [source, setSource] = useState( + signalSource === 'meter' ? 'meter' : 'metrics', + ); + + const handleSignalSourceChange = (value: string): void => { + setSource(value); + onSignalSourceChange(value); + }; + return ( -
+
+