-
Notifications
You must be signed in to change notification settings - Fork 285
Expand file tree
/
Copy pathMetricGroup.tsx
More file actions
96 lines (86 loc) · 2.69 KB
/
MetricGroup.tsx
File metadata and controls
96 lines (86 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import { type FC, useContext } from 'react';
import {
CommentIcon,
IssueOpenedIcon,
MilestoneIcon,
TagIcon,
} from '@primer/octicons-react';
import { Box } from '@primer/react';
import { AppContext } from '../../context/App';
import { IconColor } from '../../types';
import type { Notification } from '../../typesGitHub';
import { getPullRequestReviewIcon } from '../../utils/icons';
import { MetricPill } from './MetricPill';
interface IMetricGroup {
notification: Notification;
}
export const MetricGroup: FC<IMetricGroup> = ({
notification,
}: IMetricGroup) => {
const { settings } = useContext(AppContext);
const commentsPillDescription = `${notification.subject.comments} ${
notification.subject.comments > 1 ? 'comments' : 'comment'
}`;
const labelsPillDescription = notification.subject.labels
?.map((label) => `🏷️ ${label}`)
.join('\n');
const linkedIssuesPillDescription = `Linked to ${
notification.subject.linkedIssues?.length > 1 ? 'issues' : 'issue'
} ${notification.subject?.linkedIssues?.join(', ')}`;
return (
settings.showPills && (
<Box className="flex gap-1">
{notification.subject?.linkedIssues?.length > 0 && (
<MetricPill
color={IconColor.GRAY}
icon={IssueOpenedIcon}
metric={notification.subject.linkedIssues.length}
title={linkedIssuesPillDescription}
/>
)}
{notification.subject.reviews?.map((review) => {
const icon = getPullRequestReviewIcon(review);
if (!icon) {
return null;
}
return (
<MetricPill
color={icon.color}
icon={icon.type}
key={review.state}
metric={review.users.length}
title={icon.description}
/>
);
})}
{notification.subject?.comments > 0 && (
<MetricPill
color={IconColor.GRAY}
icon={CommentIcon}
metric={notification.subject.comments}
title={commentsPillDescription}
/>
)}
{notification.subject?.labels?.length > 0 && (
<MetricPill
color={IconColor.GRAY}
icon={TagIcon}
metric={notification.subject.labels.length}
title={labelsPillDescription}
/>
)}
{notification.subject.milestone && (
<MetricPill
color={
notification.subject.milestone.state === 'open'
? IconColor.GREEN
: IconColor.RED
}
icon={MilestoneIcon}
title={notification.subject.milestone.title}
/>
)}
</Box>
)
);
};