diff --git a/lib/screens/issue.dart b/lib/screens/issue.dart index 05612f8..734de75 100644 --- a/lib/screens/issue.dart +++ b/lib/screens/issue.dart @@ -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 diff --git a/lib/widgets/comment_item.dart b/lib/widgets/comment_item.dart index 55086f9..ef569f2 100644 --- a/lib/widgets/comment_item.dart +++ b/lib/widgets/comment_item.dart @@ -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 payload; @@ -11,35 +22,63 @@ class CommentItem extends StatelessWidget { @override Widget build(BuildContext context) { - return Column(children: [ - Row(children: [ - Avatar( - url: payload['author']['avatarUrl'], - size: 16, - login: payload['author']['login'], - ), - Padding(padding: EdgeInsets.only(left: 6)), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - 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: [ + Row(children: [ + Avatar( + url: payload['author']['avatarUrl'], + size: 16, + login: payload['author']['login'], + ), + Padding(padding: EdgeInsets.only(left: 6)), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + 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(), ), - ), - ]); + ], + ); } }