import React from 'react'; import { useSelector } from 'react-redux'; import { IReduxState } from '../../../app/types'; import { formatTime, getMeetingIntelligenceState, getSpeakerColor, getUniqueSpeakers, groupSegmentsBySpeaker } from '../../functions'; /** * Transcript viewer component with speaker labels. * * @returns {React.ReactElement} The transcript viewer component. */ const TranscriptViewer: React.FC = () => { const { transcript, transcriptLoading, transcriptError, selectedMeeting } = useSelector( (state: IReduxState) => getMeetingIntelligenceState(state) ); if (transcriptLoading) { return (
Loading transcript...
); } if (transcriptError) { return (

Failed to load transcript: {transcriptError}

); } if (!transcript || transcript.length === 0) { const isProcessing = selectedMeeting?.status !== 'ready' && selectedMeeting?.status !== 'failed'; return (
{isProcessing ? ( <>

Transcript in progress

The transcript is being generated. Please check back soon.

) : ( <>

No transcript available

This meeting does not have a transcript yet.

)}
); } const speakerLabels = getUniqueSpeakers(transcript); const groupedSegments = groupSegmentsBySpeaker(transcript); return (
{speakerLabels.map(speaker => ( {speaker} ))}
{groupedSegments.map((group, groupIndex) => (
{group.speaker} {formatTime(group.segments[0].start_time)}
{group.segments.map(segment => segment.text).join(' ')}
))}
); }; export default TranscriptViewer;