@cutting/material-react-table 5.0.0-beta.1 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +80 -77
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/package.json +34 -34
- package/src/fns/filterFns.test.tsx +1 -0
- package/src/fns/filterFns.ts +2 -0
- package/src/fns/sortingFns.test.tsx +55 -0
- package/src/fns/sortingFns.ts +5 -1
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "5.0.0
|
|
2
|
+
"version": "5.0.0",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"name": "@cutting/material-react-table",
|
|
5
5
|
"description": "Maintenance fork of material-react-table updated for Material UI v9. A fully featured Material UI implementation of TanStack React Table V8.",
|
|
@@ -52,42 +52,42 @@
|
|
|
52
52
|
"@eslint/eslintrc": "^3.3.7",
|
|
53
53
|
"@eslint/js": "^10.0.1",
|
|
54
54
|
"@faker-js/faker": "^10.6.0",
|
|
55
|
-
"@mui/icons-material": "^9.
|
|
56
|
-
"@mui/material": "^9.
|
|
57
|
-
"@mui/x-date-pickers": "^9.
|
|
58
|
-
"@size-limit/preset-small-lib": "^
|
|
59
|
-
"@storybook/addon-a11y": "^10.6.
|
|
60
|
-
"@storybook/addon-docs": "^10.6.
|
|
61
|
-
"@storybook/addon-links": "^10.6.
|
|
62
|
-
"@storybook/react-vite": "^10.6.
|
|
55
|
+
"@mui/icons-material": "^9.5.0",
|
|
56
|
+
"@mui/material": "^9.5.0",
|
|
57
|
+
"@mui/x-date-pickers": "^9.16.0",
|
|
58
|
+
"@size-limit/preset-small-lib": "^14.2.0",
|
|
59
|
+
"@storybook/addon-a11y": "^10.6.3",
|
|
60
|
+
"@storybook/addon-docs": "^10.6.3",
|
|
61
|
+
"@storybook/addon-links": "^10.6.3",
|
|
62
|
+
"@storybook/react-vite": "^10.6.3",
|
|
63
63
|
"@testing-library/jest-dom": "^7.0.1",
|
|
64
64
|
"@testing-library/react": "^16.3.3",
|
|
65
|
-
"@testing-library/user-event": "^14.6.
|
|
66
|
-
"@types/node": "^26.5
|
|
67
|
-
"@types/react": "^19.
|
|
68
|
-
"@types/react-dom": "^19.
|
|
69
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
70
|
-
"@typescript-eslint/parser": "^8.
|
|
71
|
-
"@vitejs/plugin-react": "^6.1.
|
|
65
|
+
"@testing-library/user-event": "^14.6.8",
|
|
66
|
+
"@types/node": "^26.6.5",
|
|
67
|
+
"@types/react": "^19.3.0",
|
|
68
|
+
"@types/react-dom": "^19.3.0",
|
|
69
|
+
"@typescript-eslint/eslint-plugin": "^8.72.0",
|
|
70
|
+
"@typescript-eslint/parser": "^8.72.0",
|
|
71
|
+
"@vitejs/plugin-react": "^6.1.2",
|
|
72
72
|
"dayjs": "^1.11.23",
|
|
73
|
-
"eslint": "^10.
|
|
73
|
+
"eslint": "^10.13.0",
|
|
74
74
|
"eslint-plugin-mui-path-imports": "^0.0.15",
|
|
75
|
-
"eslint-plugin-perfectionist": "^5.
|
|
76
|
-
"eslint-plugin-storybook": "^10.6.
|
|
77
|
-
"globals": "^17.
|
|
78
|
-
"jsdom": "^30.
|
|
79
|
-
"react": "^19.
|
|
80
|
-
"react-dom": "^19.
|
|
81
|
-
"react-is": "^19.
|
|
82
|
-
"rolldown": "^1.2.
|
|
83
|
-
"size-limit": "^
|
|
84
|
-
"storybook": "^10.6.
|
|
75
|
+
"eslint-plugin-perfectionist": "^5.13.0",
|
|
76
|
+
"eslint-plugin-storybook": "^10.6.3",
|
|
77
|
+
"globals": "^17.13.0",
|
|
78
|
+
"jsdom": "^30.1.3",
|
|
79
|
+
"react": "^19.3.1",
|
|
80
|
+
"react-dom": "^19.3.1",
|
|
81
|
+
"react-is": "^19.3.1",
|
|
82
|
+
"rolldown": "^1.2.14",
|
|
83
|
+
"size-limit": "^14.2.0",
|
|
84
|
+
"storybook": "^10.6.3",
|
|
85
85
|
"storybook-dark-mode": "^5.0.0",
|
|
86
|
-
"tsdown": "^0.23.
|
|
86
|
+
"tsdown": "^0.23.1",
|
|
87
87
|
"tslib": "^2.8.1",
|
|
88
88
|
"typescript": "6.0.3",
|
|
89
|
-
"vite": "^8.
|
|
90
|
-
"vitest": "^5.0.
|
|
89
|
+
"vite": "^8.3.5",
|
|
90
|
+
"vitest": "^5.0.5"
|
|
91
91
|
},
|
|
92
92
|
"peerDependencies": {
|
|
93
93
|
"@emotion/react": ">=11.13",
|
|
@@ -99,10 +99,10 @@
|
|
|
99
99
|
"react-dom": ">=19.0"
|
|
100
100
|
},
|
|
101
101
|
"dependencies": {
|
|
102
|
-
"@tanstack/match-sorter-utils": "9.
|
|
103
|
-
"@tanstack/react-table": "9.
|
|
104
|
-
"@tanstack/react-virtual": "3.14.
|
|
105
|
-
"@tanstack/table-core": "9.
|
|
102
|
+
"@tanstack/match-sorter-utils": "9.2.6",
|
|
103
|
+
"@tanstack/react-table": "9.3.1",
|
|
104
|
+
"@tanstack/react-virtual": "3.14.21",
|
|
105
|
+
"@tanstack/table-core": "9.3.1",
|
|
106
106
|
"highlight-words": "2.0.0"
|
|
107
107
|
},
|
|
108
108
|
"exports": {
|
|
@@ -135,6 +135,7 @@ describe('column filter fns', () => {
|
|
|
135
135
|
['greaterThanOrEqualTo', 30, ['Alice', 'alice']],
|
|
136
136
|
['lessThan', 30, ['Bob']],
|
|
137
137
|
['lessThanOrEqualTo', 20, ['Bob']],
|
|
138
|
+
['weakEquals', '30', ['Alice']],
|
|
138
139
|
])('%s filters the age column', (filterFn, value, expected) => {
|
|
139
140
|
expect(renderFiltered('age', filterFn, value)).toEqual(expected);
|
|
140
141
|
});
|
package/src/fns/filterFns.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
filterFn_includesString,
|
|
9
9
|
filterFn_includesStringSensitive,
|
|
10
10
|
filterFn_inNumberRange,
|
|
11
|
+
filterFn_weakEquals,
|
|
11
12
|
type FilterMeta,
|
|
12
13
|
type Row,
|
|
13
14
|
} from '@tanstack/react-table';
|
|
@@ -208,4 +209,5 @@ export const MRT_FilterFns = {
|
|
|
208
209
|
notEmpty,
|
|
209
210
|
notEquals,
|
|
210
211
|
startsWith,
|
|
212
|
+
weakEquals: filterFn_weakEquals,
|
|
211
213
|
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { render } from '@testing-library/react';
|
|
2
|
+
import { describe, expect, test } from 'vitest';
|
|
3
|
+
|
|
4
|
+
import { MaterialReactTable } from '../components/MaterialReactTable';
|
|
5
|
+
import { type MRT_ColumnDef } from '../types';
|
|
6
|
+
|
|
7
|
+
interface Item {
|
|
8
|
+
code: string;
|
|
9
|
+
count: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const items: Item[] = [
|
|
13
|
+
{ code: 'item10', count: 100 },
|
|
14
|
+
{ code: 'item9', count: 9 },
|
|
15
|
+
{ code: 'item100', count: 10 },
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
const renderSorted = (columnId: keyof Item, sortFn: string) => {
|
|
19
|
+
const columns: MRT_ColumnDef<Item>[] = [
|
|
20
|
+
{ accessorKey: 'code', header: 'Code' },
|
|
21
|
+
{ accessorKey: 'count', header: 'Count' },
|
|
22
|
+
].map((column) =>
|
|
23
|
+
column.accessorKey === columnId ? { ...column, sortFn } : column,
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
const { container } = render(
|
|
27
|
+
<MaterialReactTable
|
|
28
|
+
columns={columns}
|
|
29
|
+
data={items}
|
|
30
|
+
initialState={{ sorting: [{ desc: false, id: columnId }] }}
|
|
31
|
+
/>,
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
return Array.from(container.querySelectorAll('tbody tr')).map(
|
|
35
|
+
(row) => row.querySelector('td')?.textContent,
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
describe('sort fns', () => {
|
|
40
|
+
test('alphanumericCaseSensitive sorts the numbers inside the code', () => {
|
|
41
|
+
expect(renderSorted('code', 'alphanumericCaseSensitive')).toEqual([
|
|
42
|
+
'item9',
|
|
43
|
+
'item10',
|
|
44
|
+
'item100',
|
|
45
|
+
]);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test('textCaseSensitive sorts the count as text', () => {
|
|
49
|
+
expect(renderSorted('count', 'textCaseSensitive')).toEqual([
|
|
50
|
+
'item100',
|
|
51
|
+
'item10',
|
|
52
|
+
'item9',
|
|
53
|
+
]);
|
|
54
|
+
});
|
|
55
|
+
});
|
package/src/fns/sortingFns.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { compareItems, type RankingInfo } from '@tanstack/match-sorter-utils';
|
|
2
2
|
import {
|
|
3
|
+
type Row,
|
|
3
4
|
sortFn_alphanumeric,
|
|
5
|
+
sortFn_alphanumericCaseSensitive,
|
|
4
6
|
sortFn_basic,
|
|
5
7
|
sortFn_datetime,
|
|
6
8
|
sortFn_text,
|
|
9
|
+
sortFn_textCaseSensitive,
|
|
7
10
|
} from '@tanstack/react-table';
|
|
8
|
-
import { type Row } from '@tanstack/react-table';
|
|
9
11
|
|
|
10
12
|
import { type MRT_Row, type MRT_RowData } from '../types';
|
|
11
13
|
|
|
@@ -29,10 +31,12 @@ const fuzzy = <TData extends MRT_RowData>(
|
|
|
29
31
|
|
|
30
32
|
export const MRT_SortingFns = {
|
|
31
33
|
alphanumeric: sortFn_alphanumeric,
|
|
34
|
+
alphanumericCaseSensitive: sortFn_alphanumericCaseSensitive,
|
|
32
35
|
basic: sortFn_basic,
|
|
33
36
|
datetime: sortFn_datetime,
|
|
34
37
|
fuzzy,
|
|
35
38
|
text: sortFn_text,
|
|
39
|
+
textCaseSensitive: sortFn_textCaseSensitive,
|
|
36
40
|
};
|
|
37
41
|
|
|
38
42
|
export const rankGlobalFuzzy = <TData extends MRT_RowData>(
|