profileShare

rasmusjy / voicetask

Read-only snapshot

No repository description.

main default branch 105 files Expires Sep 13, 2026, 9:06 AM
TranscriptExport.tsx 1,328 bytes
1 import { useState } from 'react'
2 import { formatTranscript } from 'shared/transcript'
3 import type { Segment } from 'shared/types'
4
5 interface TranscriptExportProps {
6 sessionId: string
7 projectName: string
8 segments: Segment[]
9 }
10
11 export function TranscriptExport({ sessionId, projectName, segments }: TranscriptExportProps) {
12 const [copied, setCopied] = useState(false)
13 const [copyError, setCopyError] = useState<string | null>(null)
14
15 async function handleCopy() {
16 setCopyError(null)
17 try {
18 await navigator.clipboard.writeText(formatTranscript(segments, projectName))
19 setCopied(true)
20 window.setTimeout(() => setCopied(false), 2000)
21 } catch {
22 setCopied(false)
23 setCopyError('Copy was blocked. Use Download transcript instead.')
24 }
25 }
26
27 return (
28 <div className="transcript-export">
29 <div className="transcript-export-actions">
30 <button type="button" onClick={() => void handleCopy()}>
31 {copied ? 'Transcript copied' : 'Copy transcript'}
32 </button>
33 <a className="download-link" href={`/api/sessions/${sessionId}/export/transcript.md`} download>
34 Download transcript
35 </a>
36 </div>
37 {copyError && (
38 <span className="copy-error" role="alert">
39 {copyError}
40 </span>
41 )}
42 </div>
43 )
44 }
45