Skip to content

Commit 443bf1b

Browse files
committed
feat: Update to pin actions in show/hide columns menu
* Add option to enable/disable 'Unpin all'. Enabled by default. * Add new 'Reset pins' action that restores pinning to initial state. * Add option to enable/disable 'Reset pins' action. Disabled by default.
1 parent a16bafe commit 443bf1b

File tree

10 files changed

+53
-12
lines changed

10 files changed

+53
-12
lines changed

apps/material-react-table-docs/components/prop-tables/tableOptions.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,28 @@ export const tableOptions: TableOption[] = [
522522
source: '',
523523
type: 'boolean',
524524
},
525+
{
526+
tableOption: 'enableColumnResetPins',
527+
defaultValue: '',
528+
description:
529+
"Determines if 'Reset Pins' option is available in the Show/Hide columns menu.",
530+
link: '/docs/guides/column-pinning',
531+
linkText: 'MRT Column Pinning Docs',
532+
required: false,
533+
source: 'MRT',
534+
type: 'boolean',
535+
},
536+
{
537+
tableOption: 'enableColumnUnpinAll',
538+
defaultValue: 'true',
539+
description:
540+
"Determines if 'Unpin All' option is available in the Show/Hide columns menu.",
541+
link: '/docs/guides/column-pinning',
542+
linkText: 'MRT Column Pinning Docs',
543+
required: false,
544+
source: 'MRT',
545+
type: 'boolean',
546+
},
525547
{
526548
tableOption: 'enableCellActions',
527549
defaultValue: '',

apps/material-react-table-docs/examples/enable-column-pinning/sandbox/src/TS.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ const Example = () => {
5555
columns,
5656
data,
5757
enableColumnPinning: true,
58+
enableColumnResetPins: true,
5859
enableRowActions: true,
5960
layoutMode: 'grid-no-grow', //constant column widths
6061
renderRowActionMenuItems: () => [<MenuItem key="action">Action</MenuItem>],

apps/material-react-table-docs/pages/docs/guides/column-pinning.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Column pinning is a cool feature that lets users pin (freeze) columns to the lef
1919
### Relevant Table Options
2020

2121
<TableOptionsTable
22-
onlyOptions={new Set(['enableColumnPinning', 'onColumnPinningChange'])}
22+
onlyOptions={new Set(['enableColumnPinning', 'enableColumnUnpinAll', 'enableColumnResetPins', 'onColumnPinningChange'])}
2323
/>
2424

2525
### Relevant Column Options

packages/material-react-table/src/components/body/MRT_TableBody.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,9 @@ export const MRT_TableBody = <TData extends MRT_RowData>({
135135
color: 'text.secondary',
136136
fontStyle: 'italic',
137137
maxWidth: `min(100vw, ${
138-
tablePaperRef.current?.clientWidth ? tablePaperRef.current?.clientWidth + "px" : "100%"
138+
tablePaperRef.current?.clientWidth
139+
? tablePaperRef.current?.clientWidth + 'px'
140+
: '100%'
139141
})`,
140142
py: '2rem',
141143
textAlign: 'center',

packages/material-react-table/src/components/menus/MRT_ShowHideColumnsMenu.tsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
type MRT_Column,
99
type MRT_RowData,
1010
type MRT_TableInstance,
11-
type MRT_VisibilityState
11+
type MRT_VisibilityState,
1212
} from '../../types';
1313
import { getDefaultColumnOrderIds } from '../../utils/displayColumn.utils';
1414

@@ -40,6 +40,8 @@ export const MRT_ShowHideColumnsMenu = <TData extends MRT_RowData>({
4040
options: {
4141
enableColumnOrdering,
4242
enableColumnPinning,
43+
enableColumnResetPins,
44+
enableColumnUnpinAll,
4345
enableHiding,
4446
localization,
4547
mrtTheme: { menuBackgroundColor },
@@ -48,13 +50,12 @@ export const MRT_ShowHideColumnsMenu = <TData extends MRT_RowData>({
4850
const { columnOrder, columnPinning, density } = getState();
4951

5052
const handleToggleAllColumns = (value?: boolean) => {
51-
const updates =
52-
getAllLeafColumns()
53-
.filter((column) => column.columnDef.enableHiding !== false)
54-
.reduce((acc, column) => {
55-
acc[column.id] = value ?? !column.getIsVisible()
56-
return acc;
57-
}, {} as MRT_VisibilityState);
53+
const updates = getAllLeafColumns()
54+
.filter((column) => column.columnDef.enableHiding !== false)
55+
.reduce((acc, column) => {
56+
acc[column.id] = value ?? !column.getIsVisible();
57+
return acc;
58+
}, {} as MRT_VisibilityState);
5859

5960
table.setColumnVisibility((old) => ({ ...old, ...updates }));
6061
};
@@ -143,14 +144,19 @@ export const MRT_ShowHideColumnsMenu = <TData extends MRT_RowData>({
143144
{localization.resetOrder}
144145
</Button>
145146
)}
146-
{enableColumnPinning && (
147+
{enableColumnPinning && enableColumnUnpinAll && (
147148
<Button
148149
disabled={!getIsSomeColumnsPinned()}
149150
onClick={() => table.resetColumnPinning(true)}
150151
>
151152
{localization.unpinAll}
152153
</Button>
153154
)}
155+
{enableColumnPinning && enableColumnResetPins && (
156+
<Button onClick={() => table.resetColumnPinning()}>
157+
{localization.resetPins}
158+
</Button>
159+
)}
154160
{enableHiding && (
155161
<Button
156162
disabled={getIsAllColumnsVisible()}

packages/material-react-table/src/hooks/useMRT_TableOptions.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ export const useMRT_TableOptions: <TData extends MRT_RowData>(
6363
enableColumnFilters = true,
6464
enableColumnOrdering = false,
6565
enableColumnPinning = false,
66+
enableColumnResetPins = false,
6667
enableColumnResizing = false,
68+
enableColumnUnpinAll = true,
6769
enableColumnVirtualization,
6870
enableDensityToggle = true,
6971
enableExpandAll = true,
@@ -192,7 +194,9 @@ export const useMRT_TableOptions: <TData extends MRT_RowData>(
192194
enableColumnFilters,
193195
enableColumnOrdering,
194196
enableColumnPinning,
197+
enableColumnResetPins,
195198
enableColumnResizing,
199+
enableColumnUnpinAll,
196200
enableColumnVirtualization,
197201
enableDensityToggle,
198202
enableExpandAll,

packages/material-react-table/src/locales/en.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ export const MRT_Localization_EN: MRT_Localization = {
6767
pinToRight: 'Pin to right',
6868
resetColumnSize: 'Reset column size',
6969
resetOrder: 'Reset order',
70+
resetPins: 'Reset pins',
7071
rowActions: 'Row Actions',
7172
rowNumber: '#',
7273
rowNumbers: 'Row Numbers',

packages/material-react-table/src/locales/mk.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ export const MRT_Localization_MK: MRT_Localization = {
7373
rowsPerPage: 'Редови по страница',
7474
save: 'Зачувај',
7575
search: 'Барај',
76-
selectedCountOfRowCountRowsSelected: '{selectedCount} од {rowCount} ред(ови) избрани',
76+
selectedCountOfRowCountRowsSelected:
77+
'{selectedCount} од {rowCount} ред(ови) избрани',
7778
select: 'Избери',
7879
showAll: 'Прикажи сè',
7980
showAllColumns: 'Прикажи ги сите колони',

packages/material-react-table/src/types.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ export interface MRT_Localization {
217217
pinToRight: string;
218218
resetColumnSize: string;
219219
resetOrder: string;
220+
resetPins: string;
220221
rowActions: string;
221222
rowNumber: string;
222223
rowNumbers: string;
@@ -862,6 +863,8 @@ export interface MRT_TableOptions<TData extends MRT_RowData>
862863
enableColumnDragging?: boolean;
863864
enableColumnFilterModes?: boolean;
864865
enableColumnOrdering?: boolean;
866+
enableColumnResetPins?: boolean;
867+
enableColumnUnpinAll?: boolean;
865868
enableColumnVirtualization?: boolean;
866869
enableDensityToggle?: boolean;
867870
enableEditing?: ((row: MRT_Row<TData>) => boolean) | boolean;

packages/material-react-table/stories/features/ColumnPinning.stories.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export const ColumnPinningInitial = () => (
5353
columns={columns}
5454
data={data}
5555
enableColumnPinning
56+
enableColumnResetPins
5657
initialState={{ columnPinning: { left: ['email'], right: ['state'] } }}
5758
/>
5859
);

0 commit comments

Comments
 (0)