From 250b5206625457e464a534fae8522385d2d63b2e Mon Sep 17 00:00:00 2001 From: Rongjian Zhang Date: Mon, 30 Sep 2019 19:55:27 +0800 Subject: [PATCH] feat: repository forks screen --- lib/screens/repositories.dart | 46 +++++++++++++++++++---------------- lib/screens/repository.dart | 4 ++- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/lib/screens/repositories.dart b/lib/screens/repositories.dart index 128592c..21e7391 100644 --- a/lib/screens/repositories.dart +++ b/lib/screens/repositories.dart @@ -7,50 +7,54 @@ import '../utils/utils.dart'; import 'package:git_touch/widgets/repository_item.dart'; class RepositoriesScreen extends StatelessWidget { - final String login; final String title; final String scope; + final String scopeParams; final String resource; - final String extra0; - final String extra1; - final String extra2; + final String extraFilter; + final String queryChunk; - RepositoriesScreen(this.login) + RepositoriesScreen(String login) : title = 'Repositories', scope = 'user', + scopeParams = 'login: "$login"', resource = 'repositories', - extra0 = 'orderBy: {field: UPDATED_AT, direction: DESC}', - extra1 = '', - extra2 = ''; - RepositoriesScreen.stars(this.login) + extraFilter = ', orderBy: {field: UPDATED_AT, direction: DESC}', + queryChunk = repoChunk; + RepositoriesScreen.stars(String login) : title = 'Stars', scope = 'user', + scopeParams = 'login: "$login"', resource = 'starredRepositories', - extra0 = 'orderBy: {field: STARRED_AT, direction: DESC}', - extra1 = '', - extra2 = ''; - RepositoriesScreen.ofOrganization(this.login) + extraFilter = ', orderBy: {field: STARRED_AT, direction: DESC}', + queryChunk = repoChunk; + RepositoriesScreen.ofOrganization(String login) : title = 'Repositories', scope = 'organization', + scopeParams = 'login: "$login"', resource = 'pinnableItems', - extra0 = 'types: [REPOSITORY]', - extra1 = '... on Repository {', - extra2 = '}'; + 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; Future _queryRepos(BuildContext context, [String cursor]) async { var cursorChunk = cursor == null ? '' : ', after: "$cursor"'; var data = await Provider.of(context).query(''' { - $scope(login: "$login") { - $resource(first: $pageSize$cursorChunk, $extra0) { + $scope($scopeParams) { + $resource(first: $pageSize$cursorChunk$extraFilter) { pageInfo { hasNextPage endCursor } nodes { - $extra1 - $repoChunk - $extra2 + $queryChunk } } } diff --git a/lib/screens/repository.dart b/lib/screens/repository.dart index 217f0f8..596bf60 100644 --- a/lib/screens/repository.dart +++ b/lib/screens/repository.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/cupertino.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'; @@ -236,7 +237,8 @@ class RepositoryScreen extends StatelessWidget { EntryItem( count: data['forks']['totalCount'], text: 'Forks', - // screenBuilder: (context) => UsersScreen(), + screenBuilder: (context) => + RepositoriesScreen.forks(owner, name), ), ], ),