buildListRelatedQuery method

OperationDefinitionNode buildListRelatedQuery({
  1. required String thisType,
  2. required String relatedType,
  3. required String fieldName,
  4. required String queryName,
  5. Map<String, Object?>? where,
})

Implementation

OperationDefinitionNode buildListRelatedQuery({
  required String thisType,
  required String relatedType,
  required String fieldName,
  required String queryName,
  Map<String, Object?>? where,
}) {
  final rootWhere = {
    'id': VariableNode(name: NameNode(value: 'id')),
  };

  final artifactPlural = pluralize(thisType.uncapitalize());
  return OperationDefinitionNode(
    type: OperationType.query,
    name: NameNode(value: queryName),
    variableDefinitions: [
      VariableDefinitionNode(
        defaultValue: DefaultValueNode(value: null),
        variable: VariableNode(name: NameNode(value: "id")),
        type: NamedTypeNode(
          name: NameNode(value: "ID"),
          isNonNull: true,
        ),
      )
    ],
    selectionSet: SelectionSetNode(
      selections: [
        FieldNode(
          name: NameNode(value: artifactPlural),
          arguments: [
            ArgumentNode(
                name: NameNode(value: "where"),
                value: rootWhere.toValueNode()),
          ],
          selectionSet: SelectionSetNode(
            selections: [
              FieldNode(
                name: NameNode(value: fieldName),
                arguments: [
                  if (where?.isNotEmpty == true)
                    ArgumentNode(
                      name: NameNode(value: "where"),
                      value: where.toValueNode(),
                    ),
                ],
                selectionSet: SelectionSetNode(
                  selections: [
                    FragmentSpreadNode(
                        name: NameNode(value: '${relatedType}Fragment')),
                  ],
                ),
              )
            ],
          ),
        )
      ],
    ),
  );
}