Skip to content

Commit d1d2e9e

Browse files
committed
feat(gitlab): members screen
1 parent b56111d commit d1d2e9e

File tree

6 files changed

+72
-1
lines changed

6 files changed

+72
-1
lines changed

lib/main.dart

+3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import 'package:git_touch/screens/gitlab_commits.dart';
1515
import 'package:git_touch/screens/gitlab_group.dart';
1616
import 'package:git_touch/screens/gitlab_issue.dart';
1717
import 'package:git_touch/screens/gitlab_issues.dart';
18+
import 'package:git_touch/screens/gitlab_members.dart';
1819
import 'package:git_touch/screens/gitlab_merge_requests.dart';
1920
import 'package:git_touch/screens/gitlab_project.dart';
2021
import 'package:git_touch/screens/gitlab_tree.dart';
@@ -79,6 +80,8 @@ void main() async {
7980
gitlabIssuesRouter,
8081
gitlabMergeRequestsRouter,
8182
gitlabCommitsRouter,
83+
gitlabProjectMembersRouter,
84+
gitlabGroupMembersRouter,
8285
giteaUserRouter,
8386
giteaRepoRouter,
8487
giteaObjectRouter,

lib/models/gitlab.dart

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ class GitlabUser {
1010
String avatarUrl;
1111
String bio;
1212
DateTime createdAt;
13+
int accessLevel;
1314
GitlabUser();
1415
factory GitlabUser.fromJson(Map<String, dynamic> json) =>
1516
_$GitlabUserFromJson(json);

lib/models/gitlab.g.dart

+3-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/screens/gitlab_group.dart

+1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class GitlabGroupScreen extends StatelessWidget {
5151
EntryItem(
5252
count: data.item2,
5353
text: 'Members',
54+
url: '/gitlab/groups/$id/members',
5455
),
5556
]),
5657
CommonStyle.border,

lib/screens/gitlab_members.dart

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:git_touch/models/auth.dart';
3+
import 'package:git_touch/models/gitlab.dart';
4+
import 'package:git_touch/scaffolds/list_stateful.dart';
5+
import 'package:git_touch/utils/utils.dart';
6+
import 'package:git_touch/widgets/app_bar_title.dart';
7+
import 'package:git_touch/widgets/user_item.dart';
8+
import 'package:provider/provider.dart';
9+
10+
final gitlabProjectMembersRouter = RouterScreen(
11+
'/gitlab/projects/:id/members',
12+
(context, parameters) =>
13+
GitlabMembers(int.parse(parameters['id'].first), 'projects'));
14+
15+
final gitlabGroupMembersRouter = RouterScreen(
16+
'/gitlab/groups/:id/members',
17+
(context, parameters) =>
18+
GitlabMembers(int.parse(parameters['id'].first), 'groups'));
19+
20+
class GitlabMembers extends StatelessWidget {
21+
final int id;
22+
final String type;
23+
GitlabMembers(this.id, this.type);
24+
25+
Future<ListPayload<GitlabUser, int>> _query(BuildContext context,
26+
[int page = 1]) async {
27+
final auth = Provider.of<AuthModel>(context);
28+
final res = await auth.fetchGitlabWithPage('/$type/$id/members?page=$page');
29+
return ListPayload(
30+
cursor: res.cursor,
31+
hasMore: res.hasMore,
32+
items: <GitlabUser>[
33+
for (var v in res.data) GitlabUser.fromJson(v),
34+
],
35+
);
36+
}
37+
38+
// https://docs.gitlab.com/ee/api/access_requests.html#valid-access-levels
39+
static const accessLevelMap = {
40+
10: 'Guest',
41+
20: 'Reporter',
42+
30: 'Developer',
43+
40: 'Maintainer',
44+
50: 'Owner',
45+
};
46+
47+
@override
48+
Widget build(BuildContext context) {
49+
return ListStatefulScaffold<GitlabUser, int>(
50+
title: AppBarTitle('Members'),
51+
onRefresh: () => _query(context),
52+
onLoadMore: (page) => _query(context, page),
53+
itemBuilder: (v) {
54+
return UserItem(
55+
avatarUrl: v.avatarUrl,
56+
login: v.username,
57+
bio: Text(accessLevelMap[v.accessLevel] ?? ''),
58+
url: '/gitlab/user/${v.id}',
59+
);
60+
},
61+
);
62+
}
63+
}

lib/screens/gitlab_project.dart

+1
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ class GitlabProjectScreen extends StatelessWidget {
9696
EntryItem(
9797
count: t.item4,
9898
text: 'Members',
99+
url: '/gitlab/projects/$id/members',
99100
),
100101
EntryItem(
101102
count: p.starCount,

0 commit comments

Comments
 (0)