material-react-table 2.0.0-rc.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.0.0-rc.0",
2
+ "version": "2.0.0",
3
3
  "license": "MIT",
4
4
  "name": "material-react-table",
5
5
  "description": "A fully featured Material UI V5 implementation of TanStack React Table V8, written from the ground up in TypeScript.",
@@ -66,9 +66,9 @@
66
66
  "@emotion/react": "^11.11.1",
67
67
  "@emotion/styled": "^11.11.0",
68
68
  "@faker-js/faker": "^8.2.0",
69
- "@mui/icons-material": "^5.14.14",
70
- "@mui/material": "^5.14.14",
71
- "@mui/x-date-pickers": "^6.16.3",
69
+ "@mui/icons-material": "^5.14.15",
70
+ "@mui/material": "^5.14.15",
71
+ "@mui/x-date-pickers": "^6.17.0",
72
72
  "@rollup/plugin-typescript": "^11.1.5",
73
73
  "@size-limit/preset-small-lib": "^10.0.1",
74
74
  "@storybook/addon-a11y": "^7.5.1",
@@ -80,8 +80,8 @@
80
80
  "@storybook/react": "^7.5.1",
81
81
  "@storybook/react-vite": "^7.5.1",
82
82
  "@storybook/testing-library": "^0.2.2",
83
- "@types/node": "^20.8.8",
84
- "@types/react": "^18.2.31",
83
+ "@types/node": "^20.8.9",
84
+ "@types/react": "^18.2.33",
85
85
  "@types/react-dom": "^18.2.14",
86
86
  "@typescript-eslint/eslint-plugin": "^6.9.0",
87
87
  "@typescript-eslint/parser": "^6.9.0",
@@ -50,6 +50,7 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
50
50
  const {
51
51
  getState,
52
52
  options: {
53
+ columnResizeMode,
53
54
  createDisplayMode,
54
55
  editDisplayMode,
55
56
  enableClickToCopy,
@@ -118,19 +119,21 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
118
119
  const isFirstColumn = getIsFirstColumn(column, table);
119
120
  const isLastColumn = getIsLastColumn(column, table);
120
121
  const isLastRow = numRows && rowIndex === numRows - 1;
122
+ const showResizeBorder =
123
+ columnSizingInfo.isResizingColumn === column.id &&
124
+ columnResizeMode === 'onChange';
121
125
 
122
- const borderStyle =
123
- columnSizingInfo.isResizingColumn === column.id
124
- ? `2px solid ${draggingBorderColor} !important`
125
- : isDraggingColumn || isDraggingRow
126
- ? `1px dashed ${theme.palette.grey[500]} !important`
127
- : isHoveredColumn ||
128
- isHoveredRow ||
129
- columnSizingInfo.isResizingColumn === column.id
130
- ? `2px dashed ${draggingBorderColor} !important`
131
- : undefined;
126
+ const borderStyle = showResizeBorder
127
+ ? `2px solid ${draggingBorderColor} !important`
128
+ : isDraggingColumn || isDraggingRow
129
+ ? `1px dashed ${theme.palette.grey[500]} !important`
130
+ : isHoveredColumn ||
131
+ isHoveredRow ||
132
+ columnSizingInfo.isResizingColumn === column.id
133
+ ? `2px dashed ${draggingBorderColor} !important`
134
+ : undefined;
132
135
 
133
- if (columnSizingInfo.isResizingColumn === column.id) {
136
+ if (showResizeBorder) {
134
137
  return { borderRight: borderStyle };
135
138
  }
136
139
 
@@ -56,7 +56,7 @@ export const MRT_TableBodyCellValue = <TData extends MRT_RowData>({
56
56
  if (
57
57
  enableFilterMatchHighlighting &&
58
58
  columnDef.enableFilterMatchHighlighting !== false &&
59
- renderedCellValue &&
59
+ String(renderedCellValue) &&
60
60
  allowedTypes.includes(typeof renderedCellValue) &&
61
61
  ((filterValue &&
62
62
  allowedTypes.includes(typeof filterValue) &&
@@ -32,6 +32,7 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
32
32
  getState,
33
33
  options: {
34
34
  columnFilterDisplayMode,
35
+ columnResizeMode,
35
36
  enableColumnActions,
36
37
  enableColumnDragging,
37
38
  enableColumnOrdering,
@@ -88,17 +89,20 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
88
89
  }, [showColumnActions, showDragHandle]);
89
90
 
90
91
  const draggingBorders = useMemo(() => {
91
- const borderStyle =
92
+ const showResizeBorder =
92
93
  columnSizingInfo.isResizingColumn === column.id &&
93
- !header.subHeaders.length
94
- ? `2px solid ${draggingBorderColor} !important`
95
- : draggingColumn?.id === column.id
96
- ? `1px dashed ${theme.palette.grey[500]}`
97
- : hoveredColumn?.id === column.id
98
- ? `2px dashed ${draggingBorderColor}`
99
- : undefined;
94
+ columnResizeMode === 'onChange' &&
95
+ !header.subHeaders.length;
100
96
 
101
- if (columnSizingInfo.isResizingColumn === column.id) {
97
+ const borderStyle = showResizeBorder
98
+ ? `2px solid ${draggingBorderColor} !important`
99
+ : draggingColumn?.id === column.id
100
+ ? `1px dashed ${theme.palette.grey[500]}`
101
+ : hoveredColumn?.id === column.id
102
+ ? `2px dashed ${draggingBorderColor}`
103
+ : undefined;
104
+
105
+ if (showResizeBorder) {
102
106
  return { borderRight: borderStyle };
103
107
  }
104
108
  const draggingBorders = borderStyle
@@ -46,7 +46,8 @@ export const MRT_TableHeadCellResizeHandle = <TData extends MRT_RowData>({
46
46
  sx={(theme) => ({
47
47
  '&:active > hr': {
48
48
  backgroundColor: theme.palette.info.main,
49
- opacity: header.subHeaders.length ? 1 : 0,
49
+ opacity:
50
+ header.subHeaders.length || columnResizeMode === 'onEnd' ? 1 : 0,
50
51
  },
51
52
  cursor: 'col-resize',
52
53
  mr:
@@ -73,7 +73,7 @@ export const useMRT_TableOptions: <TData extends MRT_RowData>(
73
73
  enableTopToolbar = true,
74
74
  filterFns,
75
75
  icons,
76
- layoutMode = 'semantic',
76
+ layoutMode,
77
77
  localization,
78
78
  manualFiltering,
79
79
  manualGrouping,
@@ -118,13 +118,13 @@ export const useMRT_TableOptions: <TData extends MRT_RowData>(
118
118
  [defaultDisplayColumn],
119
119
  );
120
120
 
121
- if (layoutMode === 'semantic') {
122
- if (rest.enableRowVirtualization || rest.enableColumnVirtualization) {
123
- layoutMode = 'grid';
124
- }
125
- if (enableColumnResizing) {
126
- layoutMode = 'grid-no-grow';
127
- }
121
+ layoutMode =
122
+ layoutMode || (enableColumnResizing ? 'grid-no-grow' : 'semantic');
123
+ if (
124
+ layoutMode === 'semantic' &&
125
+ (rest.enableRowVirtualization || rest.enableColumnVirtualization)
126
+ ) {
127
+ layoutMode = 'grid';
128
128
  }
129
129
 
130
130
  if (rest.enableRowVirtualization) {
@@ -65,7 +65,9 @@ export const MRT_Table = <TData extends MRT_RowData>({
65
65
  const colSizes: { [key: string]: number } = {};
66
66
  for (let i = 0; i < headers.length; i++) {
67
67
  const header = headers[i];
68
- const colSize = header.getSize();
68
+ let colSize = header.getSize();
69
+ if (header.subHeaders?.length)
70
+ colSize = colSize * 1.05 + header.subHeaders.length * 2;
69
71
  colSizes[`--header-${parseCSSVarId(header.id)}-size`] = colSize;
70
72
  colSizes[`--col-${parseCSSVarId(header.column.id)}-size`] = colSize;
71
73
  }
package/src/types.ts CHANGED
@@ -714,7 +714,7 @@ export type MRT_TableOptions<TData extends MRT_RowData> = Omit<
714
714
  }) => Partial<VirtualizerOptions<HTMLDivElement, HTMLTableCellElement>>)
715
715
  | Partial<VirtualizerOptions<HTMLDivElement, HTMLTableCellElement>>;
716
716
  /**
717
- * The columns to display in the table. `accessorKey`s or `accessorFn`s must match keys in the `data` prop.
717
+ * The columns to display in the table. `accessorKey`s or `accessorFn`s must match keys in the `data` table option.
718
718
  *
719
719
  * See more info on creating columns on the official docs site:
720
720
  * @link https://www.material-react-table.com/docs/guides/data-columns
@@ -733,7 +733,7 @@ export type MRT_TableOptions<TData extends MRT_RowData> = Omit<
733
733
  */
734
734
  data: TData[];
735
735
  /**
736
- * Instead of specifying a bunch of the same options for each column, you can just change an option in the `defaultColumn` prop to change a default option for all columns.
736
+ * Instead of specifying a bunch of the same options for each column, you can just change an option in the `defaultColumn` table option to change a default option for all columns.
737
737
  */
738
738
  defaultColumn?: Partial<MRT_ColumnDef<TData>>;
739
739
  /**