From b7421c8722fefa0d6f2154c007dfb8c3f3cbbd5b Mon Sep 17 00:00:00 2001 From: Marjan Kalanaki Date: Thu, 28 Mar 2024 17:51:01 +0000 Subject: [PATCH] add option to choose the transcript format --- packages/api/src/index.ts | 6 +- packages/client/src/app/layout.tsx | 2 +- .../client/src/components/ExportButton.tsx | 65 ++++++++++++++++++- packages/client/src/services/export.ts | 3 + packages/common/src/types.ts | 7 ++ 5 files changed, 79 insertions(+), 4 deletions(-) diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index 6ab34d3a..7180d3f7 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -189,10 +189,14 @@ const getApp = async () => { res.status(404).send(`Transcript not found`); return; } + + const transcriptS3Key = + parsedItem.data.transcriptKeys[exportRequest.data.transcriptFormat]; + console.log(`transcriptS3Key: ${transcriptS3Key}`); const transcriptText = await getObjectText( s3Client, config.app.transcriptionOutputBucket, - parsedItem.data.transcriptKeys.text, + transcriptS3Key, ); if (isS3Failure(transcriptText)) { if (transcriptText.failureReason === 'NoSuchKey') { diff --git a/packages/client/src/app/layout.tsx b/packages/client/src/app/layout.tsx index 1a036869..63739226 100644 --- a/packages/client/src/app/layout.tsx +++ b/packages/client/src/app/layout.tsx @@ -29,7 +29,7 @@ export default function RootLayout({
-
+
{children}
diff --git a/packages/client/src/components/ExportButton.tsx b/packages/client/src/components/ExportButton.tsx index bf56f442..5ca0ef80 100644 --- a/packages/client/src/components/ExportButton.tsx +++ b/packages/client/src/components/ExportButton.tsx @@ -1,5 +1,8 @@ import React, { useContext, useState } from 'react'; -import { ExportResponse } from '@guardian/transcription-service-common'; +import { + ExportResponse, + TranscriptFormat, +} from '@guardian/transcription-service-common'; import { AuthContext } from '@/app/template'; import Script from 'next/script'; import { useSearchParams } from 'next/navigation'; @@ -10,6 +13,7 @@ import { } from '@heroicons/react/16/solid'; import { RequestStatus } from '@/types'; import { InfoMessage } from '@/components/InfoMessage'; +import { Dropdown } from 'flowbite-react'; const ExportButton = () => { const { token } = useContext(AuthContext); @@ -17,6 +21,11 @@ const ExportButton = () => { const [docId, setDocId] = useState(); const [loading, setLoading] = useState(false); const [failureMessage, setFailureMessage] = useState(''); + const [transcriptFormat, setTranscriptFormat] = + useState(null); + const [transcriptFormatValid, setTranscriptFormatValid] = useState< + boolean | undefined + >(undefined); const [requestStatus, setRequestStatus] = useState( RequestStatus.Ready, ); @@ -26,6 +35,13 @@ const ExportButton = () => { ); } + + const transcriptFormatDescription: Record = { + srt: 'SRT format (Time Coded)', + text: 'TEXT format', + json: 'JSON format', + }; + const transcriptId = searchParams.get('transcriptId'); if (!transcriptId) { return ( @@ -69,9 +85,18 @@ const ExportButton = () => { } const exportHandler = async () => { + if (!transcriptFormat) { + console.log(`transcript format value is ${transcriptFormat}`); + setTranscriptFormatValid(false); + return; + } setLoading(true); try { - const response = await exportTranscript(token, transcriptId); + const response = await exportTranscript( + token, + transcriptId, + transcriptFormat, + ); setLoading(false); if (response && response.status !== 200) { const text = await response.text(); @@ -101,6 +126,42 @@ const ExportButton = () => { return ( <> +
+ + { + setTranscriptFormat(TranscriptFormat.TEXT); + setTranscriptFormatValid(true); + }} + > + {transcriptFormatDescription[TranscriptFormat.TEXT]} + + + { + setTranscriptFormat(TranscriptFormat.SRT); + setTranscriptFormatValid(true); + }} + > + {transcriptFormatDescription[TranscriptFormat.SRT]} + + + {transcriptFormatValid === false ? ( + + A transcript format must be chosen! + + ) : null} +
+