Skip to content

Commit 69ff8f2

Browse files
committed
Restore Custom Scales feature
1 parent a6668ee commit 69ff8f2

File tree

2 files changed

+56
-29
lines changed

2 files changed

+56
-29
lines changed

src/TimeSeriesPanel.tsx

+38-26
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,19 @@
11
import { config } from 'app/core/config';
22
import React, { useCallback, useMemo, useState } from 'react';
3-
import {
4-
CartesianCoords2D,
5-
DashboardCursorSync,
6-
DataFrame,
7-
DataFrameType,
8-
PanelProps,
9-
toDataFrame,
10-
VizOrientation,
11-
} from '@grafana/data';
3+
import { DashboardCursorSync, DataFrame, DataFrameType, PanelProps, toDataFrame, VizOrientation } from '@grafana/data';
124
import { getAppEvents, getBackendSrv, PanelDataErrorView } from '@grafana/runtime';
135
import { TooltipDisplayMode } from '@grafana/schema';
14-
import {
15-
EventBusPlugin,
16-
KeyboardPlugin,
17-
MenuItemProps,
18-
TooltipPlugin,
19-
TooltipPlugin2,
20-
usePanelContext,
21-
ZoomPlugin,
22-
} from '@grafana/ui';
6+
import { Button, EventBusPlugin, KeyboardPlugin, TooltipPlugin2, usePanelContext } from '@grafana/ui';
237
import { TimeSeries } from 'app/core/components/TimeSeries/TimeSeries';
248
import { Options } from './panelcfg.gen';
25-
import { AnnotationEditorPlugin } from './plugins/AnnotationEditorPlugin';
26-
import { AnnotationsPlugin } from './plugins/AnnotationsPlugin';
27-
import { ContextMenuPlugin } from './plugins/ContextMenuPlugin';
289
import { ExemplarsPlugin, getVisibleLabels } from './plugins/ExemplarsPlugin';
2910
import { OutsideRangePlugin } from './plugins/OutsideRangePlugin';
3011
import { ThresholdControlsPlugin } from './plugins/ThresholdControlsPlugin';
3112
import { TimescaleEditor } from './plugins/timescales/TimescaleEditor';
3213
import { TimescaleItem } from './plugins/timescales/TimescaleEditorForm';
3314
import { getPrepareTimeseriesSuggestion } from './suggestions';
3415
import { useRuntimeVariables } from './hooks';
35-
import { getTimezones, prepareGraphableFields, regenerateLinksSupplier } from './utils';
16+
import { getTimezones, prepareGraphableFields } from './utils';
3617
import { TimeRange2, TooltipHoverMode } from '@grafana/ui/src/components/uPlot/plugins/TooltipPlugin2';
3718
import { TimeSeriesTooltip } from './TimeSeriesTooltip';
3819
import { AnnotationsPlugin2 } from './plugins/AnnotationsPlugin2';
@@ -63,10 +44,7 @@ export const TimeSeriesPanel = ({
6344
} = usePanelContext();
6445

6546
const [isAddingTimescale, setAddingTimescale] = useState(false);
66-
const [timescaleTriggerCoords, setTimescaleTriggerCoords] = useState<{
67-
viewport: CartesianCoords2D;
68-
plotCanvas: CartesianCoords2D;
69-
} | null>(null);
47+
const [timescaleTriggerCoords, setTimescaleTriggerCoords] = useState<{ left: number; top: number } | null>(null);
7048

7149
const isVerticallyOriented = options.orientation === VizOrientation.Vertical;
7250
const frames = useMemo(() => prepareGraphableFields(data.series, config.theme2, timeRange), [data.series, timeRange]);
@@ -273,6 +251,27 @@ export const TimeSeriesPanel = ({
273251
isPinned={isPinned}
274252
annotate={enableAnnotationCreation ? annotate : undefined}
275253
maxHeight={options.tooltip.maxHeight}
254+
footerContent={
255+
<>
256+
<Button
257+
icon="channel-add"
258+
variant="secondary"
259+
size="sm"
260+
id="custom-scales"
261+
onClick={() => {
262+
setTimescaleTriggerCoords({
263+
left: u.rect.left + (u.cursor.left ?? 0),
264+
top: u.rect.top + (u.cursor.top ?? 0),
265+
});
266+
setAddingTimescale(true);
267+
getTimescales();
268+
dismiss();
269+
}}
270+
>
271+
Custom scales
272+
</Button>
273+
</>
274+
}
276275
/>
277276
);
278277
}}
@@ -306,6 +305,19 @@ export const TimeSeriesPanel = ({
306305
)}
307306
</>
308307
)}
308+
{isAddingTimescale && (
309+
<TimescaleEditor
310+
onSave={onUpsertTimescales}
311+
onDismiss={() => setAddingTimescale(false)}
312+
scales={scales}
313+
style={{
314+
position: 'absolute',
315+
left: timescaleTriggerCoords?.left,
316+
top: timescaleTriggerCoords?.top,
317+
}}
318+
timescalesFrame={timescalesFrame}
319+
/>
320+
)}
309321
</>
310322
);
311323
}}

src/TimeSeriesTooltip.tsx

+18-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { css } from '@emotion/css';
22
import React, { ReactNode } from 'react';
33

4-
import { DataFrame, Field, FieldType, formattedValueToString } from '@grafana/data';
4+
import { DataFrame, Field, FieldType, formattedValueToString, GrafanaTheme2 } from '@grafana/data';
55
import { SortOrder, TooltipDisplayMode } from '@grafana/schema/dist/esm/common/common.gen';
66
import { useStyles2 } from '@grafana/ui';
77
import { VizTooltipContent } from '@grafana/ui/src/components/VizTooltip/VizTooltipContent';
@@ -36,6 +36,11 @@ export interface TimeSeriesTooltipProps {
3636

3737
annotate?: () => void;
3838
maxHeight?: number;
39+
40+
/**
41+
* Footer Content
42+
*/
43+
footerContent?: ReactNode;
3944
}
4045

4146
export const TimeSeriesTooltip = ({
@@ -48,6 +53,7 @@ export const TimeSeriesTooltip = ({
4853
isPinned,
4954
annotate,
5055
maxHeight,
56+
footerContent = null,
5157
}: TimeSeriesTooltipProps) => {
5258
const styles = useStyles2(getStyles);
5359

@@ -80,7 +86,12 @@ export const TimeSeriesTooltip = ({
8086
const dataIdx = dataIdxs[seriesIdx]!;
8187
const links = getDataLinks(field, dataIdx);
8288

83-
footer = <VizTooltipFooter dataLinks={links} annotate={annotate} />;
89+
footer = (
90+
<>
91+
<VizTooltipFooter dataLinks={links} annotate={annotate} />
92+
{footerContent && <div className={styles.footerContent}>{footerContent}</div>}
93+
</>
94+
);
8495
}
8596

8697
const headerItem: VizTooltipItem | null = xField.config.custom?.hideFrom?.tooltip
@@ -104,9 +115,13 @@ export const TimeSeriesTooltip = ({
104115
);
105116
};
106117

107-
export const getStyles = () => ({
118+
export const getStyles = (theme: GrafanaTheme2) => ({
108119
wrapper: css({
109120
display: 'flex',
110121
flexDirection: 'column',
111122
}),
123+
footerContent: css({
124+
borderTop: `1px solid ${theme.colors.border.medium}`,
125+
padding: theme.spacing(1),
126+
}),
112127
});

0 commit comments

Comments
 (0)