resolveFieldsValues method

FutureOr<Map<String, Object?>> resolveFieldsValues(
  1. Map<String, Object?> fields, {
  2. O? o,
  3. EntityProvider? entityProvider,
  4. EntityCache? entityCache,
  5. EntityHandlerProvider? entityHandlerProvider,
  6. EntityRepositoryProvider? entityRepositoryProvider,
  7. EntityResolutionRules? resolutionRules,
})

Implementation

FutureOr<Map<String, Object?>> resolveFieldsValues(
    Map<String, Object?> fields,
    {O? o,
    EntityProvider? entityProvider,
    EntityCache? entityCache,
    EntityHandlerProvider? entityHandlerProvider,
    EntityRepositoryProvider? entityRepositoryProvider,
    EntityResolutionRules? resolutionRules}) {
  entityCache ??= JsonEntityCacheSimple();

  final resolutionRulesResolved =
      resolveEntityResolutionRules(resolutionRules);

  var fieldsTypes = this.fieldsTypes(o);

  var resolved = fields.entries.forEachAsync((e) {
    var f = e.key;
    var v = e.value;
    var t = fieldsTypes[f];
    var v2 = resolveFieldValue(f, t, v,
        entityProvider: entityProvider,
        entityCache: entityCache,
        entityHandlerProvider: entityHandlerProvider,
        entityRepositoryProvider: entityRepositoryProvider,
        resolutionRules: resolutionRulesResolved);

    if (t != null) {
      if (t.isEntityReferenceType) {
        var entityType = t.arguments0 ?? TypeInfo.tObject;

        v2 = v2.resolveMapped((val) => entityType.toEntityReference(val,
            type: entityType.type,
            entityProvider: entityProvider,
            entityHandlerProvider: entityHandlerProvider,
            entityCache: entityCache));
      } else if (t.isEntityReferenceListType) {
        var entityType = t.arguments0 ?? TypeInfo.tObject;

        v2 = v2.resolveMapped((val) => entityType.toEntityReferenceList(val,
            type: entityType.type,
            entityProvider: entityProvider,
            entityHandlerProvider: entityHandlerProvider,
            entityCache: entityCache));
      }
    }

    return MapEntry(f, v2);
  });

  return resolved
      .resolveMapped((l) => l.toMapFromEntries().resolveAllValuesNullable());
}