Skip to content

Composables — Índice ​

Los composables son funciones reutilizables que encapsulan lógica reactiva. En Kaleo, son el núcleo de la arquitectura frontend: eliminan boilerplate, garantizan consistencia y permiten crear nuevos módulos en minutos.

Composables core ​

ComposableArchivoPropósitoUso típico
usePaginatedSetupcreatePaginatedStore.tsFactory de stores con paginación, filtros y sort server-sideDentro de defineStore() para cualquier lista paginada
createPaginatedStorecreatePaginatedStore.tsGenera un store completo de solo lecturaPara listas sin CRUD
useTableViewuseTableView.tsConfigura una tabla TanStack en 1 líneaEn cada view con UiDataTable
useAsyncDatauseAsyncData.tsCarga datos no-paginados con loading/error/reload automáticosDashboard, Settings, detalle de entidad
useDashboardDatauseDashboardData.tsMúltiples fetches paralelos con estado unificadoDashboards multi-métrica

Formularios y modales ​

ComposableArchivoPropósito
useModal<T>useModal.tsEstado tipado de modal (isOpen, target, open/close/reset)
useDirtyFormuseDirtyForm.tsDetecta cambios sin guardar via snapshot JSON
useAsyncOperationuseAsyncOperation.tsisLoading + error compartidos para operaciones CRUD en stores

Datos y filtros ​

ComposableArchivoPropósito
useFilterSyncuseFilterSync.tsSincroniza objeto de filtros con store.applyFilters() con debounce
useAppTableuseAppTable.tsWrapper de TanStack Table v9 con convenciones del proyecto

UI y experiencia ​

ComposableArchivoPropósito
useToastuseToast.tsSistema de notificaciones toast (success, error, warning, withAction)
useThemeuseTheme.tsToggle dark/light mode, persiste en localStorage
useCreateActionuseCreateAction.tsRegistra ?crear=1 en URL para abrir modal desde la paleta de comandos
useOnlineStatususeOnlineStatus.tsDetecta online/offline del navegador
useClipboarduseClipboard.tsCopiar texto al portapapeles
useDebounceFnuseDebounceFn.tsEnvuelve cualquier función con debounce
ComposableArchivoPropósito
useCompanyPathuseCompanyPath.tsLee :companyId de la ruta y construye URLs tenantizadas

Reglas de uso ​

  1. Un composable por concepto — no mezclar lógica de tabla con lógica de modal
  2. Los composables no modifican stores directamente — reciben callbacks o trabajan con stores inyectados
  3. Retornan siempre refs/computed — para que los templates sean reactivos
  4. Documentan el "porqué" — no solo el "qué" — con JSDoc

Patrón de una view completa ​

ts
// Vista estándar con todos los composables activos
const store = useInvoiceStore()
const { companyId } = useCompanyPath()

// Tabla
const { table, isInitialLoading } = useTableView(useInvoiceColumns(), store)

// Filtros
const filterValues = ref({ search: '', status: '' })
watch(companyId, () => { filterValues.value = { search: '', status: '' } })
useFilterSync(filterValues, v => store.applyFilters({ search: v.search || undefined }))

// Modales
const createModal = useModal()
const editModal = useModal<Invoice>()
const deleteModal = useModal<{ id: string; number: string }>()

// Formulario
const form = reactive({ number: '', amount: 0 })
const { isDirty, capture } = useDirtyForm(() => ({ ...form }))

// Acciones
onMounted(() => store.fetchInvoices())
useCreateAction(() => openCreateModal())

Documentación de Kaleo — plataforma SaaS multi-tenant