export function handleInteractionEntry()

in src/services/interactions.ts [30:71]


export function handleInteractionEntry (entry: PerformanceEventTiming) {
  entryPreProcessingCallbacks.forEach((cb) => cb(entry));

  if (!(entry.interactionId || entry.entryType === 'first-input')) return;

  const minLongestInteraction = interactionList[interactionList.length - 1];

  const existingInteraction = interactionsMap.get(entry.interactionId!);

  if (
    existingInteraction || interactionList.length < MAX_INTERACTIONS_TO_CONSIDER ||
    entry.duration > minLongestInteraction.latency
  ) {
    if (existingInteraction) {
      if (entry.duration > existingInteraction.latency) {
        existingInteraction.entries = [entry];
        existingInteraction.latency = entry.duration;
      } else if (
        entry.duration === existingInteraction.latency &&
        entry.startTime === existingInteraction.entries[0].startTime
      ) {
        existingInteraction.entries.push(entry);
      }
    } else {
      const interaction = {
        id: entry.interactionId!,
        latency: entry.duration,
        entries: [entry],
      };
      interactionsMap.set(interaction.id, interaction);
      interactionList.push(interaction);
    }

    // Sort the entries by latency
    interactionList.sort((a, b) => b.latency - a.latency);
    if (interactionList.length > MAX_INTERACTIONS_TO_CONSIDER) {
      interactionList
        .splice(MAX_INTERACTIONS_TO_CONSIDER)
        .forEach((i) => interactionsMap.delete(i.id));
    }
  }
};