chartPayloadContractForType function

ChartPayloadContract chartPayloadContractForType(
  1. ChartType rawType
)

Returns the payload contract for type.

Implementation

ChartPayloadContract chartPayloadContractForType(ChartType rawType) {
  final type = canonicalChartType(rawType);
  final shape = targetSeriesDataShape(type);
  final requiresSeries =
      type != ChartType.gauge &&
      type != ChartType.barRace &&
      type != ChartType.indicator &&
      type != ChartType.halfDonut;
  final usesExternalDataModel = chartUsesExternalDataModel(type);

  switch (type) {
    case ChartType.treemap:
    case ChartType.sunburst:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.dataFields,
        dataFieldPriority: const ['nodes', 'data'],
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.sankey:
    case ChartType.network:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.nodeLink,
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.choropleth:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.namedCollection,
        namedCollectionField: 'regions',
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.funnel:
    case ChartType.waterfall:
    case ChartType.bullet:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.dataFields,
        dataFieldPriority: const ['items', 'data'],
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.gantt:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.dataFields,
        dataFieldPriority: const ['tasks', 'data'],
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.radial:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.dataFields,
        dataFieldPriority: const ['rings', 'data'],
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.timeline:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.dataFields,
        dataFieldPriority: const ['events', 'data'],
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.wordcloud:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.dataFields,
        dataFieldPriority: const ['words', 'data'],
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.calendar:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.calendarDateValues,
        dataFieldPriority: const ['data'],
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.kagi:
    case ChartType.renko:
    case ChartType.macd:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.dataFields,
        dataFieldPriority: const ['prices', 'data'],
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.heatmap:
    case ChartType.boxPlot:
    case ChartType.errorBar:
    case ChartType.violin:
    case ChartType.sparklineMatrix:
    case ChartType.areaTimeAxis:
    case ChartType.intradayLine:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.dataFields,
        dataFieldPriority: const ['data', 'cells', 'points'],
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.nestedPie:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.ringSlices,
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.partitionPie:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.partitionPie,
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.calendarPie:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.dataFields,
        dataFieldPriority: const ['days', 'data'],
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.pie:
    case ChartType.donut:
    case ChartType.halfDonut:
    case ChartType.paddedPie:
    case ChartType.nightingale:
    case ChartType.customizedPie:
    case ChartType.pieLabelAlign:
    case ChartType.pieSpecialLabel:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.dataFields,
        dataFieldPriority: const ['slices', 'data'],
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    case ChartType.indicator:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.dataFields,
        dataFieldPriority: const ['value'],
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
    default:
      return ChartPayloadContract(
        type: type,
        dataShape: shape,
        seriesStrategy: ChartPayloadSeriesStrategy.dataFields,
        dataFieldPriority: const ['data'],
        requiresSeries: requiresSeries,
        usesExternalDataModel: usesExternalDataModel,
      );
  }
}