AdaptTable for Vue Unstyled

Filtering in Vue Unstyled

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 Vue Unstyled 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/vue-unstyled";
import { filters } from "@adapttable/vue-unstyled/filters";
import { headerFilters } from "@adapttable/vue-unstyled/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/vue-unstyled @adapttable/vue @adapttable/core

The same feature in the other kits

More Vue Unstyled features

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