Blog>
Snippets

Integrating Fuzzy Searching as a Column Filter in React TanStack Table

Illustrate the implementation of a fuzzy search mechanism as a filter in React TanStack Table, utilizing an external library like Fuse.js to filter rows based on a fuzzy match.
import React from 'react';
import { useTable, useFilters } from 'react-table';
import Fuse from 'fuse.js';
Imports React, necessary hooks from React Table, and the Fuse.js library for fuzzy searching.
function fuzzyTextFilterFn(rows, id, filterValue) {
  const fuse = new Fuse(rows, {
    keys: ["values." + id],
    includeScore: true
  });
  const result = fuse.search(filterValue);
  return result.map(({item}) => item);
}
Defines a custom fuzzy search filter function using Fuse.js. This function takes rows, a column ID, and the filter value, then returns the filtered rows.
fuzzyTextFilterFn.autoRemove = val => !val;
Optimizes the filtering process by automatically removing the filter if the filter value is falsy.
const columns = React.useMemo(() => [
  {
    Header: 'Name',
    accessor: 'name',
    filter: 'fuzzyText',
  },
  // Add more columns as needed
], []);
Defines the table columns, specifying the use of the 'fuzzyText' filter for the 'Name' column.
const filterTypes = React.useMemo(
  () => ({
    fuzzyText: fuzzyTextFilterFn,
  }),
  []
);
Registers the fuzzyText filter function.
const TableComponent = ({ columns, data }) => {
  const {
    getTableProps,
    getTableBodyProps,
    headerGroups,
    rows,
    prepareRow,
  } = useTable(
    {
      columns,
      data,
      filterTypes,
    },
    useFilters
  );

  // Table markup using getTableProps and other React Table hooks here
};
Implements the table component, integrating the fuzzy search filter with useTable and useFilters hooks.