mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Schema: Fix dimension schemas (#67935)
This commit is contained in:
parent
0ce7f7eaf4
commit
854d497f94
@ -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"],
|
||||
|
@ -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 {
|
||||
|
@ -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")
|
||||
|
||||
|
@ -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 ScalarDimensionConfig extends BaseDimensionConfig<number>, Omit<raw.ScalarDimensionConfig, '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 ResourceDimensionConfig
|
||||
extends BaseDimensionConfig<string>,
|
||||
Omit<raw.ResourceDimensionConfig, 'fixed'> {}
|
||||
|
||||
export * from '../common/common.gen';
|
||||
|
||||
// TODO remove when https://github.com/grafana/cuetsy/issues/74 is fixed
|
||||
|
@ -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';
|
||||
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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';
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
@ -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<string>;
|
||||
|
@ -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<string> = {
|
||||
label: 'Fixed color',
|
||||
value: '_____fixed_____',
|
||||
|
@ -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';
|
||||
|
||||
|
@ -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<string> = {
|
||||
label: 'Fixed value',
|
||||
|
@ -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<string> = {
|
||||
label: 'Fixed value',
|
||||
|
@ -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' },
|
||||
|
@ -1,5 +1,6 @@
|
||||
import { ResourceDimensionMode } from '@grafana/schema';
|
||||
|
||||
import { getResourceDimension } from './resource';
|
||||
import { ResourceDimensionMode } from './types';
|
||||
|
||||
describe('getResourceDimension', () => {
|
||||
const publicPath = '/public/';
|
||||
|
@ -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';
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
@ -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'];
|
||||
|
@ -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';
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
@ -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;
|
||||
|
@ -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';
|
||||
|
||||
//---------------------------------------------------------
|
||||
|
@ -1,9 +1,5 @@
|
||||
import { Field } from '@grafana/data';
|
||||
|
||||
export interface BaseDimensionConfig<T = any> {
|
||||
fixed: T;
|
||||
field?: string;
|
||||
}
|
||||
import { TextDimensionConfig, TextDimensionMode } from '@grafana/schema';
|
||||
|
||||
export interface DimensionSupplier<T = any> {
|
||||
/**
|
||||
@ -32,17 +28,6 @@ export interface DimensionSupplier<T = any> {
|
||||
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 */
|
||||
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<number> {
|
||||
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<string> {
|
||||
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<string> {}
|
||||
|
||||
/** 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<string> {
|
||||
mode: ResourceDimensionMode;
|
||||
}
|
||||
|
||||
export enum ResourceFolderName {
|
||||
Icon = 'img/icons/unicons',
|
||||
IOT = 'img/icons/iot',
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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,
|
||||
|
@ -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 {
|
||||
|
@ -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';
|
||||
|
@ -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',
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { ResourceDimensionMode } from 'app/features/dimensions';
|
||||
import { ResourceDimensionMode } from '@grafana/schema';
|
||||
|
||||
import { StyleConfig } from './types';
|
||||
import { getStyleConfigState } from './utils';
|
||||
|
@ -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';
|
||||
|
@ -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';
|
||||
|
@ -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<CanvasElementOptions<IconConfig>, 'type' | 'name'>; // type is forced
|
||||
|
@ -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 {
|
||||
|
@ -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++) {
|
||||
|
Loading…
Reference in New Issue
Block a user