mirror of
https://github.com/git-touch/git-touch
synced 2025-03-25 15:40:09 +01:00
feat(bb): commits screen
This commit is contained in:
parent
8f9ed5469d
commit
f856a1bfee
@ -74,3 +74,23 @@ class BbTree {
|
||||
BbTree();
|
||||
factory BbTree.fromJson(Map<String, dynamic> json) => _$BbTreeFromJson(json);
|
||||
}
|
||||
|
||||
@JsonSerializable(fieldRename: FieldRename.snake)
|
||||
class BbCommit {
|
||||
String message;
|
||||
DateTime date;
|
||||
String hash;
|
||||
BbCommitAuthor author;
|
||||
BbCommit();
|
||||
factory BbCommit.fromJson(Map<String, dynamic> json) =>
|
||||
_$BbCommitFromJson(json);
|
||||
}
|
||||
|
||||
@JsonSerializable(fieldRename: FieldRename.snake)
|
||||
class BbCommitAuthor {
|
||||
String raw;
|
||||
BbRepoOwner user;
|
||||
BbCommitAuthor();
|
||||
factory BbCommitAuthor.fromJson(Map<String, dynamic> json) =>
|
||||
_$BbCommitAuthorFromJson(json);
|
||||
}
|
||||
|
@ -132,3 +132,35 @@ Map<String, dynamic> _$BbTreeToJson(BbTree instance) => <String, dynamic>{
|
||||
'size': instance.size,
|
||||
'links': instance.links,
|
||||
};
|
||||
|
||||
BbCommit _$BbCommitFromJson(Map<String, dynamic> json) {
|
||||
return BbCommit()
|
||||
..message = json['message'] as String
|
||||
..date =
|
||||
json['date'] == null ? null : DateTime.parse(json['date'] as String)
|
||||
..hash = json['hash'] as String
|
||||
..author = json['author'] == null
|
||||
? null
|
||||
: BbCommitAuthor.fromJson(json['author'] as Map<String, dynamic>);
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$BbCommitToJson(BbCommit instance) => <String, dynamic>{
|
||||
'message': instance.message,
|
||||
'date': instance.date?.toIso8601String(),
|
||||
'hash': instance.hash,
|
||||
'author': instance.author,
|
||||
};
|
||||
|
||||
BbCommitAuthor _$BbCommitAuthorFromJson(Map<String, dynamic> json) {
|
||||
return BbCommitAuthor()
|
||||
..raw = json['raw'] as String
|
||||
..user = json['user'] == null
|
||||
? null
|
||||
: BbRepoOwner.fromJson(json['user'] as Map<String, dynamic>);
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$BbCommitAuthorToJson(BbCommitAuthor instance) =>
|
||||
<String, dynamic>{
|
||||
'raw': instance.raw,
|
||||
'user': instance.user,
|
||||
};
|
||||
|
@ -1,4 +1,5 @@
|
||||
import 'package:fluro/fluro.dart';
|
||||
import 'package:git_touch/screens/bb_commits.dart';
|
||||
import 'package:git_touch/screens/bb_object.dart';
|
||||
import 'package:git_touch/screens/bb_repo.dart';
|
||||
import 'package:git_touch/screens/bb_user.dart';
|
||||
@ -242,6 +243,7 @@ class BitbucketRouter {
|
||||
BitbucketRouter.user,
|
||||
BitbucketRouter.repo,
|
||||
BitbucketRouter.object,
|
||||
BitbucketRouter.commits,
|
||||
];
|
||||
static final user = RouterScreen(
|
||||
'/:login',
|
||||
@ -261,4 +263,8 @@ class BitbucketRouter {
|
||||
path: params['path']?.first,
|
||||
),
|
||||
);
|
||||
static final commits = RouterScreen(
|
||||
'/:owner/:name/commits/:ref',
|
||||
(_, p) =>
|
||||
BbCommitsScreen(p['owner'].first, p['name'].first, p['ref'].first));
|
||||
}
|
||||
|
48
lib/screens/bb_commits.dart
Normal file
48
lib/screens/bb_commits.dart
Normal file
@ -0,0 +1,48 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:git_touch/models/auth.dart';
|
||||
import 'package:git_touch/models/bitbucket.dart';
|
||||
import 'package:git_touch/scaffolds/list_stateful.dart';
|
||||
import 'package:git_touch/widgets/app_bar_title.dart';
|
||||
import 'package:git_touch/widgets/commit_item.dart';
|
||||
import 'package:git_touch/widgets/user_item.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:timeago/timeago.dart' as timeago;
|
||||
|
||||
class BbCommitsScreen extends StatelessWidget {
|
||||
final String owner;
|
||||
final String name;
|
||||
final String ref;
|
||||
BbCommitsScreen(this.owner, this.name, this.ref);
|
||||
|
||||
Future<ListPayload<BbCommit, String>> _query(BuildContext context,
|
||||
[String nextUrl]) async {
|
||||
final auth = Provider.of<AuthModel>(context);
|
||||
final res = await auth
|
||||
.fetchBbWithPage(nextUrl ?? '/repositories/$owner/$name/commits/$ref');
|
||||
return ListPayload(
|
||||
cursor: res.cursor,
|
||||
hasMore: res.hasMore,
|
||||
items: <BbCommit>[
|
||||
for (var v in res.data) BbCommit.fromJson(v),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ListStatefulScaffold<BbCommit, String>(
|
||||
title: AppBarTitle('Commits'),
|
||||
onRefresh: () => _query(context),
|
||||
onLoadMore: (page) => _query(context, page),
|
||||
itemBuilder: (v) {
|
||||
return CommitItem(
|
||||
url: '/bitbucket/$owner/$name/commits/$ref',
|
||||
avatarUrl: v.author.user?.avatarUrl,
|
||||
author: v.author.raw.replaceFirst(RegExp(r' <.*>'), ''),
|
||||
createdAt: v.date,
|
||||
message: v.message,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
@ -60,7 +60,7 @@ class BbRepoScreen extends StatelessWidget {
|
||||
TableViewItem(
|
||||
leftIconData: Octicons.history,
|
||||
text: Text('Commits'),
|
||||
url: '/bitbucket/$owner/$name/commits',
|
||||
url: '/bitbucket/$owner/$name/commits/${p.mainbranch.name}',
|
||||
),
|
||||
],
|
||||
),
|
||||
|
Loading…
x
Reference in New Issue
Block a user