fix(kanban): eliminar botón duplicado + exportar en tab bar
- Eliminado botón kanban duplicado en contenido de 'Mis leads' - Botón 'Exportar' movido al final de la barra de pestañas (junto a Kanban) - Exportar aparece en leads, oportunidades y apartados - Un solo botón Kanban/Lista visible en todas las pestañas
This commit is contained in:
@@ -510,12 +510,14 @@ function TabsCrm({
|
||||
onCambiar,
|
||||
vistaKanban,
|
||||
onToggleKanban,
|
||||
onExportar,
|
||||
}: {
|
||||
activa: TabCrm
|
||||
conteos: Record<TabCrm, number>
|
||||
onCambiar: (tab: TabCrm) => void
|
||||
vistaKanban: boolean
|
||||
onToggleKanban: () => void
|
||||
onExportar?: () => void
|
||||
}) {
|
||||
const tabs: { id: TabCrm; titulo: string }[] = [
|
||||
{ id: 'leads', titulo: 'Mis leads' },
|
||||
@@ -549,13 +551,24 @@ function TabsCrm({
|
||||
)
|
||||
})}
|
||||
{activa !== 'tablero' && (
|
||||
<button
|
||||
type="button"
|
||||
onClick={onToggleKanban}
|
||||
className="ml-auto rounded-lg border border-[#D1D5DB] bg-white px-3 py-1.5 text-xs font-medium text-[#374151] shadow-sm transition-all hover:bg-[#F9FAFB] dark:border-[#334155] dark:bg-[#0F172A] dark:text-[#CBD5E1] dark:hover:bg-[#1E293B]"
|
||||
>
|
||||
{vistaKanban ? '📋 Lista' : '📊 Kanban'}
|
||||
</button>
|
||||
<div className="ml-auto flex gap-1">
|
||||
{onExportar && (
|
||||
<button
|
||||
type="button"
|
||||
onClick={onExportar}
|
||||
className="rounded-lg border border-[#D1D5DB] bg-white px-3 py-1.5 text-xs font-medium text-[#374151] shadow-sm transition-all hover:bg-[#F9FAFB] dark:border-[#334155] dark:bg-[#0F172A] dark:text-[#CBD5E1] dark:hover:bg-[#1E293B]"
|
||||
>
|
||||
📥 Exportar
|
||||
</button>
|
||||
)}
|
||||
<button
|
||||
type="button"
|
||||
onClick={onToggleKanban}
|
||||
className="rounded-lg border border-[#D1D5DB] bg-white px-3 py-1.5 text-xs font-medium text-[#374151] shadow-sm transition-all hover:bg-[#F9FAFB] dark:border-[#334155] dark:bg-[#0F172A] dark:text-[#CBD5E1] dark:hover:bg-[#1E293B]"
|
||||
>
|
||||
{vistaKanban ? '📋 Lista' : '📊 Kanban'}
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
@@ -1036,25 +1049,18 @@ export default function MiDiaPage({ accionesSesion }: { accionesSesion: Acciones
|
||||
onCambiar={setTabCrm}
|
||||
vistaKanban={vistaKanban}
|
||||
onToggleKanban={() => setVistaKanban(!vistaKanban)}
|
||||
onExportar={
|
||||
tabCrm === 'leads' ? () => exportarLeads(resumen.misLeads.filter((l) => l.fuente === 'lead')) :
|
||||
tabCrm === 'oportunidades' ? () => exportarOportunidades(resumen.misOportunidades.items) :
|
||||
tabCrm === 'apartados' ? () => exportarApartados(resumen.misApartados) :
|
||||
undefined
|
||||
}
|
||||
/>
|
||||
|
||||
{tabCrm !== 'tablero' && (
|
||||
<FiltrosAvanzados valor={filtros} onChange={setFiltros} />
|
||||
)}
|
||||
|
||||
{/* Toggle Kanban / Lista */}
|
||||
{tabCrm === 'leads' && (
|
||||
<div className="mb-3 flex justify-end">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setVistaKanban((v) => !v)}
|
||||
className="rounded-lg border border-[#D1D5DB] bg-white px-3 py-1.5 text-xs font-medium text-[#374151] shadow-sm transition-all duration-100 ease-out hover:bg-[#F9FAFB] dark:bg-[#0F172A] dark:border-[#334155] dark:text-[#CBD5E1]"
|
||||
>
|
||||
{vistaKanban ? '📋 Lista' : '📊 Kanban'}
|
||||
</button>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{tabCrm === 'leads' && (() => {
|
||||
const leadsFiltrados = aplicarFiltros(
|
||||
resumen.misLeads.filter((l) => l.fuente === 'lead'),
|
||||
@@ -1067,15 +1073,7 @@ export default function MiDiaPage({ accionesSesion }: { accionesSesion: Acciones
|
||||
)
|
||||
return (
|
||||
<>
|
||||
<div className="mb-2 flex justify-end">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => exportarLeads(leadsFiltrados)}
|
||||
className="rounded-lg border border-[#D1D5DB] bg-white px-3 py-1.5 text-xs font-medium text-[#374151] shadow-sm transition-all duration-100 ease-out hover:bg-[#F9FAFB] dark:bg-[#0F172A] dark:border-[#334155] dark:text-[#CBD5E1]"
|
||||
>
|
||||
Exportar
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{leadsFiltrados.length === 0 ? (
|
||||
<EstadoVacio mensaje="Sin leads asignados" />
|
||||
) : vistaKanban ? (
|
||||
@@ -1125,15 +1123,7 @@ export default function MiDiaPage({ accionesSesion }: { accionesSesion: Acciones
|
||||
)
|
||||
return (
|
||||
<>
|
||||
<div className="mb-2 flex justify-end">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => exportarOportunidades(opsFiltradas)}
|
||||
className="rounded-lg border border-[#D1D5DB] bg-white px-3 py-1.5 text-xs font-medium text-[#374151] shadow-sm transition-all duration-100 ease-out hover:bg-[#F9FAFB] dark:bg-[#0F172A] dark:border-[#334155] dark:text-[#CBD5E1]"
|
||||
>
|
||||
Exportar
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{opsFiltradas.length === 0 ? (
|
||||
<EstadoVacio mensaje="Sin oportunidades asignadas" />
|
||||
) : vistaKanban ? (
|
||||
@@ -1178,15 +1168,7 @@ export default function MiDiaPage({ accionesSesion }: { accionesSesion: Acciones
|
||||
)
|
||||
return (
|
||||
<>
|
||||
<div className="mb-2 flex justify-end">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => exportarApartados(apartadosFiltrados)}
|
||||
className="rounded-lg border border-[#D1D5DB] bg-white px-3 py-1.5 text-xs font-medium text-[#374151] shadow-sm transition-all duration-100 ease-out hover:bg-[#F9FAFB] dark:bg-[#0F172A] dark:border-[#334155] dark:text-[#CBD5E1]"
|
||||
>
|
||||
Exportar
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{apartadosFiltrados.length === 0 ? (
|
||||
<EstadoVacio mensaje="Sin apartados asignados" />
|
||||
) : vistaKanban ? (
|
||||
|
||||
Reference in New Issue
Block a user