mirror of
https://github.com/git-touch/git-touch
synced 2025-02-20 21:40:44 +01:00
feat: add reaction emoji to issue screen
This commit is contained in:
parent
a4d00e5a81
commit
af79d33a7f
@ -9,6 +9,15 @@ import '../widgets/comment_item.dart';
|
||||
import '../providers/settings.dart';
|
||||
import '../widgets/action.dart';
|
||||
|
||||
var reactionChunk = emojiMap.entries.map((entry) {
|
||||
var key = entry.key;
|
||||
return '''
|
||||
$key: reactions(content: $key) {
|
||||
totalCount
|
||||
viewerHasReacted
|
||||
}''';
|
||||
}).join('\n');
|
||||
|
||||
/// Screen for issue and pull request
|
||||
class IssueScreen extends StatefulWidget {
|
||||
final int number;
|
||||
@ -53,6 +62,7 @@ author {
|
||||
}
|
||||
closed
|
||||
url
|
||||
$reactionChunk
|
||||
''';
|
||||
|
||||
if (isPullRequest) {
|
||||
@ -78,6 +88,7 @@ __typename
|
||||
login
|
||||
avatarUrl
|
||||
}
|
||||
$reactionChunk
|
||||
}
|
||||
... on Commit {
|
||||
committedDate
|
||||
|
@ -4,6 +4,17 @@ import '../utils/utils.dart';
|
||||
import 'avatar.dart';
|
||||
import 'user_name.dart';
|
||||
|
||||
final emojiMap = {
|
||||
'THUMBS_UP': '👍',
|
||||
'THUMBS_DOWN': '👎',
|
||||
'LAUGH': '😄',
|
||||
'HOORAY': '🎉',
|
||||
'CONFUSED': '😕',
|
||||
'HEART': '❤️',
|
||||
'ROCKET': '🚀',
|
||||
'EYES': '👀'
|
||||
};
|
||||
|
||||
class CommentItem extends StatelessWidget {
|
||||
final Map<String, dynamic> payload;
|
||||
|
||||
@ -11,35 +22,63 @@ class CommentItem extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(children: <Widget>[
|
||||
Row(children: <Widget>[
|
||||
Avatar(
|
||||
url: payload['author']['avatarUrl'],
|
||||
size: 16,
|
||||
login: payload['author']['login'],
|
||||
),
|
||||
Padding(padding: EdgeInsets.only(left: 6)),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
UserName(payload['author']['login']),
|
||||
Padding(padding: EdgeInsets.only(bottom: 2)),
|
||||
Text(
|
||||
TimeAgo.formatFromString(payload['createdAt']),
|
||||
style: TextStyle(color: Colors.black54, fontSize: 13),
|
||||
),
|
||||
],
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Row(children: <Widget>[
|
||||
Avatar(
|
||||
url: payload['author']['avatarUrl'],
|
||||
size: 16,
|
||||
login: payload['author']['login'],
|
||||
),
|
||||
Padding(padding: EdgeInsets.only(left: 6)),
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
UserName(payload['author']['login']),
|
||||
Padding(padding: EdgeInsets.only(bottom: 2)),
|
||||
Text(
|
||||
TimeAgo.formatFromString(payload['createdAt']),
|
||||
style: TextStyle(color: Colors.black54, fontSize: 13),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 12),
|
||||
child: MarkdownBody(
|
||||
data: payload['body'],
|
||||
// styleSheet: MarkdownStyleSheet(code: TextStyle(fontSize: 14)),
|
||||
),
|
||||
),
|
||||
]),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 36, top: 8),
|
||||
child: MarkdownBody(
|
||||
data: payload['body'],
|
||||
// styleSheet: MarkdownStyleSheet(code: TextStyle(fontSize: 14)),
|
||||
Wrap(
|
||||
children: emojiMap.entries
|
||||
.where((entry) => payload[entry.key]['totalCount'] != 0)
|
||||
.map((entry) {
|
||||
var emoji = entry.value;
|
||||
int count = payload[entry.key]['totalCount'];
|
||||
|
||||
return Container(
|
||||
padding: EdgeInsets.all(6),
|
||||
child: RichText(
|
||||
text: TextSpan(
|
||||
style: TextStyle(fontSize: 16),
|
||||
children: [
|
||||
TextSpan(text: emoji),
|
||||
TextSpan(text: ' '),
|
||||
TextSpan(
|
||||
text: count.toString(),
|
||||
style: TextStyle(color: Palette.link),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}).toList(),
|
||||
),
|
||||
),
|
||||
]);
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user