|
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("");
|
|
|
|
|
|
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);
|
|
} else {
|
|
console.warn("onFormSubmit is not defined");
|
|
}
|
|
};
|
|
|
|
useEffect(() => {
|
|
|
|
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>
|
|
);
|
|
}
|
|
|