From a30b75a2a8be6f81f877953027d43989358e48c4 Mon Sep 17 00:00:00 2001 From: Yunus M Date: Wed, 27 Mar 2024 18:46:05 +0530 Subject: [PATCH] feat: show environments in a separate dropdown (#4717) * feat: show environments in a separate dropdown --- .../ResourceAttributesFilter.styles.scss | 20 ++ .../ResourceAttributesFilter.tsx | 172 +++++++++++++----- .../components/QueryChip/QueryChip.tsx | 5 +- .../ResourceAttributesFilter/styles.ts | 7 +- .../useResourceAttribute/ResourceProvider.tsx | 37 +++- .../src/hooks/useResourceAttribute/types.ts | 1 + .../src/hooks/useResourceAttribute/utils.ts | 48 +++++ frontend/src/pages/Services/Metrics.test.tsx | 4 +- 8 files changed, 237 insertions(+), 57 deletions(-) create mode 100644 frontend/src/container/ResourceAttributesFilter/ResourceAttributesFilter.styles.scss diff --git a/frontend/src/container/ResourceAttributesFilter/ResourceAttributesFilter.styles.scss b/frontend/src/container/ResourceAttributesFilter/ResourceAttributesFilter.styles.scss new file mode 100644 index 0000000000..9d10445703 --- /dev/null +++ b/frontend/src/container/ResourceAttributesFilter/ResourceAttributesFilter.styles.scss @@ -0,0 +1,20 @@ +.resourceAttributesFilter-container { + display: flex; + align-items: center; + justify-content: stretch; + flex-wrap: wrap; + gap: 8px; + margin-bottom: 16px; + + .resource-attributes-selector { + flex: 1; + } + + .environment-selector { + min-width: 200px; + } + + .ant-form-item { + margin-bottom: 0; + } +} diff --git a/frontend/src/container/ResourceAttributesFilter/ResourceAttributesFilter.tsx b/frontend/src/container/ResourceAttributesFilter/ResourceAttributesFilter.tsx index a61a0ce0ee..4211291742 100644 --- a/frontend/src/container/ResourceAttributesFilter/ResourceAttributesFilter.tsx +++ b/frontend/src/container/ResourceAttributesFilter/ResourceAttributesFilter.tsx @@ -1,10 +1,17 @@ +import './ResourceAttributesFilter.styles.scss'; + import { CloseCircleFilled } from '@ant-design/icons'; import { Button, Select, Spin } from 'antd'; import useResourceAttribute, { isResourceEmpty, } from 'hooks/useResourceAttribute'; -import { convertMetricKeyToTrace } from 'hooks/useResourceAttribute/utils'; -import { ReactNode, useMemo } from 'react'; +import { + convertMetricKeyToTrace, + getEnvironmentTagKeys, + getEnvironmentTagValues, +} from 'hooks/useResourceAttribute/utils'; +import { ReactNode, useEffect, useMemo, useState } from 'react'; +import { SelectOption } from 'types/common/select'; import { popupContainer } from 'utils/selectPopupContainer'; import { v4 as uuid } from 'uuid'; @@ -22,60 +29,129 @@ function ResourceAttributesFilter({ handleClearAll, handleFocus, handleChange, + handleEnvironmentChange, selectedQuery, optionsData, loading, } = useResourceAttribute(); - const isEmpty = useMemo( - () => isResourceEmpty(queries, staging, selectedQuery), - [queries, selectedQuery, staging], + const [environments, setEnvironments] = useState< + SelectOption[] + >([]); + + const [selectedEnvironments, setSelectedEnvironments] = useState([]); + + const queriesExcludingEnvironment = useMemo( + () => + queries.filter( + (query) => query.tagKey !== 'resource_deployment_environment', + ), + [queries], ); - return ( - -
- {queries.map((query) => ( - - ))} - {staging.map((query, idx) => ( - - {idx === 0 ? convertMetricKeyToTrace(query) : query} - - ))} -
- + {environments.map((opt) => ( + + {opt.label} + + ))} + + + +
+ +
+ {queriesExcludingEnvironment.map((query) => ( + + ))} + {staging.map((query, idx) => ( + + {idx === 0 ? convertMetricKeyToTrace(query) : query} + + ))} +
+