Utilidades

Filter

Un componente versátil de filtros para construir interfaces de filtrado dinámicas con múltiples tipos de campos, operadores y filtros guardados.
Tests
67%

Uso

El componente SFilter permite construir interfaces de filtrado dinámicas. Los usuarios pueden agregar, configurar y aplicar filtros sobre diferentes campos usando varios operadores y tipos de entrada.

Interfaces

Un campo puede tener una o más interfaces. Cada interfaz define una forma diferente en que el usuario puede ingresar un valor de filtro.

oneInput

Para campos que requieren un solo valor. Soporta texto, números, fechas y montos. Cuando se omite type, el input es de texto por defecto.

twoInputs

Para campos que requieren un rango de valores (ej: rangos de fechas, rangos de precios).

options

Para campos con un conjunto predefinido de opciones. Soporta selección simple y múltiple.

Las opciones pueden ser objetos con id y label, o strings simples.

selection

Para campos donde el usuario ingresa sus propios valores como tags. Ideal para palabras clave, categorías dinámicas o cualquier campo donde el usuario necesite definir valores personalizados.

none

Para verificaciones de existencia (no se necesita valor de entrada).

Múltiples Interfaces

Un solo campo puede tener múltiples interfaces, permitiendo al usuario elegir entre diferentes modos de entrada según el operador.

Operadores Personalizados

Puedes definir operadores personalizados como objetos con id, label, y un tag opcional (string o función) que se muestra en el badge.

Filtros Permanentes

Establece permanent: true en un campo para evitar que sea eliminado o limpiado por el usuario.

Ocultar Botones

Usa hideApplyButton y hideClearButton para controlar la visibilidad de los botones de acción.

Validación

Los campos soportan validación personalizada a través de la función validate. Recibe el valor actual y el operador, y debe retornar un string con el mensaje de error (o null si es válido). Soporta validación asíncrona.

<template>
  <SFilter :fields="fields" @apply="onApply" />
</template>

<script setup lang="ts">
import { SFilter, type TField } from '@placetopay/spartan-vue';

const fields: TField[] = [
  {
    id: 'bin',
    name: 'BIN de Tarjeta',
    interfaces: {
      oneInput: {
        operators: ['equal'],
      },
    },
    validate: async (value) => {
      const binRegex = /^\d{6}$/;
      return !binRegex.test(value) ? 'El BIN debe tener exactamente 6 dígitos' : null;
    },
  },
  {
    id: 'amount',
    name: 'Monto',
    interfaces: {
      twoInputs: {
        type: 'amount',
        currency: 'USD',
        operators: ['between'],
      },
    },
    validate: (value, operator) => {
      return operator === 'between' && parseFloat(value[0]) > parseFloat(value[1])
        ? 'El valor mínimo debe ser menor al máximo'
        : null;
    },
  },
];
</script>

Filtros Guardados

El componente soporta guardar y cargar configuraciones de filtros mediante la prop saved y los eventos save/load.

<template>
  <SFilter
    :fields="fields"
    :saved="savedFilters"
    @apply="onApply"
    @save="onSave"
    @load="onLoad"
  />
</template>

<script setup lang="ts">
import { ref } from 'vue';
import type { TField, TSaveData } from '@placetopay/spartan-vue';

const savedFilters = ref<TSaveData[]>([]);

const onSave = (data: TSaveData[]) => {
  savedFilters.value = data;
};

const onLoad = (filters: TField[]) => {
  console.log('Filtros cargados:', filters);
};
</script>

Métodos Expuestos

El componente expone los métodos apply y clear que pueden ser llamados mediante template ref.

<template>
  <SFilter ref="filterRef" :fields="fields" @apply="onApply" />
  <button @click="filterRef?.apply()">Aplicar</button>
  <button @click="filterRef?.clear()">Limpiar</button>
</template>

Operadores

Operadores Predefinidos

CategoríaOperadores
Comparaciónequal, notEqual, greaterThan, greaterThanOrEqual, lessThan, lessThanOrEqual
Textocontains, notContains, startsWith, endsWith
Rangobetween, notBetween
FechalastWeek, lastMonth, lastYear, today, yesterday
Existenciaexist, notExist

Props

PropTipoDefaultDescripción
fieldsTField[]-Array de campos filtrables
hideApplyButtonbooleanfalseOculta el botón de aplicar
hideClearButtonbooleanfalseOculta el botón de limpiar
applyWhenClearbooleanfalseAplica los filtros automáticamente al limpiar
immediateApplybooleanfalseAplica los filtros inmediatamente al montar el componente
responsivebooleantrueControla el comportamiento responsivo
savedTSaveData[]-Configuraciones de filtros guardados. Muestra el botón de guardar cuando se proporciona

Eventos

EventoPayloadDescripción
applyTField[]Se emite cuando se aplican los filtros. Contiene solo los campos con estado activo
clearTField[]Se emite cuando se limpian los filtros
saveTSaveData[]Se emite cuando el usuario guarda una configuración de filtros
loadTField[]Se emite cuando se carga un filtro guardado
Copyright © 2026