/v1.0

DueDateTabs

Barra de pestanas inteligente construida sobre Tabs que comprende un arreglo estructurado de ítems de resumen de vencimiento. Puede recibir los datos directamente mediante data u obtenerlos de un endpoint de API (fetchPath). El componente mapea cada ítem a una pestana con una etiqueta legible y un contador, y luego llama a onTabChange con la clave de la pestana y el objeto DueDateItem completo. Las pestanas se activan en 'overdue' por defecto si ese bucket existe.

Props

| Prop | Tipo | Requerido | Por defecto | Descripción | |------|------|-----------|-------------|-------------| | id | string | No | — | id HTML para el contenedor Tabs subyacente. | | containerStyle | React.CSSProperties | No | — | Estilos en línea para el contenedor exterior. | | color | string | No | 'primary' | Color pasado al componente Tabs subyacente. | | tabStyle | React.CSSProperties | No | — | Estilos en línea para cada ítem de pestana. | | activeTabStyle | React.CSSProperties | No | — | Estilos en línea adicionales para la pestana activa. | | tabListStyle | React.CSSProperties | No | — | Estilos en línea para la lista de pestanas. | | showNavigationButtons | boolean | No | true | Cuando es true, muestra botones de navegación izquierda/derecha. | | defaultActiveKey | string | No | — | Clave de la pestana a activar al montar. Por defecto 'overdue' si esa pestana existe, si no la primera. | | onTabChange | (activeKey: string, item?: DueDateItem) => void | No | — | Se llama cuando cambia la pestana activa. Recibe la clave y el objeto DueDateItem correspondiente. | | onLoadingChange | (isLoading: boolean) => void | No | — | Se llama cuando cambia el estado de carga. | | onLoaded | (result: { ok: boolean; error?: any; data?: DueDateItem[] }) => void | No | — | Se llama cuando la obtención de datos finaliza (exitosamente o con error). | | data | DueDateItem[] \| null | No | — | Arreglo de ítems de vencimiento ya resueltos. Cuando se proporciona, omite la petición a la API. | | apiBaseUrl | string | No | — | URL base del cliente HTTP. | | useAuthToken | boolean | No | false | Cuando es true, usa el cliente HTTP autenticado. | | fetchPath | string | No | — | Endpoint de API que devuelve un arreglo DueDateItem[]. | | reloadTrigger | number | No | — | Incrementar este valor fuerza una nueva petición. |

Tipo unión DueDateItem

type DueDateItem =
  | { type: 'overdue'; label?: string; count: number }
  | { type: 'undated'; label?: string; count: number }
  | { type: 'day'; date: string; count: number; dayOfWeek: string; dayOfMonth: number; monthName: string; year: number };

Uso

Con datos estáticos

import React from 'react';
import DueDateTabs from '@/components/tabs/DueDateTabs';
import type { DueDateItem } from '@/components/tabs/DueDateTabs';

const items: DueDateItem[] = [
  { type: 'overdue', count: 3 },
  { type: 'day', date: '2026-02-25', count: 5, dayOfWeek: 'Wed', dayOfMonth: 25, monthName: 'Feb', year: 2026 },
  { type: 'undated', count: 2 },
];

export default function Example() {
  return (
    <DueDateTabs
      data={items}
      onTabChange={(key, item) => {
        console.log('Selected tab:', key, item);
      }}
    />
  );
}

Con fetch a API

<DueDateTabs
  fetchPath="/v1/tasks/due-date-summary"
  apiBaseUrl="https://api.example.com"
  useAuthToken
  reloadTrigger={reloadCounter}
  onTabChange={(key) => setFilter(key)}
/>