mirror of https://github.com/grafana/grafana.git
PanelOptions: Use existing overrides when changing panel types (#111016)
use existing overrides when changing panel types
This commit is contained in:
parent
01b696d66c
commit
a15b6ec2a2
|
|
@ -127,6 +127,64 @@ describe('PanelOptionsPane', () => {
|
|||
//removed fieldConfig custom values as well
|
||||
expect(mockFn.mock.calls[0][2].defaults.custom).toStrictEqual({});
|
||||
});
|
||||
|
||||
it('Should merge fieldConfig overrides when fieldConfig is provided in options', () => {
|
||||
const { optionsPane, panel } = setupTest('panel-1');
|
||||
|
||||
const originalFieldConfig = {
|
||||
defaults: { unit: 'bytes' },
|
||||
overrides: [
|
||||
{
|
||||
matcher: { id: 'byName', options: 'A-series' },
|
||||
properties: [{ id: 'displayName', value: 'Original Override' }],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
panel.setState({ fieldConfig: originalFieldConfig });
|
||||
|
||||
const mockOnFieldConfigChange = jest.fn();
|
||||
panel.onFieldConfigChange = mockOnFieldConfigChange;
|
||||
|
||||
// Call onChangePanelPlugin with fieldConfig that has overrides
|
||||
optionsPane.onChangePanelPlugin({
|
||||
pluginId: 'table',
|
||||
fieldConfig: {
|
||||
defaults: { unit: 'percent' },
|
||||
overrides: [],
|
||||
},
|
||||
});
|
||||
|
||||
// Verify onFieldConfigChange was called with merged overrides
|
||||
expect(mockOnFieldConfigChange).toHaveBeenCalled();
|
||||
|
||||
const mergedConfig = mockOnFieldConfigChange.mock.calls[0][0];
|
||||
|
||||
// Should have both original and new overrides
|
||||
expect(mergedConfig.overrides).toHaveLength(1);
|
||||
|
||||
// First override should be from the original (filtered) fieldConfig
|
||||
expect(mergedConfig.overrides[0].matcher).toEqual({ id: 'byName', options: 'A-series' });
|
||||
expect(mergedConfig.overrides[0].properties[0].id).toBe('displayName');
|
||||
|
||||
// Should use the new fieldConfig defaults
|
||||
expect(mergedConfig.defaults.unit).toBe('percent');
|
||||
});
|
||||
|
||||
it('Should not call onFieldConfigChange when no fieldConfig provided', () => {
|
||||
const { optionsPane, panel } = setupTest('panel-1');
|
||||
|
||||
const mockOnFieldConfigChange = jest.fn();
|
||||
panel.onFieldConfigChange = mockOnFieldConfigChange;
|
||||
|
||||
// Call without fieldConfig
|
||||
optionsPane.onChangePanelPlugin({
|
||||
pluginId: 'table',
|
||||
options: { showHeader: false },
|
||||
});
|
||||
|
||||
expect(mockOnFieldConfigChange).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -92,7 +92,11 @@ export class PanelOptionsPane extends SceneObjectBase<PanelOptionsPaneState> {
|
|||
}
|
||||
|
||||
if (options.fieldConfig) {
|
||||
panel.onFieldConfigChange(options.fieldConfig, true);
|
||||
const fieldConfigWithOverrides = {
|
||||
...options.fieldConfig,
|
||||
overrides: newFieldConfig.overrides,
|
||||
};
|
||||
panel.onFieldConfigChange(fieldConfigWithOverrides, true);
|
||||
}
|
||||
|
||||
this.onToggleVizPicker();
|
||||
|
|
|
|||
Loading…
Reference in New Issue