mantine-react-table
Version:
A fully featured Mantine implementation of TanStack React Table V8, written from the ground up in TypeScript.
34 lines (30 loc) • 1.02 kB
text/typescript
import { compareItems, type RankingInfo } from '@tanstack/match-sorter-utils';
import { type Row, sortingFns } from '@tanstack/react-table';
import { type MRT_Row } from './types';
const fuzzy = <TData extends Record<string, any> = {}>(
rowA: Row<TData>,
rowB: Row<TData>,
columnId: string,
) => {
let dir = 0;
if (rowA.columnFiltersMeta[columnId]) {
dir = compareItems(
rowA.columnFiltersMeta[columnId] as RankingInfo,
rowB.columnFiltersMeta[columnId] as RankingInfo,
);
}
// Provide a fallback for when the item ranks are equal
return dir === 0
? sortingFns.alphanumeric(rowA as Row<any>, rowB as Row<any>, columnId)
: dir;
};
export const MRT_SortingFns = {
...sortingFns,
fuzzy,
};
export const rankGlobalFuzzy = <TData extends Record<string, any> = {}>(
rowA: MRT_Row<TData>,
rowB: MRT_Row<TData>,
) =>
Math.max(...Object.values(rowB.columnFiltersMeta).map((v: any) => v.rank)) -
Math.max(...Object.values(rowA.columnFiltersMeta).map((v: any) => v.rank));