-
Notifications
You must be signed in to change notification settings - Fork 785
/
Copy pathevent-helpers.js
61 lines (53 loc) · 1.77 KB
/
event-helpers.js
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
import differenceInMilliseconds from 'date-fns/difference_in_milliseconds';
export function formatEventsToRender(events = []) {
return events
.filter(({ event }) => event !== 'mentioned' && event !== 'subscribed')
.filter(({ event }, index, list) => {
if (index === 0) {
return true;
}
// Merge events are always followed by a closed event, but we don't
// want to render them.
if (event === 'closed' && list[index - 1].event === 'merged') {
return false;
}
return true;
})
.reduce((results, event, index, list) => {
// Label events are recorded individually, but we want to group them for display
const labelEvents = ['labeled', 'unlabeled'];
const prevEvent = index > 0 ? list[index - 1] : {};
if (
index > 0 &&
labelEvents.includes(event.event) &&
labelEvents.includes(prevEvent.event) &&
differenceInMilliseconds(event.created_at, prevEvent.created_at) <
10000 &&
event.actor.login === prevEvent.actor.login
) {
const labelGroup = results[results.length - 1];
if (event.event === 'labeled') {
labelGroup.labeled.push(event);
} else {
labelGroup.unlabeled.push(event);
}
} else if (labelEvents.includes(event.event)) {
const labelGroup = {
event: 'label-group',
labeled: [],
unlabeled: [],
created_at: event.created_at,
actor: event.actor,
};
if (event.event === 'labeled') {
labelGroup.labeled.push(event);
} else {
labelGroup.unlabeled.push(event);
}
results.push(labelGroup);
} else {
results.push(event);
}
return results;
}, []);
}