{"version":3,"file":"SingleStatBaseOptions.cjs","sources":["../../../../src/components/SingleStatShared/SingleStatBaseOptions.ts"],"sourcesContent":["import { cloneDeep, identity, isNumber, omit, pickBy } from 'lodash';\n\nimport {\n  convertOldAngularValueMappings,\n  FieldColorModeId,\n  FieldConfig,\n  fieldReducers,\n  PanelModel,\n  ReduceDataOptions,\n  ReducerID,\n  sortThresholds,\n  Threshold,\n  ThresholdsConfig,\n  ThresholdsMode,\n  validateFieldConfig,\n  ValueMapping,\n  VizOrientation,\n} from '@grafana/data';\nimport { LegendDisplayMode, OptionsWithLegend, OptionsWithTextFormatting } from '@grafana/schema';\n\nexport interface SingleStatBaseOptions extends OptionsWithTextFormatting {\n  reduceOptions: ReduceDataOptions;\n  orientation: VizOrientation;\n}\n\nconst optionsToKeep = ['reduceOptions', 'orientation'];\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function sharedSingleStatPanelChangedHandler(\n  panel: PanelModel<Partial<SingleStatBaseOptions>> | any,\n  prevPluginId: string,\n  prevOptions: any\n) {\n  let options = panel.options;\n\n  panel.fieldConfig = panel.fieldConfig || {\n    defaults: {},\n    overrides: [],\n  };\n\n  // Migrating from angular singlestat\n  if ((prevPluginId === 'singlestat' || prevPluginId === 'grafana-singlestat-panel') && prevOptions.angular) {\n    return migrateFromAngularSinglestat(panel, prevOptions);\n  } else if (prevPluginId === 'graph') {\n    // Migrating from Graph panel\n    return migrateFromGraphPanel(panel, prevOptions);\n  }\n\n  for (const k of optionsToKeep) {\n    if (prevOptions.hasOwnProperty(k)) {\n      options[k] = cloneDeep(prevOptions[k]);\n    }\n  }\n\n  return options;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction migrateFromGraphPanel(panel: PanelModel<Partial<SingleStatBaseOptions>> | any, prevOptions: any) {\n  const graphOptions: GraphOptions = prevOptions.angular;\n\n  const options: SingleStatBaseOptions & OptionsWithLegend = {\n    orientation: VizOrientation.Auto,\n    reduceOptions: {\n      values: false,\n      calcs: [],\n    },\n    legend: {\n      displayMode: LegendDisplayMode.List,\n      showLegend: true,\n      placement: 'bottom',\n      calcs: [],\n    },\n  };\n\n  if (graphOptions.xaxis?.mode === 'series') {\n    panel.fieldConfig = {\n      ...panel.fieldConfig,\n      defaults: {\n        ...panel.fieldConfig.defaults,\n        color: { mode: 'palette-classic' },\n      },\n    };\n\n    // Value options calculation migration\n    if (graphOptions.xaxis.values) {\n      options.reduceOptions.calcs = getReducerForMigration(graphOptions.xaxis.values);\n    }\n\n    // Legend migration\n    const legendConfig = graphOptions.legend;\n    if (legendConfig) {\n      if (legendConfig.show) {\n        options.legend.displayMode = legendConfig.alignAsTable ? LegendDisplayMode.Table : LegendDisplayMode.List;\n      } else {\n        options.legend.showLegend = false;\n      }\n\n      if (legendConfig.rightSide) {\n        options.legend.placement = 'right';\n      }\n\n      if (legendConfig.values) {\n        const enabledLegendValues = pickBy(legendConfig, identity);\n        options.legend.calcs = getReducersFromLegend(enabledLegendValues);\n      }\n\n      if (legendConfig.sideWidth) {\n        options.legend.width = legendConfig.sideWidth;\n      }\n    }\n  }\n\n  return options;\n}\n\nfunction migrateFromAngularSinglestat(panel: PanelModel<Partial<SingleStatBaseOptions>> | any, prevOptions: any) {\n  const prevPanel = prevOptions.angular;\n  const reducer = fieldReducers.getIfExists(prevPanel.valueName);\n  const options: SingleStatBaseOptions = {\n    reduceOptions: {\n      calcs: [reducer ? reducer.id : ReducerID.mean],\n    },\n    orientation: VizOrientation.Horizontal,\n  };\n\n  const defaults: FieldConfig = {};\n\n  if (prevPanel.format) {\n    defaults.unit = prevPanel.format;\n  }\n\n  if (prevPanel.tableColumn) {\n    options.reduceOptions.fields = `/^${prevPanel.tableColumn}$/`;\n  }\n\n  if (prevPanel.nullPointMode) {\n    defaults.nullValueMode = prevPanel.nullPointMode;\n  }\n\n  if (prevPanel.nullText) {\n    defaults.noValue = prevPanel.nullText;\n  }\n\n  if (prevPanel.decimals || prevPanel.decimals === 0) {\n    defaults.decimals = prevPanel.decimals;\n  }\n\n  // Convert thresholds and color values\n  if (prevPanel.thresholds && prevPanel.colors) {\n    const levels = prevPanel.thresholds.split(',').map((strVale: string) => {\n      return Number(strVale.trim());\n    });\n\n    // One more color than threshold\n    const thresholds: Threshold[] = [];\n    for (const color of prevPanel.colors) {\n      const idx = thresholds.length - 1;\n      if (idx >= 0) {\n        thresholds.push({ value: levels[idx], color });\n      } else {\n        thresholds.push({ value: -Infinity, color });\n      }\n    }\n\n    defaults.thresholds = {\n      mode: ThresholdsMode.Absolute,\n      steps: thresholds,\n    };\n  }\n\n  // Convert value mappings\n  const mappings = convertOldAngularValueMappings(prevPanel, defaults.thresholds);\n  if (mappings && mappings.length) {\n    defaults.mappings = mappings;\n  }\n\n  if (prevPanel.gauge && prevPanel.gauge.show) {\n    defaults.min = prevPanel.gauge.minValue;\n    defaults.max = prevPanel.gauge.maxValue;\n  }\n\n  panel.fieldConfig.defaults = defaults;\n\n  return options;\n}\n\nexport function sharedSingleStatMigrationHandler(panel: PanelModel<SingleStatBaseOptions>): SingleStatBaseOptions {\n  if (!panel.options) {\n    // This happens on the first load or when migrating from angular\n    return {\n      reduceOptions: {\n        calcs: [ReducerID.mean],\n      },\n      orientation: VizOrientation.Horizontal,\n    };\n  }\n\n  const previousVersion = parseFloat(panel.pluginVersion || '6.1');\n  let options: any = panel.options;\n\n  if (previousVersion < 6.2) {\n    options = migrateFromValueOptions(options);\n  }\n\n  if (previousVersion < 6.3) {\n    options = moveThresholdsAndMappingsToField(options);\n  }\n\n  const { fieldOptions } = options;\n\n  if (previousVersion < 6.6 && fieldOptions) {\n    // discard the old `override` options and enter an empty array\n    if (fieldOptions && fieldOptions.override) {\n      const { override, ...rest } = options.fieldOptions;\n      options = {\n        ...options,\n        fieldOptions: {\n          ...rest,\n          overrides: [],\n        },\n      };\n    }\n\n    // Move thresholds to steps\n    let thresholds = fieldOptions?.defaults?.thresholds;\n    if (thresholds) {\n      delete fieldOptions.defaults.thresholds;\n    } else {\n      thresholds = fieldOptions?.thresholds;\n      delete fieldOptions.thresholds;\n    }\n\n    if (thresholds) {\n      fieldOptions.defaults.thresholds = {\n        mode: ThresholdsMode.Absolute,\n        steps: thresholds,\n      };\n    }\n\n    // Migrate color from simple string to a mode\n    const { defaults } = fieldOptions;\n    if (defaults.color && typeof defaults.color === 'string') {\n      defaults.color = {\n        mode: FieldColorModeId.Fixed,\n        fixedColor: defaults.color,\n      };\n    }\n\n    validateFieldConfig(defaults);\n  }\n\n  if (previousVersion < 7.0) {\n    panel.fieldConfig = panel.fieldConfig || { defaults: {}, overrides: [] };\n    panel.fieldConfig = {\n      defaults:\n        fieldOptions && fieldOptions.defaults\n          ? { ...panel.fieldConfig.defaults, ...fieldOptions.defaults }\n          : panel.fieldConfig.defaults,\n      overrides:\n        fieldOptions && fieldOptions.overrides\n          ? [...panel.fieldConfig.overrides, ...fieldOptions.overrides]\n          : panel.fieldConfig.overrides,\n    };\n\n    if (fieldOptions) {\n      options.reduceOptions = {\n        values: fieldOptions.values,\n        limit: fieldOptions.limit,\n        calcs: fieldOptions.calcs,\n      };\n    }\n\n    delete options.fieldOptions;\n  }\n\n  if (previousVersion < 7.1) {\n    // move title to displayName\n    const oldTitle = (panel.fieldConfig.defaults as any).title;\n    if (oldTitle !== undefined && oldTitle !== null) {\n      panel.fieldConfig.defaults.displayName = oldTitle;\n      delete (panel.fieldConfig.defaults as any).title;\n    }\n  }\n\n  if (previousVersion < 8.0) {\n    // Explicit min/max was removed for percent/percentunit in 8.0\n    const config = panel.fieldConfig?.defaults;\n    let unit = config?.unit;\n    if (unit === 'percent') {\n      if (!isNumber(config.min)) {\n        config.min = 0;\n      }\n      if (!isNumber(config.max)) {\n        config.max = 100;\n      }\n    } else if (unit === 'percentunit') {\n      if (!isNumber(config.min)) {\n        config.min = 0;\n      }\n      if (!isNumber(config.max)) {\n        config.max = 1;\n      }\n    }\n  }\n\n  return options;\n}\n\nexport function moveThresholdsAndMappingsToField(old: any) {\n  const { fieldOptions } = old;\n\n  if (!fieldOptions) {\n    return old;\n  }\n\n  const { mappings, ...rest } = old.fieldOptions;\n\n  let thresholds: ThresholdsConfig | undefined = undefined;\n  if (old.thresholds) {\n    thresholds = {\n      mode: ThresholdsMode.Absolute,\n      steps: migrateOldThresholds(old.thresholds)!,\n    };\n  }\n\n  return {\n    ...old,\n    fieldOptions: {\n      ...rest,\n      defaults: {\n        ...fieldOptions.defaults,\n        mappings,\n        thresholds,\n      },\n    },\n  };\n}\n\n/*\n * Moves valueMappings and thresholds from root to new fieldOptions object\n * Renames valueOptions to to defaults and moves it under fieldOptions\n */\nexport function migrateFromValueOptions(old: any) {\n  const { valueOptions } = old;\n  if (!valueOptions) {\n    return old;\n  }\n\n  const fieldOptions: any = {};\n  const fieldDefaults: any = {};\n\n  fieldOptions.mappings = old.valueMappings;\n  fieldOptions.thresholds = old.thresholds;\n  fieldOptions.defaults = fieldDefaults;\n\n  fieldDefaults.unit = valueOptions.unit;\n  fieldDefaults.decimals = valueOptions.decimals;\n\n  // Make sure the stats have a valid name\n  if (valueOptions.stat) {\n    const reducer = fieldReducers.get(valueOptions.stat);\n    if (reducer) {\n      fieldOptions.calcs = [reducer.id];\n    }\n  }\n\n  fieldDefaults.min = old.minValue;\n  fieldDefaults.max = old.maxValue;\n\n  const newOptions = {\n    ...old,\n    fieldOptions,\n  };\n\n  return omit(newOptions, 'valueMappings', 'thresholds', 'valueOptions', 'minValue', 'maxValue');\n}\n\nexport function migrateOldThresholds(thresholds?: any[]): Threshold[] | undefined {\n  if (!thresholds || !thresholds.length) {\n    return undefined;\n  }\n  const copy = thresholds.map((t) => {\n    return {\n      // Drops 'index'\n      value: t.value === null ? -Infinity : t.value,\n      color: t.color,\n    };\n  });\n  sortThresholds(copy);\n  copy[0].value = -Infinity;\n  return copy;\n}\n\n/**\n * @deprecated use convertOldAngularValueMappings instead\n * Convert the angular single stat mapping to new react style\n */\nexport function convertOldAngularValueMapping(panel: any): ValueMapping[] {\n  return convertOldAngularValueMappings(panel);\n}\n\ninterface GraphOptions {\n  xaxis: {\n    mode: 'series' | 'time' | 'histogram';\n    values?: string[];\n  };\n  legend: {\n    show: boolean;\n    alignAsTable: boolean;\n    rightSide: boolean;\n    values: boolean;\n    min?: boolean;\n    max?: boolean;\n    avg?: boolean;\n    current?: boolean;\n    total?: boolean;\n    sideWidth?: number;\n  };\n}\n\nfunction getReducersFromLegend(obj: Record<string, unknown>): string[] {\n  const ids: string[] = [];\n  for (const key in obj) {\n    const reducer = fieldReducers.getIfExists(key);\n    if (reducer) {\n      ids.push(reducer.id);\n    }\n  }\n  return ids;\n}\n\n// same as public/app/plugins/panel/barchart/migrations.ts\nfunction getReducerForMigration(reducers: string[] | undefined) {\n  const transformReducers: string[] = [];\n\n  reducers?.forEach((reducer) => {\n    // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n    if (!Object.values(ReducerID).includes(reducer as ReducerID)) {\n      if (reducer === 'current') {\n        transformReducers.push(ReducerID.lastNotNull);\n      } else if (reducer === 'total') {\n        transformReducers.push(ReducerID.sum);\n      } else if (reducer === 'avg') {\n        transformReducers.push(ReducerID.mean);\n      }\n    } else {\n      transformReducers.push(reducer);\n    }\n  });\n\n  return reducers ? transformReducers : [ReducerID.sum];\n}\n"],"names":["cloneDeep","VizOrientation","LegendDisplayMode","pickBy","identity","fieldReducers","ReducerID","ThresholdsMode","convertOldAngularValueMappings","FieldColorModeId","validateFieldConfig","isNumber","omit","sortThresholds"],"mappings":"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"}