import React, { useEffect, useState } from 'react'; import './styles/globals.css'; import { Sidebar, Header } from './components/Layout'; import { DashboardCards } from './components/Dashboard'; import RequestTable from './components/Requests/RequestTable'; import RequestForm from './components/Requests/RequestForm'; import ScheduledPage from './components/Scheduled/ScheduledPage'; import NewRequestPage from './components/Requests/NewRequestPage'; import HistoryPage from './components/History/HistoryPage'; import SettingsPage from './components/Settings/SettingsPage'; import HelpPage from './components/Help/HelpPage'; import ProfilePage from './components/Profile/ProfilePage'; function App() { const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const [activeView, setActiveView] = useState('dashboard'); // 'dashboard' | 'scheduled' | 'create' | 'history' | 'settings' const [credits, setCredits] = useState(() => { try { const raw = localStorage.getItem('credits'); const n = raw != null ? parseInt(raw, 10) : 0; return Number.isNaN(n) ? 0 : n; } catch { return 0; } }); useEffect(() => { const onStorage = (e) => { if (e.key === 'credits') { const n = parseInt(e.newValue, 10); if (!Number.isNaN(n)) setCredits(n); } }; window.addEventListener('storage', onStorage); return () => window.removeEventListener('storage', onStorage); }, []); const handleToggleMobileMenu = () => setIsMobileMenuOpen(!isMobileMenuOpen); const handleNavigate = (key) => { setActiveView(key); setIsMobileMenuOpen(false); }; const [showPayment, setShowPayment] = useState(false); const handleReloadCredits = () => { // Abrir modal de pasarela de pago setShowPayment(true); }; const handlePaymentClose = () => setShowPayment(false); const handlePaymentSuccess = (amount) => { // Actualizar créditos después de un pago exitoso const add = parseInt(amount, 10); if (!Number.isNaN(add) && add > 0) { const next = credits + add; setCredits(next); try { localStorage.setItem('credits', String(next)); } catch {} } setShowPayment(false); }; const headerTitle = activeView === 'scheduled' ? 'Solicitudes Programadas' : activeView === 'create' ? 'Nueva Solicitud' : activeView === 'history' ? 'Historial' : activeView === 'settings' ? 'Configuración' : activeView === 'help' ? 'Ayuda' : activeView === 'profile' ? 'Perfil' : 'Dashboard'; const [paymentAmount, setPaymentAmount] = useState(''); const [isPaying, setIsPaying] = useState(false); const proceedPayment = async () => { const val = parseInt(paymentAmount, 10); if (Number.isNaN(val) || val <= 0) { alert('Ingrese un monto válido mayor a 0.'); return; } // Simulación de pasarela de pago try { setIsPaying(true); await new Promise((res) => setTimeout(res, 1200)); handlePaymentSuccess(val); } finally { setIsPaying(false); } }; return (
{activeView === 'scheduled' ? ( ) : activeView === 'create' ? ( ) : activeView === 'history' ? ( ) : activeView === 'settings' ? ( ) : activeView === 'help' ? ( ) : activeView === 'profile' ? ( ) : (
)} {showPayment && (
e.stopPropagation()}>

Recargar créditos

setPaymentAmount(e.target.value)} placeholder="Ej: 10" disabled={isPaying} autoFocus />
{/* Placeholder de pasarela de pago: reemplace con su integración real (Mercado Pago, Stripe, etc.) */}

Pasarela de pago

Esta es una simulación. Conecte aquí su pasarela (iframe, checkout, etc.).

)}
); } export default App;