in src/components/activity/activity__create-model.ts [17:114]
function getStream(activityGroups: ActivityGroup[]): ActivityGroup[] {
const createGroup = (event: Activity, timestamp: number, authorGroup: ActivityAuthorGroup | null) => {
const streamGroup: ActivityGroup = {
$type: ResourceTypes.EVENT_GROUP,
timestamp: timestamp,
events: [],
authorGroup,
author: event?.author,
work: null,
key: '',
comment: null,
vcs: null,
target: null,
id: event.id,
};
switch (true) {
case isActivityCategory.work(event):
streamGroup.work = event;
streamGroup.key = ActivityCategory.Source.WORK_ITEM;
break;
case isActivityCategory.comment(event):
streamGroup.comment = event;
streamGroup.target = event?.target;
streamGroup.key = ActivityCategory.Source.COMMENT;
break;
case isActivityCategory.vcs(event) ||
isActivityCategory.pullRequest(event):
streamGroup.vcs = event;
streamGroup.target = event?.target;
streamGroup.key = ActivityCategory.Source.VCS_ITEM;
break;
default:
streamGroup.key = ActivityCategory.Source.HISTORY;
}
return streamGroup;
};
const streamDataModel: ActivityGroup[] = [];
const filterOutUnnecessaryEvents = (event: Activity) =>
!isActivityCategory.voters(event) &&
!isActivityCategory.totalVotes(event) &&
!isActivityCategory.commentText(event);
activityGroups.forEach(rawGroup => {
let currentGroup: ActivityGroup;
rawGroup.events = (rawGroup.events || []).filter(filterOutUnnecessaryEvents);
const events = rawGroup.events;
if (!events || !events.length) {
return;
}
let historyChanges: Activity[] = [];
let isFirst = true;
events.forEach(event => {
if (
isActivityCategory.comment(event) ||
isActivityCategory.work(event) ||
isActivityCategory.vcs(event) ||
isActivityCategory.pullRequest(event)
) {
if (currentGroup && historyChanges.length && !isFirst) {
currentGroup.events = historyChanges.slice(0);
historyChanges = [];
}
currentGroup = createGroup(
event,
rawGroup.timestamp,
rawGroup.authorGroup,
);
isFirst = false;
streamDataModel.push(currentGroup);
} else {
historyChanges.push(event);
}
});
if (currentGroup) {
if (historyChanges.length) {
currentGroup.events = currentGroup.events.concat(historyChanges);
}
} else {
if (isComment(rawGroup)) {
rawGroup.comment = {...rawGroup.events[0]};
}
streamDataModel.push(rawGroup);
}
});
return streamDataModel.map(mergeAttachmentEvents);
}