diff --git a/lib/router.dart b/lib/router.dart index 9174f21..40e373a 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -4,6 +4,7 @@ import 'package:git_touch/screens/commits.dart'; import 'package:git_touch/screens/gitea_commits.dart'; import 'package:git_touch/screens/gitea_issues.dart'; import 'package:git_touch/screens/gitea_object.dart'; +import 'package:git_touch/screens/gitea_org.dart'; import 'package:git_touch/screens/gitea_repo.dart'; import 'package:git_touch/screens/gitea_user.dart'; import 'package:git_touch/screens/gitlab_blob.dart'; @@ -203,7 +204,9 @@ class GiteaRouter { ]; static final user = RouterScreen( '/:login', - (context, params) => GiteaUserScreen(params['login'].first), + (context, params) => params['org'].first == '1' + ? GiteaOrgScreen(params['login'].first) + : GiteaUserScreen(params['login'].first), ); static final repo = RouterScreen( '/:owner/:name', diff --git a/lib/screens/gitea_org.dart b/lib/screens/gitea_org.dart new file mode 100644 index 0000000..5f5b027 --- /dev/null +++ b/lib/screens/gitea_org.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:git_touch/models/auth.dart'; +import 'package:git_touch/models/gitea.dart'; +import 'package:git_touch/scaffolds/refresh_stateful.dart'; +import 'package:git_touch/utils/utils.dart'; +import 'package:git_touch/widgets/repository_item.dart'; +import 'package:git_touch/widgets/user_header.dart'; +import 'package:provider/provider.dart'; +import 'package:tuple/tuple.dart'; +import 'package:timeago/timeago.dart' as timeago; + +class GiteaOrgScreen extends StatelessWidget { + final String login; + GiteaOrgScreen(this.login); + + @override + Widget build(BuildContext context) { + return RefreshStatefulScaffold>>( + title: Text(login), + fetchData: () async { + final auth = Provider.of(context); + final res = await Future.wait([ + auth.fetchGitea('/orgs/$login'), + auth.fetchGitea('/orgs/$login/repos'), + ]); + return Tuple2( + GiteaOrg.fromJson(res[0]), + [for (var v in res[1]) GiteaRepository.fromJson(v)], + ); + }, + bodyBuilder: (data, _) { + final org = data.item1; + final repos = data.item2; + + return Column( + children: [ + UserHeader( + login: org.username, + avatarUrl: org.avatarUrl, + name: org.fullName, + createdAt: null, + bio: org.description, + ), + CommonStyle.border, + Column( + children: [ + for (var v in repos) + RepositoryItem( + owner: v.owner.login, + avatarUrl: v.owner.avatarUrl, + name: v.name, + description: v.description, + starCount: v.starsCount, + forkCount: v.forksCount, + note: 'Updated ${timeago.format(v.updatedAt)}', + url: '/gitea/${v.owner.login}/${v.name}', + avatarLink: '/gitea/${v.owner.login}', + ) + ], + ) + ], + ); + }, + ); + } +} diff --git a/lib/screens/gitea_orgs.dart b/lib/screens/gitea_orgs.dart index 48246dc..d7e3ccb 100644 --- a/lib/screens/gitea_orgs.dart +++ b/lib/screens/gitea_orgs.dart @@ -30,7 +30,7 @@ class GiteaOrgsScreen extends StatelessWidget { avatarUrl: v.avatarUrl, login: v.username, bio: Text(v.description ?? ''), - url: '', + url: '/gitea/${v.username}?org=1', ); }, );