12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import { VisualizationSuggestionsBuilder } from '@grafana/data';
- import { LegendDisplayMode } from '@grafana/schema';
- import { SuggestionName } from 'app/types/suggestions';
- import { PieChartLabels, PieChartOptions, PieChartType } from './types';
- export class PieChartSuggestionsSupplier {
- getSuggestionsForData(builder: VisualizationSuggestionsBuilder) {
- const list = builder.getListAppender<PieChartOptions, {}>({
- name: SuggestionName.PieChart,
- pluginId: 'piechart',
- options: {
- reduceOptions: {
- values: false,
- calcs: ['lastNotNull'],
- },
- displayLabels: [PieChartLabels.Percent],
- legend: {
- placement: 'right',
- values: [],
- } as any,
- },
- cardOptions: {
- previewModifier: (s) => {
- // Hide labels in preview
- s.options!.legend.displayMode = LegendDisplayMode.Hidden;
- },
- },
- });
- const { dataSummary } = builder;
- if (!dataSummary.hasNumberField) {
- return;
- }
- if (dataSummary.hasStringField && dataSummary.frameCount === 1) {
- // if many values this or single value PieChart is not a good option
- if (dataSummary.rowCountTotal > 30 || dataSummary.rowCountTotal < 2) {
- return;
- }
- list.append({
- name: SuggestionName.PieChart,
- options: {
- reduceOptions: {
- values: true,
- calcs: [],
- },
- },
- });
- list.append({
- name: SuggestionName.PieChartDonut,
- options: {
- reduceOptions: {
- values: true,
- calcs: [],
- },
- pieType: PieChartType.Donut,
- },
- });
- return;
- }
- if (dataSummary.numberFieldCount > 30 || dataSummary.numberFieldCount < 2) {
- return;
- }
- list.append({
- name: SuggestionName.PieChart,
- });
- list.append({
- name: SuggestionName.PieChartDonut,
- options: {
- pieType: PieChartType.Donut,
- },
- });
- }
- }
|