function addMergeMetaDataToActivities()

in src/components/activity/activity__create-model.ts [134:191]


  function addMergeMetaDataToActivities(activities: ActivityGroup[] = []) {
    let currentIndex = activities.length - 1;
    let activity: ActivityGroup | null = null;
    let prevActivity: ActivityGroup | null = null;
    let lastGroup: ActivityGroup | null = {} as ActivityGroup;
    reset();

    while (currentIndex >= 0) {
      activity = activities[currentIndex];
      prevActivity = activities[currentIndex - 1];
      activity.merged = isMergedActivity(activity, prevActivity);

      if (prevActivity) {
        if (activity.merged) {
          prevActivity.root = true;
          delete activity.root;
        } else {
          activity.root = true;
        }
      } else if (!activity.merged) {
        activity.root = true;
      }

      if (lastGroup) {
        activity.lastGroup = true;

        if (!activity.merged && activity.root) {
          lastGroup = null;
        }
      }

      currentIndex--;
    }

    return activities;

    function reset() {
      activities.forEach(it => {
        delete it.root;
        delete it.merged;
        delete it.lastGroup;
      });
    }

    function isMergedActivity(activity: ActivityGroup, prevActivity: ActivityGroup) {
      return !!(
        prevActivity &&
        activity.author.id === prevActivity.author.id &&
        getActivityTypeId(activity) === getActivityTypeId(prevActivity) &&
        ((!activity.comment && !activity.vcs) ||
          (!activity?.vcs?.pullRequest && !prevActivity?.vcs?.pullRequest))
      );
    }

    function getActivityTypeId(item: Activity) {
      return item && item.key;
    }
  }