Schema: Fix dimension schemas (#67935)

This commit is contained in:
Ryan McKinley 2023-05-05 12:16:31 -07:00 committed by GitHub
parent 0ce7f7eaf4
commit 854d497f94
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
41 changed files with 174 additions and 149 deletions

View File

@ -2652,8 +2652,7 @@ exports[`better eslint`] = {
[0, 0, 0, "Unexpected any. Specify a different type.", "1"] [0, 0, 0, "Unexpected any. Specify a different type.", "1"]
], ],
"public/app/features/dimensions/types.ts:5381": [ "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.", "0"]
[0, 0, 0, "Unexpected any. Specify a different type.", "1"]
], ],
"public/app/features/dimensions/utils.ts:5381": [ "public/app/features/dimensions/utils.ts:5381": [
[0, 0, 0, "Do not use any type assertions.", "0"], [0, 0, 0, "Do not use any type assertions.", "0"],

View File

@ -52,19 +52,39 @@ export interface DataQuery {
} }
export interface BaseDimensionConfig { export interface BaseDimensionConfig {
/**
* fixed: T -- will be added by each element
*/
field?: string; field?: string;
fixed: (string | number); }
export enum ScaleDimensionMode {
Linear = 'linear',
Quad = 'quad',
} }
export interface ScaleDimensionConfig extends BaseDimensionConfig { export interface ScaleDimensionConfig extends BaseDimensionConfig {
fixed?: number;
max: number; max: number;
min: number; min: number;
mode?: ScaleDimensionMode; // | *"linear"
} }
/** export interface ColorDimensionConfig extends BaseDimensionConfig {
* This is actually an empty interface used mainly for naming? fixed?: string; // color value
*/ }
export interface ColorDimensionConfig extends BaseDimensionConfig {}
export enum ScalarDimensionMode {
Clamped = 'clamped',
Mod = 'mod',
}
export interface ScalarDimensionConfig extends BaseDimensionConfig {
fixed?: number;
max: number;
min: number;
mode?: ScalarDimensionMode;
}
export enum TextDimensionMode { export enum TextDimensionMode {
Field = 'field', Field = 'field',
@ -72,6 +92,17 @@ export enum TextDimensionMode {
Template = 'template', Template = 'template',
} }
export interface TextDimensionConfig extends BaseDimensionConfig {
fixed?: string;
mode: TextDimensionMode;
}
export enum ResourceDimensionMode {
Field = 'field',
Fixed = 'fixed',
Mapping = 'mapping',
}
export interface MapLayerOptions { export interface MapLayerOptions {
/** /**
* Custom options depending on the type * Custom options depending on the type
@ -785,8 +816,12 @@ export interface DataSourceRef {
uid?: string; 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 { export interface FrameGeometrySource {

View File

@ -2,19 +2,32 @@ package common
BaseDimensionConfig: { BaseDimensionConfig: {
field?: string field?: string
fixed: string | number // fixed: T -- will be added by each element
}@cuetsy(kind="interface") }@cuetsy(kind="interface")
ScaleDimensionMode: "linear" | "quad" @cuetsy(kind="enum")
ScaleDimensionConfig: { ScaleDimensionConfig: {
BaseDimensionConfig BaseDimensionConfig
min: int32 min: number
max: int32 max: number
fixed?: number
mode?: ScaleDimensionMode // | *"linear"
}@cuetsy(kind="interface") }@cuetsy(kind="interface")
// This is actually an empty interface used mainly for naming?
ColorDimensionConfig: { ColorDimensionConfig: {
BaseDimensionConfig 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") }@cuetsy(kind="interface")
TextDimensionMode: "fixed" | "field" | "template" @cuetsy(kind="enum") TextDimensionMode: "fixed" | "field" | "template" @cuetsy(kind="enum")
@ -22,4 +35,15 @@ TextDimensionMode: "fixed" | "field" | "template" @cuetsy(kind="enum")
TextDimensionConfig: { TextDimensionConfig: {
BaseDimensionConfig BaseDimensionConfig
mode: TextDimensionMode mode: TextDimensionMode
fixed?: string
}@cuetsy(kind="interface") }@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")

View File

@ -23,10 +23,18 @@ export interface BaseDimensionConfig<T = string | number> extends Omit<raw.BaseD
export interface ScaleDimensionConfig extends BaseDimensionConfig<number>, Omit<raw.ScaleDimensionConfig, 'fixed'> {} export interface ScaleDimensionConfig extends BaseDimensionConfig<number>, Omit<raw.ScaleDimensionConfig, 'fixed'> {}
export interface ScalarDimensionConfig extends BaseDimensionConfig<number>, Omit<raw.ScalarDimensionConfig, 'fixed'> {}
export interface TextDimensionConfig extends BaseDimensionConfig<string>, Omit<raw.TextDimensionConfig, 'fixed'> {} export interface TextDimensionConfig extends BaseDimensionConfig<string>, Omit<raw.TextDimensionConfig, 'fixed'> {}
export interface ColorDimensionConfig extends BaseDimensionConfig<string>, Omit<raw.ColorDimensionConfig, 'fixed'> {} export interface ColorDimensionConfig extends BaseDimensionConfig<string>, Omit<raw.ColorDimensionConfig, 'fixed'> {}
export interface ColorDimensionConfig extends BaseDimensionConfig<string>, Omit<raw.ColorDimensionConfig, 'fixed'> {}
export interface ResourceDimensionConfig
extends BaseDimensionConfig<string>,
Omit<raw.ResourceDimensionConfig, 'fixed'> {}
export * from '../common/common.gen'; export * from '../common/common.gen';
// TODO remove when https://github.com/grafana/cuetsy/issues/74 is fixed // TODO remove when https://github.com/grafana/cuetsy/issues/74 is fixed

View File

@ -2,9 +2,10 @@ import { ComponentType } from 'react';
import { RegistryItem } from '@grafana/data'; import { RegistryItem } from '@grafana/data';
import { PanelOptionsSupplier } from '@grafana/data/src/panel/PanelPlugin'; import { PanelOptionsSupplier } from '@grafana/data/src/panel/PanelPlugin';
import { ColorDimensionConfig, ScaleDimensionConfig } from '@grafana/schema';
import { config } from 'app/core/config'; import { config } from 'app/core/config';
import { DimensionContext, ColorDimensionConfig, ScaleDimensionConfig } from '../dimensions'; import { DimensionContext } from '../dimensions';
import { BackgroundConfig, Constraint, LineConfig, Placement } from './types'; import { BackgroundConfig, Constraint, LineConfig, Placement } from './types';

View File

@ -1,10 +1,10 @@
import React, { PureComponent } from 'react'; import React, { PureComponent } from 'react';
import { PluginState } from '@grafana/data/src'; import { PluginState } from '@grafana/data/src';
import { TextDimensionConfig } from '@grafana/schema';
import { Button } from '@grafana/ui'; import { Button } from '@grafana/ui';
import { DimensionContext } from 'app/features/dimensions/context'; import { DimensionContext } from 'app/features/dimensions/context';
import { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor'; 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 { APIEditor, APIEditorConfig, callApi } from 'app/plugins/panel/canvas/editor/APIEditor';
import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element'; import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element';

View File

@ -2,8 +2,9 @@ import { css } from '@emotion/css';
import React from 'react'; import React from 'react';
import { GrafanaTheme2 } from '@grafana/data'; import { GrafanaTheme2 } from '@grafana/data';
import { ScalarDimensionConfig } from '@grafana/schema';
import { useStyles2 } from '@grafana/ui'; 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 { ScalarDimensionEditor } from 'app/features/dimensions/editors';
import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element'; import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element';

View File

@ -2,8 +2,9 @@ import { css } from '@emotion/css';
import React from 'react'; import React from 'react';
import { GrafanaTheme2 } from '@grafana/data'; import { GrafanaTheme2 } from '@grafana/data';
import { ScalarDimensionConfig } from '@grafana/schema';
import { useStyles2 } from '@grafana/ui'; 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 { ScalarDimensionEditor } from 'app/features/dimensions/editors';
import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element'; import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element';

View File

@ -2,8 +2,9 @@ import { css } from '@emotion/css';
import React from 'react'; import React from 'react';
import { GrafanaTheme2 } from '@grafana/data'; import { GrafanaTheme2 } from '@grafana/data';
import { ScalarDimensionConfig } from '@grafana/schema';
import { useStyles2 } from '@grafana/ui'; 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 { ScalarDimensionEditor } from 'app/features/dimensions/editors';
import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element'; import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element';

View File

@ -2,13 +2,9 @@ import { css } from '@emotion/css';
import { isString } from 'lodash'; import { isString } from 'lodash';
import React, { CSSProperties } from 'react'; import React, { CSSProperties } from 'react';
import { ColorDimensionConfig, ResourceDimensionConfig, ResourceDimensionMode } from '@grafana/schema';
import { SanitizedSVG } from 'app/core/components/SVG/SanitizedSVG'; import { SanitizedSVG } from 'app/core/components/SVG/SanitizedSVG';
import { import { getPublicOrAbsoluteUrl } from 'app/features/dimensions';
ColorDimensionConfig,
ResourceDimensionConfig,
ResourceDimensionMode,
getPublicOrAbsoluteUrl,
} from 'app/features/dimensions';
import { DimensionContext } from 'app/features/dimensions/context'; import { DimensionContext } from 'app/features/dimensions/context';
import { ColorDimensionEditor, ResourceDimensionEditor } from 'app/features/dimensions/editors'; import { ColorDimensionEditor, ResourceDimensionEditor } from 'app/features/dimensions/editors';
import { APIEditorConfig, callApi } from 'app/plugins/panel/canvas/editor/APIEditor'; import { APIEditorConfig, callApi } from 'app/plugins/panel/canvas/editor/APIEditor';

View File

@ -4,9 +4,9 @@ import { useObservable } from 'react-use';
import { of } from 'rxjs'; import { of } from 'rxjs';
import { DataFrame, FieldNamePickerConfigSettings, GrafanaTheme2, StandardEditorsRegistryItem } from '@grafana/data'; import { DataFrame, FieldNamePickerConfigSettings, GrafanaTheme2, StandardEditorsRegistryItem } from '@grafana/data';
import { TextDimensionMode } from '@grafana/schema';
import { usePanelContext, useStyles2 } from '@grafana/ui'; import { usePanelContext, useStyles2 } from '@grafana/ui';
import { FieldNamePicker } from '@grafana/ui/src/components/MatchersUI/FieldNamePicker'; import { FieldNamePicker } from '@grafana/ui/src/components/MatchersUI/FieldNamePicker';
import { TextDimensionMode } from 'app/features/dimensions';
import { DimensionContext } from 'app/features/dimensions/context'; import { DimensionContext } from 'app/features/dimensions/context';
import { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor'; import { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor';
import { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor'; import { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor';

View File

@ -2,8 +2,9 @@ import { css } from '@emotion/css';
import React from 'react'; import React from 'react';
import { GrafanaTheme2 } from '@grafana/data'; import { GrafanaTheme2 } from '@grafana/data';
import { ColorDimensionConfig, ScalarDimensionConfig } from '@grafana/schema';
import config from 'app/core/config'; 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 { ColorDimensionEditor, ScalarDimensionEditor } from 'app/features/dimensions/editors';
import { CanvasElementItem, CanvasElementProps } from '../../element'; import { CanvasElementItem, CanvasElementProps } from '../../element';

View File

@ -2,8 +2,9 @@ import { css } from '@emotion/css';
import React from 'react'; import React from 'react';
import { GrafanaTheme2 } from '@grafana/data'; import { GrafanaTheme2 } from '@grafana/data';
import { ScalarDimensionConfig } from '@grafana/schema';
import { useStyles2 } from '@grafana/ui'; 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 { ScalarDimensionEditor } from 'app/features/dimensions/editors';
import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element'; import { CanvasElementItem, CanvasElementProps, defaultBgColor } from '../element';

View File

@ -7,17 +7,17 @@ import Selecto from 'selecto';
import { AppEvents, GrafanaTheme2, PanelData } from '@grafana/data'; import { AppEvents, GrafanaTheme2, PanelData } from '@grafana/data';
import { locationService } from '@grafana/runtime/src'; 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 { import {
ColorDimensionConfig, ColorDimensionConfig,
DimensionContext,
ResourceDimensionConfig, ResourceDimensionConfig,
ScalarDimensionConfig, ScalarDimensionConfig,
ScaleDimensionConfig, ScaleDimensionConfig,
TextDimensionConfig, 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 { import {
getColorDimensionFromData, getColorDimensionFromData,
getResourceDimensionFromData, getResourceDimensionFromData,

View File

@ -1,5 +1,5 @@
import { LinkModel } from '@grafana/data/src'; 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 { export interface Placement {
top?: number; top?: number;

View File

@ -6,8 +6,9 @@ import {
GrafanaTheme2, GrafanaTheme2,
getFieldConfigWithMinMax, getFieldConfigWithMinMax,
} from '@grafana/data'; } from '@grafana/data';
import { ColorDimensionConfig } from '@grafana/schema';
import { ColorDimensionConfig, DimensionSupplier } from './types'; import { DimensionSupplier } from './types';
import { findField, getLastNotNullFieldValue } from './utils'; import { findField, getLastNotNullFieldValue } from './utils';
//--------------------------------------------------------- //---------------------------------------------------------

View File

@ -1,13 +1,13 @@
import { PanelData } from '@grafana/data/src'; import { PanelData } from '@grafana/data/src';
import { import {
ColorDimensionConfig, ColorDimensionConfig,
DimensionSupplier,
ResourceDimensionConfig, ResourceDimensionConfig,
ScalarDimensionConfig, ScalarDimensionConfig,
ScaleDimensionConfig, ScaleDimensionConfig,
TextDimensionConfig, TextDimensionConfig,
} from './types'; } from '@grafana/schema';
import { DimensionSupplier } from './types';
export interface DimensionContext { export interface DimensionContext {
getColor(color: ColorDimensionConfig): DimensionSupplier<string>; getColor(color: ColorDimensionConfig): DimensionSupplier<string>;

View File

@ -2,11 +2,10 @@ import { css } from '@emotion/css';
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { GrafanaTheme2, SelectableValue, StandardEditorProps } from '@grafana/data'; import { GrafanaTheme2, SelectableValue, StandardEditorProps } from '@grafana/data';
import { ColorDimensionConfig } from '@grafana/schema';
import { Select, ColorPicker, useStyles2 } from '@grafana/ui'; import { Select, ColorPicker, useStyles2 } from '@grafana/ui';
import { useFieldDisplayNames, useSelectOptions } from '@grafana/ui/src/components/MatchersUI/utils'; import { useFieldDisplayNames, useSelectOptions } from '@grafana/ui/src/components/MatchersUI/utils';
import { ColorDimensionConfig } from '../types';
const fixedColorOption: SelectableValue<string> = { const fixedColorOption: SelectableValue<string> = {
label: 'Fixed color', label: 'Fixed color',
value: '_____fixed_____', value: '_____fixed_____',

View File

@ -1,17 +1,12 @@
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { FieldNamePickerConfigSettings, StandardEditorProps, StandardEditorsRegistryItem } from '@grafana/data'; import { FieldNamePickerConfigSettings, StandardEditorProps, StandardEditorsRegistryItem } from '@grafana/data';
import { ResourceDimensionConfig, ResourceDimensionMode } from '@grafana/schema';
import { InlineField, InlineFieldRow, RadioButtonGroup } from '@grafana/ui'; import { InlineField, InlineFieldRow, RadioButtonGroup } from '@grafana/ui';
import { FieldNamePicker } from '@grafana/ui/src/components/MatchersUI/FieldNamePicker'; import { FieldNamePicker } from '@grafana/ui/src/components/MatchersUI/FieldNamePicker';
import { getPublicOrAbsoluteUrl, ResourceFolderName } from '..'; import { getPublicOrAbsoluteUrl, ResourceFolderName } from '..';
import { import { MediaType, ResourceDimensionOptions, ResourcePickerSize } from '../types';
MediaType,
ResourceDimensionConfig,
ResourceDimensionMode,
ResourceDimensionOptions,
ResourcePickerSize,
} from '../types';
import { ResourcePicker } from './ResourcePicker'; import { ResourcePicker } from './ResourcePicker';

View File

@ -2,11 +2,12 @@ import { css } from '@emotion/css';
import React, { useCallback } from 'react'; import React, { useCallback } from 'react';
import { FieldType, GrafanaTheme2, SelectableValue, StandardEditorProps } from '@grafana/data'; import { FieldType, GrafanaTheme2, SelectableValue, StandardEditorProps } from '@grafana/data';
import { ScalarDimensionMode, ScalarDimensionConfig } from '@grafana/schema';
import { InlineField, InlineFieldRow, RadioButtonGroup, Select, useStyles2 } from '@grafana/ui'; import { InlineField, InlineFieldRow, RadioButtonGroup, Select, useStyles2 } from '@grafana/ui';
import { useFieldDisplayNames, useSelectOptions } from '@grafana/ui/src/components/MatchersUI/utils'; import { useFieldDisplayNames, useSelectOptions } from '@grafana/ui/src/components/MatchersUI/utils';
import { NumberInput } from 'app/core/components/OptionsUI/NumberInput'; import { NumberInput } from 'app/core/components/OptionsUI/NumberInput';
import { ScalarDimensionConfig, ScalarDimensionMode, ScalarDimensionOptions } from '../types'; import { ScalarDimensionOptions } from '../types';
const fixedValueOption: SelectableValue<string> = { const fixedValueOption: SelectableValue<string> = {
label: 'Fixed value', label: 'Fixed value',

View File

@ -2,12 +2,13 @@ import { css } from '@emotion/css';
import React, { useCallback, useMemo } from 'react'; import React, { useCallback, useMemo } from 'react';
import { GrafanaTheme2, SelectableValue, StandardEditorProps } from '@grafana/data'; import { GrafanaTheme2, SelectableValue, StandardEditorProps } from '@grafana/data';
import { ScaleDimensionConfig } from '@grafana/schema';
import { InlineField, InlineFieldRow, Select, useStyles2 } from '@grafana/ui'; import { InlineField, InlineFieldRow, Select, useStyles2 } from '@grafana/ui';
import { useFieldDisplayNames, useSelectOptions } from '@grafana/ui/src/components/MatchersUI/utils'; import { useFieldDisplayNames, useSelectOptions } from '@grafana/ui/src/components/MatchersUI/utils';
import { NumberInput } from 'app/core/components/OptionsUI/NumberInput'; import { NumberInput } from 'app/core/components/OptionsUI/NumberInput';
import { validateScaleOptions, validateScaleConfig } from '../scale'; import { validateScaleOptions, validateScaleConfig } from '../scale';
import { ScaleDimensionConfig, ScaleDimensionOptions } from '../types'; import { ScaleDimensionOptions } from '../types';
const fixedValueOption: SelectableValue<string> = { const fixedValueOption: SelectableValue<string> = {
label: 'Fixed value', label: 'Fixed value',

View File

@ -6,11 +6,12 @@ import {
StandardEditorsRegistryItem, StandardEditorsRegistryItem,
StringFieldConfigSettings, StringFieldConfigSettings,
} from '@grafana/data'; } from '@grafana/data';
import { TextDimensionConfig, TextDimensionMode } from '@grafana/schema';
import { Button, InlineField, InlineFieldRow, RadioButtonGroup } from '@grafana/ui'; import { Button, InlineField, InlineFieldRow, RadioButtonGroup } from '@grafana/ui';
import { FieldNamePicker } from '@grafana/ui/src/components/MatchersUI/FieldNamePicker'; import { FieldNamePicker } from '@grafana/ui/src/components/MatchersUI/FieldNamePicker';
import { StringValueEditor } from 'app/core/components/OptionsUI/string'; import { StringValueEditor } from 'app/core/components/OptionsUI/string';
import { TextDimensionConfig, TextDimensionMode, TextDimensionOptions } from '../types'; import { TextDimensionOptions } from '../types';
const textOptions = [ const textOptions = [
{ label: 'Fixed', value: TextDimensionMode.Fixed, description: 'Fixed value' }, { label: 'Fixed', value: TextDimensionMode.Fixed, description: 'Fixed value' },

View File

@ -1,5 +1,6 @@
import { ResourceDimensionMode } from '@grafana/schema';
import { getResourceDimension } from './resource'; import { getResourceDimension } from './resource';
import { ResourceDimensionMode } from './types';
describe('getResourceDimension', () => { describe('getResourceDimension', () => {
const publicPath = '/public/'; const publicPath = '/public/';

View File

@ -1,6 +1,7 @@
import { DataFrame } from '@grafana/data'; 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'; import { findField, getLastNotNullFieldValue } from './utils';
//--------------------------------------------------------- //---------------------------------------------------------

View File

@ -1,9 +1,8 @@
import { DataFrame, FieldType } from '@grafana/data'; import { DataFrame, FieldType } from '@grafana/data';
import { ScalarDimensionMode } from '@grafana/schema';
import { getScalarDimension } from './scalar'; import { getScalarDimension } from './scalar';
import { ScalarDimensionMode } from '.';
describe('scalar dimensions', () => { describe('scalar dimensions', () => {
it('handles string field', () => { it('handles string field', () => {
const values = ['-720', '10', '540', '90', '-210']; const values = ['-720', '10', '540', '90', '-210'];

View File

@ -1,6 +1,7 @@
import { DataFrame, Field } from '@grafana/data'; 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'; import { findField, getLastNotNullFieldValue } from './utils';
//--------------------------------------------------------- //---------------------------------------------------------

View File

@ -1,11 +1,10 @@
import { DataFrame, Field } from '@grafana/data'; import { DataFrame, Field } from '@grafana/data';
import { getMinMaxAndDelta } from '@grafana/data/src/field/scale'; 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 { findField, getLastNotNullFieldValue } from './utils';
import { ScaleDimensionMode } from '.';
//--------------------------------------------------------- //---------------------------------------------------------
// Scale dimension // Scale dimension
//--------------------------------------------------------- //---------------------------------------------------------
@ -43,7 +42,7 @@ export function getScaledDimensionForField(
} }
let scaled = (percent: number) => config.min + percent * delta; 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 maxArea = Math.PI * (config.max / 2) ** 2;
const minArea = Math.PI * (config.min / 2) ** 2; const minArea = Math.PI * (config.min / 2) ** 2;
const deltaArea = maxArea - minArea; const deltaArea = maxArea - minArea;

View File

@ -1,6 +1,7 @@
import { DataFrame, Field, FieldType, formattedValueToString } from '@grafana/data'; 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'; import { findField, getLastNotNullFieldValue } from './utils';
//--------------------------------------------------------- //---------------------------------------------------------

View File

@ -1,9 +1,5 @@
import { Field } from '@grafana/data'; import { Field } from '@grafana/data';
import { TextDimensionConfig, TextDimensionMode } from '@grafana/schema';
export interface BaseDimensionConfig<T = any> {
fixed: T;
field?: string;
}
export interface DimensionSupplier<T = any> { export interface DimensionSupplier<T = any> {
/** /**
@ -32,17 +28,6 @@ export interface DimensionSupplier<T = any> {
get: (index: number) => T; 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<number> {
min: number;
max: number;
}
/** Places that use the value */ /** Places that use the value */
export interface ScaleDimensionOptions { export interface ScaleDimensionOptions {
min: number; min: number;
@ -51,16 +36,6 @@ export interface ScaleDimensionOptions {
hideRange?: boolean; // false hideRange?: boolean; // false
} }
export enum ScalarDimensionMode {
Mod = 'mod',
Clamped = 'clamped',
}
export interface ScalarDimensionConfig extends BaseDimensionConfig<number> {
mode: ScalarDimensionMode;
min: number;
max: number;
}
export interface ScalarDimensionOptions { export interface ScalarDimensionOptions {
min: number; min: number;
max: number; max: number;
@ -70,25 +45,12 @@ export interface TextDimensionOptions {
// anything? // anything?
} }
export enum TextDimensionMode {
Fixed = 'fixed',
Field = 'field',
Template = 'template',
}
export interface TextDimensionConfig extends BaseDimensionConfig<string> {
mode: TextDimensionMode;
}
export const defaultTextConfig: TextDimensionConfig = Object.freeze({ export const defaultTextConfig: TextDimensionConfig = Object.freeze({
fixed: '', fixed: '',
mode: TextDimensionMode.Field, mode: TextDimensionMode.Field,
field: '', field: '',
}); });
/** Use the color value from field configs */
export interface ColorDimensionConfig extends BaseDimensionConfig<string> {}
/** Places that use the value */ /** Places that use the value */
export interface ResourceDimensionOptions { export interface ResourceDimensionOptions {
resourceType: MediaType; resourceType: MediaType;
@ -99,18 +61,6 @@ export interface ResourceDimensionOptions {
showSourceRadio?: boolean; 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<string> {
mode: ResourceDimensionMode;
}
export enum ResourceFolderName { export enum ResourceFolderName {
Icon = 'img/icons/unicons', Icon = 'img/icons/unicons',
IOT = 'img/icons/iot', IOT = 'img/icons/iot',

View File

@ -1,16 +1,18 @@
import { DataFrame, PanelData, Field, getFieldDisplayName, ReducerID } from '@grafana/data'; import { DataFrame, PanelData, Field, getFieldDisplayName, ReducerID } from '@grafana/data';
import { config } from '@grafana/runtime'; import { config } from '@grafana/runtime';
import {
ResourceDimensionConfig,
ScaleDimensionConfig,
TextDimensionConfig,
ColorDimensionConfig,
ScalarDimensionConfig,
} from '@grafana/schema';
import { import {
getColorDimension, getColorDimension,
getScaledDimension, getScaledDimension,
getTextDimension, getTextDimension,
getResourceDimension, getResourceDimension,
ColorDimensionConfig,
DimensionSupplier, DimensionSupplier,
ResourceDimensionConfig,
ScaleDimensionConfig,
TextDimensionConfig,
ScalarDimensionConfig,
} from 'app/features/dimensions'; } from 'app/features/dimensions';
import { getScalarDimension } from './scalar'; import { getScalarDimension } from './scalar';

View File

@ -2,10 +2,11 @@ import { css } from '@emotion/css';
import React, { useState } from 'react'; import React, { useState } from 'react';
import { GrafanaTheme2 } from '@grafana/data'; import { GrafanaTheme2 } from '@grafana/data';
import { ResourceDimensionMode } from '@grafana/schema';
import { Portal, useTheme2 } from '@grafana/ui'; import { Portal, useTheme2 } from '@grafana/ui';
import { Scene } from 'app/features/canvas/runtime/scene'; 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 { ResourcePickerPopover } from '../../../features/dimensions/editors/ResourcePickerPopover';
import { AnchorPoint } from './types'; import { AnchorPoint } from './types';

View File

@ -4,6 +4,13 @@ import { useObservable } from 'react-use';
import { Observable, of } from 'rxjs'; import { Observable, of } from 'rxjs';
import { FieldConfigPropertyItem, StandardEditorProps, StandardEditorsRegistryItem } from '@grafana/data'; import { FieldConfigPropertyItem, StandardEditorProps, StandardEditorsRegistryItem } from '@grafana/data';
import {
ScaleDimensionConfig,
ResourceDimensionConfig,
ColorDimensionConfig,
TextDimensionConfig,
ScalarDimensionConfig,
} from '@grafana/schema';
import { import {
ColorPicker, ColorPicker,
Field, Field,
@ -22,15 +29,7 @@ import {
ScalarDimensionEditor, ScalarDimensionEditor,
TextDimensionEditor, TextDimensionEditor,
} from 'app/features/dimensions/editors'; } from 'app/features/dimensions/editors';
import { import { ResourceFolderName, defaultTextConfig, MediaType } from 'app/features/dimensions/types';
ScaleDimensionConfig,
ResourceDimensionConfig,
ColorDimensionConfig,
ResourceFolderName,
TextDimensionConfig,
defaultTextConfig,
ScalarDimensionConfig,
} from 'app/features/dimensions/types';
import { defaultStyleConfig, GeometryTypeId, StyleConfig, TextAlignment, TextBaseline } from '../style/types'; import { defaultStyleConfig, GeometryTypeId, StyleConfig, TextAlignment, TextBaseline } from '../style/types';
import { styleUsesText } from '../style/utils'; import { styleUsesText } from '../style/utils';
@ -197,7 +196,7 @@ export const StyleEditor = ({ value, context, onChange, item }: Props) => {
item={ item={
{ {
settings: { settings: {
resourceType: 'icon', resourceType: MediaType.Icon,
folderName: ResourceFolderName.Marker, folderName: ResourceFolderName.Marker,
placeholderText: hasTextLabel ? 'Select a symbol' : 'Select a symbol or add a text label', placeholderText: hasTextLabel ? 'Select a symbol' : 'Select a symbol or add a text label',
placeholderValue: defaultStyleConfig.symbol.fixed, placeholderValue: defaultStyleConfig.symbol.fixed,

View File

@ -10,10 +10,11 @@ import {
import Map from 'ol/Map'; import Map from 'ol/Map';
import * as layer from 'ol/layer'; import * as layer from 'ol/layer';
import { getLocationMatchers } from 'app/features/geo/utils/location'; 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 { ScaleDimensionEditor } from 'app/features/dimensions/editors';
import { FrameVectorSource } from 'app/features/geo/utils/frameVectorSource'; import { FrameVectorSource } from 'app/features/geo/utils/frameVectorSource';
import { Point } from 'ol/geom'; import { Point } from 'ol/geom';
import { ScaleDimensionConfig } from '@grafana/schema';
// Configuration options for Heatmap overlays // Configuration options for Heatmap overlays
export interface HeatmapConfig { export interface HeatmapConfig {

View File

@ -11,7 +11,7 @@ import {
DataTransformerConfig, DataTransformerConfig,
DataTransformerID, DataTransformerID,
} from '@grafana/data'; } from '@grafana/data';
import { ResourceDimensionMode } from 'app/features/dimensions'; import { ResourceDimensionMode } from '@grafana/schema';
import { defaultMarkersConfig, MarkersConfig } from './layers/data/markersLayer'; import { defaultMarkersConfig, MarkersConfig } from './layers/data/markersLayer';
import { getMarkerAsPath } from './style/markers'; import { getMarkerAsPath } from './style/markers';

View File

@ -2,14 +2,14 @@ import { Style } from 'ol/style';
import { import {
ColorDimensionConfig, ColorDimensionConfig,
DimensionSupplier,
ResourceDimensionConfig, ResourceDimensionConfig,
ResourceDimensionMode, ResourceDimensionMode,
ScaleDimensionConfig, ScaleDimensionConfig,
ScalarDimensionConfig, ScalarDimensionConfig,
ScalarDimensionMode, ScalarDimensionMode,
TextDimensionConfig, TextDimensionConfig,
} from 'app/features/dimensions'; } from '@grafana/schema';
import { DimensionSupplier } from 'app/features/dimensions';
export enum GeometryTypeId { export enum GeometryTypeId {
Point = 'point', Point = 'point',

View File

@ -1,4 +1,4 @@
import { ResourceDimensionMode } from 'app/features/dimensions'; import { ResourceDimensionMode } from '@grafana/schema';
import { StyleConfig } from './types'; import { StyleConfig } from './types';
import { getStyleConfigState } from './utils'; import { getStyleConfigState } from './utils';

View File

@ -1,5 +1,5 @@
import { config } from '@grafana/runtime'; import { config } from '@grafana/runtime';
import { TextDimensionMode } from 'app/features/dimensions'; import { TextDimensionMode } from '@grafana/schema';
import { getMarkerMaker } from './markers'; import { getMarkerMaker } from './markers';
import { defaultStyleConfig, StyleConfig, StyleConfigFields, StyleConfigState } from './types'; import { defaultStyleConfig, StyleConfig, StyleConfigFields, StyleConfigState } from './types';

View File

@ -1,21 +1,23 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import { PanelProps } from '@grafana/data'; import { PanelProps } from '@grafana/data';
import {
ColorDimensionConfig,
ResourceDimensionConfig,
ScalarDimensionConfig,
ScaleDimensionConfig,
TextDimensionConfig,
} from '@grafana/schema';
import { HorizontalConstraint, VerticalConstraint } from 'app/features/canvas'; import { HorizontalConstraint, VerticalConstraint } from 'app/features/canvas';
import { iconItem } from 'app/features/canvas/elements/icon'; import { iconItem } from 'app/features/canvas/elements/icon';
import { ElementState } from 'app/features/canvas/runtime/element'; import { ElementState } from 'app/features/canvas/runtime/element';
import { import {
ColorDimensionConfig,
DimensionContext, DimensionContext,
getColorDimensionFromData, getColorDimensionFromData,
getResourceDimensionFromData, getResourceDimensionFromData,
getScalarDimensionFromData, getScalarDimensionFromData,
getScaleDimensionFromData, getScaleDimensionFromData,
getTextDimensionFromData, getTextDimensionFromData,
ResourceDimensionConfig,
ScalarDimensionConfig,
ScaleDimensionConfig,
TextDimensionConfig,
} from 'app/features/dimensions'; } from 'app/features/dimensions';
import { PanelOptions } from './models.gen'; import { PanelOptions } from './models.gen';

View File

@ -5,7 +5,7 @@
import { CanvasElementOptions } from 'app/features/canvas'; import { CanvasElementOptions } from 'app/features/canvas';
import { IconConfig } from 'app/features/canvas/elements/icon'; import { IconConfig } from 'app/features/canvas/elements/icon';
import { ResourceDimensionMode } from 'app/features/dimensions'; import { ResourceDimensionMode } from '@grafana/schema';
export interface PanelOptions { export interface PanelOptions {
root: Omit<CanvasElementOptions<IconConfig>, 'type' | 'name'>; // type is forced root: Omit<CanvasElementOptions<IconConfig>, 'type' | 'name'>; // type is forced

View File

@ -6,12 +6,12 @@ import {
HideableFieldConfig, HideableFieldConfig,
AxisConfig, AxisConfig,
AxisPlacement, AxisPlacement,
} from '@grafana/schema';
import {
ColorDimensionConfig, ColorDimensionConfig,
DimensionSupplier,
ScaleDimensionConfig, ScaleDimensionConfig,
TextDimensionConfig, TextDimensionConfig,
} from '@grafana/schema';
import {
DimensionSupplier,
} from 'app/features/dimensions'; } from 'app/features/dimensions';
// export enum ScatterLineMode { // export enum ScatterLineMode {

View File

@ -13,15 +13,17 @@ import {
} from '@grafana/data'; } from '@grafana/data';
import { alpha } from '@grafana/data/src/themes/colorManipulator'; import { alpha } from '@grafana/data/src/themes/colorManipulator';
import { config } from '@grafana/runtime'; 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 { import {
findFieldIndex, AxisPlacement,
getScaledDimensionForField, ScaleDirection,
ScaleOrientation,
VisibilityMode,
ScaleDimensionConfig, ScaleDimensionConfig,
ScaleDimensionMode, 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'; import { pointWithin, Quadtree, Rect } from '../barchart/quadtree';
@ -142,7 +144,7 @@ function getScatterSeries(
const s = getScaledDimensionForField( const s = getScaledDimensionForField(
frame.fields[dims.pointSizeIndex!], frame.fields[dims.pointSizeIndex!],
dims.pointSizeConfig!, dims.pointSizeConfig!,
ScaleDimensionMode.Quadratic ScaleDimensionMode.Quad
); );
const vals = Array(frame.length); const vals = Array(frame.length);
for (let i = 0; i < frame.length; i++) { for (let i = 0; i < frame.length; i++) {