import 'package:ferry/ferry.dart'; import 'package:flutter/widgets.dart'; import 'package:git_touch/graphql/__generated__/github.data.gql.dart'; import 'package:git_touch/graphql/__generated__/github.req.gql.dart'; import 'package:git_touch/graphql/__generated__/github.var.gql.dart'; import 'package:git_touch/models/auth.dart'; import 'package:git_touch/scaffolds/list_stateful.dart'; import 'package:git_touch/widgets/app_bar_title.dart'; import 'package:git_touch/widgets/repository_item.dart'; import 'package:provider/provider.dart'; import 'package:timeago/timeago.dart' as timeago; class GhRepos extends StatelessWidget { final String login; const GhRepos(this.login); @override Widget build(BuildContext context) { return ListStatefulScaffold( title: const AppBarTitle('Repositories'), fetch: (cursor) async { final auth = context.read(); final req = GReposReq((b) { b.vars.login = login; b.vars.after = cursor; }); final OperationResponse res = await auth.gqlClient.request(req).first; final p = res.data!.repositoryOwner!.repositories; return ListPayload( cursor: p.pageInfo.endCursor, hasMore: p.pageInfo.hasNextPage, items: p.nodes!, ); }, itemBuilder: (p) { return RepositoryItem.gql(p, note: 'Updated ${timeago.format(p.updatedAt)}'); }, ); } } class GhStars extends StatelessWidget { final String login; const GhStars(this.login); @override Widget build(BuildContext context) { return ListStatefulScaffold( title: const AppBarTitle('Stars'), fetch: (cursor) async { final auth = context.read(); final req = GStarsReq((b) { b.vars.login = login; b.vars.after = cursor; }); final OperationResponse res = await auth.gqlClient.request(req).first; final p = res.data!.user!.starredRepositories; return ListPayload( cursor: p.pageInfo.endCursor, hasMore: p.pageInfo.hasNextPage, items: p.nodes!, ); }, itemBuilder: (p) { return RepositoryItem.gql(p, note: 'Updated ${timeago.format(p.updatedAt)}'); }, ); } }