diff --git a/build.yaml b/build.yaml index 39d416a..8ebb048 100644 --- a/build.yaml +++ b/build.yaml @@ -44,6 +44,11 @@ targets: queries_glob: lib/graphql/github_repositories.graphql resolve_type_field: __typename add_query_prefix: true + - schema: lib/github.schema.json + output: lib/graphql/github_users.dart + queries_glob: lib/graphql/github_users.graphql + resolve_type_field: __typename + add_query_prefix: true scalar_mapping: - graphql_type: URI dart_type: String diff --git a/lib/graphql/github_users.dart b/lib/graphql/github_users.dart new file mode 100644 index 0000000..1434b0b --- /dev/null +++ b/lib/graphql/github_users.dart @@ -0,0 +1,1044 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +import 'package:artemis/artemis.dart'; +import 'package:json_annotation/json_annotation.dart'; +import 'package:equatable/equatable.dart'; +import 'package:gql/ast.dart'; +part 'github_users.g.dart'; + +@JsonSerializable(explicitToJson: true) +class GithubUsers with EquatableMixin { + GithubUsers(); + + factory GithubUsers.fromJson(Map json) => + _$GithubUsersFromJson(json); + + GithubUsersUser user; + + GithubUsersOrganization organization; + + GithubUsersRepository repository; + + @override + List get props => [user, organization, repository]; + Map toJson() => _$GithubUsersToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersUser extends GithubUsersAuditEntryActor + with EquatableMixin + implements + GithubUsersNode, + GithubUsersActor, + GithubUsersRegistryPackageOwner, + GithubUsersRegistryPackageSearch, + GithubUsersProjectOwner, + GithubUsersRepositoryOwner, + GithubUsersUniformResourceLocatable, + GithubUsersProfileOwner, + GithubUsersSponsorable { + GithubUsersUser(); + + factory GithubUsersUser.fromJson(Map json) => + _$GithubUsersUserFromJson(json); + + @override + String login; + + @override + String name; + + @override + String avatarUrl; + + String bio; + + GithubUsersFollowerConnection followers; + + GithubUsersFollowingConnection following; + + @override + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => + [login, name, avatarUrl, bio, followers, following, resolveType]; + Map toJson() => _$GithubUsersUserToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersFollowerConnection with EquatableMixin { + GithubUsersFollowerConnection(); + + factory GithubUsersFollowerConnection.fromJson(Map json) => + _$GithubUsersFollowerConnectionFromJson(json); + + GithubUsersPageInfo pageInfo; + + List nodes; + + @override + List get props => [pageInfo, nodes]; + Map toJson() => _$GithubUsersFollowerConnectionToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersPageInfo with EquatableMixin { + GithubUsersPageInfo(); + + factory GithubUsersPageInfo.fromJson(Map json) => + _$GithubUsersPageInfoFromJson(json); + + bool hasNextPage; + + String endCursor; + + @override + List get props => [hasNextPage, endCursor]; + Map toJson() => _$GithubUsersPageInfoToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersAuditEntryActor with EquatableMixin { + GithubUsersAuditEntryActor(); + + factory GithubUsersAuditEntryActor.fromJson(Map json) => + _$GithubUsersAuditEntryActorFromJson(json); + + @override + List get props => []; + Map toJson() => _$GithubUsersAuditEntryActorToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersNode with EquatableMixin { + GithubUsersNode(); + + factory GithubUsersNode.fromJson(Map json) => + _$GithubUsersNodeFromJson(json); + + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [resolveType]; + Map toJson() => _$GithubUsersNodeToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersActor with EquatableMixin { + GithubUsersActor(); + + factory GithubUsersActor.fromJson(Map json) => + _$GithubUsersActorFromJson(json); + + String login; + + String avatarUrl; + + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [login, avatarUrl, resolveType]; + Map toJson() => _$GithubUsersActorToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersRegistryPackageOwner with EquatableMixin { + GithubUsersRegistryPackageOwner(); + + factory GithubUsersRegistryPackageOwner.fromJson(Map json) => + _$GithubUsersRegistryPackageOwnerFromJson(json); + + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [resolveType]; + Map toJson() => + _$GithubUsersRegistryPackageOwnerToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersRegistryPackageSearch with EquatableMixin { + GithubUsersRegistryPackageSearch(); + + factory GithubUsersRegistryPackageSearch.fromJson( + Map json) => + _$GithubUsersRegistryPackageSearchFromJson(json); + + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [resolveType]; + Map toJson() => + _$GithubUsersRegistryPackageSearchToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersProjectOwner with EquatableMixin { + GithubUsersProjectOwner(); + + factory GithubUsersProjectOwner.fromJson(Map json) => + _$GithubUsersProjectOwnerFromJson(json); + + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [resolveType]; + Map toJson() => _$GithubUsersProjectOwnerToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersRepositoryOwner with EquatableMixin { + GithubUsersRepositoryOwner(); + + factory GithubUsersRepositoryOwner.fromJson(Map json) => + _$GithubUsersRepositoryOwnerFromJson(json); + + String login; + + String avatarUrl; + + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [login, avatarUrl, resolveType]; + Map toJson() => _$GithubUsersRepositoryOwnerToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersUniformResourceLocatable with EquatableMixin { + GithubUsersUniformResourceLocatable(); + + factory GithubUsersUniformResourceLocatable.fromJson( + Map json) => + _$GithubUsersUniformResourceLocatableFromJson(json); + + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [resolveType]; + Map toJson() => + _$GithubUsersUniformResourceLocatableToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersProfileOwner with EquatableMixin { + GithubUsersProfileOwner(); + + factory GithubUsersProfileOwner.fromJson(Map json) => + _$GithubUsersProfileOwnerFromJson(json); + + String login; + + String name; + + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [login, name, resolveType]; + Map toJson() => _$GithubUsersProfileOwnerToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersSponsorable with EquatableMixin { + GithubUsersSponsorable(); + + factory GithubUsersSponsorable.fromJson(Map json) => + _$GithubUsersSponsorableFromJson(json); + + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [resolveType]; + Map toJson() => _$GithubUsersSponsorableToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersFollowingConnection with EquatableMixin { + GithubUsersFollowingConnection(); + + factory GithubUsersFollowingConnection.fromJson(Map json) => + _$GithubUsersFollowingConnectionFromJson(json); + + GithubUsersPageInfo pageInfo; + + List nodes; + + @override + List get props => [pageInfo, nodes]; + Map toJson() => _$GithubUsersFollowingConnectionToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersOrganization extends GithubUsersAuditEntryActor + with EquatableMixin + implements + GithubUsersNode, + GithubUsersActor, + GithubUsersRegistryPackageOwner, + GithubUsersRegistryPackageSearch, + GithubUsersProjectOwner, + GithubUsersRepositoryOwner, + GithubUsersUniformResourceLocatable, + GithubUsersMemberStatusable, + GithubUsersProfileOwner, + GithubUsersSponsorable { + GithubUsersOrganization(); + + factory GithubUsersOrganization.fromJson(Map json) => + _$GithubUsersOrganizationFromJson(json); + + @override + String login; + + @override + String name; + + @override + String avatarUrl; + + GithubUsersOrganizationMemberConnection membersWithRole; + + @override + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => + [login, name, avatarUrl, membersWithRole, resolveType]; + Map toJson() => _$GithubUsersOrganizationToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersOrganizationMemberConnection with EquatableMixin { + GithubUsersOrganizationMemberConnection(); + + factory GithubUsersOrganizationMemberConnection.fromJson( + Map json) => + _$GithubUsersOrganizationMemberConnectionFromJson(json); + + GithubUsersPageInfo pageInfo; + + List nodes; + + @override + List get props => [pageInfo, nodes]; + Map toJson() => + _$GithubUsersOrganizationMemberConnectionToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersMemberStatusable with EquatableMixin { + GithubUsersMemberStatusable(); + + factory GithubUsersMemberStatusable.fromJson(Map json) => + _$GithubUsersMemberStatusableFromJson(json); + + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [resolveType]; + Map toJson() => _$GithubUsersMemberStatusableToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersRepository extends GithubUsersPinnableItem + with EquatableMixin + implements + GithubUsersNode, + GithubUsersProjectOwner, + GithubUsersRegistryPackageOwner, + GithubUsersRegistryPackageSearch, + GithubUsersSubscribable, + GithubUsersStarrable, + GithubUsersUniformResourceLocatable, + GithubUsersRepositoryInfo { + GithubUsersRepository(); + + factory GithubUsersRepository.fromJson(Map json) => + _$GithubUsersRepositoryFromJson(json); + + GithubUsersUserConnection watchers; + + @override + GithubUsersStargazerConnection stargazers; + + @override + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [watchers, stargazers, resolveType]; + Map toJson() => _$GithubUsersRepositoryToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersUserConnection with EquatableMixin { + GithubUsersUserConnection(); + + factory GithubUsersUserConnection.fromJson(Map json) => + _$GithubUsersUserConnectionFromJson(json); + + GithubUsersPageInfo pageInfo; + + List nodes; + + @override + List get props => [pageInfo, nodes]; + Map toJson() => _$GithubUsersUserConnectionToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersStargazerConnection with EquatableMixin { + GithubUsersStargazerConnection(); + + factory GithubUsersStargazerConnection.fromJson(Map json) => + _$GithubUsersStargazerConnectionFromJson(json); + + GithubUsersPageInfo pageInfo; + + List nodes; + + @override + List get props => [pageInfo, nodes]; + Map toJson() => _$GithubUsersStargazerConnectionToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersPinnableItem with EquatableMixin { + GithubUsersPinnableItem(); + + factory GithubUsersPinnableItem.fromJson(Map json) => + _$GithubUsersPinnableItemFromJson(json); + + @override + List get props => []; + Map toJson() => _$GithubUsersPinnableItemToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersSubscribable with EquatableMixin { + GithubUsersSubscribable(); + + factory GithubUsersSubscribable.fromJson(Map json) => + _$GithubUsersSubscribableFromJson(json); + + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [resolveType]; + Map toJson() => _$GithubUsersSubscribableToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersStarrable with EquatableMixin { + GithubUsersStarrable(); + + factory GithubUsersStarrable.fromJson(Map json) => + _$GithubUsersStarrableFromJson(json); + + GithubUsersStargazerConnection stargazers; + + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [stargazers, resolveType]; + Map toJson() => _$GithubUsersStarrableToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersRepositoryInfo with EquatableMixin { + GithubUsersRepositoryInfo(); + + factory GithubUsersRepositoryInfo.fromJson(Map json) => + _$GithubUsersRepositoryInfoFromJson(json); + + @JsonKey(name: '__typename') + String resolveType; + + @override + List get props => [resolveType]; + Map toJson() => _$GithubUsersRepositoryInfoToJson(this); +} + +@JsonSerializable(explicitToJson: true) +class GithubUsersArguments extends JsonSerializable with EquatableMixin { + GithubUsersArguments( + {this.login, + this.repoName, + this.after, + this.isFollowers, + this.isFollowing, + this.isMember, + this.isStar, + this.isWatch}); + + factory GithubUsersArguments.fromJson(Map json) => + _$GithubUsersArgumentsFromJson(json); + + final String login; + + final String repoName; + + final String after; + + final bool isFollowers; + + final bool isFollowing; + + final bool isMember; + + final bool isStar; + + final bool isWatch; + + @override + List get props => [ + login, + repoName, + after, + isFollowers, + isFollowing, + isMember, + isStar, + isWatch + ]; + Map toJson() => _$GithubUsersArgumentsToJson(this); +} + +class GithubUsersQuery extends GraphQLQuery { + GithubUsersQuery({this.variables}); + + @override + final DocumentNode document = DocumentNode(definitions: [ + OperationDefinitionNode( + type: OperationType.query, + name: null, + variableDefinitions: [ + VariableDefinitionNode( + variable: VariableNode(name: NameNode(value: 'login')), + type: NamedTypeNode( + name: NameNode(value: 'String'), isNonNull: true), + defaultValue: DefaultValueNode(value: null), + directives: []), + VariableDefinitionNode( + variable: VariableNode(name: NameNode(value: 'repoName')), + type: NamedTypeNode( + name: NameNode(value: 'String'), isNonNull: true), + defaultValue: DefaultValueNode(value: null), + directives: []), + VariableDefinitionNode( + variable: VariableNode(name: NameNode(value: 'after')), + type: NamedTypeNode( + name: NameNode(value: 'String'), isNonNull: false), + defaultValue: DefaultValueNode(value: null), + directives: []), + VariableDefinitionNode( + variable: VariableNode(name: NameNode(value: 'isFollowers')), + type: NamedTypeNode( + name: NameNode(value: 'Boolean'), isNonNull: true), + defaultValue: DefaultValueNode(value: null), + directives: []), + VariableDefinitionNode( + variable: VariableNode(name: NameNode(value: 'isFollowing')), + type: NamedTypeNode( + name: NameNode(value: 'Boolean'), isNonNull: true), + defaultValue: DefaultValueNode(value: null), + directives: []), + VariableDefinitionNode( + variable: VariableNode(name: NameNode(value: 'isMember')), + type: NamedTypeNode( + name: NameNode(value: 'Boolean'), isNonNull: true), + defaultValue: DefaultValueNode(value: null), + directives: []), + VariableDefinitionNode( + variable: VariableNode(name: NameNode(value: 'isStar')), + type: NamedTypeNode( + name: NameNode(value: 'Boolean'), isNonNull: true), + defaultValue: DefaultValueNode(value: null), + directives: []), + VariableDefinitionNode( + variable: VariableNode(name: NameNode(value: 'isWatch')), + type: NamedTypeNode( + name: NameNode(value: 'Boolean'), isNonNull: true), + defaultValue: DefaultValueNode(value: null), + directives: []) + ], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'user'), + alias: null, + arguments: [ + ArgumentNode( + name: NameNode(value: 'login'), + value: VariableNode(name: NameNode(value: 'login'))) + ], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'login'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'name'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'avatarUrl'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'bio'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'followers'), + alias: null, + arguments: [ + ArgumentNode( + name: NameNode(value: 'first'), + value: IntValueNode(value: '30')), + ArgumentNode( + name: NameNode(value: 'after'), + value: VariableNode(name: NameNode(value: 'after'))) + ], + directives: [ + DirectiveNode( + name: NameNode(value: 'include'), + arguments: [ + ArgumentNode( + name: NameNode(value: 'if'), + value: VariableNode( + name: NameNode(value: 'isFollowers'))) + ]) + ], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'pageInfo'), + alias: null, + arguments: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'hasNextPage'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'endCursor'), + alias: null, + arguments: [], + directives: [], + selectionSet: null) + ])), + FieldNode( + name: NameNode(value: 'nodes'), + alias: null, + arguments: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'login'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'name'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'avatarUrl'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'bio'), + alias: null, + arguments: [], + directives: [], + selectionSet: null) + ])) + ])), + FieldNode( + name: NameNode(value: 'following'), + alias: null, + arguments: [ + ArgumentNode( + name: NameNode(value: 'first'), + value: IntValueNode(value: '30')), + ArgumentNode( + name: NameNode(value: 'after'), + value: VariableNode(name: NameNode(value: 'after'))) + ], + directives: [ + DirectiveNode( + name: NameNode(value: 'include'), + arguments: [ + ArgumentNode( + name: NameNode(value: 'if'), + value: VariableNode( + name: NameNode(value: 'isFollowing'))) + ]) + ], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'pageInfo'), + alias: null, + arguments: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'hasNextPage'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'endCursor'), + alias: null, + arguments: [], + directives: [], + selectionSet: null) + ])), + FieldNode( + name: NameNode(value: 'nodes'), + alias: null, + arguments: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'login'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'name'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'avatarUrl'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'bio'), + alias: null, + arguments: [], + directives: [], + selectionSet: null) + ])) + ])) + ])), + FieldNode( + name: NameNode(value: 'organization'), + alias: null, + arguments: [ + ArgumentNode( + name: NameNode(value: 'login'), + value: VariableNode(name: NameNode(value: 'login'))) + ], + directives: [ + DirectiveNode(name: NameNode(value: 'include'), arguments: [ + ArgumentNode( + name: NameNode(value: 'if'), + value: VariableNode(name: NameNode(value: 'isMember'))) + ]) + ], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'login'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'name'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'avatarUrl'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'membersWithRole'), + alias: null, + arguments: [ + ArgumentNode( + name: NameNode(value: 'first'), + value: IntValueNode(value: '30')), + ArgumentNode( + name: NameNode(value: 'after'), + value: VariableNode(name: NameNode(value: 'after'))) + ], + directives: [ + DirectiveNode( + name: NameNode(value: 'include'), + arguments: [ + ArgumentNode( + name: NameNode(value: 'if'), + value: VariableNode( + name: NameNode(value: 'isFollowing'))) + ]) + ], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'pageInfo'), + alias: null, + arguments: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'hasNextPage'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'endCursor'), + alias: null, + arguments: [], + directives: [], + selectionSet: null) + ])), + FieldNode( + name: NameNode(value: 'nodes'), + alias: null, + arguments: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'login'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'name'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'avatarUrl'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'bio'), + alias: null, + arguments: [], + directives: [], + selectionSet: null) + ])) + ])) + ])), + FieldNode( + name: NameNode(value: 'repository'), + alias: null, + arguments: [ + ArgumentNode( + name: NameNode(value: 'owner'), + value: VariableNode(name: NameNode(value: 'login'))), + ArgumentNode( + name: NameNode(value: 'name'), + value: VariableNode(name: NameNode(value: 'repoName'))) + ], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'watchers'), + alias: null, + arguments: [ + ArgumentNode( + name: NameNode(value: 'first'), + value: IntValueNode(value: '30')), + ArgumentNode( + name: NameNode(value: 'after'), + value: VariableNode(name: NameNode(value: 'after'))) + ], + directives: [ + DirectiveNode( + name: NameNode(value: 'include'), + arguments: [ + ArgumentNode( + name: NameNode(value: 'if'), + value: VariableNode( + name: NameNode(value: 'isWatch'))) + ]) + ], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'pageInfo'), + alias: null, + arguments: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'hasNextPage'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'endCursor'), + alias: null, + arguments: [], + directives: [], + selectionSet: null) + ])), + FieldNode( + name: NameNode(value: 'nodes'), + alias: null, + arguments: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'login'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'name'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'avatarUrl'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'bio'), + alias: null, + arguments: [], + directives: [], + selectionSet: null) + ])) + ])), + FieldNode( + name: NameNode(value: 'stargazers'), + alias: null, + arguments: [ + ArgumentNode( + name: NameNode(value: 'first'), + value: IntValueNode(value: '30')), + ArgumentNode( + name: NameNode(value: 'after'), + value: VariableNode(name: NameNode(value: 'after'))) + ], + directives: [ + DirectiveNode( + name: NameNode(value: 'include'), + arguments: [ + ArgumentNode( + name: NameNode(value: 'if'), + value: VariableNode( + name: NameNode(value: 'isStar'))) + ]) + ], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'pageInfo'), + alias: null, + arguments: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'hasNextPage'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'endCursor'), + alias: null, + arguments: [], + directives: [], + selectionSet: null) + ])), + FieldNode( + name: NameNode(value: 'nodes'), + alias: null, + arguments: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'login'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'name'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'avatarUrl'), + alias: null, + arguments: [], + directives: [], + selectionSet: null), + FieldNode( + name: NameNode(value: 'bio'), + alias: null, + arguments: [], + directives: [], + selectionSet: null) + ])) + ])) + ])) + ])) + ]); + + @override + final String operationName = 'github_users'; + + @override + final GithubUsersArguments variables; + + @override + List get props => [document, operationName, variables]; + @override + GithubUsers parse(Map json) => GithubUsers.fromJson(json); +} diff --git a/lib/graphql/github_users.g.dart b/lib/graphql/github_users.g.dart new file mode 100644 index 0000000..c9268a3 --- /dev/null +++ b/lib/graphql/github_users.g.dart @@ -0,0 +1,424 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'github_users.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +GithubUsers _$GithubUsersFromJson(Map json) { + return GithubUsers() + ..user = json['user'] == null + ? null + : GithubUsersUser.fromJson(json['user'] as Map) + ..organization = json['organization'] == null + ? null + : GithubUsersOrganization.fromJson( + json['organization'] as Map) + ..repository = json['repository'] == null + ? null + : GithubUsersRepository.fromJson( + json['repository'] as Map); +} + +Map _$GithubUsersToJson(GithubUsers instance) => + { + 'user': instance.user?.toJson(), + 'organization': instance.organization?.toJson(), + 'repository': instance.repository?.toJson(), + }; + +GithubUsersUser _$GithubUsersUserFromJson(Map json) { + return GithubUsersUser() + ..login = json['login'] as String + ..name = json['name'] as String + ..avatarUrl = json['avatarUrl'] as String + ..bio = json['bio'] as String + ..followers = json['followers'] == null + ? null + : GithubUsersFollowerConnection.fromJson( + json['followers'] as Map) + ..following = json['following'] == null + ? null + : GithubUsersFollowingConnection.fromJson( + json['following'] as Map) + ..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersUserToJson(GithubUsersUser instance) => + { + 'login': instance.login, + 'name': instance.name, + 'avatarUrl': instance.avatarUrl, + 'bio': instance.bio, + 'followers': instance.followers?.toJson(), + 'following': instance.following?.toJson(), + '__typename': instance.resolveType, + }; + +GithubUsersFollowerConnection _$GithubUsersFollowerConnectionFromJson( + Map json) { + return GithubUsersFollowerConnection() + ..pageInfo = json['pageInfo'] == null + ? null + : GithubUsersPageInfo.fromJson(json['pageInfo'] as Map) + ..nodes = (json['nodes'] as List) + ?.map((e) => e == null + ? null + : GithubUsersUser.fromJson(e as Map)) + ?.toList(); +} + +Map _$GithubUsersFollowerConnectionToJson( + GithubUsersFollowerConnection instance) => + { + 'pageInfo': instance.pageInfo?.toJson(), + 'nodes': instance.nodes?.map((e) => e?.toJson())?.toList(), + }; + +GithubUsersPageInfo _$GithubUsersPageInfoFromJson(Map json) { + return GithubUsersPageInfo() + ..hasNextPage = json['hasNextPage'] as bool + ..endCursor = json['endCursor'] as String; +} + +Map _$GithubUsersPageInfoToJson( + GithubUsersPageInfo instance) => + { + 'hasNextPage': instance.hasNextPage, + 'endCursor': instance.endCursor, + }; + +GithubUsersAuditEntryActor _$GithubUsersAuditEntryActorFromJson( + Map json) { + return GithubUsersAuditEntryActor(); +} + +Map _$GithubUsersAuditEntryActorToJson( + GithubUsersAuditEntryActor instance) => + {}; + +GithubUsersNode _$GithubUsersNodeFromJson(Map json) { + return GithubUsersNode()..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersNodeToJson(GithubUsersNode instance) => + { + '__typename': instance.resolveType, + }; + +GithubUsersActor _$GithubUsersActorFromJson(Map json) { + return GithubUsersActor() + ..login = json['login'] as String + ..avatarUrl = json['avatarUrl'] as String + ..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersActorToJson(GithubUsersActor instance) => + { + 'login': instance.login, + 'avatarUrl': instance.avatarUrl, + '__typename': instance.resolveType, + }; + +GithubUsersRegistryPackageOwner _$GithubUsersRegistryPackageOwnerFromJson( + Map json) { + return GithubUsersRegistryPackageOwner() + ..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersRegistryPackageOwnerToJson( + GithubUsersRegistryPackageOwner instance) => + { + '__typename': instance.resolveType, + }; + +GithubUsersRegistryPackageSearch _$GithubUsersRegistryPackageSearchFromJson( + Map json) { + return GithubUsersRegistryPackageSearch() + ..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersRegistryPackageSearchToJson( + GithubUsersRegistryPackageSearch instance) => + { + '__typename': instance.resolveType, + }; + +GithubUsersProjectOwner _$GithubUsersProjectOwnerFromJson( + Map json) { + return GithubUsersProjectOwner()..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersProjectOwnerToJson( + GithubUsersProjectOwner instance) => + { + '__typename': instance.resolveType, + }; + +GithubUsersRepositoryOwner _$GithubUsersRepositoryOwnerFromJson( + Map json) { + return GithubUsersRepositoryOwner() + ..login = json['login'] as String + ..avatarUrl = json['avatarUrl'] as String + ..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersRepositoryOwnerToJson( + GithubUsersRepositoryOwner instance) => + { + 'login': instance.login, + 'avatarUrl': instance.avatarUrl, + '__typename': instance.resolveType, + }; + +GithubUsersUniformResourceLocatable + _$GithubUsersUniformResourceLocatableFromJson(Map json) { + return GithubUsersUniformResourceLocatable() + ..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersUniformResourceLocatableToJson( + GithubUsersUniformResourceLocatable instance) => + { + '__typename': instance.resolveType, + }; + +GithubUsersProfileOwner _$GithubUsersProfileOwnerFromJson( + Map json) { + return GithubUsersProfileOwner() + ..login = json['login'] as String + ..name = json['name'] as String + ..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersProfileOwnerToJson( + GithubUsersProfileOwner instance) => + { + 'login': instance.login, + 'name': instance.name, + '__typename': instance.resolveType, + }; + +GithubUsersSponsorable _$GithubUsersSponsorableFromJson( + Map json) { + return GithubUsersSponsorable()..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersSponsorableToJson( + GithubUsersSponsorable instance) => + { + '__typename': instance.resolveType, + }; + +GithubUsersFollowingConnection _$GithubUsersFollowingConnectionFromJson( + Map json) { + return GithubUsersFollowingConnection() + ..pageInfo = json['pageInfo'] == null + ? null + : GithubUsersPageInfo.fromJson(json['pageInfo'] as Map) + ..nodes = (json['nodes'] as List) + ?.map((e) => e == null + ? null + : GithubUsersUser.fromJson(e as Map)) + ?.toList(); +} + +Map _$GithubUsersFollowingConnectionToJson( + GithubUsersFollowingConnection instance) => + { + 'pageInfo': instance.pageInfo?.toJson(), + 'nodes': instance.nodes?.map((e) => e?.toJson())?.toList(), + }; + +GithubUsersOrganization _$GithubUsersOrganizationFromJson( + Map json) { + return GithubUsersOrganization() + ..login = json['login'] as String + ..name = json['name'] as String + ..avatarUrl = json['avatarUrl'] as String + ..membersWithRole = json['membersWithRole'] == null + ? null + : GithubUsersOrganizationMemberConnection.fromJson( + json['membersWithRole'] as Map) + ..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersOrganizationToJson( + GithubUsersOrganization instance) => + { + 'login': instance.login, + 'name': instance.name, + 'avatarUrl': instance.avatarUrl, + 'membersWithRole': instance.membersWithRole?.toJson(), + '__typename': instance.resolveType, + }; + +GithubUsersOrganizationMemberConnection + _$GithubUsersOrganizationMemberConnectionFromJson( + Map json) { + return GithubUsersOrganizationMemberConnection() + ..pageInfo = json['pageInfo'] == null + ? null + : GithubUsersPageInfo.fromJson(json['pageInfo'] as Map) + ..nodes = (json['nodes'] as List) + ?.map((e) => e == null + ? null + : GithubUsersUser.fromJson(e as Map)) + ?.toList(); +} + +Map _$GithubUsersOrganizationMemberConnectionToJson( + GithubUsersOrganizationMemberConnection instance) => + { + 'pageInfo': instance.pageInfo?.toJson(), + 'nodes': instance.nodes?.map((e) => e?.toJson())?.toList(), + }; + +GithubUsersMemberStatusable _$GithubUsersMemberStatusableFromJson( + Map json) { + return GithubUsersMemberStatusable() + ..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersMemberStatusableToJson( + GithubUsersMemberStatusable instance) => + { + '__typename': instance.resolveType, + }; + +GithubUsersRepository _$GithubUsersRepositoryFromJson( + Map json) { + return GithubUsersRepository() + ..watchers = json['watchers'] == null + ? null + : GithubUsersUserConnection.fromJson( + json['watchers'] as Map) + ..stargazers = json['stargazers'] == null + ? null + : GithubUsersStargazerConnection.fromJson( + json['stargazers'] as Map) + ..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersRepositoryToJson( + GithubUsersRepository instance) => + { + 'watchers': instance.watchers?.toJson(), + 'stargazers': instance.stargazers?.toJson(), + '__typename': instance.resolveType, + }; + +GithubUsersUserConnection _$GithubUsersUserConnectionFromJson( + Map json) { + return GithubUsersUserConnection() + ..pageInfo = json['pageInfo'] == null + ? null + : GithubUsersPageInfo.fromJson(json['pageInfo'] as Map) + ..nodes = (json['nodes'] as List) + ?.map((e) => e == null + ? null + : GithubUsersUser.fromJson(e as Map)) + ?.toList(); +} + +Map _$GithubUsersUserConnectionToJson( + GithubUsersUserConnection instance) => + { + 'pageInfo': instance.pageInfo?.toJson(), + 'nodes': instance.nodes?.map((e) => e?.toJson())?.toList(), + }; + +GithubUsersStargazerConnection _$GithubUsersStargazerConnectionFromJson( + Map json) { + return GithubUsersStargazerConnection() + ..pageInfo = json['pageInfo'] == null + ? null + : GithubUsersPageInfo.fromJson(json['pageInfo'] as Map) + ..nodes = (json['nodes'] as List) + ?.map((e) => e == null + ? null + : GithubUsersUser.fromJson(e as Map)) + ?.toList(); +} + +Map _$GithubUsersStargazerConnectionToJson( + GithubUsersStargazerConnection instance) => + { + 'pageInfo': instance.pageInfo?.toJson(), + 'nodes': instance.nodes?.map((e) => e?.toJson())?.toList(), + }; + +GithubUsersPinnableItem _$GithubUsersPinnableItemFromJson( + Map json) { + return GithubUsersPinnableItem(); +} + +Map _$GithubUsersPinnableItemToJson( + GithubUsersPinnableItem instance) => + {}; + +GithubUsersSubscribable _$GithubUsersSubscribableFromJson( + Map json) { + return GithubUsersSubscribable()..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersSubscribableToJson( + GithubUsersSubscribable instance) => + { + '__typename': instance.resolveType, + }; + +GithubUsersStarrable _$GithubUsersStarrableFromJson(Map json) { + return GithubUsersStarrable() + ..stargazers = json['stargazers'] == null + ? null + : GithubUsersStargazerConnection.fromJson( + json['stargazers'] as Map) + ..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersStarrableToJson( + GithubUsersStarrable instance) => + { + 'stargazers': instance.stargazers?.toJson(), + '__typename': instance.resolveType, + }; + +GithubUsersRepositoryInfo _$GithubUsersRepositoryInfoFromJson( + Map json) { + return GithubUsersRepositoryInfo() + ..resolveType = json['__typename'] as String; +} + +Map _$GithubUsersRepositoryInfoToJson( + GithubUsersRepositoryInfo instance) => + { + '__typename': instance.resolveType, + }; + +GithubUsersArguments _$GithubUsersArgumentsFromJson(Map json) { + return GithubUsersArguments( + login: json['login'] as String, + repoName: json['repoName'] as String, + after: json['after'] as String, + isFollowers: json['isFollowers'] as bool, + isFollowing: json['isFollowing'] as bool, + isMember: json['isMember'] as bool, + isStar: json['isStar'] as bool, + isWatch: json['isWatch'] as bool, + ); +} + +Map _$GithubUsersArgumentsToJson( + GithubUsersArguments instance) => + { + 'login': instance.login, + 'repoName': instance.repoName, + 'after': instance.after, + 'isFollowers': instance.isFollowers, + 'isFollowing': instance.isFollowing, + 'isMember': instance.isMember, + 'isStar': instance.isStar, + 'isWatch': instance.isWatch, + }; diff --git a/lib/graphql/github_users.graphql b/lib/graphql/github_users.graphql new file mode 100644 index 0000000..54cc3ae --- /dev/null +++ b/lib/graphql/github_users.graphql @@ -0,0 +1,84 @@ +query( + $login: String! + $repoName: String! + $after: String + $isFollowers: Boolean! + $isFollowing: Boolean! + $isMember: Boolean! + $isStar: Boolean! + $isWatch: Boolean! +) { + user(login: $login) { + login + name + avatarUrl + bio + followers(first: 30, after: $after) @include(if: $isFollowers) { + pageInfo { + hasNextPage + endCursor + } + nodes { + login + name + avatarUrl + bio + } + } + following(first: 30, after: $after) @include(if: $isFollowing) { + pageInfo { + hasNextPage + endCursor + } + nodes { + login + name + avatarUrl + bio + } + } + } + organization(login: $login) @include(if: $isMember) { + login + name + avatarUrl + membersWithRole(first: 30, after: $after) @include(if: $isFollowing) { + pageInfo { + hasNextPage + endCursor + } + nodes { + login + name + avatarUrl + bio + } + } + } + repository(owner: $login, name: $repoName) { + watchers(first: 30, after: $after) @include(if: $isWatch) { + pageInfo { + hasNextPage + endCursor + } + nodes { + login + name + avatarUrl + bio + } + } + stargazers(first: 30, after: $after) @include(if: $isStar) { + pageInfo { + hasNextPage + endCursor + } + nodes { + login + name + avatarUrl + bio + } + } + } +} diff --git a/lib/screens/repository.dart b/lib/screens/repository.dart index aecfec2..f5181f8 100644 --- a/lib/screens/repository.dart +++ b/lib/screens/repository.dart @@ -5,7 +5,6 @@ import 'package:flutter/cupertino.dart'; import 'package:git_touch/graphql/github_repository.dart'; import 'package:git_touch/models/auth.dart'; import 'package:git_touch/scaffolds/refresh_stateful.dart'; -import 'package:git_touch/screens/repositories.dart'; import 'package:git_touch/screens/users.dart'; import 'package:git_touch/utils/utils.dart'; import 'package:git_touch/widgets/app_bar_title.dart'; @@ -144,12 +143,14 @@ class RepositoryScreen extends StatelessWidget { EntryItem( count: repo.watchers.totalCount, text: 'Watchers', - screenBuilder: (context) => UsersScreen.watchers(owner, name), + screenBuilder: (context) => + UsersScreen(owner, UsersScreenType.watch, repoName: name), ), EntryItem( count: repo.stargazers.totalCount, text: 'Stars', - screenBuilder: (context) => UsersScreen.stars(owner, name), + screenBuilder: (context) => + UsersScreen(owner, UsersScreenType.star, repoName: name), ), EntryItem( count: repo.forks.totalCount, diff --git a/lib/screens/user.dart b/lib/screens/user.dart index 54477e5..29c717c 100644 --- a/lib/screens/user.dart +++ b/lib/screens/user.dart @@ -102,12 +102,14 @@ class UserScreen extends StatelessWidget { EntryItem( count: user.followers.totalCount, text: 'Followers', - screenBuilder: (context) => UsersScreen.followers(user.login), + screenBuilder: (context) => + UsersScreen(user.login, UsersScreenType.follower), ), EntryItem( count: user.following.totalCount, text: 'Following', - screenBuilder: (context) => UsersScreen.following(user.login), + screenBuilder: (context) => + UsersScreen(user.login, UsersScreenType.following), ), ]), CommonStyle.verticalGap, @@ -188,7 +190,8 @@ class UserScreen extends StatelessWidget { EntryItem( count: payload.membersWithRole.totalCount, text: 'Members', - screenBuilder: (context) => UsersScreen.members(payload.login), + screenBuilder: (context) => + UsersScreen(payload.login, UsersScreenType.member), ), ]), CommonStyle.verticalGap, diff --git a/lib/screens/users.dart b/lib/screens/users.dart index 21ffd32..a99321c 100644 --- a/lib/screens/users.dart +++ b/lib/screens/users.dart @@ -1,76 +1,113 @@ import 'package:flutter/material.dart'; +import 'package:git_touch/graphql/github_users.dart'; import 'package:git_touch/scaffolds/list_stateful.dart'; import 'package:git_touch/widgets/app_bar_title.dart'; import 'package:git_touch/widgets/user_item.dart'; import 'package:git_touch/models/auth.dart'; import 'package:provider/provider.dart'; -import '../utils/utils.dart'; + +enum UsersScreenType { + follower, + following, + member, + watch, + star, +} class UsersScreen extends StatelessWidget { - final String scope; - final String params; - final String resource; - final String title; + final String login; + final String repoName; + final UsersScreenType type; - UsersScreen.followers(String login) - : scope = 'user', - params = 'login: "$login"', - resource = 'followers', - title = 'Followers'; - UsersScreen.following(String login) - : scope = 'user', - params = 'login: "$login"', - resource = 'following', - title = 'Following'; - UsersScreen.stars(String owner, String name) - : scope = 'repository', - params = 'owner: "$owner", name: "$name"', - resource = 'stargazers', - title = 'Stargazers'; - UsersScreen.watchers(String owner, String name) - : scope = 'repository', - params = 'owner: "$owner", name: "$name"', - resource = 'watchers', - title = 'Watchers'; - UsersScreen.members(String login) - : scope = 'organization', - params = 'login: "$login"', - resource = 'membersWithRole', - title = 'Members'; + UsersScreen(this.login, this.type, {this.repoName = ''}); - Future _queryUsers(BuildContext context, [String cursor]) async { - var cursorChunk = cursor == null ? '' : ', after: "$cursor"'; - var data = await Provider.of(context).query(''' -{ - $scope($params) { - $resource(first: $pageSize$cursorChunk) { - pageInfo { - hasNextPage - endCursor - } - nodes { - $userGqlChunk - } + String get _title { + switch (type) { + case UsersScreenType.follower: + return 'Followers'; + case UsersScreenType.following: + return 'Following'; + case UsersScreenType.member: + return 'Members'; + case UsersScreenType.watch: + return 'Watchers'; + case UsersScreenType.star: + return 'Stargazers'; + default: + return null; } } -} - '''); - var repo = data[scope][resource]; - return ListPayload( - cursor: repo["pageInfo"]["endCursor"], - hasMore: repo['pageInfo']['hasNextPage'], - items: repo["nodes"], - ); + Future> _queryUsers(BuildContext context, + [String cursor]) async { + final res = await Provider.of(context).gqlClient.execute( + GithubUsersQuery( + variables: GithubUsersArguments( + login: login, + repoName: repoName, + isFollowers: type == UsersScreenType.follower, + isFollowing: type == UsersScreenType.following, + isStar: type == UsersScreenType.star, + isWatch: type == UsersScreenType.watch, + isMember: type == UsersScreenType.member, + after: cursor))); + + switch (type) { + case UsersScreenType.follower: + final payload = res.data.user.followers; + return ListPayload( + cursor: payload.pageInfo.endCursor, + hasMore: payload.pageInfo.hasNextPage, + items: payload.nodes, + ); + case UsersScreenType.following: + final payload = res.data.user.following; + return ListPayload( + cursor: payload.pageInfo.endCursor, + hasMore: payload.pageInfo.hasNextPage, + items: payload.nodes, + ); + case UsersScreenType.member: + final payload = res.data.organization.membersWithRole; + return ListPayload( + cursor: payload.pageInfo.endCursor, + hasMore: payload.pageInfo.hasNextPage, + items: payload.nodes, + ); + case UsersScreenType.watch: + final payload = res.data.repository.watchers; + return ListPayload( + cursor: payload.pageInfo.endCursor, + hasMore: payload.pageInfo.hasNextPage, + items: payload.nodes, + ); + case UsersScreenType.star: + final payload = res.data.repository.stargazers; + return ListPayload( + cursor: payload.pageInfo.endCursor, + hasMore: payload.pageInfo.hasNextPage, + items: payload.nodes, + ); + default: + return null; + } } @override Widget build(BuildContext context) { - return ListStatefulScaffold( - title: AppBarTitle(title), + return ListStatefulScaffold( + title: AppBarTitle(_title), onRefresh: () => _queryUsers(context), onLoadMore: (cursor) => _queryUsers(context, cursor), - itemBuilder: (payload) => UserItem.fromData(payload), + itemBuilder: (payload) { + return UserItem( + login: payload.login, + name: payload.name, + avatarUrl: payload.avatarUrl, + bio: payload.bio, + inUserScreen: true, + ); + }, ); } }