AdaptTable for shadcn-vue

Filtering in shadcn-vue

Declare what a column filters by and the table builds the form: text with its operators, number and date ranges, multi-select checkboxes and a yes/no choice, each using shadcn-vue controls.

Filters opens as an anchored popover or as a drawer, with an AND/OR tree at the top for what one row of inputs cannot say. Header funnels filter one column in place, and every active filter shows as a chip that removes itself.

Filter state lives in the versioned URL, so a filtered view is a link someone can send.

The code

<script setup lang="ts">
import type { ColumnDef } from "@adapttable/vue";
import { DataTable } from "@adapttable/shadcn-vue";
import { filters } from "@adapttable/shadcn-vue/filters";
import { headerFilters } from "@adapttable/shadcn-vue/header-filters";

defineProps<{ rows: readonly Person[] }>();

const columns: ColumnDef<Person>[] = [
  { key: "name", filter: "text" },
  { key: "team", filter: { type: "multiSelect", options: "auto" } },
  { key: "budget", filter: "numberRange" },
  { key: "hiredAt", filter: "dateRange" },
];
const rowKey = (row: Person) => row.id;
const features = [filters<Person>([], { mode: "popover" }), headerFilters()];
</script>

<template>
  <DataTable
    :data="rows"
    :columns="columns"
    :row-key="rowKey"
    url-key="f"
    :features="features"
  />
</template>

Install

pnpm add @adapttable/shadcn-vue @adapttable/vue @adapttable/core reka-ui

The same feature in the other kits

More shadcn-vue features

Reference: filtering, filter-tree, url-state. More of this kit: AdaptTable for shadcn-vue, or the live demo.