"use client";
import { useState } from "react";
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) => (
{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) => (
{msg}
))}
);
}
return elements;
}
/**
* Component to display a chat transcript
*/
export default function TranscriptViewer({
transcriptContent,
transcriptUrl,
}: TranscriptViewerProps) {
const [showTranscript, setShowTranscript] = useState(false);
return (