Canvas: Add icon value mapping (#59013)

This commit is contained in:
Nathan Marrs 2022-11-22 15:39:19 -07:00 committed by GitHub
parent 51359fe90d
commit e157ef1171
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 4 deletions

View File

@ -0,0 +1,19 @@
import { getResourceDimension } from './resource';
import { ResourceDimensionMode } from './types';
describe('getResourceDimension', () => {
const publicPath = '/public/';
beforeAll(() => {
window.__grafana_public_path__ = publicPath;
});
it('fixed mode', () => {
const frame = undefined;
const fixedValue = 'img/icons/unicons/question-circle.svg';
const config = { mode: ResourceDimensionMode.Fixed, fixed: fixedValue };
expect(getResourceDimension(frame, config).fixed).toEqual(publicPath + fixedValue);
});
// TODO: write tests for field and mapping modes
});

View File

@ -50,8 +50,12 @@ export function getResourceDimension(
// mode === ResourceDimensionMode.Field case
const getIcon = (value: string): string => {
const display = field.display!;
return getPublicOrAbsoluteUrl(display(value).icon ?? value ?? '');
if (field && field.display) {
const icon = field.display(value).icon;
return getPublicOrAbsoluteUrl(icon ?? '');
}
return '';
};
return {

View File

@ -1,4 +1,4 @@
import { PanelOptionsEditorBuilder, PanelPlugin } from '@grafana/data';
import { FieldConfigProperty, PanelOptionsEditorBuilder, PanelPlugin } from '@grafana/data';
import { FrameState } from 'app/features/canvas/runtime/frame';
import { CanvasPanel, InstanceState } from './CanvasPanel';
@ -25,7 +25,15 @@ export const addStandardCanvasEditorOptions = (builder: PanelOptionsEditorBuilde
export const plugin = new PanelPlugin<PanelOptions>(CanvasPanel)
.setNoPadding() // extend to panel edges
.useFieldConfig()
.useFieldConfig({
standardOptions: {
[FieldConfigProperty.Mappings]: {
settings: {
icon: true,
},
},
},
})
.setMigrationHandler(canvasMigrationHandler)
.setPanelOptions((builder, context) => {
const state: InstanceState = context.instanceState;