"use client"; import React from "react"; import ImageUpload from "./ImageUpload"; import DescriptionDisplay from "./DescriptionDisplay"; import AudioPlayback from "./AudioPlayback"; import {Card, CardContent} from "@/components/ui/card"; import {useGenWav, useImageToText, useTextToSpeachLang, useTranslator, useUploadImage} from "@/hooks/api"; import LanguageSelector from "./LanguageSelector"; import {modal} from "@/app/constant"; import Image from "next/image"; export default function VisualSearchAssistant() { const [imageUrl, setImageUrl] = React.useState(null); const [description, setDescription] = React.useState(""); const [language, setLanguage] = React.useState("Xenova/mms-tts-eng"); const [path, setPath] = React.useState(null); const code = modal.find((lang) => lang.model === language)?.code || "en"; const upload = useUploadImage(); const iToText = useImageToText(); const translator = useTranslator(); const tts = useTextToSpeachLang(); const wav = useGenWav(); const handleImageUpload = async (file: File) => { const url = URL.createObjectURL(file); setImageUrl(url); const formData = new FormData(); formData.append("image", file); try { upload.mutate( {form: formData}, { onSuccess: (data) => { iToText.mutate( {url: data?.key}, { onSuccess: (data) => { translator.mutate( {text: data[0].generated_text, code}, { onSuccess: (data) => { console.log("data-desc", data); setDescription(data[0]?.translation_text); console.log("lang", language, data); tts.mutate({text: data[0]?.translation_text, modal: language}, { onSuccess: (data) => { wav.mutate({ sampling_rate: data.sampling_rate, audio: data.audio, name: crypto.randomUUID() }, { onSuccess: (data) => { setPath(data.audio); } }) } }) }, }, ); }, }, ); }, }, ); } catch (error) { console.error("Error processing image:", error); setDescription("Failed to process image. Please try again."); } }; console.log("upload data", upload?.data); const renderStatusMessage = () => { if (upload.isPending) { return

Please wait while we process your image...

; } if (iToText.isPending) { return

Processing image and extracting information, please wait...

; } if (translator.isPending) { return

Wait while we translate your text...

; } if (tts.isPending) { return

Wait while we process the audio...

; } if (wav.isPending) { return

Generating audio file, please wait...

; } return null; }; return (
{imageUrl && (
Uploaded image
)} {renderStatusMessage()} {description && (
)}
); }