get<TModel extends GraphqlModel> method

  1. @override
Future<List<TModel>> get<TModel extends GraphqlModel>({
  1. Query? query,
  2. ModelRepository<GraphqlModel>? repository,
})

Query for raw data and construct it with an Adapter

Implementation

@override
Future<List<TModel>> get<TModel extends GraphqlModel>({query, repository}) async {
  final adapter = modelDictionary.adapterFor[TModel]!;
  final request = GraphqlRequest<TModel>(
    action: QueryAction.get,
    modelDictionary: modelDictionary,
    query: query,
    variableNamespace: variableNamespace,
  ).request;
  if (request == null) return <TModel>[];
  await for (final resp in link.request(request)) {
    if (resp.data?.values == null) return <TModel>[];
    if (resp.data!.values.isEmpty || resp.data!.values.first == null) {
      return <TModel>[];
    }

    if (resp.data?.values.first is Iterable) {
      final results = resp.data?.values.first
          .map((v) => adapter.fromGraphql(v, provider: this, repository: repository))
          .toList()
          .cast<Future<TModel>>();

      return await Future.wait<TModel>(results);
    }

    if (resp.data?.values.first is Map) {
      return [
        await adapter.fromGraphql(resp.data?.values.first!,
            provider: this, repository: repository) as TModel
      ];
    }

    return [
      await adapter.fromGraphql(resp.data!, provider: this, repository: repository) as TModel
    ];
  }
  return <TModel>[];
}