export function constructWidget()

in scripts/dashboard-importer/src/dashboards/converter/widgets/widget.ts [29:104]


export function constructWidget(
  panel: Panel,
  targets: Target[],
  templateVariables = new Map<string, string>(),
): Result<Widget> {
  const title = panel.title;
  const panelType = panel.type;
  const plotType =
    panel.stack ||
    ['normal', 'percent'].includes(
      panel.fieldConfig?.defaults?.custom?.stacking?.mode || '',
    )
      ? 'STACKED_AREA'
      : 'LINE';

  const expressionsResult = getExpressions(targets, title, templateVariables);
  const expressions = expressionsResult.result || [];
  const warnings = [];

  let widget: Widget;

  switch (panelType) {
    case 'gauge':
      widget = createGaugeChart(title, expressions[0], 0, 100);
      break;
    case 'singlestat':
      if (panel.gauge?.show) {
        widget = createGaugeChart(
          title,
          expressions[0],
          panel.gauge?.minValue,
          panel.gauge?.maxValue,
        );
        break;
      }
      widget = createScoreCard(title, expressions[0]);
      break;
    case 'stat':
      widget = createScoreCard(title, expressions[0]);
      break;
    case 'table':
    case 'table-old':
      widget = createTable(title, expressions[0]);
      break;
    case 'text':
      widget = createTextWidget(
        title,
        panel.options?.content || panel.content || '',
      );
      break;
    case 'timeseries':
      widget = createBasicChart(plotType, title, expressions);
      break;
    // Legacy Time Series
    case 'graph':
      widget = createBasicChart(plotType, title, expressions);
      break;
    // Legacy Bar Chart
    case 'bargauge':
      widget = createBasicChart('STACKED_BAR', title, expressions);
      break;
    case 'heatmap':
      widget = createBasicChart('HEATMAP', title, expressions);
      break;
    case 'piechart':
    case 'grafana-piechart-panel':
      widget = createPieChart(title, expressions[0], panel.options?.pieType);
      break;
    default:
      warnings.push(
        `${panel.title} has type '${panelType}' which is not supported for conversion and has been replaced with a line chart`,
      );
      widget = createBasicChart('LINE', title, expressions);
  }
  return success(widget, [...warnings, ...expressionsResult.warnings]);
}