Hiyve Components - v1.0.0
    Preparing search index...

    Function useTranscriptionGrouping

    • Hook to group transcription entries by speaker within time windows.

      Parameters

      • entries: TranscriptionEntry[]

        Array of transcription entries (unsorted is fine)

      • windowMs: number = DEFAULT_WINDOW_MS

        Time window in milliseconds for grouping (default: 5000ms)

      Returns TranscriptionGroupType[]

      Array of grouped transcriptions, sorted by time

      Groups consecutive entries from the same speaker if they're within the specified time window. This creates a more readable display by combining related messages into coherent speech blocks.

      1. Entries are sorted by timestamp
      2. A new group is started when:
        • The speaker changes, OR
        • More than windowMs has passed since the last entry
      3. Each group contains:
        • Combined text from all entries
        • Average confidence score
        • Speaker name and color
        • Timestamp of the first entry

      This hook is used internally by TranscriptViewer, but you can use it directly when building custom transcript displays. It's memoized for performance.

      • Uses useMemo to avoid recalculating on every render
      • Only recalculates when entries or windowMs changes
      • Sorts entries internally, so original array is not modified

      Basic usage with default window:

      function TranscriptDisplay({ entries }) {
      const groups = useTranscriptionGrouping(entries);

      return (
      <div>
      {groups.map(group => (
      <TranscriptionGroup
      key={`${group.speaker}-${group.startTime.getTime()}`}
      group={group}
      />
      ))}
      </div>
      );
      }

      Custom window with date dividers:

      function TranscriptWithDates({ entries }) {
      const groups = useTranscriptionGrouping(entries, 3000); // 3 second window

      return (
      <div>
      {groups.map((group, index) => {
      const prevGroup = index > 0 ? groups[index - 1] : null;
      const showDate = needsDateDivider(group, prevGroup);

      return (
      <React.Fragment key={`${group.speaker}-${group.startTime.getTime()}`}>
      {showDate && <DateDivider date={group.startTime} />}
      <TranscriptionGroup group={group} />
      </React.Fragment>
      );
      })}
      </div>
      );
      }

      Export transcript as text:

      function ExportButton({ entries }) {
      const groups = useTranscriptionGrouping(entries, 10000); // 10s window for export

      const handleExport = () => {
      const text = groups
      .map(g => `[${g.startTime.toLocaleTimeString()}] ${g.speakerName}: ${g.combinedText}`)
      .join('\n\n');
      downloadAsText(text, 'transcript.txt');
      };

      return <Button onClick={handleExport}>Export Transcript</Button>;
      }