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