chartPayloadContractForType function
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,
);
}
}