46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
"use client";
|
|
|
|
import { useRouter } from "next/navigation";
|
|
import { useState } from "react";
|
|
import AnalysisForm from "@/components/AnalysisForm";
|
|
import { AnalysisRequest } from "@/lib/types";
|
|
import { startAnalysis } from "@/lib/api";
|
|
|
|
export default function NewAnalysisPage() {
|
|
const router = useRouter();
|
|
const [isLoading, setIsLoading] = useState(false);
|
|
const [error, setError] = useState<string | null>(null);
|
|
|
|
const handleSubmit = async (request: AnalysisRequest) => {
|
|
setIsLoading(true);
|
|
setError(null);
|
|
|
|
try {
|
|
const { analysis_id } = await startAnalysis(request);
|
|
router.push(`/analysis/${analysis_id}`);
|
|
} catch (err) {
|
|
setError(err instanceof Error ? err.message : "Failed to start analysis");
|
|
setIsLoading(false);
|
|
}
|
|
};
|
|
|
|
return (
|
|
<div className="min-h-screen bg-gray-50">
|
|
<div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
|
|
<div className="bg-white rounded-lg shadow p-8">
|
|
<h1 className="text-3xl font-bold mb-6">New Analysis</h1>
|
|
|
|
{error && (
|
|
<div className="mb-4 p-4 bg-red-50 border border-red-200 rounded-md text-red-700">
|
|
{error}
|
|
</div>
|
|
)}
|
|
|
|
<AnalysisForm onSubmit={handleSubmit} isLoading={isLoading} />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|