mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
parent
d0ecf863df
commit
3e01ba0f57
@ -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 |
|
| `lokiQueryHints` | Enables query hints for Loki | Yes |
|
||||||
| `alertingQueryOptimization` | Optimizes eligible queries in order to reduce load on datasources | |
|
| `alertingQueryOptimization` | Optimizes eligible queries in order to reduce load on datasources | |
|
||||||
| `jitterAlertRules` | Distributes alert rule evaluations more evenly over time, by rule group | |
|
| `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
|
## Preview feature toggles
|
||||||
|
|
||||||
|
@ -176,6 +176,5 @@ export interface FeatureToggles {
|
|||||||
onPremToCloudMigrations?: boolean;
|
onPremToCloudMigrations?: boolean;
|
||||||
alertingSaveStatePeriodic?: boolean;
|
alertingSaveStatePeriodic?: boolean;
|
||||||
promQLScope?: boolean;
|
promQLScope?: boolean;
|
||||||
slateAutocomplete?: boolean;
|
|
||||||
nodeGraphDotLayout?: boolean;
|
nodeGraphDotLayout?: boolean;
|
||||||
}
|
}
|
||||||
|
@ -2,52 +2,28 @@ import { getNumCharsToDelete } from './suggestions';
|
|||||||
|
|
||||||
describe('suggestions', () => {
|
describe('suggestions', () => {
|
||||||
describe('getNumCharsToDelete', () => {
|
describe('getNumCharsToDelete', () => {
|
||||||
describe('when slateAutocomplete is enabled', () => {
|
const splunkCleanText = (s: string) => s.replace(/[{}[\]="(),!~+\-*/^%:\\]/g, '').trim();
|
||||||
let originalBootData = window.grafanaBootData;
|
it.each([
|
||||||
|
// | represents the caret position
|
||||||
// hacky way to enable the feature toggle for this test
|
['$query0 ', '', '', false, 0, undefined, { forward: 0, backward: 0 }], // "|" --> "$query0 |"
|
||||||
beforeEach(() => {
|
['$query0 ', '$que', '$que', false, 0, undefined, { forward: 0, backward: 4 }], // "$que|" --> "$query0 |"
|
||||||
if (originalBootData) {
|
['$query0 ', '$q', '$que', false, 0, undefined, { forward: 2, backward: 2 }], // "$q|ue" --> "$query0 |"
|
||||||
window.grafanaBootData = {
|
['$query0 ', '$que', '($que)', false, 0, splunkCleanText, { forward: 0, backward: 4 }], // "($que|)" --> "($query0 |)"
|
||||||
...originalBootData,
|
['$query0 ', '$que', 'esarvotionUsagePercent=$que', false, 0, undefined, { forward: 0, backward: 4 }], // "esarvotionUsagePercent=$que|" --> "esarvotionUsagePercent=$query0 |"
|
||||||
settings: {
|
])(
|
||||||
...originalBootData.settings,
|
'should calculate the correct number of characters to delete forwards and backwards',
|
||||||
featureToggles: {
|
(suggestionText, typeaheadPrefix, typeaheadText, preserveSuffix, deleteBackwards, cleanText, expected) => {
|
||||||
...originalBootData.settings.featureToggles,
|
expect(
|
||||||
slateAutocomplete: true,
|
getNumCharsToDelete(
|
||||||
},
|
suggestionText,
|
||||||
},
|
typeaheadPrefix,
|
||||||
};
|
typeaheadText,
|
||||||
}
|
preserveSuffix,
|
||||||
});
|
deleteBackwards,
|
||||||
|
cleanText
|
||||||
afterEach(() => {
|
)
|
||||||
window.grafanaBootData = originalBootData;
|
).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);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -360,18 +360,10 @@ export function getNumCharsToDelete(
|
|||||||
const text = cleanText ? cleanText(typeaheadText) : typeaheadText;
|
const text = cleanText ? cleanText(typeaheadText) : typeaheadText;
|
||||||
const offset = typeaheadText.indexOf(typeaheadPrefix);
|
const offset = typeaheadText.indexOf(typeaheadPrefix);
|
||||||
|
|
||||||
let forward: number;
|
const suffixLength =
|
||||||
|
offset > -1 ? text.length - offset - typeaheadPrefix.length : text.length - typeaheadPrefix.length;
|
||||||
if (window.grafanaBootData?.settings.featureToggles['slateAutocomplete']) {
|
const midWord = Boolean((typeaheadPrefix && suffixLength > 0) || suggestionText === typeaheadText);
|
||||||
const suffixLength =
|
const forward = midWord && !preserveSuffix ? suffixLength + offset : 0;
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
forward,
|
forward,
|
||||||
|
@ -1337,15 +1337,6 @@ var (
|
|||||||
Owner: grafanaObservabilityMetricsSquad,
|
Owner: grafanaObservabilityMetricsSquad,
|
||||||
Created: time.Date(2024, time.January, 29, 0, 0, 0, 0, time.UTC),
|
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",
|
Name: "nodeGraphDotLayout",
|
||||||
Description: "Changed the layout algorithm for the node graph",
|
Description: "Changed the layout algorithm for the node graph",
|
||||||
|
@ -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
|
onPremToCloudMigrations,experimental,@grafana/grafana-operator-experience-squad,2024-01-22,false,false,false
|
||||||
alertingSaveStatePeriodic,privatePreview,@grafana/alerting-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
|
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
|
nodeGraphDotLayout,experimental,@grafana/observability-traces-and-profiling,2024-01-02,false,false,true
|
||||||
|
|
@ -639,10 +639,6 @@ const (
|
|||||||
// In-development feature that will allow injection of labels into prometheus queries.
|
// In-development feature that will allow injection of labels into prometheus queries.
|
||||||
FlagPromQLScope = "promQLScope"
|
FlagPromQLScope = "promQLScope"
|
||||||
|
|
||||||
// FlagSlateAutocomplete
|
|
||||||
// Adjusts the behaviour of the slate editor to properly handle autocomplete. Feature toggled for safety.
|
|
||||||
FlagSlateAutocomplete = "slateAutocomplete"
|
|
||||||
|
|
||||||
// FlagNodeGraphDotLayout
|
// FlagNodeGraphDotLayout
|
||||||
// Changed the layout algorithm for the node graph
|
// Changed the layout algorithm for the node graph
|
||||||
FlagNodeGraphDotLayout = "nodeGraphDotLayout"
|
FlagNodeGraphDotLayout = "nodeGraphDotLayout"
|
||||||
|
Loading…
Reference in New Issue
Block a user