Skip to content

Commit 49e96f7

Browse files
authored
feat(metrics): query toggle style (#68975)
1 parent c38b2b3 commit 49e96f7

File tree

9 files changed

+74
-141
lines changed

9 files changed

+74
-141
lines changed

static/app/components/modals/metricWidgetViewerModal/queries.tsx

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import {
3030
filterQueriesByDisplayType,
3131
} from 'sentry/views/dashboards/metrics/utils';
3232
import {DisplayType} from 'sentry/views/dashboards/types';
33-
import {EquationSymbol} from 'sentry/views/metrics/equationSymbol copy';
33+
import {EquationSymbol} from 'sentry/views/metrics/equationSymbol';
3434
import {FormulaInput} from 'sentry/views/metrics/formulaInput';
3535
import {getCreateAlert} from 'sentry/views/metrics/metricQueryContextMenu';
3636
import {QueryBuilder} from 'sentry/views/metrics/queryBuilder';
@@ -90,7 +90,6 @@ export function Queries({
9090
isHidden={query.isHidden}
9191
onChange={isHidden => onQueryChange({isHidden}, index)}
9292
disabled={!query.isHidden && visibleExpressions.length === 1}
93-
isSelected={false}
9493
queryId={query.id}
9594
type={MetricExpressionType.QUERY}
9695
/>
@@ -116,7 +115,6 @@ export function Queries({
116115
isHidden={equation.isHidden}
117116
onChange={isHidden => onEquationChange({isHidden}, index)}
118117
disabled={!equation.isHidden && visibleExpressions.length === 1}
119-
isSelected={false}
120118
queryId={equation.id}
121119
type={MetricExpressionType.EQUATION}
122120
/>
@@ -254,48 +252,45 @@ function EquationContextMenu({equationIndex, removeEquation}: EquationContextMen
254252
interface QueryToggleProps {
255253
disabled: boolean;
256254
isHidden: boolean;
257-
isSelected: boolean;
258255
onChange: (isHidden: boolean) => void;
259256
queryId: number;
260257
type: MetricExpressionType;
261258
}
262259

263-
function QueryToggle({
264-
isHidden,
265-
queryId,
266-
disabled,
267-
onChange,
268-
isSelected,
269-
type,
270-
}: QueryToggleProps) {
271-
let tooltipTitle = isHidden ? t('Show query') : t('Hide query');
272-
if (disabled) {
273-
tooltipTitle = t('At least one query must be visible');
274-
}
260+
function QueryToggle({isHidden, queryId, disabled, onChange, type}: QueryToggleProps) {
261+
const tooltipTitle =
262+
type === MetricExpressionType.QUERY
263+
? isHidden
264+
? t('Show metric')
265+
: t('Hide metric')
266+
: isHidden
267+
? t('Show equation')
268+
: t('Hide equation');
275269

276270
return (
277-
<Tooltip title={tooltipTitle} delay={500}>
271+
<Tooltip
272+
title={!disabled ? tooltipTitle : t('At least one query must be visible')}
273+
delay={500}
274+
>
278275
{type === MetricExpressionType.QUERY ? (
279276
<StyledQuerySymbol
280277
isHidden={isHidden}
281278
queryId={queryId}
282279
isClickable={!disabled}
283280
aria-disabled={disabled}
284-
isSelected={isSelected}
285281
onClick={disabled ? undefined : () => onChange(!isHidden)}
286282
role="button"
287-
aria-label={isHidden ? t('Show query') : t('Hide query')}
283+
aria-label={tooltipTitle}
288284
/>
289285
) : (
290286
<StyledEquationSymbol
291287
isHidden={isHidden}
292288
equationId={queryId}
293289
isClickable={!disabled}
294290
aria-disabled={disabled}
295-
isSelected={isSelected}
296291
onClick={disabled ? undefined : () => onChange(!isHidden)}
297292
role="button"
298-
aria-label={isHidden ? t('Show query') : t('Hide query')}
293+
aria-label={tooltipTitle}
299294
/>
300295
)}
301296
</Tooltip>
@@ -320,11 +315,9 @@ const QueryWrapper = styled('div')<{hasQuerySymbol: boolean}>`
320315
`;
321316

322317
const StyledQuerySymbol = styled(QuerySymbol)<{isClickable: boolean}>`
323-
margin-top: 10px;
324318
${p => p.isClickable && `cursor: pointer;`}
325319
`;
326320
const StyledEquationSymbol = styled(EquationSymbol)<{isClickable: boolean}>`
327-
margin-top: 10px;
328321
${p => p.isClickable && `cursor: pointer;`}
329322
`;
330323

static/app/views/dashboards/metrics/utils.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {
1818
type WidgetQuery,
1919
WidgetType,
2020
} from 'sentry/views/dashboards/types';
21-
import {getEquationSymbol} from 'sentry/views/metrics/equationSymbol copy';
21+
import {getEquationSymbol} from 'sentry/views/metrics/equationSymbol';
2222
import {getQuerySymbol} from 'sentry/views/metrics/querySymbol';
2323
import {getUniqueQueryIdGenerator} from 'sentry/views/metrics/utils/uniqueQueryId';
2424

static/app/views/metrics/equationSymbol copy.tsx

Lines changed: 0 additions & 56 deletions
This file was deleted.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import {forwardRef} from 'react';
2+
3+
import {Symbol} from './querySymbol';
4+
5+
interface EquationSymbolProps extends React.ComponentProps<typeof Symbol> {
6+
equationId: number;
7+
}
8+
9+
export function getEquationSymbol(equationId: number) {
10+
return ${equationId + 1}`;
11+
}
12+
13+
export const EquationSymbol = forwardRef<HTMLSpanElement, EquationSymbolProps>(
14+
function EquationSymbol({equationId, ...props}, ref) {
15+
return (
16+
<Symbol ref={ref} {...props}>
17+
<span>
18+
ƒ<sub>{equationId + 1}</sub>
19+
</span>
20+
</Symbol>
21+
);
22+
}
23+
);

static/app/views/metrics/pageHeaderActions.tsx

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,8 @@ export function PageHeaderActions({showCustomMetricButton, addCustomMetric}: Pro
3737
const router = useRouter();
3838
const organization = useOrganization();
3939
const formulaDependencies = useFormulaDependencies();
40-
const {
41-
isDefaultQuery,
42-
setDefaultQuery,
43-
widgets,
44-
showQuerySymbols,
45-
selectedWidgetIndex,
46-
isMultiChartMode,
47-
} = useMetricsContext();
40+
const {isDefaultQuery, setDefaultQuery, widgets, showQuerySymbols, isMultiChartMode} =
41+
useMetricsContext();
4842
const createDashboard = useCreateDashboard(
4943
widgets,
5044
formulaDependencies,
@@ -127,7 +121,6 @@ export function PageHeaderActions({showCustomMetricButton, addCustomMetric}: Pro
127121
key="icon"
128122
queryId={widget.id}
129123
isHidden={widget.isHidden}
130-
isSelected={index === selectedWidgetIndex && isMultiChartMode}
131124
/>,
132125
]
133126
: [],
@@ -148,7 +141,7 @@ export function PageHeaderActions({showCustomMetricButton, addCustomMetric}: Pro
148141
},
149142
};
150143
}),
151-
[isMultiChartMode, organization, selectedWidgetIndex, showQuerySymbols, widgets]
144+
[organization, showQuerySymbols, widgets]
152145
);
153146

154147
return (

static/app/views/metrics/queries.tsx

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import useOrganization from 'sentry/utils/useOrganization';
2121
import usePageFilters from 'sentry/utils/usePageFilters';
2222
import {DDM_CHART_GROUP} from 'sentry/views/metrics/constants';
2323
import {useMetricsContext} from 'sentry/views/metrics/context';
24-
import {EquationSymbol} from 'sentry/views/metrics/equationSymbol copy';
24+
import {EquationSymbol} from 'sentry/views/metrics/equationSymbol';
2525
import {FormulaInput} from 'sentry/views/metrics/formulaInput';
2626
import {MetricFormulaContextMenu} from 'sentry/views/metrics/metricFormulaContextMenu';
2727
import {MetricQueryContextMenu} from 'sentry/views/metrics/metricQueryContextMenu';
@@ -296,42 +296,40 @@ interface QueryToggleProps {
296296
type: MetricExpressionType;
297297
}
298298

299-
function QueryToggle({
300-
isHidden,
301-
queryId,
302-
disabled,
303-
onChange,
304-
isSelected,
305-
type,
306-
}: QueryToggleProps) {
307-
let tooltipTitle = isHidden ? t('Show query') : t('Hide query');
308-
if (disabled) {
309-
tooltipTitle = t('At least one query must be visible');
310-
}
299+
function QueryToggle({isHidden, queryId, disabled, onChange, type}: QueryToggleProps) {
300+
const tooltipTitle =
301+
type === MetricExpressionType.QUERY
302+
? isHidden
303+
? t('Show metric')
304+
: t('Hide metric')
305+
: isHidden
306+
? t('Show equation')
307+
: t('Hide equation');
311308

312309
return (
313-
<Tooltip title={tooltipTitle} delay={500}>
310+
<Tooltip
311+
title={!disabled ? tooltipTitle : t('At least one query must be visible')}
312+
delay={500}
313+
>
314314
{type === MetricExpressionType.QUERY ? (
315315
<StyledQuerySymbol
316316
isHidden={isHidden}
317317
queryId={queryId}
318318
isClickable={!disabled}
319319
aria-disabled={disabled}
320-
isSelected={isSelected}
321320
onClick={disabled ? undefined : () => onChange(!isHidden)}
322321
role="button"
323-
aria-label={isHidden ? t('Show query') : t('Hide query')}
322+
aria-label={tooltipTitle}
324323
/>
325324
) : (
326325
<StyledEquationSymbol
327326
isHidden={isHidden}
328327
equationId={queryId}
329328
isClickable={!disabled}
330329
aria-disabled={disabled}
331-
isSelected={isSelected}
332330
onClick={disabled ? undefined : () => onChange(!isHidden)}
333331
role="button"
334-
aria-label={isHidden ? t('Show query') : t('Hide query')}
332+
aria-label={tooltipTitle}
335333
/>
336334
)}
337335
</Tooltip>
@@ -347,13 +345,11 @@ const QueryWrapper = styled('div')<{hasSymbol: boolean}>`
347345
`;
348346

349347
const StyledQuerySymbol = styled(QuerySymbol)<{isClickable: boolean}>`
350-
margin-top: 10px;
351348
cursor: not-allowed;
352349
${p => p.isClickable && `cursor: pointer;`}
353350
`;
354351

355352
const StyledEquationSymbol = styled(EquationSymbol)<{isClickable: boolean}>`
356-
margin-top: 10px;
357353
cursor: not-allowed;
358354
${p => p.isClickable && `cursor: pointer;`}
359355
`;

static/app/views/metrics/querySymbol.tsx

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,27 @@ export const getQuerySymbol = (index: number) => {
1515
return result;
1616
};
1717

18-
const Symbol = styled('span')<{isHidden?: boolean; isSelected?: boolean}>`
18+
export const Symbol = styled('span')<{isHidden?: boolean}>`
1919
display: flex;
20-
width: 16px;
21-
height: 16px;
20+
width: 38px;
21+
height: 38px;
2222
line-height: 16px;
2323
padding: ${space(0.5)};
2424
justify-content: center;
2525
align-items: center;
2626
flex-shrink: 0;
27-
border-radius: 50%;
27+
border-radius: ${p => p.theme.borderRadius};
2828
font-weight: 500;
29-
color: ${p => p.theme.black};
30-
font-size: 11px;
31-
background: ${p => p.theme.yellow300};
32-
33-
${p =>
34-
p.isSelected &&
35-
!p.isHidden &&
36-
`
37-
background: ${p.theme.purple300};
38-
color: ${p.theme.white};
39-
`}
29+
color: ${p => p.theme.white};
30+
font-size: 14px;
31+
background: ${p => p.theme.purple300};
4032
4133
${p =>
4234
p.isHidden &&
4335
`
44-
background: ${p.theme.gray300};
45-
color: ${p.theme.white};
36+
background: ${p.theme.background};
37+
color: ${p.theme.textColor};
38+
border: 1px solid ${p.theme.border};
4639
`}
4740
`;
4841

static/app/views/metrics/utils/widgetToQuery.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {isMetricsEquationWidget, type MetricsWidget} from 'sentry/utils/metrics/types';
22
import type {MetricsQueryApiQueryParams} from 'sentry/utils/metrics/useMetricsQuery';
3-
import {getEquationSymbol} from 'sentry/views/metrics/equationSymbol copy';
3+
import {getEquationSymbol} from 'sentry/views/metrics/equationSymbol';
44
import {getQuerySymbol} from 'sentry/views/metrics/querySymbol';
55

66
export function widgetToQuery(

static/app/views/metrics/widget.tsx

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,7 @@ import type {Series} from 'sentry/views/metrics/chart/types';
5454
import {useFocusArea} from 'sentry/views/metrics/chart/useFocusArea';
5555
import {useMetricChartSamples} from 'sentry/views/metrics/chart/useMetricChartSamples';
5656
import type {FocusAreaProps} from 'sentry/views/metrics/context';
57-
import {EquationSymbol} from 'sentry/views/metrics/equationSymbol copy';
5857
import {FormularFormatter} from 'sentry/views/metrics/formulaParser/formatter';
59-
import {QuerySymbol} from 'sentry/views/metrics/querySymbol';
6058
import {SummaryTable} from 'sentry/views/metrics/summaryTable';
6159
import {useSeriesHover} from 'sentry/views/metrics/useSeriesHover';
6260
import {updateQueryWithSeriesFilter} from 'sentry/views/metrics/utils';
@@ -192,16 +190,9 @@ export const MetricWidget = memo(
192190
>
193191
<PanelBody>
194192
<MetricWidgetHeader>
195-
{showQuerySymbols &&
196-
queryId !== undefined &&
197-
(queries[0] && isMetricFormula(queries[0]) ? (
198-
<EquationSymbol
199-
equationId={queryId}
200-
isSelected={isSelected && hasSiblings}
201-
/>
202-
) : (
203-
<QuerySymbol queryId={queryId} isSelected={isSelected && hasSiblings} />
204-
))}
193+
{showQuerySymbols && queryId !== undefined && queries[0] && (
194+
<span>{queries[0].name}:</span>
195+
)}
205196
<WidgetTitle>
206197
<StyledTooltip
207198
title={widgetTitle}
@@ -637,7 +628,7 @@ const MetricWidgetHeader = styled('div')`
637628
display: flex;
638629
justify-content: space-between;
639630
align-items: center;
640-
gap: ${space(1)};
631+
gap: ${space(0.5)};
641632
padding-left: ${space(2)};
642633
padding-top: ${space(1.5)};
643634
padding-right: ${space(2)};

0 commit comments

Comments
 (0)