loadFavorites method

Future<List<NsgDataItem>> loadFavorites(
  1. NsgUserSettingsController<NsgDataItem> userSetiingsController,
  2. List<String> ids
)

Implementation

Future<List<NsgDataItem>> loadFavorites(NsgUserSettingsController userSetiingsController, List<String> ids) async {
  var cmp = NsgCompare();
  var dataItem = NsgDataClient.client.getNewObject(dataType);
  var answerList = <NsgDataItem>[];
  var listToRequest = <String>[];
  //Проверяем нет ли избранного в items чтобы не делать лишний запрос
  for (var e in ids) {
    if (e.isEmpty) continue;
    var item = dataItemList.firstWhereOrNull((item) => item.id == e);
    if (item == null) {
      listToRequest.add(e);
    } else {
      answerList.add(item);
    }
  }
  //Дочитываем недостающие элементы
  if (listToRequest.isNotEmpty) {
    cmp.add(name: dataItem.primaryKeyField, value: listToRequest, comparisonOperator: NsgComparisonOperator.inList);
    var params = NsgDataRequestParams(compare: cmp, referenceList: referenceList);
    var request = NsgDataRequest<NsgDataItem>(storageType: controllerMode.storageType, dataItemType: dataType);
    answerList.addAll(await request.requestItems(filter: params));

    var newIds = answerList.map((e) => e.id).join(',');
    if (newIds != ids.join(',')) {
      var objFavorite = userSetiingsController.getFavoriteObject(dataItem.typeName);
      objFavorite.settings = newIds;
      await userSettingsController!.postUserSettings(objFavorite as NsgDataItem);
    }
  }
  return answerList;
}