Column Instance APIs
NOTE: These are NOT column options for Material React Table. These are just static methods on a column instance that you can use.
Each column has a column
instance object associated with it that can be accessed in callback props and other places in the table.
You can access and use a column
instance in quite a few places, but here are some of the most common:
const columns = [{accessorKey: 'username',header: 'Username',//you can access a column instance in many callback functions in a column definition like thismuiTableHeadCellProps: ({ column }) => ({sx: {color: column.getIsSorted() ? 'red' : 'black',},}),//or in the component override callbacksHeader: ({ column }) => <div>{column.columnDef.header}</div>,Cell: ({ cell, column }) => (<Boxsx={{backgroundColor: column.getIsGrouped() ? 'green' : 'white',}}>{cell.getValue()}</Box>),},];const table = useMaterialReactTable({columns,data,//or in callback props like thismuiTableBodyCellProps: ({ column }) => ({sx: {boxShadow: column.getIsPinned() ? '0 0 0 2px red' : 'none',},}),});
# | State Option | Type | More Info Links | |
---|---|---|---|---|
1 |
| TanStack Table Column API Docs | ||
2 |
| TanStack Table Sorting API Docs | ||
3 |
| TanStack Table Column API Docs | ||
4 |
| TanStack Table Column API Docs | ||
5 |
| TanStack Table Column API Docs | ||
6 | ||||
7 |
| TanStack Table Grouping API Docs | ||
8 | ||||
9 | ||||
10 | ||||
11 | ||||
12 | ||||
13 | ||||
14 | ||||
15 | ||||
16 | ||||
17 | ||||
18 | ||||
19 | ||||
20 | ||||
21 | ||||
22 | ||||
23 | ||||
24 | ||||
25 | ||||
26 | ||||
27 | ||||
28 | ||||
29 | ||||
30 | ||||
31 | ||||
32 | ||||
33 | ||||
34 | ||||
35 | ||||
36 | ||||
37 | ||||
38 | ||||
39 | ||||
40 | ||||
41 | ||||
42 | ||||
43 | ||||
44 | ||||
45 | ||||
46 | ||||
47 | ||||
48 | ||||
49 | ||||
50 | ||||
51 | ||||
52 | ||||
53 | ||||
54 | ||||
55 | ||||
56 | ||||
Wanna see the source code for this table? Check it out down below!
1import { useEffect, useMemo, useState } from 'react';2import Link from 'next/link';3import {4 MaterialReactTable,5 type MRT_ColumnDef,6 type MRT_Column,7} from 'material-react-table';8import { Link as MuiLink, Typography, useMediaQuery } from '@mui/material';9import { SampleCodeSnippet } from '../mdx/SampleCodeSnippet';10import {11 type ColumnInstanceAPI,12 columnInstanceAPIs,13} from './columnInstanceAPIs';1415interface Props {16 onlyOptions?: Set<keyof MRT_Column<ColumnInstanceAPI>>;17}1819const ColumnInstanceAPIsTable = ({ onlyOptions }: Props) => {20 const isDesktop = useMediaQuery('(min-width: 1200px)');2122 const columns = useMemo<MRT_ColumnDef<ColumnInstanceAPI>[]>(23 () => [24 {25 accessorKey: 'columnInstanceAPI',26 enableClickToCopy: true,27 header: 'State Option',28 muiCopyButtonProps: ({ cell }) => ({29 className: 'column-instance-api',30 id: `${cell.getValue<string>()}-column-instance-api`,31 }),32 },33 {34 accessorKey: 'type',35 header: 'Type',36 enableGlobalFilter: false,37 Cell: ({ cell }) => (38 <SampleCodeSnippet39 className="language-ts"40 enableCopyButton={false}41 style={{42 backgroundColor: 'transparent',43 fontSize: '0.9rem',44 margin: 0,45 padding: 0,46 minHeight: 'unset',47 }}48 >49 {cell.getValue<string>()}50 </SampleCodeSnippet>51 ),52 },53 {54 accessorKey: 'link',55 disableFilters: true,56 enableGlobalFilter: false,57 header: 'More Info Links',58 Cell: ({ cell, row }) => (59 <Link href={cell.getValue<string>()} passHref legacyBehavior>60 <MuiLink61 target={62 cell.getValue<string>().startsWith('http')63 ? '_blank'64 : undefined65 }66 rel="noopener"67 >68 {row.original?.linkText}69 </MuiLink>70 </Link>71 ),72 },73 ],74 [],75 );7677 const [columnPinning, setColumnPinning] = useState({});7879 useEffect(() => {80 if (typeof window !== 'undefined') {81 if (isDesktop) {82 setColumnPinning({83 left: ['mrt-row-expand', 'mrt-row-numbers', 'columnInstanceAPI'],84 right: ['link'],85 });86 } else {87 setColumnPinning({});88 }89 }90 }, [isDesktop]);9192 const data = useMemo(() => {93 if (onlyOptions) {94 return columnInstanceAPIs.filter(({ columnInstanceAPI }) =>95 onlyOptions.has(columnInstanceAPI),96 );97 }98 return columnInstanceAPIs;99 }, [onlyOptions]);100101 return (102 <MaterialReactTable103 columns={columns}104 data={data}105 displayColumnDefOptions={{106 'mrt-row-numbers': {107 size: 10,108 },109 'mrt-row-expand': {110 size: 10,111 },112 }}113 enableColumnActions={!onlyOptions}114 enableColumnFilterModes115 enablePagination={false}116 enableColumnPinning117 enableRowNumbers118 enableBottomToolbar={false}119 enableTopToolbar={!onlyOptions}120 initialState={{121 columnVisibility: { description: false },122 density: 'compact',123 showGlobalFilter: true,124 sorting: [{ id: 'columnInstanceAPI', desc: false }],125 }}126 muiSearchTextFieldProps={{127 placeholder: 'Search Column APIs',128 sx: { minWidth: '18rem' },129 variant: 'outlined',130 }}131 muiTablePaperProps={{132 sx: { mb: '1.5rem' },133 id: onlyOptions134 ? 'relevant-column-instance-apis-table'135 : 'column-instance-apis-table',136 }}137 positionGlobalFilter="left"138 renderDetailPanel={({ row }) => (139 <Typography140 color={row.original.description ? 'secondary.main' : 'text.secondary'}141 >142 {row.original.description || 'No Description Provided... Yet...'}143 </Typography>144 )}145 rowNumberDisplayMode="static"146 onColumnPinningChange={setColumnPinning}147 state={{ columnPinning }}148 />149 );150};151152export default ColumnInstanceAPIsTable;153