Rag-Model / frontend /src /App.jsx
Abhisingh-18's picture
Mirror of github.com/Abhisingh18/Rag-Model
9ce3455 verified
Raw
History Blame Contribute Delete
6.46 kB
import { useState } from 'react';
import FileUpload from './components/FileUpload';
import AnalysisDashboard from './components/AnalysisDashboard';
import ReportPreview from './components/ReportPreview';
import { FileText, BarChart3, Download } from 'lucide-react';
function App() {
const [currentView, setCurrentView] = useState('upload');
const [analysisData, setAnalysisData] = useState(null);
const [reportData, setReportData] = useState(null);
const handleAnalysisComplete = (data) => {
setAnalysisData(data);
setReportData(data);
setCurrentView('dashboard');
};
return (
<div style={{ minHeight: '100vh', paddingBottom: '2rem' }}>
{/* Header */}
<header style={{
background: 'rgba(255, 255, 255, 0.98)',
backdropFilter: 'blur(30px) saturate(180%)',
borderBottom: '1px solid rgba(102, 126, 234, 0.2)',
boxShadow: '0 8px 32px rgba(0, 0, 0, 0.08)',
position: 'sticky',
top: 0,
zIndex: 100
}}>
<div className="container" style={{ padding: '1.5rem' }}>
<div className="flex items-center justify-between">
<div className="flex items-center gap-3">
<div style={{
width: '56px',
height: '56px',
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
borderRadius: '16px',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
color: 'white',
fontSize: '1.75rem',
fontWeight: 'bold',
boxShadow: '0 8px 24px rgba(102, 126, 234, 0.4)',
transition: 'transform 0.3s ease'
}}
onMouseEnter={(e) => e.currentTarget.style.transform = 'rotate(10deg) scale(1.1)'}
onMouseLeave={(e) => e.currentTarget.style.transform = 'rotate(0deg) scale(1)'}
>
📊
</div>
<div>
<h1 style={{
fontSize: '1.75rem',
fontWeight: '800',
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
WebkitBackgroundClip: 'text',
WebkitTextFillColor: 'transparent',
marginBottom: '0.25rem',
letterSpacing: '-0.5px'
}}>
RAG Document Analysis
</h1>
<p style={{
fontSize: '0.9rem',
color: '#6b7280',
fontWeight: '500'
}}>
National Disaster Management Authority
</p>
</div>
</div>
<div className="flex gap-2">
<button
onClick={() => setCurrentView('upload')}
className={`btn ${currentView === 'upload' ? 'btn-primary' : 'btn-secondary'}`}
>
<FileText size={18} />
Upload
</button>
<button
onClick={() => setCurrentView('dashboard')}
className={`btn ${currentView === 'dashboard' ? 'btn-primary' : 'btn-secondary'}`}
disabled={!analysisData}
>
<BarChart3 size={18} />
Dashboard
</button>
<button
onClick={() => setCurrentView('report')}
className={`btn ${currentView === 'report' ? 'btn-primary' : 'btn-secondary'}`}
disabled={!reportData}
>
<Download size={18} />
Report
</button>
</div>
</div>
</div>
</header>
{/* Main Content */}
<main className="container" style={{ marginTop: '2rem' }}>
{currentView === 'upload' && (
<FileUpload onAnalysisComplete={handleAnalysisComplete} />
)}
{currentView === 'dashboard' && analysisData && (
<AnalysisDashboard data={analysisData} />
)}
{currentView === 'report' && reportData && (
<ReportPreview data={reportData} />
)}
</main>
{/* Footer */}
<footer style={{
marginTop: '4rem',
padding: '2.5rem 0',
textAlign: 'center',
color: 'rgba(255, 255, 255, 0.95)',
fontSize: '0.9rem',
background: 'rgba(255, 255, 255, 0.1)',
backdropFilter: 'blur(20px)',
borderTop: '1px solid rgba(255, 255, 255, 0.2)',
fontWeight: '500'
}}>
<p>© 2025 National Disaster Management Authority, Government of India</p>
<p style={{ marginTop: '0.625rem', fontSize: '0.85rem', opacity: 0.9 }}>
Developed by JARVIS GGV | Smart India Hackathon 2025
</p>
</footer>
</div>
);
}
export default App;