diff --git a/frontend/src/components/HostMetricsDetail/HostMetricsDetail.styles.scss b/frontend/src/components/HostMetricsDetail/HostMetricsDetail.styles.scss index 511348c463c1..219c0bd46457 100644 --- a/frontend/src/components/HostMetricsDetail/HostMetricsDetail.styles.scss +++ b/frontend/src/components/HostMetricsDetail/HostMetricsDetail.styles.scss @@ -169,6 +169,7 @@ box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.1); } } + .ant-drawer-close { padding: 0px; } diff --git a/frontend/src/constants/query.ts b/frontend/src/constants/query.ts index a7852cdb92e2..b50eb38d272a 100644 --- a/frontend/src/constants/query.ts +++ b/frontend/src/constants/query.ts @@ -46,6 +46,7 @@ export enum QueryParams { msgSystem = 'msgSystem', destination = 'destination', kindString = 'kindString', + summaryFilters = 'summaryFilters', tab = 'tab', thresholds = 'thresholds', selectedExplorerView = 'selectedExplorerView', diff --git a/frontend/src/container/GridCardLayout/GridCard/FullView/PanelTypeSelector.scss b/frontend/src/container/GridCardLayout/GridCard/FullView/PanelTypeSelector.scss new file mode 100644 index 000000000000..757921952b6e --- /dev/null +++ b/frontend/src/container/GridCardLayout/GridCard/FullView/PanelTypeSelector.scss @@ -0,0 +1,42 @@ +.panel-type-selector { + display: flex; + flex-direction: column; + gap: 8px; + margin-left: 16px; + min-width: 180px; + + .typography { + font-size: 12px; + font-weight: 500; + color: var(--bg-slate-600); + line-height: 16px; + white-space: nowrap; + } + + .panel-type-select { + .view-panel-select-option { + display: flex; + align-items: center; + gap: 8px; + + .icon { + display: flex; + align-items: center; + justify-content: center; + } + + .display { + font-size: 14px; + line-height: 20px; + } + } + } +} + +.ant-select-item-option-content { + .view-panel-select-option { + display: flex; + align-items: center; + gap: 8px; + } +} diff --git a/frontend/src/container/GridCardLayout/GridCard/FullView/PanelTypeSelector.tsx b/frontend/src/container/GridCardLayout/GridCard/FullView/PanelTypeSelector.tsx new file mode 100644 index 000000000000..19355d3ba5a1 --- /dev/null +++ b/frontend/src/container/GridCardLayout/GridCard/FullView/PanelTypeSelector.tsx @@ -0,0 +1,79 @@ +import './PanelTypeSelector.scss'; + +import { Select, Typography } from 'antd'; +import { QueryParams } from 'constants/query'; +import { PANEL_TYPES } from 'constants/queryBuilder'; +import GraphTypes from 'container/NewDashboard/ComponentsSlider/menuItems'; +import { handleQueryChange } from 'container/NewWidget/utils'; +import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder'; +import { useCallback } from 'react'; +import { Query } from 'types/api/queryBuilder/queryBuilderData'; + +const { Option } = Select; + +interface PanelTypeSelectorProps { + selectedPanelType: PANEL_TYPES; + disabled?: boolean; + query: Query; + widgetId: string; +} + +function PanelTypeSelector({ + selectedPanelType, + disabled = false, + query, + widgetId, +}: PanelTypeSelectorProps): JSX.Element { + const { redirectWithQueryBuilderData } = useQueryBuilder(); + + const handleChange = useCallback( + (newPanelType: PANEL_TYPES): void => { + // Transform the query for the new panel type using handleQueryChange + const transformedQuery = handleQueryChange( + newPanelType as any, + query, + selectedPanelType, + ); + + // Use redirectWithQueryBuilderData to update URL with transformed query and new panel type + redirectWithQueryBuilderData( + transformedQuery, + { + [QueryParams.expandedWidgetId]: widgetId, + [QueryParams.graphType]: newPanelType, + }, + undefined, + true, + ); + }, + [redirectWithQueryBuilderData, query, selectedPanelType, widgetId], + ); + + return ( +