import { useState } from 'react'; import axios from 'axios'; import { PieChart } from 'lucide-react'; import { motion } from 'framer-motion'; import { PageHeader, ResultBox, ErrorBox, SubmitButton, UploadZone, SectionLabel } from '../components/UI'; export default function DataClusters() { const [file, setFile] = useState(null); const [clusters, setClusters] = useState(3); const [result, setResult] = useState(null); const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const handleSubmit = async (e) => { e.preventDefault(); if (!file) return setError('Please upload a file'); setLoading(true); setError(''); setResult(null); const fd = new FormData(); fd.append('file', file); fd.append('clusters', clusters); try { const res = await axios.post('/api/clustering', fd); setResult(res.data); } catch (err) { setError(err.response?.data?.error || 'Request failed'); } finally { setLoading(false); } }; return (
setFile(e.target.files[0])} label="Upload Data Structure" sublabel=".CSV or .XLSX datasets" />
setClusters(e.target.value)} min="2" max="10" className="quantum-input w-32" />
Map Clusters {result && ( Clustering Visualization Cluster Plot {result.cluster_info && (
{Object.entries(result.cluster_info).map(([k, v], i) => ( Cluster {k}

{v}

Entities
))}
)}
)}
); }