diff --git a/packages/grafana-data/src/field/fieldState.ts b/packages/grafana-data/src/field/fieldState.ts index 04f1cc5abef..7ae0552baa2 100644 --- a/packages/grafana-data/src/field/fieldState.ts +++ b/packages/grafana-data/src/field/fieldState.ts @@ -1,5 +1,3 @@ -import { isEqual } from 'lodash'; - import { DataFrame, Field, TIME_SERIES_VALUE_FIELD_NAME, FieldType, TIME_SERIES_TIME_FIELD_NAME } from '../types'; import { formatLabels } from '../utils/labels'; @@ -167,7 +165,7 @@ export function getUniqueFieldName(field: Field, frame?: DataFrame) { for (let i = 0; i < frame.fields.length; i++) { const otherField = frame.fields[i]; - if (isEqual(field, otherField)) { + if (field === otherField) { foundSelf = true; if (dupeCount > 0) { diff --git a/public/app/features/explore/ExploreQueryInspector.tsx b/public/app/features/explore/ExploreQueryInspector.tsx index 1af76715975..d9f6d817142 100644 --- a/public/app/features/explore/ExploreQueryInspector.tsx +++ b/public/app/features/explore/ExploreQueryInspector.tsx @@ -1,9 +1,9 @@ import React, { useEffect } from 'react'; import { connect, ConnectedProps } from 'react-redux'; -import { CoreApp, LoadingState, TimeZone } from '@grafana/data'; +import { CoreApp, LoadingState } from '@grafana/data'; import { reportInteraction } from '@grafana/runtime/src'; -import { defaultTimeZone } from '@grafana/schema'; +import { defaultTimeZone, TimeZone } from '@grafana/schema'; import { TabbedContainer, TabConfig } from '@grafana/ui'; import { ExploreDrawer } from 'app/features/explore/ExploreDrawer'; import { InspectDataTab } from 'app/features/inspector/InspectDataTab'; diff --git a/public/app/features/explore/ExploreTimeControls.tsx b/public/app/features/explore/ExploreTimeControls.tsx index e5cfc67fe2c..5401395b842 100644 --- a/public/app/features/explore/ExploreTimeControls.tsx +++ b/public/app/features/explore/ExploreTimeControls.tsx @@ -1,7 +1,8 @@ import React, { Component } from 'react'; -import { TimeRange, TimeZone, RawTimeRange, dateTimeForTimeZone, dateMath } from '@grafana/data'; +import { TimeRange, RawTimeRange, dateTimeForTimeZone, dateMath } from '@grafana/data'; import { reportInteraction } from '@grafana/runtime'; +import { TimeZone } from '@grafana/schema'; import { TimePickerWithHistory } from 'app/core/components/TimePicker/TimePickerWithHistory'; import { getShiftedTimeRange, getZoomedTimeRange } from 'app/core/utils/timePicker'; diff --git a/public/app/features/explore/Graph/ExploreGraph.tsx b/public/app/features/explore/Graph/ExploreGraph.tsx index 652ccffd42b..36025b3a861 100644 --- a/public/app/features/explore/Graph/ExploreGraph.tsx +++ b/public/app/features/explore/Graph/ExploreGraph.tsx @@ -12,7 +12,6 @@ import { getFrameDisplayName, LoadingState, SplitOpen, - TimeZone, ThresholdsConfig, DashboardCursorSync, EventBus, @@ -24,6 +23,7 @@ import { TooltipDisplayMode, SortOrder, GraphThresholdsStyleConfig, + TimeZone, } from '@grafana/schema'; import { PanelContext, PanelContextProvider, SeriesVisibilityChangeMode, useTheme2 } from '@grafana/ui'; import { GraphFieldConfig } from 'app/plugins/panel/graph/types'; diff --git a/public/app/features/explore/Logs/LiveLogs.tsx b/public/app/features/explore/Logs/LiveLogs.tsx index 3439db19eae..0a269840e2f 100644 --- a/public/app/features/explore/Logs/LiveLogs.tsx +++ b/public/app/features/explore/Logs/LiveLogs.tsx @@ -2,7 +2,8 @@ import { css, cx } from '@emotion/css'; import React, { PureComponent } from 'react'; import tinycolor from 'tinycolor2'; -import { LogRowModel, TimeZone, dateTimeFormat, GrafanaTheme2, LogsSortOrder } from '@grafana/data'; +import { LogRowModel, dateTimeFormat, GrafanaTheme2, LogsSortOrder } from '@grafana/data'; +import { TimeZone } from '@grafana/schema'; import { Button, Themeable2, withTheme2 } from '@grafana/ui'; import { LogMessageAnsi } from '../../logs/components/LogMessageAnsi'; diff --git a/public/app/features/explore/Logs/Logs.test.tsx b/public/app/features/explore/Logs/Logs.test.tsx index b14f3db4cd9..df9d8a74c4b 100644 --- a/public/app/features/explore/Logs/Logs.test.tsx +++ b/public/app/features/explore/Logs/Logs.test.tsx @@ -10,9 +10,9 @@ import { LoadingState, LogLevel, LogRowModel, - MutableDataFrame, standardTransformersRegistry, toUtc, + createDataFrame, } from '@grafana/data'; import { organizeFieldsTransformer } from '@grafana/data/src/transformations/transformers/organize'; import { config } from '@grafana/runtime'; @@ -498,7 +498,7 @@ const makeLog = (overrides: Partial): LogRowModel => { uid, entryFieldIndex: 0, rowIndex: 0, - dataFrame: new MutableDataFrame(), + dataFrame: createDataFrame({ fields: [] }), logLevel: LogLevel.debug, entry, hasAnsi: false, diff --git a/public/app/features/explore/Logs/Logs.tsx b/public/app/features/explore/Logs/Logs.tsx index 1b2a439c3af..5bf9585cd57 100644 --- a/public/app/features/explore/Logs/Logs.tsx +++ b/public/app/features/explore/Logs/Logs.tsx @@ -30,11 +30,10 @@ import { serializeStateToUrlParam, SplitOpen, TimeRange, - TimeZone, urlUtil, } from '@grafana/data'; import { config, reportInteraction } from '@grafana/runtime'; -import { DataQuery } from '@grafana/schema'; +import { DataQuery, TimeZone } from '@grafana/schema'; import { Button, FeatureBadge, diff --git a/public/app/features/explore/Logs/LogsNavigation.tsx b/public/app/features/explore/Logs/LogsNavigation.tsx index ffd62a5c407..0c731315dd3 100644 --- a/public/app/features/explore/Logs/LogsNavigation.tsx +++ b/public/app/features/explore/Logs/LogsNavigation.tsx @@ -2,9 +2,9 @@ import { css } from '@emotion/css'; import { isEqual } from 'lodash'; import React, { memo, useCallback, useEffect, useRef, useState } from 'react'; -import { AbsoluteTimeRange, GrafanaTheme2, LogsSortOrder, TimeZone } from '@grafana/data'; +import { AbsoluteTimeRange, GrafanaTheme2, LogsSortOrder } from '@grafana/data'; import { reportInteraction } from '@grafana/runtime'; -import { DataQuery } from '@grafana/schema'; +import { DataQuery, TimeZone } from '@grafana/schema'; import { Button, Icon, Spinner, useTheme2 } from '@grafana/ui'; import { TOP_BAR_LEVEL_HEIGHT } from 'app/core/components/AppChrome/types'; diff --git a/public/app/features/explore/Logs/LogsNavigationPages.tsx b/public/app/features/explore/Logs/LogsNavigationPages.tsx index 2f8de5c7d58..51066e5dc9c 100644 --- a/public/app/features/explore/Logs/LogsNavigationPages.tsx +++ b/public/app/features/explore/Logs/LogsNavigationPages.tsx @@ -1,7 +1,8 @@ import { css, cx } from '@emotion/css'; import React from 'react'; -import { dateTimeFormat, systemDateFormats, TimeZone, GrafanaTheme2 } from '@grafana/data'; +import { dateTimeFormat, systemDateFormats, GrafanaTheme2 } from '@grafana/data'; +import { TimeZone } from '@grafana/schema'; import { CustomScrollbar, Spinner, useTheme2, clearButtonStyles } from '@grafana/ui'; import { LogsPage } from './LogsNavigation'; diff --git a/public/app/features/explore/Logs/LogsVolumePanel.tsx b/public/app/features/explore/Logs/LogsVolumePanel.tsx index cd31dcce517..56eaf5b2c2e 100644 --- a/public/app/features/explore/Logs/LogsVolumePanel.tsx +++ b/public/app/features/explore/Logs/LogsVolumePanel.tsx @@ -2,15 +2,8 @@ import { css } from '@emotion/css'; import { identity } from 'lodash'; import React from 'react'; -import { - AbsoluteTimeRange, - DataQueryResponse, - LoadingState, - SplitOpen, - TimeZone, - EventBus, - GrafanaTheme2, -} from '@grafana/data'; +import { AbsoluteTimeRange, DataQueryResponse, LoadingState, SplitOpen, EventBus, GrafanaTheme2 } from '@grafana/data'; +import { TimeZone } from '@grafana/schema'; import { Icon, Tooltip, TooltipDisplayMode, useStyles2, useTheme2 } from '@grafana/ui'; import { getLogsVolumeDataSourceInfo, isLogsVolumeLimited } from '../../logs/utils'; diff --git a/public/app/features/explore/RawPrometheus/RawPrometheusContainer.tsx b/public/app/features/explore/RawPrometheus/RawPrometheusContainer.tsx index 3cf40901475..71910d544ba 100644 --- a/public/app/features/explore/RawPrometheus/RawPrometheusContainer.tsx +++ b/public/app/features/explore/RawPrometheus/RawPrometheusContainer.tsx @@ -2,8 +2,9 @@ import { css } from '@emotion/css'; import React, { PureComponent } from 'react'; import { connect, ConnectedProps } from 'react-redux'; -import { applyFieldOverrides, DataFrame, SelectableValue, SplitOpen, TimeZone } from '@grafana/data'; +import { applyFieldOverrides, DataFrame, SelectableValue, SplitOpen } from '@grafana/data'; import { getTemplateSrv, reportInteraction } from '@grafana/runtime'; +import { TimeZone } from '@grafana/schema'; import { RadioButtonGroup, Table, AdHocFilterItem, PanelChrome } from '@grafana/ui'; import { config } from 'app/core/config'; import { PANEL_BORDER } from 'app/core/constants'; diff --git a/public/app/features/explore/Table/TableContainer.tsx b/public/app/features/explore/Table/TableContainer.tsx index 0c83c9b78ae..9fe35279c49 100644 --- a/public/app/features/explore/Table/TableContainer.tsx +++ b/public/app/features/explore/Table/TableContainer.tsx @@ -2,8 +2,9 @@ import { css } from '@emotion/css'; import React, { PureComponent } from 'react'; import { connect, ConnectedProps } from 'react-redux'; -import { applyFieldOverrides, TimeZone, SplitOpen, DataFrame, LoadingState, FieldType } from '@grafana/data'; +import { applyFieldOverrides, SplitOpen, DataFrame, LoadingState, FieldType } from '@grafana/data'; import { getTemplateSrv } from '@grafana/runtime'; +import { TimeZone } from '@grafana/schema'; import { Table, AdHocFilterItem, PanelChrome, withTheme2, Themeable2 } from '@grafana/ui'; import { config } from 'app/core/config'; import { t } from 'app/core/internationalization'; diff --git a/public/app/features/explore/TraceView/TraceViewContainer.tsx b/public/app/features/explore/TraceView/TraceViewContainer.tsx index 9056d8658ad..d36aa60f68e 100644 --- a/public/app/features/explore/TraceView/TraceViewContainer.tsx +++ b/public/app/features/explore/TraceView/TraceViewContainer.tsx @@ -1,7 +1,7 @@ import React, { useMemo } from 'react'; import { DataFrame, SplitOpen } from '@grafana/data'; -import { PanelChrome } from '@grafana/ui/src/components/PanelChrome/PanelChrome'; +import { PanelChrome } from '@grafana/ui'; import { StoreState, useSelector } from 'app/types'; import { TraceView } from './TraceView'; diff --git a/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/index.tsx b/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/index.tsx index 691e788f77e..31b984d632f 100644 --- a/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/index.tsx +++ b/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetail/index.tsx @@ -17,8 +17,9 @@ import { SpanStatusCode } from '@opentelemetry/api'; import cx from 'classnames'; import React from 'react'; -import { DataFrame, dateTimeFormat, GrafanaTheme2, IconName, LinkModel, TimeZone } from '@grafana/data'; +import { DataFrame, dateTimeFormat, GrafanaTheme2, IconName, LinkModel } from '@grafana/data'; import { config, locationService, reportInteraction } from '@grafana/runtime'; +import { TimeZone } from '@grafana/schema'; import { DataLinkButton, Icon, TextArea, useStyles2 } from '@grafana/ui'; import { TraceToProfilesOptions } from 'app/core/components/TraceToProfiles/TraceToProfilesSettings'; import { RelatedProfilesTitle } from 'app/plugins/datasource/tempo/resultTransformer'; diff --git a/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetailRow.tsx b/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetailRow.tsx index 0ca3064649e..676d10c5aa8 100644 --- a/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetailRow.tsx +++ b/public/app/features/explore/TraceView/components/TraceTimelineViewer/SpanDetailRow.tsx @@ -16,7 +16,8 @@ import { css } from '@emotion/css'; import classNames from 'classnames'; import React from 'react'; -import { GrafanaTheme2, LinkModel, TimeZone } from '@grafana/data'; +import { GrafanaTheme2, LinkModel } from '@grafana/data'; +import { TimeZone } from '@grafana/schema'; import { Button, clearButtonStyles, stylesFactory, withTheme2 } from '@grafana/ui'; import { TraceToProfilesOptions } from 'app/core/components/TraceToProfiles/TraceToProfilesSettings'; diff --git a/public/app/features/explore/TraceView/components/TraceTimelineViewer/VirtualizedTraceView.tsx b/public/app/features/explore/TraceView/components/TraceTimelineViewer/VirtualizedTraceView.tsx index 2d69ccf38d2..9b30384f1a2 100644 --- a/public/app/features/explore/TraceView/components/TraceTimelineViewer/VirtualizedTraceView.tsx +++ b/public/app/features/explore/TraceView/components/TraceTimelineViewer/VirtualizedTraceView.tsx @@ -18,8 +18,9 @@ import memoizeOne from 'memoize-one'; import * as React from 'react'; import { RefObject } from 'react'; -import { GrafanaTheme2, LinkModel, TimeZone } from '@grafana/data'; +import { GrafanaTheme2, LinkModel } from '@grafana/data'; import { config, reportInteraction } from '@grafana/runtime'; +import { TimeZone } from '@grafana/schema'; import { stylesFactory, withTheme2, ToolbarButton } from '@grafana/ui'; import { TraceToProfilesOptions } from 'app/core/components/TraceToProfiles/TraceToProfilesSettings'; diff --git a/public/app/features/explore/TraceView/components/TraceTimelineViewer/index.tsx b/public/app/features/explore/TraceView/components/TraceTimelineViewer/index.tsx index f67e6542965..447a33d23c2 100644 --- a/public/app/features/explore/TraceView/components/TraceTimelineViewer/index.tsx +++ b/public/app/features/explore/TraceView/components/TraceTimelineViewer/index.tsx @@ -15,8 +15,9 @@ import { css } from '@emotion/css'; import React, { RefObject } from 'react'; -import { GrafanaTheme2, LinkModel, TimeZone } from '@grafana/data'; +import { GrafanaTheme2, LinkModel } from '@grafana/data'; import { config, reportInteraction } from '@grafana/runtime'; +import { TimeZone } from '@grafana/schema'; import { stylesFactory, withTheme2 } from '@grafana/ui'; import { TraceToProfilesOptions } from 'app/core/components/TraceToProfiles/TraceToProfilesSettings'; diff --git a/public/app/features/explore/__mocks__/makeLogs.ts b/public/app/features/explore/__mocks__/makeLogs.ts index 0aaf4d9f254..af2206681b6 100644 --- a/public/app/features/explore/__mocks__/makeLogs.ts +++ b/public/app/features/explore/__mocks__/makeLogs.ts @@ -1,4 +1,4 @@ -import { MutableDataFrame, LogLevel, LogRowModel, LogsSortOrder } from '@grafana/data'; +import { createDataFrame, LogLevel, LogRowModel, LogsSortOrder } from '@grafana/data'; import { sortLogRows } from 'app/features/logs/utils'; export const makeLogs = (numberOfLogsToCreate: number, overrides?: Partial): LogRowModel[] => { const array: LogRowModel[] = []; @@ -12,7 +12,7 @@ export const makeLogs = (numberOfLogsToCreate: number, overrides?: Partial { - const df = new ArrayDataFrame([{ ts: Date.now(), line: `custom log line ${marker}` }]); + const df = arrayToDataFrame([{ ts: Date.now(), line: `custom log line ${marker}` }]); df.meta = { preferredVisualisationType: 'logs', }; @@ -12,7 +12,7 @@ export function makeLogsQueryResponse(marker = ''): Observable { - const df = new ArrayDataFrame([{ ts: Date.now(), val: 1 }]); + const df = arrayToDataFrame([{ ts: Date.now(), val: 1 }]); df.fields[0].type = FieldType.time; return from([{ data: [df] }]); } diff --git a/public/app/features/explore/spec/queryHistory.test.tsx b/public/app/features/explore/spec/queryHistory.test.tsx index b4c80a13a8e..36cb8cc0d9d 100644 --- a/public/app/features/explore/spec/queryHistory.test.tsx +++ b/public/app/features/explore/spec/queryHistory.test.tsx @@ -1,7 +1,8 @@ import React from 'react'; -import { DataQuery, EventBusSrv, serializeStateToUrlParam } from '@grafana/data'; +import { EventBusSrv, serializeStateToUrlParam } from '@grafana/data'; import { config } from '@grafana/runtime'; +import { DataQuery } from '@grafana/schema'; import { silenceConsoleOutput } from '../../../../test/core/utils/silenceConsoleOutput'; diff --git a/public/app/features/explore/state/helpers.ts b/public/app/features/explore/state/helpers.ts index 1437bb0a84c..3d4ae375043 100644 --- a/public/app/features/explore/state/helpers.ts +++ b/public/app/features/explore/state/helpers.ts @@ -1,4 +1,5 @@ -import { DefaultTimeZone, TimeRange, toUtc, SupplementaryQueryType } from '@grafana/data'; +import { TimeRange, toUtc, SupplementaryQueryType } from '@grafana/data'; +import { defaultTimeZone } from '@grafana/schema'; export const createDefaultInitialState = () => { const t = toUtc(); @@ -14,7 +15,7 @@ export const createDefaultInitialState = () => { const defaultInitialState = { user: { orgId: '1', - timeZone: DefaultTimeZone, + timeZone: defaultTimeZone, }, explore: { panes: { diff --git a/public/app/features/visualization/data-hover/DataHoverView.tsx b/public/app/features/visualization/data-hover/DataHoverView.tsx index 7a212631f1e..70b352d8922 100644 --- a/public/app/features/visualization/data-hover/DataHoverView.tsx +++ b/public/app/features/visualization/data-hover/DataHoverView.tsx @@ -38,9 +38,8 @@ export function getDisplayValuesAndLinks( sortOrder?: SortOrder, mode?: TooltipDisplayMode | null ) { - const fields = data.fields.map((f, idx) => { - return { ...f, hovered: idx === columnIndex }; - }); + const fields = data.fields; + const hoveredField = columnIndex != null ? fields[columnIndex] : null; const visibleFields = fields.filter((f) => !Boolean(f.config.custom?.hideFrom?.tooltip)); const traceIDField = visibleFields.find((field) => field.name === 'traceID') || fields[0]; @@ -60,7 +59,7 @@ export function getDisplayValuesAndLinks( const linkLookup = new Set(); for (const field of orderedVisibleFields) { - if (mode === TooltipDisplayMode.Single && columnIndex != null && !field.hovered) { + if (mode === TooltipDisplayMode.Single && field !== hoveredField) { continue; } @@ -77,14 +76,11 @@ export function getDisplayValuesAndLinks( }); } - // Sanitize field by removing hovered property to fix unique display name issue - const { hovered, ...sanitizedField } = field; - displayValues.push({ - name: getFieldDisplayName(sanitizedField, data), + name: getFieldDisplayName(field, data), value, valueString: formattedValueToString(fieldDisplay), - highlight: field.hovered, + highlight: field === hoveredField, }); }