转换值和范围映射
使用 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()];
};
提示
请务必清理旧设置,以便迁移不会重复进行。
有关另一个示例,请参阅 此示例。