resolveSubEntitiesFields static method

FutureOr<Map<String, dynamic>> resolveSubEntitiesFields(
  1. Map<String, dynamic> fields,
  2. Map<String, Type> subEntitiesFields, {
  3. Object? fromMap(
    1. String field,
    2. Map<String, dynamic> map
    )?,
  4. Object? empty(
    1. String field
    )?,
  5. EntityRepositoryProvider? entityRepositoryProvider,
  6. EntityHandlerProvider? entityHandlerProvider,
  7. EntityProvider? entityProvider,
  8. EntityCache? entityCache,
  9. EntityResolutionRules? resolutionRules,
})

Implementation

static FutureOr<Map<String, dynamic>> resolveSubEntitiesFields(
    Map<String, dynamic> fields, Map<String, Type> subEntitiesFields,
    {Object? Function(String field, Map<String, dynamic> map)? fromMap,
    Object? Function(String field)? empty,
    EntityRepositoryProvider? entityRepositoryProvider,
    EntityHandlerProvider? entityHandlerProvider,
    EntityProvider? entityProvider,
    EntityCache? entityCache,
    EntityResolutionRules? resolutionRules}) {
  if (subEntitiesFields.isEmpty) return fields;

  entityCache ??= JsonEntityCacheSimple();

  var entries = subEntitiesFields.entries.toList(growable: false);

  var futures = entries.map((e) {
    var f = e.key;
    var t = e.value;

    var fromMapField = fromMap != null ? (m) => fromMap(f, m) : null;
    var emptyField = empty != null ? () => empty(f) : null;

    return resolveEntityFromMap(
        parentMap: fields,
        entityField: f,
        fromMap: fromMapField,
        empty: emptyField,
        entityType: t,
        entityRepositoryProvider: entityRepositoryProvider,
        entityHandlerProvider: entityHandlerProvider,
        entityProvider: entityProvider,
        entityCache: entityCache,
        resolutionRules: resolutionRules);
  });

  return futures.resolveAllJoined((resolvedEntities) {
    var map2 = Map<String, dynamic>.from(fields);

    for (var i = 0; i < entries.length; ++i) {
      var f = entries[i].key;
      var o = resolvedEntities[i];
      map2[f] = o;
    }

    return map2;
  });
}