loadRelatedJson method

Future loadRelatedJson({
  1. required String entityName,
  2. required String entityId,
  3. required String fieldName,
  4. required String relatedType,
  5. String? queryName,
  6. required bool isNullable,
  7. required bool isJoinType,
  8. Map<String, Object?>? fixedWhere,
})

Implementation

Future<dynamic> loadRelatedJson({
  required String entityName,
  required String entityId,
  required String fieldName,
  required String relatedType,
  String? queryName,
  required bool isNullable,
  required bool isJoinType,
  Map<String, Object?>? fixedWhere,
}) async {
  final artifactPlural = pluralize(entityName.uncapitalize());
  DocumentNode? gqlQuery;

  try {
    queryName ??= "listRelated$entityName${fieldName.capitalize()}";
    gqlQuery = _resolver.getOrBuildQuery(
        queryName,
        entityName,
        () => _resolver.buildListRelatedQuery(
              thisType: entityName,
              relatedType: relatedType,
              fieldName: fieldName,
              queryName: queryName!,
              where: fixedWhere,
            ));

    var result = await this._client().query(
          QueryOptions(
            document: gqlQuery,
            operationName: queryName,
            variables: {
              "id": entityId,
            },
            cacheRereadPolicy: CacheRereadPolicy.ignoreAll,
            fetchPolicy: FetchPolicy.noCache,
          ),
        );

    if (result.hasException) {
      final translated = GraphClientConfig.translateException(
          GraphOperation(queryName, GraphOperations.listRelated, gqlQuery),
          {
            "where": fixedWhere ?? {},
            "fieldName": fieldName,
            "id": entityId,
            "relatedType": relatedType,
          },
          result.exception!);
      throw translated;
    }

    var raw = GraphClientConfig.getDeep(result.data, "${artifactPlural}", 0, fieldName);
    if (raw != null && isJoinType) {
      raw = raw["edges"];
    }
    return raw;
  } catch (e, stack) {
    print(e);
    print(stack);
    print('## -------------------------------------------------------');
    print('## LIST RELATED FAILED!');
    // if (gqlQuery == null) print('## NO DOC!');
    // gqlQuery?.definitions.forEach((element) {
    //   print(lang.printNode(element));
    //   print('##---------------------------------------------------');
    // });
    // print('##-------------------------------------------------------');
    rethrow;
  }
}