"use client"; import { AddIcon, TimesIcon } from "@/components/icons"; import { Input, Textarea } from "@heroui/input"; import { Button, Checkbox, CircularProgress, Divider, Select, SelectItem, SelectSection, } from "@heroui/react"; import Link from "next/link"; import { useSearchParams } from "next/navigation"; import { Suspense, useState } from "react"; import { zodResolver } from "@hookform/resolvers/zod"; import { z } from "zod"; import { useForm } from "react-hook-form"; import Cookies from "js-cookie"; import { close, error, loading } from "@/config/swal"; import { generateSpeechToText, getTranscriptById, } from "@/services/generate-article"; import { delay } from "@/utils/global"; // import OperatorArticleTable from "@/components/table/assistant/create-content/operator/operator-article-table"; // import OperatorTranscriptTable from "@/components/table/assistant/create-content/operator/operator-transcript-table"; // import OperatorArticleDraftTable from "@/components/table/assistant/create-content/operator/operator-draft-article-table"; // import OperatorDetailDraftArticle from "@/components/main/multipool-assistant/operator-detail-draft-article"; const createContentOnlineMediaSchema = z.object({ title: z.string().min(1, { message: "Required" }), prompt: z.string().min(1, { message: "Required" }), }); export default function SpeechToText(props: { generateArticleFromTranscript: (transcriptId: number) => void; }) { const searchParam = useSearchParams(); const transcriptQuery = searchParam.get("transcriptId"); let [files, setFiles] = useState([]); const [handleFileStatus, setHandleFileStatus] = useState(""); const [detailTranscript, setDetailTranscript] = useState(""); const [generatedTranscriptId, setGeneratedTranscriptId] = useState(); const [advanceConfig, setAdvanceConfig] = useState(false); const [language, setLanguage] = useState("id"); const formOptions = { resolver: zodResolver(createContentOnlineMediaSchema) }; type CreateContentSchema = z.infer; const { register, setValue, handleSubmit, formState: { errors }, } = useForm(formOptions); const handleFileChange = (event: any) => { if (files.length < 1) { const newFiles: FileList | null = event.target.files; if (newFiles) { const allowedExtensions = [".mp3"]; let temp: File[] = [...files]; // Salin file-file yang sudah ada for (let i = 0; i < newFiles.length; i++) { const file = newFiles[i]; const fileExtension = file.name.split(".").pop()?.toLowerCase(); if ( fileExtension && allowedExtensions.includes(`.${fileExtension}`) ) { temp.push(file); } else { alert("The supported File formats are .mp3"); } } setFiles(temp); } } }; const removeFile = (name: string) => { const arrayFile: File[] = []; for (const element of files) { if (element.name !== name) { arrayFile.push(element); } } setFiles(arrayFile); }; const handleGenerateTranscript = (data: any) => { if (files.length > 0) { doGenerate(data); setHandleFileStatus(""); } else { setHandleFileStatus("Required"); } }; const doGenerate = async (data: any) => { loading(); let formData = new FormData(); console.log("data.", data.prompt); formData.append("filename", files[0]); formData.append("title", data.title); formData.append("prompt", data.prompt); formData.append("language", language); formData.append("clientId", "humasClientIdTest"); formData.append("createdBy", "123"); const res = await generateSpeechToText(formData); setGeneratedTranscriptId(res?.data?.data?.id); close(); initFetch(res?.data?.data?.id); return false; }; const checkTranscriptStatus = async (id: number) => { delay(7000).then(() => { initFetch(id); }); }; const initFetch = async (id?: number) => { if (id) { const res = await getTranscriptById(id); console.log("stat", res?.data?.data); if (res?.data?.data?.status === 0) { setDetailTranscript(""); checkTranscriptStatus(id); } else { setDetailTranscript(res?.data?.data.content); } } }; return (

Upload an Audio File

The supported File formats are .mp3

Max: 25mb

{files.length < 1 && ( )} {handleFileStatus !== "" && files.length < 1 && (

{handleFileStatus}

)} {files.length > 0 && files.map((list) => ( ))}

Language

Title*

{errors.title?.message && (

{errors.title?.message}

)}

Keyword*