Skip to content

Filtros rápidos

AlpopQuickFilters é um painel de filtros expansível com chips de filtros ativos. É desacoplado de i18n (todos os rótulos são props traduzíveis; veja Chaves de tradução) e, por padrão, do roteador: o host é dono da query e reage ao evento applied. Os campos vão no slot fields, que expõe a query de rascunho para os campos ligarem com v-model.

A sincronização com a URL é opcional via get-route-query/set-route-query: quando fornecidas, a query aplicada é espelhada na URL e lida de volta ao montar. O componente nunca toca no roteador diretamente: o host decide como ler/escrever a URL, então funciona com qualquer roteador (ou nenhum).

Filtros

Aplicado: Nenhum filtro

Sincronização com a URL

Com get-route-query/set-route-query, a query aplicada é espelhada na URL e lida de volta ao montar, útil para filtros compartilháveis por link. O host passa as duas funções (tipicamente usando vue-router, mas pode ser qualquer coisa), por isso não há demo interativo aqui:

pug
alpop-quick-filters(
  :definitions="definitions",
  :default-query="defaultQuery",
  :get-route-query="() => $route.query",
  :set-route-query="(query) => $router.replace({ query })",
  @applied="onApplied"
)
  template(#fields="{ query }")
    alpop-select-field(name="status", label="Status", v-model="query.status", :options="statuses")

Sem essas props (o padrão), o componente funciona normalmente sem tocar na URL, e nunca acessa $router/$route diretamente, então não depende de vue-router estar instalado.

Como funciona

  • O host fornece defaultQuery (estado inicial) e, opcionalmente, emptyQuery (estado ao limpar). Internamente o componente mantém um rascunho (draftQuery) e a query aplicada.
  • Ao clicar em Aplicar, o rascunho vira a query aplicada e o evento applied é emitido com uma cópia dela.
  • Os chips de filtros ativos são derivados de definitions (rótulo e formatação). Remover um chip emite applied com aquele filtro zerado.

Props

PropTipoPadrãoDescrição
definitionsArray[][{ key, label, hasValue?, formatValue? }]
defaultQueryFunction() => ({})Retorna o estado inicial da query
emptyQueryFunctionnullRetorna o estado ao limpar (se diferente)
defaultExpandedBooleanfalseInicia com o painel aberto
getRouteQueryFunctionnullRetorna a query atual da URL (opt-in, ver acima)
setRouteQueryFunctionnullEscreve a query aplicada na URL (opt-in, ver acima)
titleString"Filtros"*Título (*traduzível)
descriptionStringnullSubtítulo opcional
activeLabelString"ativos"*Sufixo do contador de filtros (*traduzível)
activeFiltersTitleString"Filtros ativos"*Título da área de chips (*traduzível)
applyLabelString"Aplicar"*Rótulo do botão aplicar (*traduzível)
clearLabelString"Limpar"*Rótulo do botão limpar (*traduzível)
showLabelString"Mostrar filtros"*Rótulo ao expandir (*traduzível)
hideLabelString"Ocultar filtros"*Rótulo ao recolher (*traduzível)

Eventos

EventoPayloadDescrição
appliedqueryQuery aplicada (ao aplicar/limpar/remover)
initializedqueryQuery inicial, emitida ao montar

Slots

SlotPropsDescrição
fields{ query }Campos do filtro, ligados ao rascunho