1import { PanelModel } from '@grafana/data'; 2import { AlertListOptions, ShowOption, SortOrder } from './types'; 3 4export const alertListPanelMigrationHandler = ( 5 panel: PanelModel<AlertListOptions> & Record<string, any> 6): Partial<AlertListOptions> => { 7 const newOptions: AlertListOptions = { 8 showOptions: panel.options.showOptions ?? panel.show ?? ShowOption.Current, 9 maxItems: panel.options.maxItems ?? panel.limit ?? 10, 10 sortOrder: panel.options.sortOrder ?? panel.sortOrder ?? SortOrder.AlphaAsc, 11 dashboardAlerts: panel.options.dashboardAlerts ?? panel.onlyAlertsOnDashboard ?? false, 12 alertName: panel.options.alertName ?? panel.nameFilter ?? '', 13 dashboardTitle: panel.options.dashboardTitle ?? panel.dashboardFilter ?? '', 14 folderId: panel.options.folderId ?? panel.folderId, 15 tags: panel.options.tags ?? panel.dashboardTags ?? [], 16 stateFilter: 17 panel.options.stateFilter ?? 18 panel.stateFilter?.reduce((filterObj: any, curFilter: any) => ({ ...filterObj, [curFilter]: true }), {}) ?? 19 {}, 20 }; 21 22 const previousVersion = parseFloat(panel.pluginVersion || '7.4'); 23 if (previousVersion < 7.5) { 24 const oldProps = [ 25 'show', 26 'limit', 27 'sortOrder', 28 'onlyAlertsOnDashboard', 29 'nameFilter', 30 'dashboardFilter', 31 'folderId', 32 'dashboardTags', 33 'stateFilter', 34 ]; 35 oldProps.forEach((prop) => delete panel[prop]); 36 } 37 38 return newOptions; 39}; 40