When using Typescript define the type of custom function. Here in below example, define function FilterFn and ensure the function uses TData for type checking.

import React, { useState } from "react";
import Fuse from 'fuse.js'; // Ensure you have imported Fuse
/**
 * FilterFunction for Tanstack Table incorporating fuse's fuzzy search
 */
export const fuseFilterFn = <TData extends RowData>(
  row: Row<TData>,
  columnId: string,
  filterValue: any,
  addMeta: (meta: FilterMeta) => void
): boolean => {
  const searchPattern = filterValue.toString();
  // Retrieve the value from the row based on the columnId
  const value = row.getValue(columnId) as string;
  // Initialize Fuse with the value
  const fuse = new Fuse([value]);
  // Perform the search
  const searchResults = fuse.search(searchPattern);
  if (searchResults.length > 0) {
    // If any search result is found, consider the row as a match
    addMeta({ searchResults }); // Optionally, add any metadata for the search results
   return true;
  }
  return false;
};

The type RowData should be imported from Tanstack Table’s core or should be defined if it’s a custom type.
Integrating with the Table

The fuseFilterFn is passed directly to the useReactTable’s configuration:

const table = useReactTable({
  data,
  columns,
  getCoreRowModel: getCoreRowModel(),
  getSortedRowModel: getSortedRowModel(),
  getPaginationRowModel: getPaginationRowModel(),
  getFilteredRowModel: getFilteredRowModel(),
  state: {
    sorting: sorting,
    globalFilter: filtering,
    columnFilters: columnFilters,
  },
  globalFilterFn: fuseFilterFn, // Correctly typed custom filter function
  onSortingChange: setSorting,
  onGlobalFilterChange: setFiltering,
});

Support On Demand!

ReactJS

Related Q&A