material-react-table 2.11.3 → 2.12.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/README.md +29 -22
- package/dist/index.d.ts +19 -1
- package/dist/index.esm.js +116 -70
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +117 -69
- package/dist/index.js.map +1 -1
- package/package.json +16 -16
- package/src/components/body/MRT_TableBodyCell.tsx +7 -0
- package/src/components/body/MRT_TableBodyRow.tsx +5 -0
- package/src/components/body/MRT_TableDetailPanel.tsx +2 -5
- package/src/components/head/MRT_TableHead.tsx +11 -11
- package/src/components/head/MRT_TableHeadCell.tsx +7 -0
- package/src/components/head/MRT_TableHeadCellFilterContainer.tsx +3 -4
- package/src/components/head/MRT_TableHeadCellFilterLabel.tsx +61 -37
- package/src/components/inputs/MRT_FilterRangeFields.tsx +8 -2
- package/src/components/inputs/MRT_FilterTextField.tsx +29 -38
- package/src/components/table/MRT_TablePaper.tsx +4 -4
- package/src/components/toolbar/MRT_ToolbarDropZone.tsx +5 -0
- package/src/hooks/display-columns/getMRT_RowActionsColumnDef.tsx +1 -1
- package/src/hooks/display-columns/getMRT_RowDragColumnDef.tsx +1 -1
- package/src/hooks/display-columns/getMRT_RowExpandColumnDef.tsx +1 -1
- package/src/hooks/display-columns/getMRT_RowNumbersColumnDef.tsx +1 -1
- package/src/hooks/display-columns/getMRT_RowPinningColumnDef.tsx +1 -1
- package/src/hooks/display-columns/getMRT_RowSelectColumnDef.tsx +1 -1
- package/src/hooks/display-columns/getMRT_RowSpacerColumnDef.tsx +1 -1
- package/src/utils/column.utils.ts +86 -0
- package/src/utils/utils.ts +1 -1
@@ -1,12 +1,16 @@
|
|
1
|
+
import { useMemo } from 'react';
|
1
2
|
import { type Row } from '@tanstack/react-table';
|
2
3
|
import {
|
4
|
+
type DropdownOption,
|
3
5
|
type MRT_Column,
|
4
6
|
type MRT_ColumnDef,
|
5
7
|
type MRT_ColumnOrderState,
|
6
8
|
type MRT_DefinedColumnDef,
|
7
9
|
type MRT_DefinedTableOptions,
|
8
10
|
type MRT_FilterOption,
|
11
|
+
type MRT_Header,
|
9
12
|
type MRT_RowData,
|
13
|
+
type MRT_TableInstance,
|
10
14
|
} from '../types';
|
11
15
|
|
12
16
|
export const getColumnId = <TData extends MRT_RowData>(
|
@@ -121,3 +125,85 @@ export const getDefaultColumnFilterFn = <TData extends MRT_RowData>(
|
|
121
125
|
return 'equals';
|
122
126
|
return 'fuzzy';
|
123
127
|
};
|
128
|
+
|
129
|
+
export const getColumnFilterInfo = <TData extends MRT_RowData>({
|
130
|
+
header,
|
131
|
+
table,
|
132
|
+
}: {
|
133
|
+
header: MRT_Header<TData>;
|
134
|
+
table: MRT_TableInstance<TData>;
|
135
|
+
}) => {
|
136
|
+
const {
|
137
|
+
options: { columnFilterModeOptions },
|
138
|
+
} = table;
|
139
|
+
const { column } = header;
|
140
|
+
const { columnDef } = column;
|
141
|
+
const { filterVariant } = columnDef;
|
142
|
+
|
143
|
+
const isDateFilter = !!(
|
144
|
+
filterVariant?.startsWith('date') || filterVariant?.startsWith('time')
|
145
|
+
);
|
146
|
+
const isAutocompleteFilter = filterVariant === 'autocomplete';
|
147
|
+
const isRangeFilter =
|
148
|
+
filterVariant?.includes('range') ||
|
149
|
+
['between', 'betweenInclusive', 'inNumberRange'].includes(
|
150
|
+
columnDef._filterFn,
|
151
|
+
);
|
152
|
+
const isSelectFilter = filterVariant === 'select';
|
153
|
+
const isMultiSelectFilter = filterVariant === 'multi-select';
|
154
|
+
const isTextboxFilter =
|
155
|
+
['autocomplete', 'text'].includes(filterVariant!) ||
|
156
|
+
(!isSelectFilter && !isMultiSelectFilter);
|
157
|
+
const currentFilterOption = columnDef._filterFn;
|
158
|
+
|
159
|
+
const allowedColumnFilterOptions =
|
160
|
+
columnDef?.columnFilterModeOptions ?? columnFilterModeOptions;
|
161
|
+
|
162
|
+
const facetedUniqueValues = column.getFacetedUniqueValues();
|
163
|
+
|
164
|
+
return {
|
165
|
+
allowedColumnFilterOptions,
|
166
|
+
currentFilterOption,
|
167
|
+
facetedUniqueValues,
|
168
|
+
isAutocompleteFilter,
|
169
|
+
isDateFilter,
|
170
|
+
isMultiSelectFilter,
|
171
|
+
isRangeFilter,
|
172
|
+
isSelectFilter,
|
173
|
+
isTextboxFilter,
|
174
|
+
} as const;
|
175
|
+
};
|
176
|
+
|
177
|
+
export const useDropdownOptions = <TData extends MRT_RowData>({
|
178
|
+
header,
|
179
|
+
table,
|
180
|
+
}: {
|
181
|
+
header: MRT_Header<TData>;
|
182
|
+
table: MRT_TableInstance<TData>;
|
183
|
+
}): DropdownOption[] | undefined => {
|
184
|
+
const { column } = header;
|
185
|
+
const { columnDef } = column;
|
186
|
+
const {
|
187
|
+
facetedUniqueValues,
|
188
|
+
isAutocompleteFilter,
|
189
|
+
isMultiSelectFilter,
|
190
|
+
isSelectFilter,
|
191
|
+
} = getColumnFilterInfo({ header, table });
|
192
|
+
|
193
|
+
return useMemo<DropdownOption[] | undefined>(
|
194
|
+
() =>
|
195
|
+
columnDef.filterSelectOptions ??
|
196
|
+
((isSelectFilter || isMultiSelectFilter || isAutocompleteFilter) &&
|
197
|
+
facetedUniqueValues
|
198
|
+
? Array.from(facetedUniqueValues.keys())
|
199
|
+
.filter((value) => value !== null && value !== undefined)
|
200
|
+
.sort((a, b) => a.localeCompare(b))
|
201
|
+
: undefined),
|
202
|
+
[
|
203
|
+
columnDef.filterSelectOptions,
|
204
|
+
facetedUniqueValues,
|
205
|
+
isMultiSelectFilter,
|
206
|
+
isSelectFilter,
|
207
|
+
],
|
208
|
+
);
|
209
|
+
};
|
package/src/utils/utils.ts
CHANGED
@@ -6,7 +6,7 @@ export const parseFromValuesOrFunc = <T, U>(
|
|
6
6
|
): T | undefined => (fn instanceof Function ? fn(arg) : fn);
|
7
7
|
|
8
8
|
export const getValueAndLabel = (
|
9
|
-
option
|
9
|
+
option?: DropdownOption,
|
10
10
|
): { label: string; value: string } => {
|
11
11
|
let label: string = '';
|
12
12
|
let value: string = '';
|