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 516cf303af2..22cccf9e608 100644 --- a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md +++ b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md @@ -57,7 +57,6 @@ Some features are enabled by default. You can disable these feature by setting t | `lokiQueryHints` | Enables query hints for Loki | Yes | | `alertingQueryOptimization` | Optimizes eligible queries in order to reduce load on datasources | | | `jitterAlertRules` | Distributes alert rule evaluations more evenly over time, by rule group | | -| `slateAutocomplete` | Adjusts the behaviour of the slate editor to properly handle autocomplete. Feature toggled for safety. | Yes | ## Preview feature toggles diff --git a/packages/grafana-data/src/types/featureToggles.gen.ts b/packages/grafana-data/src/types/featureToggles.gen.ts index fab1a2a7a62..b77af68741e 100644 --- a/packages/grafana-data/src/types/featureToggles.gen.ts +++ b/packages/grafana-data/src/types/featureToggles.gen.ts @@ -176,6 +176,5 @@ export interface FeatureToggles { onPremToCloudMigrations?: boolean; alertingSaveStatePeriodic?: boolean; promQLScope?: boolean; - slateAutocomplete?: boolean; nodeGraphDotLayout?: boolean; } diff --git a/packages/grafana-ui/src/slate-plugins/suggestions.test.tsx b/packages/grafana-ui/src/slate-plugins/suggestions.test.tsx index 8ce6c713d94..039e9bcac08 100644 --- a/packages/grafana-ui/src/slate-plugins/suggestions.test.tsx +++ b/packages/grafana-ui/src/slate-plugins/suggestions.test.tsx @@ -2,52 +2,28 @@ import { getNumCharsToDelete } from './suggestions'; describe('suggestions', () => { describe('getNumCharsToDelete', () => { - describe('when slateAutocomplete is enabled', () => { - let originalBootData = window.grafanaBootData; - - // hacky way to enable the feature toggle for this test - beforeEach(() => { - if (originalBootData) { - window.grafanaBootData = { - ...originalBootData, - settings: { - ...originalBootData.settings, - featureToggles: { - ...originalBootData.settings.featureToggles, - slateAutocomplete: true, - }, - }, - }; - } - }); - - afterEach(() => { - window.grafanaBootData = originalBootData; - }); - - const splunkCleanText = (s: string) => s.replace(/[{}[\]="(),!~+\-*/^%:\\]/g, '').trim(); - it.each([ - // | represents the caret position - ['$query0 ', '', '', false, 0, undefined, { forward: 0, backward: 0 }], // "|" --> "$query0 |" - ['$query0 ', '$que', '$que', false, 0, undefined, { forward: 0, backward: 4 }], // "$que|" --> "$query0 |" - ['$query0 ', '$q', '$que', false, 0, undefined, { forward: 2, backward: 2 }], // "$q|ue" --> "$query0 |" - ['$query0 ', '$que', '($que)', false, 0, splunkCleanText, { forward: 0, backward: 4 }], // "($que|)" --> "($query0 |)" - ['$query0 ', '$que', 'esarvotionUsagePercent=$que', false, 0, undefined, { forward: 0, backward: 4 }], // "esarvotionUsagePercent=$que|" --> "esarvotionUsagePercent=$query0 |" - ])( - 'should calculate the correct number of characters to delete forwards and backwards', - (suggestionText, typeaheadPrefix, typeaheadText, preserveSuffix, deleteBackwards, cleanText, expected) => { - expect( - getNumCharsToDelete( - suggestionText, - typeaheadPrefix, - typeaheadText, - preserveSuffix, - deleteBackwards, - cleanText - ) - ).toEqual(expected); - } - ); - }); + const splunkCleanText = (s: string) => s.replace(/[{}[\]="(),!~+\-*/^%:\\]/g, '').trim(); + it.each([ + // | represents the caret position + ['$query0 ', '', '', false, 0, undefined, { forward: 0, backward: 0 }], // "|" --> "$query0 |" + ['$query0 ', '$que', '$que', false, 0, undefined, { forward: 0, backward: 4 }], // "$que|" --> "$query0 |" + ['$query0 ', '$q', '$que', false, 0, undefined, { forward: 2, backward: 2 }], // "$q|ue" --> "$query0 |" + ['$query0 ', '$que', '($que)', false, 0, splunkCleanText, { forward: 0, backward: 4 }], // "($que|)" --> "($query0 |)" + ['$query0 ', '$que', 'esarvotionUsagePercent=$que', false, 0, undefined, { forward: 0, backward: 4 }], // "esarvotionUsagePercent=$que|" --> "esarvotionUsagePercent=$query0 |" + ])( + 'should calculate the correct number of characters to delete forwards and backwards', + (suggestionText, typeaheadPrefix, typeaheadText, preserveSuffix, deleteBackwards, cleanText, expected) => { + expect( + getNumCharsToDelete( + suggestionText, + typeaheadPrefix, + typeaheadText, + preserveSuffix, + deleteBackwards, + cleanText + ) + ).toEqual(expected); + } + ); }); }); diff --git a/packages/grafana-ui/src/slate-plugins/suggestions.tsx b/packages/grafana-ui/src/slate-plugins/suggestions.tsx index 9ef22285578..917895c437f 100644 --- a/packages/grafana-ui/src/slate-plugins/suggestions.tsx +++ b/packages/grafana-ui/src/slate-plugins/suggestions.tsx @@ -360,18 +360,10 @@ export function getNumCharsToDelete( const text = cleanText ? cleanText(typeaheadText) : typeaheadText; const offset = typeaheadText.indexOf(typeaheadPrefix); - let forward: number; - - if (window.grafanaBootData?.settings.featureToggles['slateAutocomplete']) { - const suffixLength = - offset > -1 ? text.length - offset - typeaheadPrefix.length : text.length - typeaheadPrefix.length; - const midWord = Boolean((typeaheadPrefix && suffixLength > 0) || suggestionText === typeaheadText); - forward = midWord && !preserveSuffix ? suffixLength + offset : 0; - } else { - const suffixLength = text.length - typeaheadPrefix.length; - const midWord = typeaheadPrefix && ((suffixLength > 0 && offset > -1) || suggestionText === typeaheadText); - forward = midWord && !preserveSuffix ? suffixLength + offset : 0; - } + const suffixLength = + offset > -1 ? text.length - offset - typeaheadPrefix.length : text.length - typeaheadPrefix.length; + const midWord = Boolean((typeaheadPrefix && suffixLength > 0) || suggestionText === typeaheadText); + const forward = midWord && !preserveSuffix ? suffixLength + offset : 0; return { forward, diff --git a/pkg/services/featuremgmt/registry.go b/pkg/services/featuremgmt/registry.go index 20559900542..93c1b83dccb 100644 --- a/pkg/services/featuremgmt/registry.go +++ b/pkg/services/featuremgmt/registry.go @@ -1337,15 +1337,6 @@ var ( Owner: grafanaObservabilityMetricsSquad, Created: time.Date(2024, time.January, 29, 0, 0, 0, 0, time.UTC), }, - { - Name: "slateAutocomplete", - Description: "Adjusts the behaviour of the slate editor to properly handle autocomplete. Feature toggled for safety.", - Stage: FeatureStageGeneralAvailability, - Expression: "true", // enabled by default - FrontendOnly: true, - Owner: grafanaFrontendPlatformSquad, - Created: time.Date(2024, time.January, 29, 12, 0, 0, 0, time.UTC), - }, { Name: "nodeGraphDotLayout", Description: "Changed the layout algorithm for the node graph", diff --git a/pkg/services/featuremgmt/toggles_gen.csv b/pkg/services/featuremgmt/toggles_gen.csv index 694c8a3e491..5777ab5db8c 100644 --- a/pkg/services/featuremgmt/toggles_gen.csv +++ b/pkg/services/featuremgmt/toggles_gen.csv @@ -157,5 +157,4 @@ jitterAlertRulesWithinGroups,preview,@grafana/alerting-squad,2024-01-17,false,tr onPremToCloudMigrations,experimental,@grafana/grafana-operator-experience-squad,2024-01-22,false,false,false alertingSaveStatePeriodic,privatePreview,@grafana/alerting-squad,2024-01-22,false,false,false promQLScope,experimental,@grafana/observability-metrics,2024-01-29,false,false,false -slateAutocomplete,GA,@grafana/grafana-frontend-platform,2024-01-29,false,false,true nodeGraphDotLayout,experimental,@grafana/observability-traces-and-profiling,2024-01-02,false,false,true diff --git a/pkg/services/featuremgmt/toggles_gen.go b/pkg/services/featuremgmt/toggles_gen.go index 640d999ac1a..0c7f0594ec6 100644 --- a/pkg/services/featuremgmt/toggles_gen.go +++ b/pkg/services/featuremgmt/toggles_gen.go @@ -639,10 +639,6 @@ const ( // In-development feature that will allow injection of labels into prometheus queries. FlagPromQLScope = "promQLScope" - // FlagSlateAutocomplete - // Adjusts the behaviour of the slate editor to properly handle autocomplete. Feature toggled for safety. - FlagSlateAutocomplete = "slateAutocomplete" - // FlagNodeGraphDotLayout // Changed the layout algorithm for the node graph FlagNodeGraphDotLayout = "nodeGraphDotLayout"