getDataSourcesData method

dynamic getDataSourcesData()

Implementation

getDataSourcesData() async {
  qsParams['params'] = widget.params;
  qsParams['datasources'] = new Map<String, dynamic>();
  datasources = (widget.uiProps?['datasources'] as List?)
      ?.map<LMDataSourceConfig>(
          (ds) => LMDataSourceConfig.fromJson(convertMapStringDynamic(ds)))
      .toList();

  datasources = datasources?.reversed.toList();

  List<LMDataSourceConfig> cachedDataSources = [];
  List<LMDataSourceConfig> nonCachedDataSources = [];

  for (LMDataSourceConfig ds in datasources ?? []) {
    if (ds.enableCache == true) {
      cachedDataSources.add(ds);
    } else {
      nonCachedDataSources.add(ds);
    }
  }

  try {
    for (LMDataSourceConfig ds in cachedDataSources) {
      if (ds.id == null || ds.id == "") continue;
      var path = getPathForSource(ds.id!);

      var data = await getData(
        ds.id!,
        path: path,
      );
      qsParams['datasources'][ds.id] = data;
    }

    setState(() {
      loading = false;
    });
  } catch (e) {
    setState(() {
      loading = false;
    });
  }
  widget.onParametersInitialized?.call(qsParams);

  try {
    List<Future<void>> tasks = [];

    for (LMDataSourceConfig ds in nonCachedDataSources) {
      if (ds.id == null || ds.id == "") continue;

      tasks.add(() async {
        var path = getPathForSource(ds.id!);

        var data = await getData(
          ds.id!,
          path: path,
        );
        qsParams['datasources'][ds.id] = data;
      }());
    }
    await Future.wait(tasks);
  } catch (e) {
  } finally {
    fieldValues.replaceValuesByContextData(qsParams);
    setState(() {
      loading = false;
    });
  }

  widget.onParametersInitialized?.call(qsParams);
}