From 2b0029267cfbcc65793a4922919afc4a2748c0a0 Mon Sep 17 00:00:00 2001 From: Adela Almasan <88068998+adela-almasan@users.noreply.github.com> Date: Wed, 26 Feb 2025 17:15:01 -0600 Subject: [PATCH] Actions: Remove `vizActions` feature toggle (#100309) --- .../configure-grafana/feature-toggles/index.md | 1 - packages/grafana-data/src/types/featureToggles.gen.ts | 1 - pkg/services/featuremgmt/registry.go | 8 -------- pkg/services/featuremgmt/toggles_gen.csv | 1 - pkg/services/featuremgmt/toggles_gen.go | 4 ---- pkg/services/featuremgmt/toggles_gen.json | 3 ++- public/app/core/components/OptionsUI/registry.tsx | 4 +--- public/app/features/actions/ActionEditor.tsx | 6 +----- .../panel/canvas/editor/element/elementEditor.tsx | 7 +------ public/app/plugins/panel/canvas/editor/options.ts | 4 +--- public/app/plugins/panel/status-history/utils.ts | 5 ----- public/app/plugins/panel/table/TableCellOptionEditor.tsx | 9 +-------- public/app/plugins/panel/table/TablePanel.tsx | 4 ---- public/locales/en-US/grafana.json | 2 +- public/locales/pseudo-LOCALE/grafana.json | 2 +- 15 files changed, 9 insertions(+), 52 deletions(-) diff --git a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md index 699ecbe13c5..f40ad6a1766 100644 --- a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md +++ b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md @@ -130,7 +130,6 @@ Experimental features might be changed or removed without prior notice. | `lokiExperimentalStreaming` | Support new streaming approach for loki (prototype, needs special loki build) | | `storage` | Configurable storage for dashboards, datasources, and resources | | `canvasPanelNesting` | Allow elements nesting | -| `vizActions` | Allow actions in visualizations | | `disableSecretsCompatibility` | Disable duplicated secret storage in legacy tables | | `logRequestsInstrumentedAsUnknown` | Logs the path for requests that are instrumented as unknown | | `showDashboardValidationWarnings` | Show warnings when dashboards do not validate against the schema | diff --git a/packages/grafana-data/src/types/featureToggles.gen.ts b/packages/grafana-data/src/types/featureToggles.gen.ts index 85ba3f238c5..87c5ff7c0d1 100644 --- a/packages/grafana-data/src/types/featureToggles.gen.ts +++ b/packages/grafana-data/src/types/featureToggles.gen.ts @@ -36,7 +36,6 @@ export interface FeatureToggles { autoMigrateStatPanel?: boolean; disableAngular?: boolean; canvasPanelNesting?: boolean; - vizActions?: boolean; disableSecretsCompatibility?: boolean; logRequestsInstrumentedAsUnknown?: boolean; grpcServer?: boolean; diff --git a/pkg/services/featuremgmt/registry.go b/pkg/services/featuremgmt/registry.go index a3a8a86191d..d84ae066775 100644 --- a/pkg/services/featuremgmt/registry.go +++ b/pkg/services/featuremgmt/registry.go @@ -150,14 +150,6 @@ var ( Owner: grafanaDatavizSquad, HideFromAdminPage: true, }, - { - Name: "vizActions", - Description: "Allow actions in visualizations", - Stage: FeatureStageExperimental, - FrontendOnly: true, - Owner: grafanaDatavizSquad, - HideFromAdminPage: true, - }, { Name: "disableSecretsCompatibility", Description: "Disable duplicated secret storage in legacy tables", diff --git a/pkg/services/featuremgmt/toggles_gen.csv b/pkg/services/featuremgmt/toggles_gen.csv index 065323e011e..feb0e5d5d4b 100644 --- a/pkg/services/featuremgmt/toggles_gen.csv +++ b/pkg/services/featuremgmt/toggles_gen.csv @@ -17,7 +17,6 @@ autoMigrateWorldmapPanel,preview,@grafana/dataviz-squad,false,false,true autoMigrateStatPanel,preview,@grafana/dataviz-squad,false,false,true disableAngular,preview,@grafana/dataviz-squad,false,false,true canvasPanelNesting,experimental,@grafana/dataviz-squad,false,false,true -vizActions,experimental,@grafana/dataviz-squad,false,false,true disableSecretsCompatibility,experimental,@grafana/hosted-grafana-team,false,true,false logRequestsInstrumentedAsUnknown,experimental,@grafana/hosted-grafana-team,false,false,false grpcServer,preview,@grafana/search-and-storage,false,false,false diff --git a/pkg/services/featuremgmt/toggles_gen.go b/pkg/services/featuremgmt/toggles_gen.go index b2d704e7a10..56c3a7d53da 100644 --- a/pkg/services/featuremgmt/toggles_gen.go +++ b/pkg/services/featuremgmt/toggles_gen.go @@ -79,10 +79,6 @@ const ( // Allow elements nesting FlagCanvasPanelNesting = "canvasPanelNesting" - // FlagVizActions - // Allow actions in visualizations - FlagVizActions = "vizActions" - // FlagDisableSecretsCompatibility // Disable duplicated secret storage in legacy tables FlagDisableSecretsCompatibility = "disableSecretsCompatibility" diff --git a/pkg/services/featuremgmt/toggles_gen.json b/pkg/services/featuremgmt/toggles_gen.json index 0d6059d5520..569c2cbfc1d 100644 --- a/pkg/services/featuremgmt/toggles_gen.json +++ b/pkg/services/featuremgmt/toggles_gen.json @@ -4202,7 +4202,8 @@ "metadata": { "name": "vizActions", "resourceVersion": "1722461779830", - "creationTimestamp": "2024-09-09T14:11:55Z" + "creationTimestamp": "2024-09-09T14:11:55Z", + "deletionTimestamp": "2025-02-07T18:50:26Z" }, "spec": { "description": "Allow actions in visualizations", diff --git a/public/app/core/components/OptionsUI/registry.tsx b/public/app/core/components/OptionsUI/registry.tsx index 519a0f0c338..28fcc7ab9e6 100644 --- a/public/app/core/components/OptionsUI/registry.tsx +++ b/public/app/core/components/OptionsUI/registry.tsx @@ -30,7 +30,6 @@ import { DataLinksFieldConfigSettings, } from '@grafana/data'; import { actionsOverrideProcessor } from '@grafana/data/src/field/overrides/processors'; -import { config } from '@grafana/runtime'; import { FieldConfig } from '@grafana/schema'; import { RadioButtonGroup, TimeZonePicker, Switch } from '@grafana/ui'; import { FieldNamePicker } from '@grafana/ui/src/components/MatchersUI/FieldNamePicker'; @@ -349,7 +348,7 @@ export const getAllStandardFieldConfigs = () => { category, }; - const dataLinksCategory = config.featureToggles.vizActions ? 'Data links and actions' : 'Data links'; + const dataLinksCategory = 'Data links and actions'; const links: FieldConfigPropertyItem = { id: 'links', @@ -379,7 +378,6 @@ export const getAllStandardFieldConfigs = () => { shouldApply: () => true, category: [dataLinksCategory], getItemsCount: (value) => (value ? value.length : 0), - showIf: () => config.featureToggles.vizActions, hideFromDefaults: true, }; diff --git a/public/app/features/actions/ActionEditor.tsx b/public/app/features/actions/ActionEditor.tsx index 4194ab2680c..81500b9332a 100644 --- a/public/app/features/actions/ActionEditor.tsx +++ b/public/app/features/actions/ActionEditor.tsx @@ -2,7 +2,6 @@ import { css } from '@emotion/css'; import { memo } from 'react'; import { Action, GrafanaTheme2, httpMethodOptions, HttpRequestMethod, VariableSuggestion } from '@grafana/data'; -import { config } from '@grafana/runtime'; import { Switch } from '@grafana/ui/'; import { Field } from '@grafana/ui/src/components/Forms/Field'; import { InlineField } from '@grafana/ui/src/components/Forms/InlineField'; @@ -108,8 +107,6 @@ export const ActionEditor = memo(({ index, value, onChange, suggestions, showOne value.fetch.method !== HttpRequestMethod.GET && value.fetch.headers?.some(([name, value]) => name === 'Content-Type' && value === 'application/json'); - const action = config.featureToggles.vizActions ? 'or action' : ''; - return (
@@ -147,8 +144,7 @@ export const ActionEditor = memo(({ index, value, onChange, suggestions, showOne label={t('grafana-ui.data-link-inline-editor.one-click', 'One click')} description={t( 'grafana-ui.action-editor.modal.one-click-description', - 'Only one link {{ action }} can have one click enabled at a time', - { action } + 'Only one link or action can have one click enabled at a time' )} > diff --git a/public/app/plugins/panel/canvas/editor/element/elementEditor.tsx b/public/app/plugins/panel/canvas/editor/element/elementEditor.tsx index 78562e83e88..bdad1130a50 100644 --- a/public/app/plugins/panel/canvas/editor/element/elementEditor.tsx +++ b/public/app/plugins/panel/canvas/editor/element/elementEditor.tsx @@ -1,7 +1,6 @@ import { get as lodashGet } from 'lodash'; import { NestedPanelOptions, NestedValueAccess } from '@grafana/data/src/utils/OptionsUIBuilders'; -import { config } from '@grafana/runtime'; import { CanvasElementOptions } from 'app/features/canvas/element'; import { canvasElementRegistry, @@ -67,8 +66,6 @@ export function getElementEditor(opts: CanvasEditorOptions): NestedPanelOptions< const current = options?.type ? options.type : DEFAULT_CANVAS_ELEMENT_CONFIG.type; const layerTypes = getElementTypes(opts.scene.shouldShowAdvancedTypes, current).options; - const actionsEnabled = config.featureToggles.vizActions; - const isUnsupported = !opts.scene.shouldShowAdvancedTypes && !defaultElementItems.filter((item) => item.id === options?.type).length; @@ -123,9 +120,7 @@ export function getElementEditor(opts: CanvasEditorOptions): NestedPanelOptions< } optionBuilder.addDataLinks(builder, ctx); - if (actionsEnabled) { - optionBuilder.addActions(builder, ctx); - } + optionBuilder.addActions(builder, ctx); }, }; } diff --git a/public/app/plugins/panel/canvas/editor/options.ts b/public/app/plugins/panel/canvas/editor/options.ts index 954478b88dd..221ab5f7979 100644 --- a/public/app/plugins/panel/canvas/editor/options.ts +++ b/public/app/plugins/panel/canvas/editor/options.ts @@ -2,7 +2,6 @@ import { capitalize } from 'lodash'; import { FieldType } from '@grafana/data'; import { PanelOptionsSupplier } from '@grafana/data/src/panel/PanelPlugin'; -import { config } from '@grafana/runtime'; import { ConnectionDirection } from 'app/features/canvas/element'; import { SVGElements } from 'app/features/canvas/runtime/element'; import { ColorDimensionEditor, ResourceDimensionEditor, ScaleDimensionEditor } from 'app/features/dimensions/editors'; @@ -213,7 +212,7 @@ export const optionBuilder: OptionSuppliers = { addDataLinks: (builder, context) => { builder.addCustomEditor({ - category: config.featureToggles.vizActions ? ['Data links and actions'] : ['Data links'], + category: ['Data links and actions'], id: 'dataLinks', path: 'links', name: 'Links', @@ -230,7 +229,6 @@ export const optionBuilder: OptionSuppliers = { name: 'Actions', editor: ActionsEditor, settings: context.options, - showIf: () => config.featureToggles.vizActions, }); }, }; diff --git a/public/app/plugins/panel/status-history/utils.ts b/public/app/plugins/panel/status-history/utils.ts index 9651797df10..cd683b7129c 100644 --- a/public/app/plugins/panel/status-history/utils.ts +++ b/public/app/plugins/panel/status-history/utils.ts @@ -1,6 +1,5 @@ import { ActionModel, Field, InterpolateFunction, LinkModel } from '@grafana/data'; import { DataFrame } from '@grafana/data/'; -import { config } from '@grafana/runtime'; import { getActions } from 'app/features/actions/utils'; export const getDataLinks = (field: Field, rowIdx: number) => { @@ -32,10 +31,6 @@ export const getFieldActions = ( replaceVars: InterpolateFunction, rowIndex: number ) => { - if (!config.featureToggles?.vizActions) { - return []; - } - const actions: Array> = []; const actionLookup = new Set(); diff --git a/public/app/plugins/panel/table/TableCellOptionEditor.tsx b/public/app/plugins/panel/table/TableCellOptionEditor.tsx index cff753a5344..39b2059d760 100644 --- a/public/app/plugins/panel/table/TableCellOptionEditor.tsx +++ b/public/app/plugins/panel/table/TableCellOptionEditor.tsx @@ -3,7 +3,6 @@ import { merge } from 'lodash'; import { useState } from 'react'; import { GrafanaTheme2, SelectableValue } from '@grafana/data'; -import { config } from '@grafana/runtime'; import { TableCellOptions } from '@grafana/schema'; import { Field, Select, TableCellDisplayMode, useStyles2 } from '@grafana/ui'; @@ -91,15 +90,9 @@ let cellDisplayModeOptions: Array> = [ { value: { type: TableCellDisplayMode.DataLinks }, label: 'Data links' }, { value: { type: TableCellDisplayMode.JSONView }, label: 'JSON View' }, { value: { type: TableCellDisplayMode.Image }, label: 'Image' }, + { value: { type: TableCellDisplayMode.Actions }, label: 'Actions' }, ]; -if (config.featureToggles.vizActions) { - cellDisplayModeOptions = [ - ...cellDisplayModeOptions, - { value: { type: TableCellDisplayMode.Actions }, label: 'Actions' }, - ]; -} - const getStyles = (theme: GrafanaTheme2) => ({ fixBottomMargin: css({ marginBottom: theme.spacing(-2), diff --git a/public/app/plugins/panel/table/TablePanel.tsx b/public/app/plugins/panel/table/TablePanel.tsx index 3945829809b..527389c9e90 100644 --- a/public/app/plugins/panel/table/TablePanel.tsx +++ b/public/app/plugins/panel/table/TablePanel.tsx @@ -152,10 +152,6 @@ const getCellActions = ( rowIndex: number, replaceVariables: InterpolateFunction | undefined ) => { - if (!config.featureToggles?.vizActions) { - return []; - } - const actions: Array> = []; const actionLookup = new Set(); diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json index 366b60a9da0..2a6465e6357 100644 --- a/public/locales/en-US/grafana.json +++ b/public/locales/en-US/grafana.json @@ -1703,7 +1703,7 @@ "action-query-params": "Query parameters", "action-title": "Title", "action-title-placeholder": "Action title", - "one-click-description": "Only one link {{ action }} can have one click enabled at a time" + "one-click-description": "Only one link or action can have one click enabled at a time" } }, "alert": { diff --git a/public/locales/pseudo-LOCALE/grafana.json b/public/locales/pseudo-LOCALE/grafana.json index 23e1bebb722..3eea1ed364a 100644 --- a/public/locales/pseudo-LOCALE/grafana.json +++ b/public/locales/pseudo-LOCALE/grafana.json @@ -1703,7 +1703,7 @@ "action-query-params": "Qūęřy päřämęŧęřş", "action-title": "Ŧįŧľę", "action-title-placeholder": "Åčŧįőʼn ŧįŧľę", - "one-click-description": "Øʼnľy őʼnę ľįʼnĸ {{ action }} čäʼn ĥävę őʼnę čľįčĸ ęʼnäþľęđ äŧ ä ŧįmę" + "one-click-description": "Øʼnľy őʼnę ľįʼnĸ őř äčŧįőʼn čäʼn ĥävę őʼnę čľįčĸ ęʼnäþľęđ äŧ ä ŧįmę" } }, "alert": {