mirror of
https://github.com/git-touch/git-touch
synced 2025-03-05 11:48:02 +01:00
refactor: repositores screen
This commit is contained in:
parent
6259faf935
commit
bcaa49a3c8
@ -39,6 +39,11 @@ targets:
|
||||
queries_glob: lib/graphql/github_object.graphql
|
||||
resolve_type_field: __typename
|
||||
add_query_prefix: true
|
||||
- schema: lib/github.schema.json
|
||||
output: lib/graphql/github_repositories.dart
|
||||
queries_glob: lib/graphql/github_repositories.graphql
|
||||
resolve_type_field: __typename
|
||||
add_query_prefix: true
|
||||
scalar_mapping:
|
||||
- graphql_type: URI
|
||||
dart_type: String
|
||||
|
1123
lib/graphql/github_repositories.dart
Normal file
1123
lib/graphql/github_repositories.dart
Normal file
File diff suppressed because it is too large
Load Diff
432
lib/graphql/github_repositories.g.dart
Normal file
432
lib/graphql/github_repositories.g.dart
Normal file
@ -0,0 +1,432 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'github_repositories.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
GithubRepositories _$GithubRepositoriesFromJson(Map<String, dynamic> json) {
|
||||
return GithubRepositories()
|
||||
..repositoryOwner = json['repositoryOwner'] == null
|
||||
? null
|
||||
: GithubRepositoriesRepositoryOwner.fromJson(
|
||||
json['repositoryOwner'] as Map<String, dynamic>);
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesToJson(GithubRepositories instance) =>
|
||||
<String, dynamic>{
|
||||
'repositoryOwner': instance.repositoryOwner?.toJson(),
|
||||
};
|
||||
|
||||
GithubRepositoriesRepositoryOwner _$GithubRepositoriesRepositoryOwnerFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesRepositoryOwner()
|
||||
..login = json['login'] as String
|
||||
..avatarUrl = json['avatarUrl'] as String
|
||||
..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesRepositoryOwnerToJson(
|
||||
GithubRepositoriesRepositoryOwner instance) =>
|
||||
<String, dynamic>{
|
||||
'login': instance.login,
|
||||
'avatarUrl': instance.avatarUrl,
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesUser _$GithubRepositoriesUserFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesUser()
|
||||
..repositories = json['repositories'] == null
|
||||
? null
|
||||
: GithubRepositoriesRepositoryConnection.fromJson(
|
||||
json['repositories'] as Map<String, dynamic>)
|
||||
..starredRepositories = json['starredRepositories'] == null
|
||||
? null
|
||||
: GithubRepositoriesStarredRepositoryConnection.fromJson(
|
||||
json['starredRepositories'] as Map<String, dynamic>)
|
||||
..resolveType = json['__typename'] as String
|
||||
..login = json['login'] as String
|
||||
..avatarUrl = json['avatarUrl'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesUserToJson(
|
||||
GithubRepositoriesUser instance) =>
|
||||
<String, dynamic>{
|
||||
'repositories': instance.repositories?.toJson(),
|
||||
'starredRepositories': instance.starredRepositories?.toJson(),
|
||||
'__typename': instance.resolveType,
|
||||
'login': instance.login,
|
||||
'avatarUrl': instance.avatarUrl,
|
||||
};
|
||||
|
||||
GithubRepositoriesRepositoryConnection
|
||||
_$GithubRepositoriesRepositoryConnectionFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesRepositoryConnection()
|
||||
..totalCount = json['totalCount'] as int
|
||||
..pageInfo = json['pageInfo'] == null
|
||||
? null
|
||||
: GithubRepositoriesPageInfo.fromJson(
|
||||
json['pageInfo'] as Map<String, dynamic>)
|
||||
..nodes = (json['nodes'] as List)
|
||||
?.map((e) => e == null
|
||||
? null
|
||||
: GithubRepositoriesRepository.fromJson(e as Map<String, dynamic>))
|
||||
?.toList();
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesRepositoryConnectionToJson(
|
||||
GithubRepositoriesRepositoryConnection instance) =>
|
||||
<String, dynamic>{
|
||||
'totalCount': instance.totalCount,
|
||||
'pageInfo': instance.pageInfo?.toJson(),
|
||||
'nodes': instance.nodes?.map((e) => e?.toJson())?.toList(),
|
||||
};
|
||||
|
||||
GithubRepositoriesPageInfo _$GithubRepositoriesPageInfoFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesPageInfo()
|
||||
..hasNextPage = json['hasNextPage'] as bool
|
||||
..endCursor = json['endCursor'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesPageInfoToJson(
|
||||
GithubRepositoriesPageInfo instance) =>
|
||||
<String, dynamic>{
|
||||
'hasNextPage': instance.hasNextPage,
|
||||
'endCursor': instance.endCursor,
|
||||
};
|
||||
|
||||
GithubRepositoriesRepository _$GithubRepositoriesRepositoryFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesRepository()
|
||||
..owner = json['owner'] == null
|
||||
? null
|
||||
: GithubRepositoriesRepositoryOwner.fromJson(
|
||||
json['owner'] as Map<String, dynamic>)
|
||||
..name = json['name'] as String
|
||||
..description = json['description'] as String
|
||||
..isPrivate = json['isPrivate'] as bool
|
||||
..isFork = json['isFork'] as bool
|
||||
..stargazers = json['stargazers'] == null
|
||||
? null
|
||||
: GithubRepositoriesStargazerConnection.fromJson(
|
||||
json['stargazers'] as Map<String, dynamic>)
|
||||
..forks = json['forks'] == null
|
||||
? null
|
||||
: GithubRepositoriesRepositoryConnection.fromJson(
|
||||
json['forks'] as Map<String, dynamic>)
|
||||
..primaryLanguage = json['primaryLanguage'] == null
|
||||
? null
|
||||
: GithubRepositoriesLanguage.fromJson(
|
||||
json['primaryLanguage'] as Map<String, dynamic>)
|
||||
..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesRepositoryToJson(
|
||||
GithubRepositoriesRepository instance) =>
|
||||
<String, dynamic>{
|
||||
'owner': instance.owner?.toJson(),
|
||||
'name': instance.name,
|
||||
'description': instance.description,
|
||||
'isPrivate': instance.isPrivate,
|
||||
'isFork': instance.isFork,
|
||||
'stargazers': instance.stargazers?.toJson(),
|
||||
'forks': instance.forks?.toJson(),
|
||||
'primaryLanguage': instance.primaryLanguage?.toJson(),
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesStargazerConnection
|
||||
_$GithubRepositoriesStargazerConnectionFromJson(Map<String, dynamic> json) {
|
||||
return GithubRepositoriesStargazerConnection()
|
||||
..totalCount = json['totalCount'] as int;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesStargazerConnectionToJson(
|
||||
GithubRepositoriesStargazerConnection instance) =>
|
||||
<String, dynamic>{
|
||||
'totalCount': instance.totalCount,
|
||||
};
|
||||
|
||||
GithubRepositoriesLanguage _$GithubRepositoriesLanguageFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesLanguage()
|
||||
..color = json['color'] as String
|
||||
..name = json['name'] as String
|
||||
..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesLanguageToJson(
|
||||
GithubRepositoriesLanguage instance) =>
|
||||
<String, dynamic>{
|
||||
'color': instance.color,
|
||||
'name': instance.name,
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesNode _$GithubRepositoriesNodeFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesNode()..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesNodeToJson(
|
||||
GithubRepositoriesNode instance) =>
|
||||
<String, dynamic>{
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesPinnableItem _$GithubRepositoriesPinnableItemFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesPinnableItem();
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesPinnableItemToJson(
|
||||
GithubRepositoriesPinnableItem instance) =>
|
||||
<String, dynamic>{};
|
||||
|
||||
GithubRepositoriesProjectOwner _$GithubRepositoriesProjectOwnerFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesProjectOwner()
|
||||
..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesProjectOwnerToJson(
|
||||
GithubRepositoriesProjectOwner instance) =>
|
||||
<String, dynamic>{
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesRegistryPackageOwner
|
||||
_$GithubRepositoriesRegistryPackageOwnerFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesRegistryPackageOwner()
|
||||
..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesRegistryPackageOwnerToJson(
|
||||
GithubRepositoriesRegistryPackageOwner instance) =>
|
||||
<String, dynamic>{
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesRegistryPackageSearch
|
||||
_$GithubRepositoriesRegistryPackageSearchFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesRegistryPackageSearch()
|
||||
..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesRegistryPackageSearchToJson(
|
||||
GithubRepositoriesRegistryPackageSearch instance) =>
|
||||
<String, dynamic>{
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesSubscribable _$GithubRepositoriesSubscribableFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesSubscribable()
|
||||
..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesSubscribableToJson(
|
||||
GithubRepositoriesSubscribable instance) =>
|
||||
<String, dynamic>{
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesStarrable _$GithubRepositoriesStarrableFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesStarrable()
|
||||
..stargazers = json['stargazers'] == null
|
||||
? null
|
||||
: GithubRepositoriesStargazerConnection.fromJson(
|
||||
json['stargazers'] as Map<String, dynamic>)
|
||||
..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesStarrableToJson(
|
||||
GithubRepositoriesStarrable instance) =>
|
||||
<String, dynamic>{
|
||||
'stargazers': instance.stargazers?.toJson(),
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesUniformResourceLocatable
|
||||
_$GithubRepositoriesUniformResourceLocatableFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesUniformResourceLocatable()
|
||||
..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesUniformResourceLocatableToJson(
|
||||
GithubRepositoriesUniformResourceLocatable instance) =>
|
||||
<String, dynamic>{
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesRepositoryInfo _$GithubRepositoriesRepositoryInfoFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesRepositoryInfo()
|
||||
..owner = json['owner'] == null
|
||||
? null
|
||||
: GithubRepositoriesRepositoryOwner.fromJson(
|
||||
json['owner'] as Map<String, dynamic>)
|
||||
..name = json['name'] as String
|
||||
..description = json['description'] as String
|
||||
..isPrivate = json['isPrivate'] as bool
|
||||
..isFork = json['isFork'] as bool
|
||||
..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesRepositoryInfoToJson(
|
||||
GithubRepositoriesRepositoryInfo instance) =>
|
||||
<String, dynamic>{
|
||||
'owner': instance.owner?.toJson(),
|
||||
'name': instance.name,
|
||||
'description': instance.description,
|
||||
'isPrivate': instance.isPrivate,
|
||||
'isFork': instance.isFork,
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesStarredRepositoryConnection
|
||||
_$GithubRepositoriesStarredRepositoryConnectionFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesStarredRepositoryConnection()
|
||||
..pageInfo = json['pageInfo'] == null
|
||||
? null
|
||||
: GithubRepositoriesPageInfo.fromJson(
|
||||
json['pageInfo'] as Map<String, dynamic>)
|
||||
..nodes = (json['nodes'] as List)
|
||||
?.map((e) => e == null
|
||||
? null
|
||||
: GithubRepositoriesRepository.fromJson(e as Map<String, dynamic>))
|
||||
?.toList();
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesStarredRepositoryConnectionToJson(
|
||||
GithubRepositoriesStarredRepositoryConnection instance) =>
|
||||
<String, dynamic>{
|
||||
'pageInfo': instance.pageInfo?.toJson(),
|
||||
'nodes': instance.nodes?.map((e) => e?.toJson())?.toList(),
|
||||
};
|
||||
|
||||
GithubRepositoriesAuditEntryActor _$GithubRepositoriesAuditEntryActorFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesAuditEntryActor();
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesAuditEntryActorToJson(
|
||||
GithubRepositoriesAuditEntryActor instance) =>
|
||||
<String, dynamic>{};
|
||||
|
||||
GithubRepositoriesActor _$GithubRepositoriesActorFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesActor()..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesActorToJson(
|
||||
GithubRepositoriesActor instance) =>
|
||||
<String, dynamic>{
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesProfileOwner _$GithubRepositoriesProfileOwnerFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesProfileOwner()
|
||||
..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesProfileOwnerToJson(
|
||||
GithubRepositoriesProfileOwner instance) =>
|
||||
<String, dynamic>{
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesSponsorable _$GithubRepositoriesSponsorableFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesSponsorable()
|
||||
..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesSponsorableToJson(
|
||||
GithubRepositoriesSponsorable instance) =>
|
||||
<String, dynamic>{
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesOrganization _$GithubRepositoriesOrganizationFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesOrganization()
|
||||
..pinnableItems = json['pinnableItems'] == null
|
||||
? null
|
||||
: GithubRepositoriesPinnableItemConnection.fromJson(
|
||||
json['pinnableItems'] as Map<String, dynamic>)
|
||||
..resolveType = json['__typename'] as String
|
||||
..login = json['login'] as String
|
||||
..avatarUrl = json['avatarUrl'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesOrganizationToJson(
|
||||
GithubRepositoriesOrganization instance) =>
|
||||
<String, dynamic>{
|
||||
'pinnableItems': instance.pinnableItems?.toJson(),
|
||||
'__typename': instance.resolveType,
|
||||
'login': instance.login,
|
||||
'avatarUrl': instance.avatarUrl,
|
||||
};
|
||||
|
||||
GithubRepositoriesPinnableItemConnection
|
||||
_$GithubRepositoriesPinnableItemConnectionFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesPinnableItemConnection()
|
||||
..pageInfo = json['pageInfo'] == null
|
||||
? null
|
||||
: GithubRepositoriesPageInfo.fromJson(
|
||||
json['pageInfo'] as Map<String, dynamic>)
|
||||
..nodes = (json['nodes'] as List)
|
||||
?.map((e) => e == null
|
||||
? null
|
||||
: GithubRepositoriesPinnableItem.fromJson(
|
||||
e as Map<String, dynamic>))
|
||||
?.toList();
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesPinnableItemConnectionToJson(
|
||||
GithubRepositoriesPinnableItemConnection instance) =>
|
||||
<String, dynamic>{
|
||||
'pageInfo': instance.pageInfo?.toJson(),
|
||||
'nodes': instance.nodes?.map((e) => e?.toJson())?.toList(),
|
||||
};
|
||||
|
||||
GithubRepositoriesMemberStatusable _$GithubRepositoriesMemberStatusableFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesMemberStatusable()
|
||||
..resolveType = json['__typename'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesMemberStatusableToJson(
|
||||
GithubRepositoriesMemberStatusable instance) =>
|
||||
<String, dynamic>{
|
||||
'__typename': instance.resolveType,
|
||||
};
|
||||
|
||||
GithubRepositoriesArguments _$GithubRepositoriesArgumentsFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return GithubRepositoriesArguments(
|
||||
owner: json['owner'] as String,
|
||||
after: json['after'] as String,
|
||||
isStar: json['isStar'] as bool,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GithubRepositoriesArgumentsToJson(
|
||||
GithubRepositoriesArguments instance) =>
|
||||
<String, dynamic>{
|
||||
'owner': instance.owner,
|
||||
'after': instance.after,
|
||||
'isStar': instance.isStar,
|
||||
};
|
102
lib/graphql/github_repositories.graphql
Normal file
102
lib/graphql/github_repositories.graphql
Normal file
@ -0,0 +1,102 @@
|
||||
query($owner: String!, $after: String, $isStar: Boolean!) {
|
||||
repositoryOwner(login: $owner) {
|
||||
__typename
|
||||
login
|
||||
avatarUrl
|
||||
... on User {
|
||||
repositories(
|
||||
first: 30
|
||||
after: $after
|
||||
orderBy: { field: UPDATED_AT, direction: DESC }
|
||||
) @skip(if: $isStar) {
|
||||
totalCount # TODO:
|
||||
pageInfo {
|
||||
hasNextPage
|
||||
endCursor
|
||||
}
|
||||
nodes {
|
||||
owner {
|
||||
login
|
||||
avatarUrl
|
||||
}
|
||||
name
|
||||
description
|
||||
isPrivate
|
||||
isFork
|
||||
stargazers {
|
||||
totalCount
|
||||
}
|
||||
forks {
|
||||
totalCount
|
||||
}
|
||||
primaryLanguage {
|
||||
color
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
starredRepositories(
|
||||
first: 30
|
||||
after: $after
|
||||
orderBy: { field: STARRED_AT, direction: DESC }
|
||||
) @include(if: $isStar) {
|
||||
pageInfo {
|
||||
hasNextPage
|
||||
endCursor
|
||||
}
|
||||
nodes {
|
||||
owner {
|
||||
login
|
||||
avatarUrl
|
||||
}
|
||||
name
|
||||
description
|
||||
isPrivate
|
||||
isFork
|
||||
stargazers {
|
||||
totalCount
|
||||
}
|
||||
forks {
|
||||
totalCount
|
||||
}
|
||||
primaryLanguage {
|
||||
color
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
... on Organization {
|
||||
pinnableItems(first: 30, after: $after, types: [REPOSITORY])
|
||||
@skip(if: $isStar) {
|
||||
__typename
|
||||
pageInfo {
|
||||
hasNextPage
|
||||
endCursor
|
||||
}
|
||||
nodes {
|
||||
... on Repository {
|
||||
owner {
|
||||
login
|
||||
avatarUrl
|
||||
}
|
||||
name
|
||||
description
|
||||
isPrivate
|
||||
isFork
|
||||
stargazers {
|
||||
totalCount
|
||||
}
|
||||
forks {
|
||||
totalCount
|
||||
}
|
||||
primaryLanguage {
|
||||
color
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,81 +1,82 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:git_touch/graphql/github_repositories.dart';
|
||||
import 'package:git_touch/scaffolds/list_stateful.dart';
|
||||
import 'package:git_touch/screens/repository.dart';
|
||||
import 'package:git_touch/utils/utils.dart';
|
||||
import 'package:git_touch/widgets/app_bar_title.dart';
|
||||
import 'package:git_touch/models/auth.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../utils/utils.dart';
|
||||
import 'package:git_touch/widgets/repository_item.dart';
|
||||
|
||||
class RepositoriesScreen extends StatelessWidget {
|
||||
final String owner;
|
||||
final String title;
|
||||
final String scope;
|
||||
final String scopeParams;
|
||||
final String resource;
|
||||
final String extraFilter;
|
||||
final String queryChunk;
|
||||
final bool isStar;
|
||||
|
||||
RepositoriesScreen(String login)
|
||||
RepositoriesScreen(this.owner)
|
||||
: title = 'Repositories',
|
||||
scope = 'user',
|
||||
scopeParams = 'login: "$login"',
|
||||
resource = 'repositories',
|
||||
extraFilter = ', orderBy: {field: UPDATED_AT, direction: DESC}',
|
||||
queryChunk = repoChunk;
|
||||
RepositoriesScreen.stars(String login)
|
||||
isStar = false;
|
||||
RepositoriesScreen.stars(this.owner)
|
||||
: title = 'Stars',
|
||||
scope = 'user',
|
||||
scopeParams = 'login: "$login"',
|
||||
resource = 'starredRepositories',
|
||||
extraFilter = ', orderBy: {field: STARRED_AT, direction: DESC}',
|
||||
queryChunk = repoChunk;
|
||||
RepositoriesScreen.ofOrganization(String login)
|
||||
: title = 'Repositories',
|
||||
scope = 'organization',
|
||||
scopeParams = 'login: "$login"',
|
||||
resource = 'pinnableItems',
|
||||
extraFilter = ', types: [REPOSITORY]',
|
||||
queryChunk = '... on Repository { $repoChunk }';
|
||||
RepositoriesScreen.forks(String owner, String name)
|
||||
: title = 'Forks',
|
||||
scope = 'repository',
|
||||
scopeParams = 'owner: "$owner", name: "$name"',
|
||||
resource = 'forks',
|
||||
extraFilter = ', orderBy: {field: CREATED_AT, direction: DESC}',
|
||||
queryChunk = repoChunk;
|
||||
isStar = true;
|
||||
|
||||
Future<ListPayload> _queryRepos(BuildContext context, [String cursor]) async {
|
||||
var cursorChunk = cursor == null ? '' : ', after: "$cursor"';
|
||||
var data = await Provider.of<AuthModel>(context).query('''
|
||||
{
|
||||
$scope($scopeParams) {
|
||||
$resource(first: $pageSize$cursorChunk$extraFilter) {
|
||||
pageInfo {
|
||||
hasNextPage
|
||||
endCursor
|
||||
}
|
||||
nodes {
|
||||
$queryChunk
|
||||
}
|
||||
Future<ListPayload<GithubRepositoriesRepository, String>> _query(
|
||||
BuildContext context,
|
||||
[String cursor]) async {
|
||||
final res = await Provider.of<AuthModel>(context).gqlClient.execute(
|
||||
GithubRepositoriesQuery(
|
||||
variables: GithubRepositoriesArguments(
|
||||
owner: owner, isStar: isStar, after: cursor)));
|
||||
final data = res.data.repositoryOwner;
|
||||
switch (data.resolveType) {
|
||||
case 'User':
|
||||
final user = data as GithubRepositoriesUser;
|
||||
if (isStar) {
|
||||
return ListPayload(
|
||||
cursor: user.starredRepositories.pageInfo.endCursor,
|
||||
items: user.starredRepositories.nodes,
|
||||
hasMore: user.starredRepositories.pageInfo.hasNextPage,
|
||||
);
|
||||
} else {
|
||||
return ListPayload(
|
||||
cursor: user.repositories.pageInfo.endCursor,
|
||||
items: user.repositories.nodes,
|
||||
hasMore: user.repositories.pageInfo.hasNextPage,
|
||||
);
|
||||
}
|
||||
break;
|
||||
case 'Organization':
|
||||
final org = data as GithubRepositoriesOrganization;
|
||||
return ListPayload(
|
||||
cursor: org.pinnableItems.pageInfo.endCursor,
|
||||
items: org.pinnableItems.nodes,
|
||||
hasMore: org.pinnableItems.pageInfo.hasNextPage,
|
||||
);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
''');
|
||||
var repo = data[scope][resource];
|
||||
|
||||
return ListPayload(
|
||||
cursor: repo["pageInfo"]["endCursor"],
|
||||
items: repo["nodes"],
|
||||
hasMore: repo['pageInfo']['hasNextPage'],
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListStatefulScaffold(
|
||||
title: AppBarTitle(title),
|
||||
onRefresh: () => _queryRepos(context),
|
||||
onLoadMore: (cursor) => _queryRepos(context, cursor),
|
||||
itemBuilder: (payload) => RepositoryItem(payload),
|
||||
);
|
||||
return ListStatefulScaffold<GithubRepositoriesRepository, String>(
|
||||
title: AppBarTitle(title),
|
||||
onRefresh: () => _query(context),
|
||||
onLoadMore: (cursor) => _query(context, cursor),
|
||||
itemBuilder: (item) {
|
||||
return RepositoryItem.raw(
|
||||
item.owner.login,
|
||||
item.owner.avatarUrl,
|
||||
item.name,
|
||||
item.description,
|
||||
Octicons.repo,
|
||||
item.stargazers.totalCount,
|
||||
item.forks.totalCount,
|
||||
item.primaryLanguage?.name,
|
||||
item.primaryLanguage?.color,
|
||||
(_) => RepositoryScreen(item.owner.login, item.name),
|
||||
[],
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -154,8 +154,8 @@ class RepositoryScreen extends StatelessWidget {
|
||||
EntryItem(
|
||||
count: repo.forks.totalCount,
|
||||
text: 'Forks',
|
||||
screenBuilder: (context) =>
|
||||
RepositoriesScreen.forks(owner, name),
|
||||
// screenBuilder: (context) =>
|
||||
// RepositoriesScreen.forks(owner, name), TODO:
|
||||
),
|
||||
],
|
||||
),
|
||||
|
@ -183,8 +183,7 @@ class UserScreen extends StatelessWidget {
|
||||
EntryItem(
|
||||
count: payload.pinnableItems.totalCount,
|
||||
text: 'Repositories',
|
||||
screenBuilder: (context) =>
|
||||
RepositoriesScreen.ofOrganization(payload.login),
|
||||
screenBuilder: (context) => RepositoriesScreen(payload.login),
|
||||
),
|
||||
EntryItem(
|
||||
count: payload.membersWithRole.totalCount,
|
||||
|
Loading…
x
Reference in New Issue
Block a user