export function splitByHead()

in src/components/activity/activity__split-activities.ts [16:68]


export function splitByHead(activities: Activity[], activityToMessageMap: Record<string, Activity>) {
  const subgroups: MergedItem[] = [];
  let subgroup: MergedItem = {
    activities: [],
    messages: [],
  };
  let hasTerminated = false;
  activities.forEach((activity, index) => {
    const isType = getTypes(activity);
    const activityId = activity.id;
    if (isType.issueCreated || isType.articleCreated || isType.comment || isType.work) {
      if (hasTerminated) {
        subgroups.push(subgroup);
        subgroup = {activities: [], messages: []};
      }
      switch (true) {
        case isType.issueCreated: {
          subgroup.issue = activity;
          subgroup.head = activity;
          break;
        }
        case isType.articleCreated: {
          subgroup.article = activity;
          subgroup.head = activity;
          break;
        }
        case isType.comment: {
          subgroup.comment = activity;
          subgroup.head = activity;
          break;
        }
        case isType.work: {
          subgroup.work = activity;
          subgroup.head = activity;
        }
      }
      subgroup.messages.push(activityToMessageMap[activityId]);
      hasTerminated = true;
    } else {
      subgroup.activities.push(activity);
      subgroup.messages.push(activityToMessageMap[activityId]);
    }

    if (index === activities.length - 1) {
      if (!subgroup.head) {
        subgroup.head = subgroup.activities[0];
      }
      subgroups.push(subgroup);
    }
  });

  return subgroups;
}