import React, { useState, useEffect } from "react"; import FileUpload from "../Settings/FileUpload"; import ToneSelector from "../Settings/ToneSelector"; interface ChatBoxSettings { report_type: string; report_source: string; tone: string; } interface ResearchFormProps { chatBoxSettings: ChatBoxSettings; setChatBoxSettings: React.Dispatch<React.SetStateAction<ChatBoxSettings>>; onFormSubmit?: ( task: string, reportType: string, reportSource: string, ) => void; defaultReportType: string; } export default function ResearchForm({ chatBoxSettings, setChatBoxSettings, onFormSubmit, defaultReportType, }: ResearchFormProps) { const [task, setTask] = useState(""); // You can use this to capture any specific task data if needed // Destructure necessary fields from chatBoxSettings let { report_type, report_source, tone } = chatBoxSettings; const onFormChange = (e: { target: { name: any; value: any } }) => { const { name, value } = e.target; setChatBoxSettings((prevSettings: any) => ({ ...prevSettings, [name]: value, })); }; const onToneChange = (e: { target: { value: any } }) => { const { value } = e.target; setChatBoxSettings((prevSettings: any) => ({ ...prevSettings, tone: value, })); }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (onFormSubmit) { onFormSubmit(task, report_type, report_source); // Trigger the onFormSubmit prop when form is submitted } else { console.warn("onFormSubmit is not defined"); } }; useEffect(() => { // Set default report type only if report_type is empty (initial mount) if (!chatBoxSettings.report_type) { setChatBoxSettings((prevSettings) => ({ ...prevSettings, report_type: defaultReportType, })); } }, [defaultReportType, setChatBoxSettings, chatBoxSettings.report_type]); return ( <form method="POST" className="report_settings mt-3" onSubmit={handleSubmit} > <div className="form-group"> <label htmlFor="report_type" className="agent_question"> Report Type{" "} </label> <select name="report_type" value={report_type} onChange={onFormChange} className="form-control" required > <option value="multi_agents">Multi Agents Report</option> <option value="research_report"> Summary - Short and fast (~2 min) </option> <option value="detailed_report"> Detailed - In depth and longer (~5 min) </option> </select> </div> <div className="form-group"> <label htmlFor="report_source" className="agent_question"> Report Source{" "} </label> <select name="report_source" value={report_source} onChange={onFormChange} className="form-control" required > <option value="web">The Internet</option> <option value="local">My Documents</option> <option value="hybrid">Hybrid</option> </select> </div> {/* Conditional file upload if the report source is 'local' or 'hybrid' */} {report_source === "local" || report_source === "hybrid" ? ( <FileUpload /> ) : null} {/* ToneSelector for changing the tone */} <ToneSelector tone={tone} onToneChange={onToneChange} /> </form> ); }