跳至主要内容

转换值和范围映射

使用 AngularJS SDK 构建的 Grafana 插件可以使用编辑器来处理值和范围映射。在将插件更新到 React 时,需要将这些映射的配置选项转换为新的格式。

添加新的内置编辑器

在插件的 module.ts 文件中,添加 Mappings 选项以启用新的编辑器

.useFieldConfig({
standardOptions: {
[FieldConfigProperty.Mappings]: {},
},
})

有关新组件的描述,请参阅 配置值映射 文档。

将映射转换为新的格式

使用下面显示的辅助函数更新插件的配置。

import { PanelModel, convertOldAngularValueMappings, ValueMapping } from '@grafana/data';

export const PolystatPanelMigrationHandler = (panel: PanelModel<PolystatOptions>): Partial<PolystatOptions> => {
// convert range and value maps
const newMaps = migrateValueAndRangeMaps(panel);
panel.options.fieldConfig = {
defaults: {
mappings: newMaps,
},
overrides: [],
};
//@ts-ignore
delete panel.mappingType;
//@ts-ignore
delete panel.rangeMaps;
//@ts-ignore
delete panel.valueMaps;
// return new settings
return panel.options;
};

export const migrateValueAndRangeMaps = (panel: any) => {
// value maps first
panel.mappingType = 1;
let newValueMappings: ValueMapping[] = [];
if (panel.valueMaps !== undefined) {
newValueMappings = convertOldAngularValueMappings(panel);
}
// range maps second
panel.mappingType = 2;
let newRangeMappings: ValueMapping[] = [];
if (panel.rangeMaps !== undefined) {
newRangeMappings = convertOldAngularValueMappings(panel);
}
// append together
const newMappings = newValueMappings.concat(newRangeMappings);
// get uniques only
return [...new Map(newMappings.map((v) => [JSON.stringify(v), v])).values()];
};
提示

请务必清理旧设置,以便迁移不会重复进行。

有关另一个示例,请参阅 此示例