function getStream()

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);
  }