import React, { useEffect, useState, useRef } from 'react'; import Box from '@mui/material/Box'; import PropagateLoader from 'react-spinners/PropagateLoader'; import { Quote } from 'components/Quote'; import { BackstoryElementProps } from 'components/BackstoryTab'; import { useUser } from 'hooks/useUser'; import { Candidate, ChatSession } from 'types/types'; import { useSecureAuth } from 'hooks/useSecureAuth'; interface GenerateImageProps extends BackstoryElementProps { prompt: string; chatSession: ChatSession; }; const GenerateImage = (props: GenerateImageProps) => { const { user } = useSecureAuth(); const { setSnack, chatSession, prompt } = props; const [processing, setProcessing] = useState(false); const [status, setStatus] = useState(''); const [image, setImage] = useState(''); const name = (user?.userType === 'candidate' ? (user as Candidate).username : user?.email) || ''; // Only keep refs that are truly necessary const controllerRef = useRef(null); // Effect to trigger profile generation when user data is ready useEffect(() => { if (controllerRef.current) { console.log("Controller already active, skipping profile generation"); return; } if (!prompt) { return; } setStatus('Starting image generation...'); setProcessing(true); const start = Date.now(); // controllerRef.current = streamQueryResponse({ // query: { // prompt: prompt, // agentOptions: { // username: name, // } // }, // type: "image", // onComplete: (msg) => { // switch (msg.status) { // case "partial": // case "done": // if (msg.status === "done") { // if (!msg.response) { // setSnack("Image generation failed", "error"); // } else { // setImage(msg.response); // } // setProcessing(false); // controllerRef.current = null; // } // break; // case "error": // console.log(`Error generating profile: ${msg.response} after ${Date.now() - start}`); // setSnack(msg.response || "", "error"); // setProcessing(false); // controllerRef.current = null; // break; // default: // let data: any = {}; // try { // data = typeof msg.response === 'string' ? JSON.parse(msg.response) : msg.response; // } catch (e) { // data = { message: msg.response }; // } // if (msg.status !== "heartbeat") { // console.log(data); // } // if (data.message) { // setStatus(data.message); // } // break; // } // } // }); }, [user, prompt, setSnack]); if (!chatSession) { return <>; } return ( {image !== '' && {prompt}} { prompt && } {processing && { status && Generation status {status} } } ); }; export { GenerateImage };