// components/SinglePageDataRequestIntegrated.tsx // Versión simplificada con cabecera estilo dashboard import React, { useState } from 'react'; import { Toaster } from 'react-hot-toast'; import { TierKey, AnalysisData } from '../types'; import DataInputRedesigned from './DataInputRedesigned'; import DashboardTabs from './DashboardTabs'; import { generateAnalysis, generateAnalysisFromCache } from '../utils/analysisGenerator'; import toast from 'react-hot-toast'; import { useAuth } from '../utils/AuthContext'; import { formatDateMonthYear } from '../utils/formatters'; const SinglePageDataRequestIntegrated: React.FC = () => { const [view, setView] = useState<'form' | 'dashboard'>('form'); const [analysisData, setAnalysisData] = useState(null); const [isAnalyzing, setIsAnalyzing] = useState(false); const { authHeader, logout } = useAuth(); const handleAnalyze = (config: { costPerHour: number; avgCsat: number; segmentMapping?: { high_value_queues: string[]; medium_value_queues: string[]; low_value_queues: string[]; }; file?: File; sheetUrl?: string; useSynthetic?: boolean; useCache?: boolean; }) => { // Validar que hay archivo o caché if (!config.file && !config.useCache) { toast.error('Por favor, sube un archivo CSV o Excel.'); return; } // Validar coste por hora if (!config.costPerHour || config.costPerHour <= 0) { toast.error('Por favor, introduce el coste por hora del agente.'); return; } // Exigir estar logado para analizar if (!authHeader) { toast.error('Debes iniciar sesión para analizar datos.'); return; } setIsAnalyzing(true); const loadingMsg = config.useCache ? 'Cargando desde caché...' : 'Generando análisis...'; toast.loading(loadingMsg, { id: 'analyzing' }); setTimeout(async () => { try { let data: AnalysisData; if (config.useCache) { // Usar datos desde caché data = await generateAnalysisFromCache( 'gold' as TierKey, config.costPerHour, config.avgCsat || 0, config.segmentMapping, authHeader || undefined ); } else { // Usar tier 'gold' por defecto data = await generateAnalysis( 'gold' as TierKey, config.costPerHour, config.avgCsat || 0, config.segmentMapping, config.file, config.sheetUrl, false, // No usar sintético authHeader || undefined ); } setAnalysisData(data); setIsAnalyzing(false); toast.dismiss('analyzing'); toast.success(config.useCache ? '¡Datos cargados desde caché!' : '¡Análisis completado!', { icon: '🎉' }); setView('dashboard'); window.scrollTo({ top: 0, behavior: 'smooth' }); } catch (error) { console.error('Error generating analysis:', error); setIsAnalyzing(false); toast.dismiss('analyzing'); const msg = (error as Error).message || ''; if (msg.includes('401')) { toast.error('Sesión caducada o credenciales incorrectas. Vuelve a iniciar sesión.'); logout(); } else { toast.error('Error al generar el análisis: ' + msg); } } }, 500); }; const handleBackToForm = () => { setView('form'); setAnalysisData(null); window.scrollTo({ top: 0, behavior: 'smooth' }); }; // Dashboard view if (view === 'dashboard' && analysisData) { try { return ; } catch (error) { console.error('Error rendering dashboard:', error); return (

Error al renderizar dashboard

{(error as Error).message}

); } } // Form view return ( <>
{/* Header estilo dashboard */}

CLIENTE DEMO - Beyond CX Analytics

{formatDateMonthYear()}
{/* Contenido principal */}
); }; export default SinglePageDataRequestIntegrated;