function combineSegments()

in apps/televisit-demo/frontend/src/containers/transcriptions/TranscriptLine.js [14:51]


function combineSegments(results) {
  const markers = [];

  const addMarker = (where) => {
    if (!markers.includes(where)) markers.push(where);
  };

  results.forEach((r) => {
    addMarker(r.BeginOffset);
    addMarker(r.EndOffset);

    (r.Attributes || []).forEach((a) => {
      addMarker(a.BeginOffset);
      addMarker(a.EndOffset);
    });
  });

  markers.sort((a, b) => a - b);

  const ret = [];

  for (let i = 0; i < markers.length - 1; i++) {
    const start = markers[i];
    const end = markers[i + 1];

    const matches = results.filter(
      (r) =>
        (r.BeginOffset <= start && r.EndOffset >= end) ||
        (r.Attributes || []).some(
          (a) => a.BeginOffset <= start && a.EndOffset >= end
        )
    );

    if (matches.length) ret.push({ start, end, matches });
  }

  return ret;
}