Skip to content

Commit

Permalink
add column pinning
Browse files Browse the repository at this point in the history
  • Loading branch information
m4theushw committed Nov 16, 2021
1 parent 7f4cf1e commit d10936e
Show file tree
Hide file tree
Showing 92 changed files with 2,751 additions and 127 deletions.
11 changes: 11 additions & 0 deletions docs/pages/api-docs/data-grid/data-grid-pro.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"disableChildrenSorting": { "type": { "name": "bool" } },
"disableColumnFilter": { "type": { "name": "bool" } },
"disableColumnMenu": { "type": { "name": "bool" } },
"disableColumnPinning": { "type": { "name": "bool" } },
"disableColumnReorder": { "type": { "name": "bool" } },
"disableColumnResize": { "type": { "name": "bool" } },
"disableColumnSelector": { "type": { "name": "bool" } },
Expand Down Expand Up @@ -120,6 +121,7 @@
"onFilterModelChange": { "type": { "name": "func" } },
"onPageChange": { "type": { "name": "func" } },
"onPageSizeChange": { "type": { "name": "func" } },
"onPinnedColumnsChange": { "type": { "name": "func" } },
"onResize": { "type": { "name": "func" } },
"onRowClick": { "type": { "name": "func" } },
"onRowDoubleClick": { "type": { "name": "func" } },
Expand All @@ -137,6 +139,12 @@
"type": { "name": "enum", "description": "'client'<br>&#124;&nbsp;'server'" },
"default": "\"client\""
},
"pinnedColumns": {
"type": {
"name": "shape",
"description": "{ left?: Array&lt;string&gt;, right?: Array&lt;string&gt; }"
}
},
"rowBuffer": { "type": { "name": "number" }, "default": "3" },
"rowCount": { "type": { "name": "number" } },
"rowHeight": { "type": { "name": "number" }, "default": "52" },
Expand Down Expand Up @@ -278,6 +286,9 @@
"virtualScroller",
"virtualScrollerContent",
"virtualScrollerRenderZone",
"pinnedColumns",
"pinnedColumns--left",
"pinnedColumns--right",
"root",
"row--editable",
"row--editing",
Expand Down
3 changes: 3 additions & 0 deletions docs/pages/api-docs/data-grid/data-grid.json
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,9 @@
"virtualScroller",
"virtualScrollerContent",
"virtualScrollerRenderZone",
"pinnedColumns",
"pinnedColumns--left",
"pinnedColumns--right",
"root",
"row--editable",
"row--editing",
Expand Down
5 changes: 5 additions & 0 deletions docs/pages/api-docs/data-grid/grid-api.md

Large diffs are not rendered by default.

27 changes: 27 additions & 0 deletions docs/pages/api-docs/data-grid/grid-column-pinning-api.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"name": "GridColumnPinningApi",
"description": "The column pinning API interface that is available in the grid apiRef.",
"properties": [
{
"name": "getPinnedColumns",
"description": "Returns which columns are pinned.",
"type": "() => GridPinnedColumns"
},
{
"name": "isColumnPinned",
"description": "Returns which side a column is pinned to.",
"type": "(field: string) => string | false"
},
{
"name": "pinColumn",
"description": "Pins a column to the left or right side of the grid.",
"type": "(field: string, side: left | right) => void"
},
{
"name": "setPinnedColumns",
"description": "Changes the pinned columns.",
"type": "(pinnedColumns: GridPinnedColumns) => void"
},
{ "name": "unpinColumn", "description": "Unpins a column.", "type": "(field: string) => void" }
]
}
1 change: 1 addition & 0 deletions docs/scripts/buildApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -794,6 +794,7 @@ async function run(argv: { outputDirectory?: string }) {
'GridPrintExportOptions',
'GridScrollApi',
'GridEditRowApi',
'GridColumnPinningApi',
'GridEvents',
];

Expand Down
134 changes: 134 additions & 0 deletions docs/src/pages/components/data-grid/columns/BasicColumnPinning.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
import * as React from 'react';
import DeleteIcon from '@mui/icons-material/Delete';
import EditIcon from '@mui/icons-material/Edit';
import { DataGridPro, GridActionsCellItem } from '@mui/x-data-grid-pro';
import {
randomCreatedDate,
randomTraderName,
randomEmail,
randomUpdatedDate,
} from '@mui/x-data-grid-generator';

export default function BasicColumnPinning() {
return (
<div style={{ height: 400, width: '100%' }}>
<DataGridPro
rows={rows}
columns={columns}
initialState={{ pinnedColumns: { left: ['name'], right: ['actions'] } }}
/>
</div>
);
}

const columns = [
{ field: 'name', headerName: 'Name', width: 160, editable: true },
{ field: 'email', headerName: 'Email', width: 200, editable: true },
{ field: 'age', headerName: 'Age', type: 'number', editable: true },
{
field: 'dateCreated',
headerName: 'Date Created',
type: 'date',
width: 180,
editable: true,
},
{
field: 'lastLogin',
headerName: 'Last Login',
type: 'dateTime',
width: 220,
editable: true,
},
{
field: 'actions',
type: 'actions',
width: 100,
getActions: () => [
<GridActionsCellItem icon={<EditIcon />} label="Edit" />,
<GridActionsCellItem icon={<DeleteIcon />} label="Delete" />,
],
},
];

const rows = [
{
id: 1,
name: randomTraderName(),
email: randomEmail(),
age: 25,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 2,
name: randomTraderName(),
email: randomEmail(),
age: 36,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 3,
name: randomTraderName(),
email: randomEmail(),
age: 19,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 4,
name: randomTraderName(),
email: randomEmail(),
age: 28,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 5,
name: randomTraderName(),
email: randomEmail(),
age: 23,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 6,
name: randomTraderName(),
email: randomEmail(),
age: 27,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 7,
name: randomTraderName(),
email: randomEmail(),
age: 18,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 8,
name: randomTraderName(),
email: randomEmail(),
age: 31,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 9,
name: randomTraderName(),
email: randomEmail(),
age: 24,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 10,
name: randomTraderName(),
email: randomEmail(),
age: 35,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
];
139 changes: 139 additions & 0 deletions docs/src/pages/components/data-grid/columns/BasicColumnPinning.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
import * as React from 'react';
import DeleteIcon from '@mui/icons-material/Delete';
import EditIcon from '@mui/icons-material/Edit';
import {
DataGridPro,
GridColumns,
GridRowsProp,
GridActionsCellItem,
} from '@mui/x-data-grid-pro';
import {
randomCreatedDate,
randomTraderName,
randomEmail,
randomUpdatedDate,
} from '@mui/x-data-grid-generator';

export default function BasicColumnPinning() {
return (
<div style={{ height: 400, width: '100%' }}>
<DataGridPro
rows={rows}
columns={columns}
initialState={{ pinnedColumns: { left: ['name'], right: ['actions'] } }}
/>
</div>
);
}

const columns: GridColumns = [
{ field: 'name', headerName: 'Name', width: 160, editable: true },
{ field: 'email', headerName: 'Email', width: 200, editable: true },
{ field: 'age', headerName: 'Age', type: 'number', editable: true },
{
field: 'dateCreated',
headerName: 'Date Created',
type: 'date',
width: 180,
editable: true,
},
{
field: 'lastLogin',
headerName: 'Last Login',
type: 'dateTime',
width: 220,
editable: true,
},
{
field: 'actions',
type: 'actions',
width: 100,
getActions: () => [
<GridActionsCellItem icon={<EditIcon />} label="Edit" />,
<GridActionsCellItem icon={<DeleteIcon />} label="Delete" />,
],
},
];

const rows: GridRowsProp = [
{
id: 1,
name: randomTraderName(),
email: randomEmail(),
age: 25,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 2,
name: randomTraderName(),
email: randomEmail(),
age: 36,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 3,
name: randomTraderName(),
email: randomEmail(),
age: 19,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 4,
name: randomTraderName(),
email: randomEmail(),
age: 28,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 5,
name: randomTraderName(),
email: randomEmail(),
age: 23,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 6,
name: randomTraderName(),
email: randomEmail(),
age: 27,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 7,
name: randomTraderName(),
email: randomEmail(),
age: 18,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 8,
name: randomTraderName(),
email: randomEmail(),
age: 31,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 9,
name: randomTraderName(),
email: randomEmail(),
age: 24,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
{
id: 10,
name: randomTraderName(),
email: randomEmail(),
age: 35,
dateCreated: randomCreatedDate(),
lastLogin: randomUpdatedDate(),
},
];
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<DataGridPro
rows={rows}
columns={columns}
initialState={{ pinnedColumns: { left: ['name'], right: ['actions'] } }}
/>
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import React from 'react';
import ApiDocs from 'docsx/src/modules/components/ApiDocs';
import api from 'docsx/pages/api-docs/data-grid/grid-column-pinning-api.json';

export default function ColumnPinningApiNoSnap() {
return <ApiDocs api={api} />;
}
Loading

0 comments on commit d10936e

Please sign in to comment.