SelectionModel<D>.fromConfig constructor

SelectionModel<D>.fromConfig(
  1. List<SeriesDatumConfig<D>>? selectedDataConfig,
  2. List<String>? selectedSeriesConfig,
  3. List<ImmutableSeries<D>> seriesList
)

Create selection model from configuration.

Implementation

SelectionModel.fromConfig(List<SeriesDatumConfig<D>>? selectedDataConfig,
    List<String>? selectedSeriesConfig, List<ImmutableSeries<D>> seriesList) {
  final selectedDataMap = <String, List<D>>{};

  if (selectedDataConfig != null) {
    for (final config in selectedDataConfig) {
      selectedDataMap[config.seriesId] ??= <D>[];
      selectedDataMap[config.seriesId]!.add(config.domainValue as D);
    }

    // Add to list of selected series.
    _selectedSeries.addAll(seriesList.where((ImmutableSeries<D> series) =>
        selectedDataMap.keys.contains(series.id)));

    // Add to list of selected data.
    for (final series in seriesList) {
      if (selectedDataMap.containsKey(series.id)) {
        final domainFn = series.domainFn;

        for (var i = 0; i < series.data.length; i++) {
          final Object? datum = series.data[i];

          if (selectedDataMap[series.id]!.contains(domainFn(i))) {
            _selectedDatum.add(SeriesDatum(series, datum));
          }
        }
      }
    }
  }

  // Add to list of selected series, if it does not already exist.
  if (selectedSeriesConfig != null) {
    final existingSeriesIds = {
      for (final series in _selectedSeries) series.id,
    };

    final remainingSeriesToAdd = selectedSeriesConfig
        .where((String seriesId) => !existingSeriesIds.contains(seriesId))
        .toSet();

    _selectedSeries.addAll(seriesList.where((ImmutableSeries<D> series) =>
        remainingSeriesToAdd.contains(series.id)));
  }
}