Skip to content

Commit f705a2d

Browse files
committed
rework filter tooltip label logic
1 parent d573ef7 commit f705a2d

17 files changed

+246
-142
lines changed

README.md

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@ View [Documentation](https://www.material-react-table.com/)
1616
</a>
1717
<a href="https://github.com/KevinVandy/material-react-table/blob/v2/LICENSE" target="_blank">
1818
<img alt="" src="https://badgen.net/github/license/KevinVandy/material-react-table?color=blue" />
19-
</a>
20-
<a href="http://makeapullrequest.com" target="_blank">
21-
<img alt="" src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square" />
2219
</a>
2320
<a
2421
href="https://github.com/sponsors/kevinvandy"
@@ -27,14 +24,21 @@ View [Documentation](https://www.material-react-table.com/)
2724
>
2825
<img alt="" src="https://img.shields.io/badge/sponsor-violet" />
2926
</a>
27+
<a
28+
href="https://discord.gg/5wqyRx6fnm"
29+
target="_blank"
30+
rel="noopener"
31+
>
32+
<img alt="" src="https://dcbadge.vercel.app/api/server/5wqyRx6fnm?style=flat">
33+
</a>
3034
3135
## About
3236

3337
### _Quickly Create React Data Tables with Material Design_
3438

35-
### __Built with [Material UI <sup>V5</sup>](https://mui.com) and [TanStack Table <sup>V8</sup>](https://tanstack.com/table/v8)__
39+
### **Built with [Material UI <sup>V5</sup>](https://mui.com) and [TanStack Table <sup>V8</sup>](https://tanstack.com/table/v8)**
3640

37-
<img src="https://material-react-table.com/banner.png" alt="MRT" height="50"/>
41+
<img src="https://material-react-table.com/banner.png" alt="MRT" height="50" />
3842

3943
> Want to use Mantine instead of Material UI? Check out [Mantine React Table](https://www.mantine-react-table.com)
4044
@@ -46,19 +50,19 @@ View [Documentation](https://www.material-react-table.com/)
4650

4751
### Quick Examples
4852

49-
- [Basic Table](https://www.material-react-table.com/docs/examples/basic/) (See Default Features)
50-
- [Minimal Table](https://www.material-react-table.com/docs/examples/minimal/) (Turn off Features like Pagination, Sorting, Filtering, and Toolbars)
51-
- [Advanced Table](https://www.material-react-table.com/docs/examples/advanced/) (See some of the Advanced Features)
52-
- [Custom Headless Table](https://www.material-react-table.com/docs/examples/custom-headless/) (Build your own table markup)
53-
- [Dragging / Ordering Examples](https://www.material-react-table.com/docs/examples/column-ordering/) (Drag and Drop)
54-
- [Editing (CRUD) Examples](https://www.material-react-table.com/docs/examples/editing-crud/) (Create, Edit, and Delete Rows)
55-
- [Expanding / Grouping Examples](https://www.material-react-table.com/docs/examples/aggregation-and-grouping/) (Sum, Average, Count, etc.)
56-
- [Filtering Examples](https://www.material-react-table.com/docs/examples/filter-variants/) (Faceted Values, Switching Filters, etc.)
57-
- [Sticky Pinning Examples](https://www.material-react-table.com/docs/examples/sticky-header/) (Sticky Headers, Sticky Columns, Sticky Rows, etc.)
58-
- [Remote Data Fetching Examples](https://www.material-react-table.com/docs/examples/react-query/) (Server-side Pagination, Sorting, and Filtering)
59-
- [Virtualized Examples](https://www.material-react-table.com/docs/examples/virtualized/) (10,000 rows at once!)
60-
- [Infinite Scrolling](https://www.material-react-table.com/docs/examples/infinite-scrolling/) (Fetch data as you scroll)
61-
- [Localization (i18n)](https://www.material-react-table.com/docs/guides/localization#built-in-locale-examples) (Over a dozen languages built-in)
53+
- [Basic Table](https://www.material-react-table.com/docs/examples/basic/) (See Default Features)
54+
- [Minimal Table](https://www.material-react-table.com/docs/examples/minimal/) (Turn off Features like Pagination, Sorting, Filtering, and Toolbars)
55+
- [Advanced Table](https://www.material-react-table.com/docs/examples/advanced/) (See some of the Advanced Features)
56+
- [Custom Headless Table](https://www.material-react-table.com/docs/examples/custom-headless/) (Build your own table markup)
57+
- [Dragging / Ordering Examples](https://www.material-react-table.com/docs/examples/column-ordering/) (Drag and Drop)
58+
- [Editing (CRUD) Examples](https://www.material-react-table.com/docs/examples/editing-crud/) (Create, Edit, and Delete Rows)
59+
- [Expanding / Grouping Examples](https://www.material-react-table.com/docs/examples/aggregation-and-grouping/) (Sum, Average, Count, etc.)
60+
- [Filtering Examples](https://www.material-react-table.com/docs/examples/filter-variants/) (Faceted Values, Switching Filters, etc.)
61+
- [Sticky Pinning Examples](https://www.material-react-table.com/docs/examples/sticky-header/) (Sticky Headers, Sticky Columns, Sticky Rows, etc.)
62+
- [Remote Data Fetching Examples](https://www.material-react-table.com/docs/examples/react-query/) (Server-side Pagination, Sorting, and Filtering)
63+
- [Virtualized Examples](https://www.material-react-table.com/docs/examples/virtualized/) (10,000 rows at once!)
64+
- [Infinite Scrolling](https://www.material-react-table.com/docs/examples/infinite-scrolling/) (Fetch data as you scroll)
65+
- [Localization (i18n)](https://www.material-react-table.com/docs/guides/localization#built-in-locale-examples) (Over a dozen languages built-in)
6266

6367
View additional [storybook examples](https://www.material-react-table.dev/)
6468

@@ -68,7 +72,7 @@ _All features can easily be enabled/disabled_
6872

6973
_**Fully Fleshed out [Docs](https://www.material-react-table.com/docs/guides#guides) are available for all features**_
7074

71-
- [x] 30-54kb gzipped - [Bundlephobia](https://bundlephobia.com/package/material-react-table)
75+
- [x] 30-56kb gzipped - [Bundlephobia](https://bundlephobia.com/package/material-react-table)
7276
- [x] Advanced TypeScript Generics Support (TypeScript Optional)
7377
- [x] Aggregation and Grouping (Sum, Average, Count, etc.)
7478
- [x] Cell Actions (Right-click Context Menu)
@@ -132,7 +136,10 @@ npm install material-react-table
132136
133137
```jsx
134138
import { useMemo, useState, useEffect } from 'react';
135-
import { MaterialReactTable, useMaterialReactTable } from 'material-react-table';
139+
import {
140+
MaterialReactTable,
141+
useMaterialReactTable,
142+
} from 'material-react-table';
136143

137144
//data must be stable reference (useState, useMemo, useQuery, defined outside of component, etc.)
138145
const data = [
@@ -144,7 +151,7 @@ const data = [
144151
name: 'Sara',
145152
age: 25,
146153
},
147-
]
154+
];
148155

149156
export default function App() {
150157
const columns = useMemo(
@@ -185,7 +192,7 @@ export default function App() {
185192
const someEventHandler = () => {
186193
//read the table state during an event from the table instance
187194
console.log(table.getState().sorting);
188-
}
195+
};
189196

190197
return (
191198
<MaterialReactTable table={table} /> //other more lightweight MRT sub components also available

packages/material-react-table/.eslintrc

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"extends": [
33
"eslint:recommended",
44
"plugin:@typescript-eslint/recommended",
5-
"plugin:perfectionist/recommended-natural"
5+
"plugin:perfectionist/recommended-natural",
66
],
77
"parser": "@typescript-eslint/parser",
88
"plugins": ["@typescript-eslint", "mui-path-imports", "perfectionist"],
@@ -16,12 +16,12 @@
1616
{
1717
"prefer": "type-imports",
1818
"disallowTypeAnnotations": true,
19-
"fixStyle": "inline-type-imports"
20-
}
19+
"fixStyle": "inline-type-imports",
20+
},
2121
],
2222
"mui-path-imports/mui-path-imports": "warn",
2323
"perfectionist/sort-imports": [
24-
"error",
24+
"warn",
2525
{
2626
"type": "natural",
2727
"order": "asc",
@@ -34,7 +34,7 @@
3434
"sibling-type",
3535
"parent",
3636
"parent-type",
37-
"style"
37+
"style",
3838
],
3939
"custom-groups": {
4040
"value": {
@@ -43,16 +43,16 @@
4343
"tanstack": "@tanstack/**",
4444
"mui": "@mui/**",
4545
"mrt": ["./MRT_**", "../**MRT_**", "../../src"],
46-
"faker": "@faker/**"
46+
"faker": "@faker/**",
4747
},
4848
"type": {
49-
"react": "react"
50-
}
49+
"react": "react",
50+
},
5151
},
52-
"newlines-between": "never"
53-
}
54-
]
52+
"newlines-between": "never",
53+
},
54+
],
5555
},
5656
"root": true,
57-
"ignorePatterns": ["dist/", "locales/", "node_modules/"]
57+
"ignorePatterns": ["dist/", "locales/", "node_modules/"],
5858
}

packages/material-react-table/src/components/head/MRT_TableHeadCell.tsx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
type MRT_RowData,
1616
type MRT_TableInstance,
1717
} from '../../types';
18+
import { useColumnFilterInfo } from '../../utils/column.utils';
1819
import { getCommonMRTCellStyles } from '../../utils/style.utils';
1920
import { parseFromValuesOrFunc } from '../../utils/utils';
2021

@@ -74,6 +75,11 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
7475
...rest,
7576
};
7677

78+
const columnFilterInfo = useColumnFilterInfo({
79+
header,
80+
table,
81+
});
82+
7783
const isColumnPinned =
7884
enableColumnPinning &&
7985
columnDef.columnDefType !== 'group' &&
@@ -276,7 +282,11 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
276282
{HeaderElement}
277283
</Box>
278284
{column.getCanFilter() && (
279-
<MRT_TableHeadCellFilterLabel header={header} table={table} />
285+
<MRT_TableHeadCellFilterLabel
286+
columnFilterInfo={columnFilterInfo}
287+
header={header}
288+
table={table}
289+
/>
280290
)}
281291
{column.getCanSort() && (
282292
<MRT_TableHeadCellSortLabel header={header} table={table} />
@@ -312,7 +322,11 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
312322
</Box>
313323
)}
314324
{columnFilterDisplayMode === 'subheader' && column.getCanFilter() && (
315-
<MRT_TableHeadCellFilterContainer header={header} table={table} />
325+
<MRT_TableHeadCellFilterContainer
326+
columnFilterInfo={columnFilterInfo}
327+
header={header}
328+
table={table}
329+
/>
316330
)}
317331
</TableCell>
318332
);

packages/material-react-table/src/components/head/MRT_TableHeadCellFilterContainer.tsx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
type MRT_RowData,
55
type MRT_TableInstance,
66
} from '../../types';
7+
import { type ColumnFilterInfo } from '../../utils/column.utils';
78
import { MRT_FilterCheckbox } from '../inputs/MRT_FilterCheckbox';
89
import { MRT_FilterRangeFields } from '../inputs/MRT_FilterRangeFields';
910
import { MRT_FilterRangeSlider } from '../inputs/MRT_FilterRangeSlider';
@@ -12,11 +13,13 @@ import { MRT_FilterTextField } from '../inputs/MRT_FilterTextField';
1213
export interface MRT_TableHeadCellFilterContainerProps<
1314
TData extends MRT_RowData,
1415
> extends CollapseProps {
16+
columnFilterInfo: ColumnFilterInfo;
1517
header: MRT_Header<TData>;
1618
table: MRT_TableInstance<TData>;
1719
}
1820

1921
export const MRT_TableHeadCellFilterContainer = <TData extends MRT_RowData>({
22+
columnFilterInfo,
2023
header,
2124
table,
2225
...rest
@@ -28,6 +31,7 @@ export const MRT_TableHeadCellFilterContainer = <TData extends MRT_RowData>({
2831
const { showColumnFilters } = getState();
2932
const { column } = header;
3033
const { columnDef } = column;
34+
const { isRangeFilter } = columnFilterInfo;
3135

3236
return (
3337
<Collapse
@@ -40,13 +44,18 @@ export const MRT_TableHeadCellFilterContainer = <TData extends MRT_RowData>({
4044
<MRT_FilterCheckbox column={column} table={table} />
4145
) : columnDef.filterVariant === 'range-slider' ? (
4246
<MRT_FilterRangeSlider header={header} table={table} />
43-
) : columnDef.filterVariant?.includes('range') ||
44-
['between', 'betweenInclusive', 'inNumberRange'].includes(
45-
columnDef._filterFn,
46-
) ? (
47-
<MRT_FilterRangeFields header={header} table={table} />
47+
) : isRangeFilter ? (
48+
<MRT_FilterRangeFields
49+
columnFilterInfo={columnFilterInfo}
50+
header={header}
51+
table={table}
52+
/>
4853
) : (
49-
<MRT_FilterTextField header={header} table={table} />
54+
<MRT_FilterTextField
55+
columnFilterInfo={columnFilterInfo}
56+
header={header}
57+
table={table}
58+
/>
5059
)}
5160
</Collapse>
5261
);

0 commit comments

Comments
 (0)