import { useCallback, useEffect, useState, type FormEvent } from 'react' import KpiCard from '../components/KpiCard' import BannerModoLocal from '../components/BannerModoLocal' import ChipPendienteSync from '../components/ChipPendienteSync' import type { AccionesSesion } from '../components/AuthGate' import { esActividadVencida, esRolConEquipo, formatoFechaCorta, hoyLocal, DESARROLLOS_LEAD, ETIQUETA_FASE_APARTADO, ETIQUETA_FASE_OPORTUNIDAD, FASES_APARTADO, MOTIVOS_NO_COMPRA, ORIGENES_LEAD, SLOTS_DOCS_APARTADO, SUBCATEGORIAS_NO_COMPRA, componerTelefono, LADAS, textoDiasRestantes, urlAfluenciaParaOportunidad, urlCotizadorParaOportunidad, type ApartadoMiDia, type ClaveLada, type FaseApartado, type LeadMiDia, type MotivoNoCompra, type OportunidadMiDia, type ResumenMiDia, type SlotDocApartado, } from '../lib/mi-dia' import { cambiarEstadoApartado, cambiarEstadoLead, cambiarEtapaOportunidad, convertirLead, crearLead, descartarLead, fetchResumenMiDia, listarDocumentosApartado, subirDocumentoApartado, type DocumentoApartado, } from '../services/mi-dia' import { getSesion } from '../services/auth' function TituloSeccion({ children }: { children: string }) { return

{children}

} function EstadoVacio({ mensaje }: { mensaje: string }) { return (

{mensaje}

) } const CLASE_BOTON_ACCION = 'rounded-lg border border-[#D1D5DB] bg-white px-3 py-1.5 text-xs font-medium text-accent shadow-sm transition-all duration-100 ease-out hover:bg-blue-50 disabled:opacity-50' const CLASE_INPUT = 'w-full rounded-lg border border-[#D1D5DB] bg-white px-3 py-2.5 text-sm transition-colors focus:border-accent focus:outline-none focus:ring-2 focus:ring-accent/20' const CLASE_LABEL = 'mb-2 block text-xs font-medium text-[#4B5563]' /** Modal de descarte: motivo + subcategoría (catálogo Monday) + comentario opcional */ function ModalDescartar({ lead, onCancelar, onConfirmar, enviando, }: { lead: { id: string; nombre: string } onCancelar: () => void onConfirmar: (motivo: MotivoNoCompra, subcategoria: string | undefined, comentario: string) => void enviando: boolean }) { const [motivo, setMotivo] = useState(MOTIVOS_NO_COMPRA[0]) const [subcategoria, setSubcategoria] = useState('') const [comentario, setComentario] = useState('') const subcategorias = SUBCATEGORIAS_NO_COMPRA[motivo] return (

Descartar lead

{lead.nombre}

{ e.preventDefault() onConfirmar(motivo, subcategoria === '' ? undefined : subcategoria, comentario.trim()) }} >