[v9.5.x] Fix: DataLinks from data sources override user defined data link (#66031)

Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
Co-authored-by: Alexa V <239999+axelavargas@users.noreply.github.com>
Fix: DataLinks from data sources override user defined data link (#65996)
This commit is contained in:
Grot (@grafanabot)
2023-04-05 16:53:05 +03:00
committed by GitHub
co-authored by Dominik Prokop Alexa V
parent 1dc26665f3
commit 0f0e2664cc
2 changed files with 123 additions and 0 deletions
@@ -441,6 +441,124 @@ describe('setFieldConfigDefaults', () => {
}
`);
});
it('applies field config defaults correctly when links property exist in field config and no links are defined in panel', () => {
const dsFieldConfig: FieldConfig = {
links: [
{
title: 'Google link',
url: 'https://google.com',
},
],
};
const panelFieldConfig: FieldConfig = {};
const context: FieldOverrideEnv = {
data: [],
field: { type: FieldType.number } as Field,
dataFrameIndex: 0,
fieldConfigRegistry: customFieldRegistry,
};
// we mutate dsFieldConfig
// @ts-ignore
setFieldConfigDefaults(dsFieldConfig, panelFieldConfig, context);
expect(dsFieldConfig).toMatchInlineSnapshot(`
{
"custom": {},
"links": [
{
"title": "Google link",
"url": "https://google.com",
},
],
}
`);
});
it('applies field config defaults correctly when links property exist in panel config and no links are defined in ds field config', () => {
const dsFieldConfig: FieldConfig = {};
const panelFieldConfig: FieldConfig = {
links: [
{
title: 'Google link',
url: 'https://google.com',
},
],
};
const context: FieldOverrideEnv = {
data: [],
field: { type: FieldType.number } as Field,
dataFrameIndex: 0,
fieldConfigRegistry: customFieldRegistry,
};
// we mutate dsFieldConfig
// @ts-ignore
setFieldConfigDefaults(dsFieldConfig, panelFieldConfig, context);
expect(dsFieldConfig).toMatchInlineSnapshot(`
{
"custom": {},
"links": [
{
"title": "Google link",
"url": "https://google.com",
},
],
}
`);
});
it('applies a merge strategy for links when they exist in ds config and panel', () => {
const dsFieldConfig: FieldConfig = {
links: [
{
title: 'Google link',
url: 'https://google.com',
},
],
};
const panelFieldConfig: FieldConfig = {
links: [
{
title: 'Grafana',
url: 'https://grafana.com',
},
],
};
const context: FieldOverrideEnv = {
data: [],
field: { type: FieldType.number } as Field,
dataFrameIndex: 0,
fieldConfigRegistry: customFieldRegistry,
};
// we mutate dsFieldConfig
setFieldConfigDefaults(dsFieldConfig, panelFieldConfig, context);
expect(dsFieldConfig).toMatchInlineSnapshot(`
{
"custom": {},
"links": [
{
"title": "Google link",
"url": "https://google.com",
},
{
"title": "Grafana",
"url": "https://grafana.com",
},
],
}
`);
});
});
describe('setDynamicConfigValue', () => {
@@ -293,6 +293,11 @@ export function setDynamicConfigValue(config: FieldConfig, value: DynamicConfigV
// config -> from DS
// defaults -> from Panel config
export function setFieldConfigDefaults(config: FieldConfig, defaults: FieldConfig, context: FieldOverrideEnv) {
// For cases where we have links on the datasource config and the panel config, we need to merge them
if (config.links && defaults.links) {
// Combine the data source links and the panel default config links
config.links = [...config.links, ...defaults.links];
}
for (const fieldConfigProperty of context.fieldConfigRegistry.list()) {
if (fieldConfigProperty.isCustom && !config.custom) {
config.custom = {};