@fuegonju, thank you for your solution. I can confirm that this is a correct approach for managing column filter modes in Material React Table with server-side filtering. Here's why it works well:
Proper Utilization of MRT's State Management:
1- The provided solution effectively uses MRT's state management by leveraging the columnFilterFns state to track filter modes for each column.
const [columnFilterFns, setColumnFilterFns] = useState<Record<string, string>>(
Object.fromEntries(
columns.map(({ accessorKey }) => [accessorKey as string, 'contains'])
)
);
2- Seamless Integration with MRT's Filter Mode System:
3- Effective Server-Side Implementation:
const getQueryParams = (filters, columnFilterFns) => {
return filters.reduce((acc, filter) => {
const filterMode = columnFilterFns[filter.id];
// Map to backend filter syntax (e.g., __icontains, __startswith)
return {
...acc,
[`${filter.id}__${getBackendFilterSuffix(filterMode)}`]: filter.value
};
}, {});
};
4-Additional Improvement – Type Safety with TypeScript:
Defining Filter Modes:
type FilterMode = 'contains' | 'startsWith' | 'equals';
type ColumnFilterFns = Record<string, FilterMode>;