From 854d497f94a2653a6b30f026c34ad31134b879fe Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Fri, 5 May 2023 12:16:31 -0700 Subject: [PATCH] Schema: Fix dimension schemas (#67935) --- .betterer.results | 3 +- .../grafana-schema/src/common/common.gen.ts | 49 ++++++++++++++--- .../grafana-schema/src/common/dimensions.cue | 34 ++++++++++-- .../grafana-schema/src/veneer/common.types.ts | 8 +++ public/app/features/canvas/element.ts | 3 +- .../app/features/canvas/elements/button.tsx | 2 +- .../features/canvas/elements/droneFront.tsx | 3 +- .../features/canvas/elements/droneSide.tsx | 3 +- .../app/features/canvas/elements/droneTop.tsx | 3 +- public/app/features/canvas/elements/icon.tsx | 8 +-- .../features/canvas/elements/metricValue.tsx | 2 +- .../canvas/elements/server/server.tsx | 3 +- .../features/canvas/elements/windTurbine.tsx | 3 +- public/app/features/canvas/runtime/scene.tsx | 10 ++-- public/app/features/canvas/types.ts | 2 +- public/app/features/dimensions/color.ts | 3 +- public/app/features/dimensions/context.ts | 6 +-- .../editors/ColorDimensionEditor.tsx | 3 +- .../editors/ResourceDimensionEditor.tsx | 9 +--- .../editors/ScalarDimensionEditor.tsx | 3 +- .../editors/ScaleDimensionEditor.tsx | 3 +- .../editors/TextDimensionEditor.tsx | 3 +- .../app/features/dimensions/resource.test.ts | 3 +- public/app/features/dimensions/resource.ts | 3 +- public/app/features/dimensions/scalar.test.ts | 3 +- public/app/features/dimensions/scalar.ts | 3 +- public/app/features/dimensions/scale.ts | 7 ++- public/app/features/dimensions/text.ts | 3 +- public/app/features/dimensions/types.ts | 52 +------------------ public/app/features/dimensions/utils.ts | 12 +++-- .../plugins/panel/canvas/SetBackground.tsx | 3 +- .../panel/geomap/editor/StyleEditor.tsx | 19 ++++--- .../panel/geomap/layers/data/heatMap.tsx | 3 +- public/app/plugins/panel/geomap/migrations.ts | 2 +- .../app/plugins/panel/geomap/style/types.ts | 4 +- .../plugins/panel/geomap/style/utils.test.ts | 2 +- .../app/plugins/panel/geomap/style/utils.ts | 2 +- public/app/plugins/panel/icon/IconPanel.tsx | 12 +++-- public/app/plugins/panel/icon/models.gen.ts | 2 +- .../app/plugins/panel/xychart/models.gen.ts | 6 +-- public/app/plugins/panel/xychart/scatter.ts | 16 +++--- 41 files changed, 174 insertions(+), 149 deletions(-) diff --git a/.betterer.results b/.betterer.results index 8a02d1a063f..b644ccadb0f 100644 --- a/.betterer.results +++ b/.betterer.results @@ -2652,8 +2652,7 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], "public/app/features/dimensions/types.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] + [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], "public/app/features/dimensions/utils.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"], diff --git a/packages/grafana-schema/src/common/common.gen.ts b/packages/grafana-schema/src/common/common.gen.ts index b3d8ac000c1..d574469dd30 100644 --- a/packages/grafana-schema/src/common/common.gen.ts +++ b/packages/grafana-schema/src/common/common.gen.ts @@ -52,19 +52,39 @@ export interface DataQuery { } export interface BaseDimensionConfig { + /** + * fixed: T -- will be added by each element + */ field?: string; - fixed: (string | number); +} + +export enum ScaleDimensionMode { + Linear = 'linear', + Quad = 'quad', } export interface ScaleDimensionConfig extends BaseDimensionConfig { + fixed?: number; max: number; min: number; + mode?: ScaleDimensionMode; // | *"linear" } -/** - * This is actually an empty interface used mainly for naming? - */ -export interface ColorDimensionConfig extends BaseDimensionConfig {} +export interface ColorDimensionConfig extends BaseDimensionConfig { + fixed?: string; // color value +} + +export enum ScalarDimensionMode { + Clamped = 'clamped', + Mod = 'mod', +} + +export interface ScalarDimensionConfig extends BaseDimensionConfig { + fixed?: number; + max: number; + min: number; + mode?: ScalarDimensionMode; +} export enum TextDimensionMode { Field = 'field', @@ -72,6 +92,17 @@ export enum TextDimensionMode { Template = 'template', } +export interface TextDimensionConfig extends BaseDimensionConfig { + fixed?: string; + mode: TextDimensionMode; +} + +export enum ResourceDimensionMode { + Field = 'field', + Fixed = 'fixed', + Mapping = 'mapping', +} + export interface MapLayerOptions { /** * Custom options depending on the type @@ -785,8 +816,12 @@ export interface DataSourceRef { uid?: string; } -export interface TextDimensionConfig extends BaseDimensionConfig { - mode: TextDimensionMode; +/** + * Links to a resource (image/svg path) + */ +export interface ResourceDimensionConfig extends BaseDimensionConfig { + fixed?: string; + mode: ResourceDimensionMode; } export interface FrameGeometrySource { diff --git a/packages/grafana-schema/src/common/dimensions.cue b/packages/grafana-schema/src/common/dimensions.cue index 14899a59c47..08c0b8ac452 100644 --- a/packages/grafana-schema/src/common/dimensions.cue +++ b/packages/grafana-schema/src/common/dimensions.cue @@ -2,19 +2,32 @@ package common BaseDimensionConfig: { field?: string - fixed: string | number + // fixed: T -- will be added by each element }@cuetsy(kind="interface") +ScaleDimensionMode: "linear" | "quad" @cuetsy(kind="enum") + ScaleDimensionConfig: { BaseDimensionConfig - min: int32 - max: int32 + min: number + max: number + fixed?: number + mode?: ScaleDimensionMode // | *"linear" }@cuetsy(kind="interface") -// This is actually an empty interface used mainly for naming? ColorDimensionConfig: { BaseDimensionConfig - _empty: _ + fixed?: string // color value +}@cuetsy(kind="interface") + +ScalarDimensionMode: "mod" | "clamped" @cuetsy(kind="enum") + +ScalarDimensionConfig: { + BaseDimensionConfig + min: number + max: number + fixed?: number + mode?: ScalarDimensionMode }@cuetsy(kind="interface") TextDimensionMode: "fixed" | "field" | "template" @cuetsy(kind="enum") @@ -22,4 +35,15 @@ TextDimensionMode: "fixed" | "field" | "template" @cuetsy(kind="enum") TextDimensionConfig: { BaseDimensionConfig mode: TextDimensionMode + fixed?: string }@cuetsy(kind="interface") + +ResourceDimensionMode: "fixed" | "field" | "mapping" @cuetsy(kind="enum") + +// Links to a resource (image/svg path) +ResourceDimensionConfig: { + BaseDimensionConfig + mode: ResourceDimensionMode + fixed?: string +}@cuetsy(kind="interface") + diff --git a/packages/grafana-schema/src/veneer/common.types.ts b/packages/grafana-schema/src/veneer/common.types.ts index f5a38ac2502..2ece21b6e66 100644 --- a/packages/grafana-schema/src/veneer/common.types.ts +++ b/packages/grafana-schema/src/veneer/common.types.ts @@ -23,10 +23,18 @@ export interface BaseDimensionConfig extends Omit, Omit {} +export interface ScalarDimensionConfig extends BaseDimensionConfig, Omit {} + export interface TextDimensionConfig extends BaseDimensionConfig, Omit {} export interface ColorDimensionConfig extends BaseDimensionConfig, Omit {} +export interface ColorDimensionConfig extends BaseDimensionConfig, Omit {} + +export interface ResourceDimensionConfig + extends BaseDimensionConfig, + Omit {} + export * from '../common/common.gen'; // TODO remove when https://github.com/grafana/cuetsy/issues/74 is fixed diff --git a/public/app/features/canvas/element.ts b/public/app/features/canvas/element.ts index 13a5358006b..97e788fa8eb 100644 --- a/public/app/features/canvas/element.ts +++ b/public/app/features/canvas/element.ts @@ -2,9 +2,10 @@ import { ComponentType } from 'react'; import { RegistryItem } from '@grafana/data'; import { PanelOptionsSupplier } from '@grafana/data/src/panel/PanelPlugin'; +import { ColorDimensionConfig, ScaleDimensionConfig } from '@grafana/schema'; import { config } from 'app/core/config'; -import { DimensionContext, ColorDimensionConfig, ScaleDimensionConfig } from '../dimensions'; +import { DimensionContext } from '../dimensions'; import { BackgroundConfig, Constraint, LineConfig, Placement } from './types'; diff --git a/public/app/features/canvas/elements/button.tsx b/public/app/features/canvas/elements/button.tsx index 88ad205b211..ca324bffe1c 100644 --- a/public/app/features/canvas/elements/button.tsx +++ b/public/app/features/canvas/elements/button.tsx @@ -1,10 +1,10 @@ import React, { PureComponent } from 'react'; import { PluginState } from '@grafana/data/src'; +import { TextDimensionConfig } from '@grafana/schema'; import { Button } from '@grafana/ui'; import { DimensionContext } from 'app/features/dimensions/context'; import { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor'; -import { TextDimensionConfig } from 'app/features/dimensions/types'; import { APIEditor, APIEditorConfig, callApi } from 'app/plugins/panel/canvas/editor/APIEditor'; import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element'; diff --git a/public/app/features/canvas/elements/droneFront.tsx b/public/app/features/canvas/elements/droneFront.tsx index f68811d331f..f06b6eb2f5c 100644 --- a/public/app/features/canvas/elements/droneFront.tsx +++ b/public/app/features/canvas/elements/droneFront.tsx @@ -2,8 +2,9 @@ import { css } from '@emotion/css'; import React from 'react'; import { GrafanaTheme2 } from '@grafana/data'; +import { ScalarDimensionConfig } from '@grafana/schema'; import { useStyles2 } from '@grafana/ui'; -import { DimensionContext, ScalarDimensionConfig } from 'app/features/dimensions'; +import { DimensionContext } from 'app/features/dimensions'; import { ScalarDimensionEditor } from 'app/features/dimensions/editors'; import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element'; diff --git a/public/app/features/canvas/elements/droneSide.tsx b/public/app/features/canvas/elements/droneSide.tsx index 9258c8f2efe..76c2cdd18eb 100644 --- a/public/app/features/canvas/elements/droneSide.tsx +++ b/public/app/features/canvas/elements/droneSide.tsx @@ -2,8 +2,9 @@ import { css } from '@emotion/css'; import React from 'react'; import { GrafanaTheme2 } from '@grafana/data'; +import { ScalarDimensionConfig } from '@grafana/schema'; import { useStyles2 } from '@grafana/ui'; -import { DimensionContext, ScalarDimensionConfig } from 'app/features/dimensions'; +import { DimensionContext } from 'app/features/dimensions'; import { ScalarDimensionEditor } from 'app/features/dimensions/editors'; import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element'; diff --git a/public/app/features/canvas/elements/droneTop.tsx b/public/app/features/canvas/elements/droneTop.tsx index c7c67840cc1..6551f37ad9d 100644 --- a/public/app/features/canvas/elements/droneTop.tsx +++ b/public/app/features/canvas/elements/droneTop.tsx @@ -2,8 +2,9 @@ import { css } from '@emotion/css'; import React from 'react'; import { GrafanaTheme2 } from '@grafana/data'; +import { ScalarDimensionConfig } from '@grafana/schema'; import { useStyles2 } from '@grafana/ui'; -import { DimensionContext, ScalarDimensionConfig } from 'app/features/dimensions'; +import { DimensionContext } from 'app/features/dimensions'; import { ScalarDimensionEditor } from 'app/features/dimensions/editors'; import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element'; diff --git a/public/app/features/canvas/elements/icon.tsx b/public/app/features/canvas/elements/icon.tsx index 8d7c8a4c876..27928d61ebf 100644 --- a/public/app/features/canvas/elements/icon.tsx +++ b/public/app/features/canvas/elements/icon.tsx @@ -2,13 +2,9 @@ import { css } from '@emotion/css'; import { isString } from 'lodash'; import React, { CSSProperties } from 'react'; +import { ColorDimensionConfig, ResourceDimensionConfig, ResourceDimensionMode } from '@grafana/schema'; import { SanitizedSVG } from 'app/core/components/SVG/SanitizedSVG'; -import { - ColorDimensionConfig, - ResourceDimensionConfig, - ResourceDimensionMode, - getPublicOrAbsoluteUrl, -} from 'app/features/dimensions'; +import { getPublicOrAbsoluteUrl } from 'app/features/dimensions'; import { DimensionContext } from 'app/features/dimensions/context'; import { ColorDimensionEditor, ResourceDimensionEditor } from 'app/features/dimensions/editors'; import { APIEditorConfig, callApi } from 'app/plugins/panel/canvas/editor/APIEditor'; diff --git a/public/app/features/canvas/elements/metricValue.tsx b/public/app/features/canvas/elements/metricValue.tsx index 805956c3657..e9506f9b2a4 100644 --- a/public/app/features/canvas/elements/metricValue.tsx +++ b/public/app/features/canvas/elements/metricValue.tsx @@ -4,9 +4,9 @@ import { useObservable } from 'react-use'; import { of } from 'rxjs'; import { DataFrame, FieldNamePickerConfigSettings, GrafanaTheme2, StandardEditorsRegistryItem } from '@grafana/data'; +import { TextDimensionMode } from '@grafana/schema'; import { usePanelContext, useStyles2 } from '@grafana/ui'; import { FieldNamePicker } from '@grafana/ui/src/components/MatchersUI/FieldNamePicker'; -import { TextDimensionMode } from 'app/features/dimensions'; import { DimensionContext } from 'app/features/dimensions/context'; import { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor'; import { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor'; diff --git a/public/app/features/canvas/elements/server/server.tsx b/public/app/features/canvas/elements/server/server.tsx index a0205733946..e56e8aa0285 100644 --- a/public/app/features/canvas/elements/server/server.tsx +++ b/public/app/features/canvas/elements/server/server.tsx @@ -2,8 +2,9 @@ import { css } from '@emotion/css'; import React from 'react'; import { GrafanaTheme2 } from '@grafana/data'; +import { ColorDimensionConfig, ScalarDimensionConfig } from '@grafana/schema'; import config from 'app/core/config'; -import { ColorDimensionConfig, DimensionContext, ScalarDimensionConfig } from 'app/features/dimensions'; +import { DimensionContext } from 'app/features/dimensions'; import { ColorDimensionEditor, ScalarDimensionEditor } from 'app/features/dimensions/editors'; import { CanvasElementItem, CanvasElementProps } from '../../element'; diff --git a/public/app/features/canvas/elements/windTurbine.tsx b/public/app/features/canvas/elements/windTurbine.tsx index b26a09f5ecd..59b2ce7e0ff 100644 --- a/public/app/features/canvas/elements/windTurbine.tsx +++ b/public/app/features/canvas/elements/windTurbine.tsx @@ -2,8 +2,9 @@ import { css } from '@emotion/css'; import React from 'react'; import { GrafanaTheme2 } from '@grafana/data'; +import { ScalarDimensionConfig } from '@grafana/schema'; import { useStyles2 } from '@grafana/ui'; -import { DimensionContext, ScalarDimensionConfig } from 'app/features/dimensions'; +import { DimensionContext } from 'app/features/dimensions'; import { ScalarDimensionEditor } from 'app/features/dimensions/editors'; import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element'; diff --git a/public/app/features/canvas/runtime/scene.tsx b/public/app/features/canvas/runtime/scene.tsx index d6a534cc67a..5a80d311fa7 100644 --- a/public/app/features/canvas/runtime/scene.tsx +++ b/public/app/features/canvas/runtime/scene.tsx @@ -7,17 +7,17 @@ import Selecto from 'selecto'; import { AppEvents, GrafanaTheme2, PanelData } from '@grafana/data'; import { locationService } from '@grafana/runtime/src'; -import { Portal, stylesFactory } from '@grafana/ui'; -import { config } from 'app/core/config'; -import { CanvasFrameOptions, DEFAULT_CANVAS_ELEMENT_CONFIG } from 'app/features/canvas'; import { ColorDimensionConfig, - DimensionContext, ResourceDimensionConfig, ScalarDimensionConfig, ScaleDimensionConfig, TextDimensionConfig, -} from 'app/features/dimensions'; +} from '@grafana/schema'; +import { Portal, stylesFactory } from '@grafana/ui'; +import { config } from 'app/core/config'; +import { CanvasFrameOptions, DEFAULT_CANVAS_ELEMENT_CONFIG } from 'app/features/canvas'; +import { DimensionContext } from 'app/features/dimensions'; import { getColorDimensionFromData, getResourceDimensionFromData, diff --git a/public/app/features/canvas/types.ts b/public/app/features/canvas/types.ts index 23b1c8dd07e..21d9f06ed18 100644 --- a/public/app/features/canvas/types.ts +++ b/public/app/features/canvas/types.ts @@ -1,5 +1,5 @@ import { LinkModel } from '@grafana/data/src'; -import { ColorDimensionConfig, ResourceDimensionConfig, TextDimensionConfig } from 'app/features/dimensions/types'; +import { ColorDimensionConfig, ResourceDimensionConfig, TextDimensionConfig } from '@grafana/schema'; export interface Placement { top?: number; diff --git a/public/app/features/dimensions/color.ts b/public/app/features/dimensions/color.ts index 96351e2a562..5b476a265b7 100644 --- a/public/app/features/dimensions/color.ts +++ b/public/app/features/dimensions/color.ts @@ -6,8 +6,9 @@ import { GrafanaTheme2, getFieldConfigWithMinMax, } from '@grafana/data'; +import { ColorDimensionConfig } from '@grafana/schema'; -import { ColorDimensionConfig, DimensionSupplier } from './types'; +import { DimensionSupplier } from './types'; import { findField, getLastNotNullFieldValue } from './utils'; //--------------------------------------------------------- diff --git a/public/app/features/dimensions/context.ts b/public/app/features/dimensions/context.ts index f4418e1a252..a4693ada2a9 100644 --- a/public/app/features/dimensions/context.ts +++ b/public/app/features/dimensions/context.ts @@ -1,13 +1,13 @@ import { PanelData } from '@grafana/data/src'; - import { ColorDimensionConfig, - DimensionSupplier, ResourceDimensionConfig, ScalarDimensionConfig, ScaleDimensionConfig, TextDimensionConfig, -} from './types'; +} from '@grafana/schema'; + +import { DimensionSupplier } from './types'; export interface DimensionContext { getColor(color: ColorDimensionConfig): DimensionSupplier; diff --git a/public/app/features/dimensions/editors/ColorDimensionEditor.tsx b/public/app/features/dimensions/editors/ColorDimensionEditor.tsx index 7ddf1d91cd2..9ad58099f5a 100644 --- a/public/app/features/dimensions/editors/ColorDimensionEditor.tsx +++ b/public/app/features/dimensions/editors/ColorDimensionEditor.tsx @@ -2,11 +2,10 @@ import { css } from '@emotion/css'; import React, { useCallback } from 'react'; import { GrafanaTheme2, SelectableValue, StandardEditorProps } from '@grafana/data'; +import { ColorDimensionConfig } from '@grafana/schema'; import { Select, ColorPicker, useStyles2 } from '@grafana/ui'; import { useFieldDisplayNames, useSelectOptions } from '@grafana/ui/src/components/MatchersUI/utils'; -import { ColorDimensionConfig } from '../types'; - const fixedColorOption: SelectableValue = { label: 'Fixed color', value: '_____fixed_____', diff --git a/public/app/features/dimensions/editors/ResourceDimensionEditor.tsx b/public/app/features/dimensions/editors/ResourceDimensionEditor.tsx index 9bfb7c54df2..82d02f10c5d 100644 --- a/public/app/features/dimensions/editors/ResourceDimensionEditor.tsx +++ b/public/app/features/dimensions/editors/ResourceDimensionEditor.tsx @@ -1,17 +1,12 @@ import React, { useCallback } from 'react'; import { FieldNamePickerConfigSettings, StandardEditorProps, StandardEditorsRegistryItem } from '@grafana/data'; +import { ResourceDimensionConfig, ResourceDimensionMode } from '@grafana/schema'; import { InlineField, InlineFieldRow, RadioButtonGroup } from '@grafana/ui'; import { FieldNamePicker } from '@grafana/ui/src/components/MatchersUI/FieldNamePicker'; import { getPublicOrAbsoluteUrl, ResourceFolderName } from '..'; -import { - MediaType, - ResourceDimensionConfig, - ResourceDimensionMode, - ResourceDimensionOptions, - ResourcePickerSize, -} from '../types'; +import { MediaType, ResourceDimensionOptions, ResourcePickerSize } from '../types'; import { ResourcePicker } from './ResourcePicker'; diff --git a/public/app/features/dimensions/editors/ScalarDimensionEditor.tsx b/public/app/features/dimensions/editors/ScalarDimensionEditor.tsx index f3ed210ccb0..f9eb5432ce1 100644 --- a/public/app/features/dimensions/editors/ScalarDimensionEditor.tsx +++ b/public/app/features/dimensions/editors/ScalarDimensionEditor.tsx @@ -2,11 +2,12 @@ import { css } from '@emotion/css'; import React, { useCallback } from 'react'; import { FieldType, GrafanaTheme2, SelectableValue, StandardEditorProps } from '@grafana/data'; +import { ScalarDimensionMode, ScalarDimensionConfig } from '@grafana/schema'; import { InlineField, InlineFieldRow, RadioButtonGroup, Select, useStyles2 } from '@grafana/ui'; import { useFieldDisplayNames, useSelectOptions } from '@grafana/ui/src/components/MatchersUI/utils'; import { NumberInput } from 'app/core/components/OptionsUI/NumberInput'; -import { ScalarDimensionConfig, ScalarDimensionMode, ScalarDimensionOptions } from '../types'; +import { ScalarDimensionOptions } from '../types'; const fixedValueOption: SelectableValue = { label: 'Fixed value', diff --git a/public/app/features/dimensions/editors/ScaleDimensionEditor.tsx b/public/app/features/dimensions/editors/ScaleDimensionEditor.tsx index 14dab9ba725..f0b06dc871a 100644 --- a/public/app/features/dimensions/editors/ScaleDimensionEditor.tsx +++ b/public/app/features/dimensions/editors/ScaleDimensionEditor.tsx @@ -2,12 +2,13 @@ import { css } from '@emotion/css'; import React, { useCallback, useMemo } from 'react'; import { GrafanaTheme2, SelectableValue, StandardEditorProps } from '@grafana/data'; +import { ScaleDimensionConfig } from '@grafana/schema'; import { InlineField, InlineFieldRow, Select, useStyles2 } from '@grafana/ui'; import { useFieldDisplayNames, useSelectOptions } from '@grafana/ui/src/components/MatchersUI/utils'; import { NumberInput } from 'app/core/components/OptionsUI/NumberInput'; import { validateScaleOptions, validateScaleConfig } from '../scale'; -import { ScaleDimensionConfig, ScaleDimensionOptions } from '../types'; +import { ScaleDimensionOptions } from '../types'; const fixedValueOption: SelectableValue = { label: 'Fixed value', diff --git a/public/app/features/dimensions/editors/TextDimensionEditor.tsx b/public/app/features/dimensions/editors/TextDimensionEditor.tsx index 12b6304f270..f0958ac440e 100644 --- a/public/app/features/dimensions/editors/TextDimensionEditor.tsx +++ b/public/app/features/dimensions/editors/TextDimensionEditor.tsx @@ -6,11 +6,12 @@ import { StandardEditorsRegistryItem, StringFieldConfigSettings, } from '@grafana/data'; +import { TextDimensionConfig, TextDimensionMode } from '@grafana/schema'; import { Button, InlineField, InlineFieldRow, RadioButtonGroup } from '@grafana/ui'; import { FieldNamePicker } from '@grafana/ui/src/components/MatchersUI/FieldNamePicker'; import { StringValueEditor } from 'app/core/components/OptionsUI/string'; -import { TextDimensionConfig, TextDimensionMode, TextDimensionOptions } from '../types'; +import { TextDimensionOptions } from '../types'; const textOptions = [ { label: 'Fixed', value: TextDimensionMode.Fixed, description: 'Fixed value' }, diff --git a/public/app/features/dimensions/resource.test.ts b/public/app/features/dimensions/resource.test.ts index 489e6339abd..704c1a2c6dc 100644 --- a/public/app/features/dimensions/resource.test.ts +++ b/public/app/features/dimensions/resource.test.ts @@ -1,5 +1,6 @@ +import { ResourceDimensionMode } from '@grafana/schema'; + import { getResourceDimension } from './resource'; -import { ResourceDimensionMode } from './types'; describe('getResourceDimension', () => { const publicPath = '/public/'; diff --git a/public/app/features/dimensions/resource.ts b/public/app/features/dimensions/resource.ts index 6ff97ae8b41..feeead5958f 100644 --- a/public/app/features/dimensions/resource.ts +++ b/public/app/features/dimensions/resource.ts @@ -1,6 +1,7 @@ import { DataFrame } from '@grafana/data'; +import { ResourceDimensionConfig, ResourceDimensionMode } from '@grafana/schema'; -import { DimensionSupplier, ResourceDimensionConfig, ResourceDimensionMode } from './types'; +import { DimensionSupplier } from './types'; import { findField, getLastNotNullFieldValue } from './utils'; //--------------------------------------------------------- diff --git a/public/app/features/dimensions/scalar.test.ts b/public/app/features/dimensions/scalar.test.ts index 071d83ed00a..9fa506207c6 100644 --- a/public/app/features/dimensions/scalar.test.ts +++ b/public/app/features/dimensions/scalar.test.ts @@ -1,9 +1,8 @@ import { DataFrame, FieldType } from '@grafana/data'; +import { ScalarDimensionMode } from '@grafana/schema'; import { getScalarDimension } from './scalar'; -import { ScalarDimensionMode } from '.'; - describe('scalar dimensions', () => { it('handles string field', () => { const values = ['-720', '10', '540', '90', '-210']; diff --git a/public/app/features/dimensions/scalar.ts b/public/app/features/dimensions/scalar.ts index d4d9a6f550b..d1c52f5fcb4 100644 --- a/public/app/features/dimensions/scalar.ts +++ b/public/app/features/dimensions/scalar.ts @@ -1,6 +1,7 @@ import { DataFrame, Field } from '@grafana/data'; +import { ScalarDimensionConfig, ScalarDimensionMode } from '@grafana/schema'; -import { DimensionSupplier, ScalarDimensionConfig, ScalarDimensionMode } from './types'; +import { DimensionSupplier } from './types'; import { findField, getLastNotNullFieldValue } from './utils'; //--------------------------------------------------------- diff --git a/public/app/features/dimensions/scale.ts b/public/app/features/dimensions/scale.ts index 1cda44c3c4d..98ce993877d 100644 --- a/public/app/features/dimensions/scale.ts +++ b/public/app/features/dimensions/scale.ts @@ -1,11 +1,10 @@ import { DataFrame, Field } from '@grafana/data'; import { getMinMaxAndDelta } from '@grafana/data/src/field/scale'; +import { ScaleDimensionConfig, ScaleDimensionMode } from '@grafana/schema'; -import { ScaleDimensionConfig, DimensionSupplier, ScaleDimensionOptions } from './types'; +import { DimensionSupplier, ScaleDimensionOptions } from './types'; import { findField, getLastNotNullFieldValue } from './utils'; -import { ScaleDimensionMode } from '.'; - //--------------------------------------------------------- // Scale dimension //--------------------------------------------------------- @@ -43,7 +42,7 @@ export function getScaledDimensionForField( } let scaled = (percent: number) => config.min + percent * delta; - if (mode === ScaleDimensionMode.Quadratic) { + if (mode === ScaleDimensionMode.Quad) { const maxArea = Math.PI * (config.max / 2) ** 2; const minArea = Math.PI * (config.min / 2) ** 2; const deltaArea = maxArea - minArea; diff --git a/public/app/features/dimensions/text.ts b/public/app/features/dimensions/text.ts index 3c2b40cf9cd..4505663a1b6 100644 --- a/public/app/features/dimensions/text.ts +++ b/public/app/features/dimensions/text.ts @@ -1,6 +1,7 @@ import { DataFrame, Field, FieldType, formattedValueToString } from '@grafana/data'; +import { TextDimensionConfig, TextDimensionMode } from '@grafana/schema'; -import { DimensionSupplier, TextDimensionConfig, TextDimensionMode } from './types'; +import { DimensionSupplier } from './types'; import { findField, getLastNotNullFieldValue } from './utils'; //--------------------------------------------------------- diff --git a/public/app/features/dimensions/types.ts b/public/app/features/dimensions/types.ts index 8e33109b9d5..9e6720f4b9b 100644 --- a/public/app/features/dimensions/types.ts +++ b/public/app/features/dimensions/types.ts @@ -1,9 +1,5 @@ import { Field } from '@grafana/data'; - -export interface BaseDimensionConfig { - fixed: T; - field?: string; -} +import { TextDimensionConfig, TextDimensionMode } from '@grafana/schema'; export interface DimensionSupplier { /** @@ -32,17 +28,6 @@ export interface DimensionSupplier { get: (index: number) => T; } -export enum ScaleDimensionMode { - Linear = 'linear', - Quadratic = 'quad', -} - -/** This will map the field value% to a scaled value within the range */ -export interface ScaleDimensionConfig extends BaseDimensionConfig { - min: number; - max: number; -} - /** Places that use the value */ export interface ScaleDimensionOptions { min: number; @@ -51,16 +36,6 @@ export interface ScaleDimensionOptions { hideRange?: boolean; // false } -export enum ScalarDimensionMode { - Mod = 'mod', - Clamped = 'clamped', -} -export interface ScalarDimensionConfig extends BaseDimensionConfig { - mode: ScalarDimensionMode; - min: number; - max: number; -} - export interface ScalarDimensionOptions { min: number; max: number; @@ -70,25 +45,12 @@ export interface TextDimensionOptions { // anything? } -export enum TextDimensionMode { - Fixed = 'fixed', - Field = 'field', - Template = 'template', -} - -export interface TextDimensionConfig extends BaseDimensionConfig { - mode: TextDimensionMode; -} - export const defaultTextConfig: TextDimensionConfig = Object.freeze({ fixed: '', mode: TextDimensionMode.Field, field: '', }); -/** Use the color value from field configs */ -export interface ColorDimensionConfig extends BaseDimensionConfig {} - /** Places that use the value */ export interface ResourceDimensionOptions { resourceType: MediaType; @@ -99,18 +61,6 @@ export interface ResourceDimensionOptions { showSourceRadio?: boolean; } -export enum ResourceDimensionMode { - Fixed = 'fixed', - Field = 'field', - Mapping = 'mapping', - // pattern? uses field in the pattern -} - -/** Get the path to a resource (URL) */ -export interface ResourceDimensionConfig extends BaseDimensionConfig { - mode: ResourceDimensionMode; -} - export enum ResourceFolderName { Icon = 'img/icons/unicons', IOT = 'img/icons/iot', diff --git a/public/app/features/dimensions/utils.ts b/public/app/features/dimensions/utils.ts index 9b3c2bccd81..31937dc7b3b 100644 --- a/public/app/features/dimensions/utils.ts +++ b/public/app/features/dimensions/utils.ts @@ -1,16 +1,18 @@ import { DataFrame, PanelData, Field, getFieldDisplayName, ReducerID } from '@grafana/data'; import { config } from '@grafana/runtime'; +import { + ResourceDimensionConfig, + ScaleDimensionConfig, + TextDimensionConfig, + ColorDimensionConfig, + ScalarDimensionConfig, +} from '@grafana/schema'; import { getColorDimension, getScaledDimension, getTextDimension, getResourceDimension, - ColorDimensionConfig, DimensionSupplier, - ResourceDimensionConfig, - ScaleDimensionConfig, - TextDimensionConfig, - ScalarDimensionConfig, } from 'app/features/dimensions'; import { getScalarDimension } from './scalar'; diff --git a/public/app/plugins/panel/canvas/SetBackground.tsx b/public/app/plugins/panel/canvas/SetBackground.tsx index c5984c6df0d..2d6d3e157c3 100644 --- a/public/app/plugins/panel/canvas/SetBackground.tsx +++ b/public/app/plugins/panel/canvas/SetBackground.tsx @@ -2,10 +2,11 @@ import { css } from '@emotion/css'; import React, { useState } from 'react'; import { GrafanaTheme2 } from '@grafana/data'; +import { ResourceDimensionMode } from '@grafana/schema'; import { Portal, useTheme2 } from '@grafana/ui'; import { Scene } from 'app/features/canvas/runtime/scene'; -import { MediaType, ResourceDimensionMode, ResourceFolderName } from '../../../features/dimensions'; +import { MediaType, ResourceFolderName } from '../../../features/dimensions'; import { ResourcePickerPopover } from '../../../features/dimensions/editors/ResourcePickerPopover'; import { AnchorPoint } from './types'; diff --git a/public/app/plugins/panel/geomap/editor/StyleEditor.tsx b/public/app/plugins/panel/geomap/editor/StyleEditor.tsx index 43abef1335f..ee6e369ef79 100644 --- a/public/app/plugins/panel/geomap/editor/StyleEditor.tsx +++ b/public/app/plugins/panel/geomap/editor/StyleEditor.tsx @@ -4,6 +4,13 @@ import { useObservable } from 'react-use'; import { Observable, of } from 'rxjs'; import { FieldConfigPropertyItem, StandardEditorProps, StandardEditorsRegistryItem } from '@grafana/data'; +import { + ScaleDimensionConfig, + ResourceDimensionConfig, + ColorDimensionConfig, + TextDimensionConfig, + ScalarDimensionConfig, +} from '@grafana/schema'; import { ColorPicker, Field, @@ -22,15 +29,7 @@ import { ScalarDimensionEditor, TextDimensionEditor, } from 'app/features/dimensions/editors'; -import { - ScaleDimensionConfig, - ResourceDimensionConfig, - ColorDimensionConfig, - ResourceFolderName, - TextDimensionConfig, - defaultTextConfig, - ScalarDimensionConfig, -} from 'app/features/dimensions/types'; +import { ResourceFolderName, defaultTextConfig, MediaType } from 'app/features/dimensions/types'; import { defaultStyleConfig, GeometryTypeId, StyleConfig, TextAlignment, TextBaseline } from '../style/types'; import { styleUsesText } from '../style/utils'; @@ -197,7 +196,7 @@ export const StyleEditor = ({ value, context, onChange, item }: Props) => { item={ { settings: { - resourceType: 'icon', + resourceType: MediaType.Icon, folderName: ResourceFolderName.Marker, placeholderText: hasTextLabel ? 'Select a symbol' : 'Select a symbol or add a text label', placeholderValue: defaultStyleConfig.symbol.fixed, diff --git a/public/app/plugins/panel/geomap/layers/data/heatMap.tsx b/public/app/plugins/panel/geomap/layers/data/heatMap.tsx index 24855548585..8df150a4f3a 100644 --- a/public/app/plugins/panel/geomap/layers/data/heatMap.tsx +++ b/public/app/plugins/panel/geomap/layers/data/heatMap.tsx @@ -10,10 +10,11 @@ import { import Map from 'ol/Map'; import * as layer from 'ol/layer'; import { getLocationMatchers } from 'app/features/geo/utils/location'; -import { ScaleDimensionConfig, getScaledDimension } from 'app/features/dimensions'; +import { getScaledDimension } from 'app/features/dimensions'; import { ScaleDimensionEditor } from 'app/features/dimensions/editors'; import { FrameVectorSource } from 'app/features/geo/utils/frameVectorSource'; import { Point } from 'ol/geom'; +import { ScaleDimensionConfig } from '@grafana/schema'; // Configuration options for Heatmap overlays export interface HeatmapConfig { diff --git a/public/app/plugins/panel/geomap/migrations.ts b/public/app/plugins/panel/geomap/migrations.ts index 6e6369be899..7da1f75818b 100644 --- a/public/app/plugins/panel/geomap/migrations.ts +++ b/public/app/plugins/panel/geomap/migrations.ts @@ -11,7 +11,7 @@ import { DataTransformerConfig, DataTransformerID, } from '@grafana/data'; -import { ResourceDimensionMode } from 'app/features/dimensions'; +import { ResourceDimensionMode } from '@grafana/schema'; import { defaultMarkersConfig, MarkersConfig } from './layers/data/markersLayer'; import { getMarkerAsPath } from './style/markers'; diff --git a/public/app/plugins/panel/geomap/style/types.ts b/public/app/plugins/panel/geomap/style/types.ts index 5192dbd9afa..6f2a22ba732 100644 --- a/public/app/plugins/panel/geomap/style/types.ts +++ b/public/app/plugins/panel/geomap/style/types.ts @@ -2,14 +2,14 @@ import { Style } from 'ol/style'; import { ColorDimensionConfig, - DimensionSupplier, ResourceDimensionConfig, ResourceDimensionMode, ScaleDimensionConfig, ScalarDimensionConfig, ScalarDimensionMode, TextDimensionConfig, -} from 'app/features/dimensions'; +} from '@grafana/schema'; +import { DimensionSupplier } from 'app/features/dimensions'; export enum GeometryTypeId { Point = 'point', diff --git a/public/app/plugins/panel/geomap/style/utils.test.ts b/public/app/plugins/panel/geomap/style/utils.test.ts index be53d13fe41..15546670b82 100644 --- a/public/app/plugins/panel/geomap/style/utils.test.ts +++ b/public/app/plugins/panel/geomap/style/utils.test.ts @@ -1,4 +1,4 @@ -import { ResourceDimensionMode } from 'app/features/dimensions'; +import { ResourceDimensionMode } from '@grafana/schema'; import { StyleConfig } from './types'; import { getStyleConfigState } from './utils'; diff --git a/public/app/plugins/panel/geomap/style/utils.ts b/public/app/plugins/panel/geomap/style/utils.ts index 607ab05f2d8..9075b271339 100644 --- a/public/app/plugins/panel/geomap/style/utils.ts +++ b/public/app/plugins/panel/geomap/style/utils.ts @@ -1,5 +1,5 @@ import { config } from '@grafana/runtime'; -import { TextDimensionMode } from 'app/features/dimensions'; +import { TextDimensionMode } from '@grafana/schema'; import { getMarkerMaker } from './markers'; import { defaultStyleConfig, StyleConfig, StyleConfigFields, StyleConfigState } from './types'; diff --git a/public/app/plugins/panel/icon/IconPanel.tsx b/public/app/plugins/panel/icon/IconPanel.tsx index 70e8028362b..063d1c78109 100644 --- a/public/app/plugins/panel/icon/IconPanel.tsx +++ b/public/app/plugins/panel/icon/IconPanel.tsx @@ -1,21 +1,23 @@ import React, { Component } from 'react'; import { PanelProps } from '@grafana/data'; +import { + ColorDimensionConfig, + ResourceDimensionConfig, + ScalarDimensionConfig, + ScaleDimensionConfig, + TextDimensionConfig, +} from '@grafana/schema'; import { HorizontalConstraint, VerticalConstraint } from 'app/features/canvas'; import { iconItem } from 'app/features/canvas/elements/icon'; import { ElementState } from 'app/features/canvas/runtime/element'; import { - ColorDimensionConfig, DimensionContext, getColorDimensionFromData, getResourceDimensionFromData, getScalarDimensionFromData, getScaleDimensionFromData, getTextDimensionFromData, - ResourceDimensionConfig, - ScalarDimensionConfig, - ScaleDimensionConfig, - TextDimensionConfig, } from 'app/features/dimensions'; import { PanelOptions } from './models.gen'; diff --git a/public/app/plugins/panel/icon/models.gen.ts b/public/app/plugins/panel/icon/models.gen.ts index 1de5537934d..0dc01c29754 100644 --- a/public/app/plugins/panel/icon/models.gen.ts +++ b/public/app/plugins/panel/icon/models.gen.ts @@ -5,7 +5,7 @@ import { CanvasElementOptions } from 'app/features/canvas'; import { IconConfig } from 'app/features/canvas/elements/icon'; -import { ResourceDimensionMode } from 'app/features/dimensions'; +import { ResourceDimensionMode } from '@grafana/schema'; export interface PanelOptions { root: Omit, 'type' | 'name'>; // type is forced diff --git a/public/app/plugins/panel/xychart/models.gen.ts b/public/app/plugins/panel/xychart/models.gen.ts index f2727a575bf..ffbc557b909 100644 --- a/public/app/plugins/panel/xychart/models.gen.ts +++ b/public/app/plugins/panel/xychart/models.gen.ts @@ -6,12 +6,12 @@ import { HideableFieldConfig, AxisConfig, AxisPlacement, -} from '@grafana/schema'; -import { ColorDimensionConfig, - DimensionSupplier, ScaleDimensionConfig, TextDimensionConfig, +} from '@grafana/schema'; +import { + DimensionSupplier, } from 'app/features/dimensions'; // export enum ScatterLineMode { diff --git a/public/app/plugins/panel/xychart/scatter.ts b/public/app/plugins/panel/xychart/scatter.ts index d3215d8e133..03b3fb42275 100644 --- a/public/app/plugins/panel/xychart/scatter.ts +++ b/public/app/plugins/panel/xychart/scatter.ts @@ -13,15 +13,17 @@ import { } from '@grafana/data'; import { alpha } from '@grafana/data/src/themes/colorManipulator'; import { config } from '@grafana/runtime'; -import { AxisPlacement, ScaleDirection, ScaleOrientation, VisibilityMode } from '@grafana/schema'; -import { UPlotConfigBuilder } from '@grafana/ui'; -import { FacetedData, FacetSeries } from '@grafana/ui/src/components/uPlot/types'; import { - findFieldIndex, - getScaledDimensionForField, + AxisPlacement, + ScaleDirection, + ScaleOrientation, + VisibilityMode, ScaleDimensionConfig, ScaleDimensionMode, -} from 'app/features/dimensions'; +} from '@grafana/schema'; +import { UPlotConfigBuilder } from '@grafana/ui'; +import { FacetedData, FacetSeries } from '@grafana/ui/src/components/uPlot/types'; +import { findFieldIndex, getScaledDimensionForField } from 'app/features/dimensions'; import { pointWithin, Quadtree, Rect } from '../barchart/quadtree'; @@ -142,7 +144,7 @@ function getScatterSeries( const s = getScaledDimensionForField( frame.fields[dims.pointSizeIndex!], dims.pointSizeConfig!, - ScaleDimensionMode.Quadratic + ScaleDimensionMode.Quad ); const vals = Array(frame.length); for (let i = 0; i < frame.length; i++) {