diff --git a/packages/grafana-data/src/transformations/standardTransformersRegistry.ts b/packages/grafana-data/src/transformations/standardTransformersRegistry.ts index 9733fc5bc2c..dc9fbaca85f 100644 --- a/packages/grafana-data/src/transformations/standardTransformersRegistry.ts +++ b/packages/grafana-data/src/transformations/standardTransformersRegistry.ts @@ -1,5 +1,5 @@ import React from 'react'; -import { DataFrame, DataTransformerInfo, PluginState } from '../types'; +import { DataFrame, DataTransformerInfo } from '../types'; import { Registry, RegistryItem } from '../utils/Registry'; export interface TransformerUIProps { @@ -20,11 +20,6 @@ export interface TransformerRegistryItem extends RegistryItem { */ transformation: DataTransformerInfo; - /** - * Optional feature state - */ - state?: PluginState; - /** Markdown with more detailed description and help */ help?: string; diff --git a/packages/grafana-data/src/utils/Registry.ts b/packages/grafana-data/src/utils/Registry.ts index 060d4aef1dc..a3ecbc96ed4 100644 --- a/packages/grafana-data/src/utils/Registry.ts +++ b/packages/grafana-data/src/utils/Registry.ts @@ -1,3 +1,4 @@ +import { PluginState } from '../types'; import { SelectableValue } from '../types/select'; export interface RegistryItem { @@ -11,6 +12,11 @@ export interface RegistryItem { * like: 'all' and 'any' matchers; */ excludeFromPicker?: boolean; + + /** + * Optional feature state + */ + state?: PluginState; } export interface RegistryItemWithOptions extends RegistryItem { @@ -105,6 +111,10 @@ export class Registry { description: ext.description, }; + if (ext.state === PluginState.alpha) { + option.label += ' (alpha)'; + } + select.options.push(option); if (currentOptions[ext.id]) { currentOptions[ext.id] = option; diff --git a/public/app/core/config.ts b/public/app/core/config.ts index 281314c4c8d..a55c22a8b26 100644 --- a/public/app/core/config.ts +++ b/public/app/core/config.ts @@ -1,4 +1,5 @@ import { config, GrafanaBootConfig } from '@grafana/runtime'; +import { PluginState } from '../../../packages/grafana-data/src'; // Legacy binding paths export { config, GrafanaBootConfig as Settings }; @@ -16,3 +17,6 @@ export const updateConfig = (update: Partial) => { ...update, }; }; + +// The `enable_alpha` flag is no exposed directly, this is equivolant +export const hasAlphaPanels = Boolean(config.panels?.debug?.state === PluginState.alpha); diff --git a/public/app/plugins/panel/geomap/editor/BaseLayerEditor.tsx b/public/app/plugins/panel/geomap/editor/BaseLayerEditor.tsx index 5f22cd72ee6..42f8c8530c1 100644 --- a/public/app/plugins/panel/geomap/editor/BaseLayerEditor.tsx +++ b/public/app/plugins/panel/geomap/editor/BaseLayerEditor.tsx @@ -1,12 +1,23 @@ import React, { FC } from 'react'; -import { StandardEditorProps, MapLayerOptions } from '@grafana/data'; +import { StandardEditorProps, MapLayerOptions, MapLayerRegistryItem, PluginState } from '@grafana/data'; import { GeomapPanelOptions } from '../types'; import { LayerEditor } from './LayerEditor'; +import { hasAlphaPanels } from 'app/core/config'; + +function baseMapFilter(layer: MapLayerRegistryItem): boolean { + if (!layer.isBaseMap) { + return false; + } + if (layer.state === PluginState.alpha) { + return hasAlphaPanels; + } + return true; +} export const BaseLayerEditor: FC> = ({ value, onChange, context, }) => { - return Boolean(v.isBaseMap)} />; + return ; }; diff --git a/public/app/plugins/panel/geomap/editor/DataLayersEditor.tsx b/public/app/plugins/panel/geomap/editor/DataLayersEditor.tsx index 029521972c4..d7b37234ca9 100644 --- a/public/app/plugins/panel/geomap/editor/DataLayersEditor.tsx +++ b/public/app/plugins/panel/geomap/editor/DataLayersEditor.tsx @@ -1,7 +1,18 @@ import React, { FC } from 'react'; -import { StandardEditorProps, MapLayerOptions } from '@grafana/data'; +import { StandardEditorProps, MapLayerOptions, PluginState, MapLayerRegistryItem } from '@grafana/data'; import { GeomapPanelOptions } from '../types'; import { LayerEditor } from './LayerEditor'; +import { hasAlphaPanels } from 'app/core/config'; + +function dataLayerFilter(layer: MapLayerRegistryItem): boolean { + if (layer.isBaseMap) { + return false; + } + if (layer.state === PluginState.alpha) { + return hasAlphaPanels; + } + return true; +} // For now this supports a *single* data layer -- eventually we should support more than one export const DataLayersEditor: FC> = ({ @@ -17,7 +28,7 @@ export const DataLayersEditor: FC !v.isBaseMap} + filter={dataLayerFilter} /> ); }; diff --git a/public/app/plugins/panel/geomap/layers/data/geojsonMapper.ts b/public/app/plugins/panel/geomap/layers/data/geojsonMapper.ts index 99766175135..7e41200dbf8 100644 --- a/public/app/plugins/panel/geomap/layers/data/geojsonMapper.ts +++ b/public/app/plugins/panel/geomap/layers/data/geojsonMapper.ts @@ -1,4 +1,4 @@ -import { MapLayerRegistryItem, MapLayerOptions, MapLayerHandler, PanelData, GrafanaTheme2 } from '@grafana/data'; +import { MapLayerRegistryItem, MapLayerOptions, MapLayerHandler, PanelData, GrafanaTheme2, PluginState } from '@grafana/data'; import Map from 'ol/Map'; import VectorLayer from 'ol/layer/Vector'; import VectorSource from 'ol/source/Vector'; @@ -24,6 +24,7 @@ export const geojsonMapper: MapLayerRegistryItem = { name: 'Map values to GeoJSON file', description: 'color features based on query results', isBaseMap: false, + state: PluginState.alpha, /** * Function that configures transformation and returns a transformer diff --git a/public/app/plugins/panel/geomap/layers/data/lastPointTracker.ts b/public/app/plugins/panel/geomap/layers/data/lastPointTracker.ts index 8811ac6b9e9..74d1ec706b5 100644 --- a/public/app/plugins/panel/geomap/layers/data/lastPointTracker.ts +++ b/public/app/plugins/panel/geomap/layers/data/lastPointTracker.ts @@ -1,4 +1,4 @@ -import { MapLayerRegistryItem, MapLayerOptions, MapLayerHandler, PanelData, GrafanaTheme2 } from '@grafana/data'; +import { MapLayerRegistryItem, MapLayerOptions, MapLayerHandler, PanelData, GrafanaTheme2, PluginState } from '@grafana/data'; import Map from 'ol/Map'; import Feature from 'ol/Feature'; import * as style from 'ol/style'; @@ -20,6 +20,7 @@ export const lastPointTracker: MapLayerRegistryItem = { description: 'Show an icon at the last point', isBaseMap: false, showLocation: true, + state: PluginState.alpha, /** * Function that configures transformation and returns a transformer diff --git a/public/app/plugins/panel/geomap/plugin.json b/public/app/plugins/panel/geomap/plugin.json index ae10418ab07..b462ef64bb6 100644 --- a/public/app/plugins/panel/geomap/plugin.json +++ b/public/app/plugins/panel/geomap/plugin.json @@ -2,7 +2,7 @@ "type": "panel", "name": "Geomap", "id": "geomap", - "state": "alpha", + "state": "beta", "info": { "description": "Geomap panel",