"use client";
import { useState } from "react";
import ReactMarkdown from "react-markdown"; // Import ReactMarkdown
interface TranscriptViewerProps {
transcriptContent: string;
transcriptUrl?: string | null;
}
/**
* Format the transcript content into a more readable format with styling
*/
function formatTranscript(content: string): React.ReactNode[] {
if (!content.trim()) {
return [
No transcript content available.
];
}
// Split the transcript by lines
const lines = content.split("\n");
const elements: React.ReactNode[] = [];
let currentSpeaker: string | null = null;
let currentMessages: string[] = [];
// Process each line
lines.forEach((line) => {
line = line.trim();
if (!line) {
// Empty line, ignore
return;
}
// Check if this is a new speaker line
if (line.startsWith("User:") || line.startsWith("Assistant:")) {
// If we have accumulated messages for a previous speaker, add them
if (currentSpeaker && currentMessages.length > 0) {
elements.push(
{currentMessages.map((msg, i) => (
// Use ReactMarkdown to render each message part
(
),
}}
>
{msg}
))}
);
currentMessages = [];
}
// Set the new current speaker
currentSpeaker = line.startsWith("User:") ? "User" : "Assistant";
// Add the content after "User:" or "Assistant:"
const messageContent = line.substring(line.indexOf(":") + 1).trim();
if (messageContent) {
currentMessages.push(messageContent);
}
} else if (currentSpeaker) {
// This is a continuation of the current speaker's message
currentMessages.push(line);
}
});
// Add any remaining messages
if (currentSpeaker && currentMessages.length > 0) {
elements.push(
{currentMessages.map((msg, i) => (
// Use ReactMarkdown to render each message part
(
),
}}
>
{msg}
))}