Similar to the Table component, the Datagrid takes in data in a set of props and renders rows and columns accordingly.
Basic Usage
import React from 'react';import { Datagrid, Card } from 'react-magma-dom';export function Example() {const columns = [{ field: 'col1', header: 'Col 1' },{ field: 'col2', header: 'Col 2' },{ field: 'col3', header: 'Col 3' },{ field: 'col4', header: 'Col 4' },];const rows = [{id: 1,col1: '1 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 2,col1: '2 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 3,col1: '3 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 4,col1: '4 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 5,col1: '5 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 6,col1: '6 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 7,col1: '7 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 8,col1: '8 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 9,col1: '9 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 10,col1: '10 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 11,col1: '11 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 12,col1: '12 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 13,col1: '13 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 14,col1: '14 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 15,col1: '15 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 16,col1: '16 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 17,col1: '17 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 18,col1: '18 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 19,col1: '19 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 20,col1: '20 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 21,col1: '21 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 22,col1: '22 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 23,col1: '23 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 24,col1: '24 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 25,col1: '25 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},];return (<Card><Datagrid columns={columns} rows={rows} /></Card>);}
Row Color
import React from 'react';import { Datagrid, TableRowColor } from 'react-magma-dom';export function Example() {const columns = [{ field: 'col1', header: 'Col 1' },{ field: 'col2', header: 'Col 2' },{ field: 'col3', header: 'Col 3' },{ field: 'col4', header: 'Col 4' },];const coloredRows = [{id: 1,color: TableRowColor.danger,col1: 'Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row danger',},{id: 2,color: TableRowColor.info,col1: 'Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row info',},{id: 3,color: TableRowColor.success,col1: 'Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row success',},];return <Datagrid columns={columns} rows={coloredRows} hasSquareCorners />;}
Selectable
Use rowName
when using Selectable so that the aria labels on the checkboxes can be unique, otherwise the labels will default to "Select Row" or "Deselect Row."
import React from 'react';import { Datagrid, Card } from 'react-magma-dom';export function Example() {const columns = [{ field: 'col1', header: 'Col 1' },{ field: 'col2', header: 'Col 2' },{ field: 'col3', header: 'Col 3' },{ field: 'col4', header: 'Col 4' },];const rows = [{id: 1,col1: '1 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 1',},{id: 2,col1: '2 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 2',},{id: 3,col1: '3 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 3',},{id: 4,col1: '4 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 4',},{id: 5,col1: '5 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 5',},{id: 6,col1: '6 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 6',},{id: 7,col1: '7 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 7',},{id: 8,col1: '8 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 8',},{id: 9,col1: '9 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 9',},{id: 10,col1: '10 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 10',},{id: 11,col1: '11 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 11',},{id: 12,col1: '12 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 12',},{id: 13,col1: '13 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 13',},{id: 14,col1: '14 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 14',},{id: 15,col1: '15 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 15',},{id: 16,col1: '16 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 16',},{id: 17,col1: '17 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 17',},{id: 18,col1: '18 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 18',},{id: 19,col1: '19 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 19',},{id: 20,col1: '20 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 20',},{id: 21,col1: '21 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 21',},{id: 22,col1: '22 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 22',},{id: 23,col1: '23 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 23',},{id: 24,col1: '24 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 24',},{id: 25,col1: '25 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 25',},];return (<Card><Datagrid columns={columns} rows={rows} isSelectable /></Card>);}
Disabled Selectable Row
import React from 'react';import { Datagrid, Card } from 'react-magma-dom';export function Example() {const columns = [{ field: 'col1', header: 'Col 1' },{ field: 'col2', header: 'Col 2' },{ field: 'col3', header: 'Col 3' },{ field: 'col4', header: 'Col 4' },];const rows = [{id: 1,col1: '1 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 1',},{id: 2,col1: '2 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 2',},{id: 3,col1: '3 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 3',},{id: 4,col1: '4 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',isSelectableDisabled: true,rowName: 'Row 4',},{id: 5,col1: '5 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 5',},{id: 6,col1: '6 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 6',},{id: 7,col1: '7 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 7',},{id: 8,col1: '8 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 8',},{id: 9,col1: '9 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 9',},{id: 10,col1: '10 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 10',},{id: 11,col1: '11 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 11',},{id: 12,col1: '12 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 12',},{id: 13,col1: '13 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 13',},{id: 14,col1: '14 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 14',},{id: 15,col1: '15 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 15',},{id: 16,col1: '16 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 16',},{id: 17,col1: '17 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 17',},{id: 18,col1: '18 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 18',},{id: 19,col1: '19 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 19',},{id: 20,col1: '20 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 20',},{id: 21,col1: '21 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 21',},{id: 22,col1: '22 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 22',},{id: 23,col1: '23 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 23',},{id: 24,col1: '24 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 24',},{id: 25,col1: '25 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 25',},];return (<Card><Datagrid columns={columns} rows={rows} isSelectable /></Card>);}
Selectable and Sortable
import React from 'react';import {Datagrid,TableSortDirection,Announce,VisuallyHidden,} from 'react-magma-dom';export function Example() {const [sortConfig, setSortConfig] = React.useState({key: '',message: '',});const [selectedDirection, setSelectedDirection] = React.useState(TableSortDirection.none);const [priceDirection, setPriceDirection] = React.useState(TableSortDirection.none);const [stockDirection, setStockDirection] = React.useState(TableSortDirection.none);const requestSort = (key: string) => {let direction = TableSortDirection.ascending;if (key === 'name') {if (sortConfig.key === key &&selectedDirection === TableSortDirection.ascending) {direction = TableSortDirection.descending;}setSelectedDirection(direction);setPriceDirection(TableSortDirection.none);setStockDirection(TableSortDirection.none);} else if (key === 'price') {if (sortConfig.key === key &&priceDirection === TableSortDirection.ascending) {direction = TableSortDirection.descending;}setPriceDirection(direction);setSelectedDirection(TableSortDirection.none);setStockDirection(TableSortDirection.none);} else if (key === 'stock') {if (sortConfig.key === key &&stockDirection === TableSortDirection.ascending) {direction = TableSortDirection.descending;}setStockDirection(direction);setPriceDirection(TableSortDirection.none);setSelectedDirection(TableSortDirection.none);}const message = `Table is sorted by ${key}, ${direction}`;setSortConfig({ key, message });};const productColumns = [{ field: 'name', header: 'Name' },{field: 'price',header: 'Price',isSortable: true,onSort: () => {requestSort('price');},sortDirection: priceDirection,},{field: 'stock',header: 'Stock',isSortable: true,onSort: () => {requestSort('stock');},sortDirection: stockDirection,},];const products = [{ id: 1, name: 'Cheese', price: 5, stock: 20 },{ id: 2, name: 'Milk', price: 5, stock: 32 },{ id: 3, name: 'Yogurt', price: 3, stock: 12 },{ id: 4, name: 'Heavy Cream', price: 10, stock: 9 },{ id: 5, name: 'Butter', price: 2, stock: 99 },{ id: 6, name: 'Sour Cream ', price: 4, stock: 86 },];const [selectedItems, setSelectedItems] = React.useState([]);const sortedItems = React.useMemo(() => {if (sortConfig.key === 'name') {const selectedItemsToSort = products.filter(product =>selectedItems.includes(product.id));const nonSelectedItems = products.filter(product => !selectedItems.includes(product.id));let sortOrder = 0;if (sortConfig !== null) {if (selectedItemsToSort.length < 2) {sortOrder =selectedDirection === TableSortDirection.ascending ? -1 : 1;}selectedItemsToSort.sort((a, b) => {if (a[sortConfig.key] < b[sortConfig.key]) {sortOrder =selectedDirection === TableSortDirection.ascending ? -1 : 1;}if (a[sortConfig.key] > b[sortConfig.key]) {sortOrder =selectedDirection === TableSortDirection.ascending ? 1 : -1;}return sortOrder;});}if (selectedItemsToSort.length === 0) {return products;} else if (sortOrder === 1) {return selectedItemsToSort.concat(nonSelectedItems);} else {return nonSelectedItems.concat(selectedItemsToSort);}} else {const sortableItems = [...products];const direction =sortConfig.key === 'price' ? priceDirection : stockDirection;sortableItems.sort((a, b) => {if (a[sortConfig.key] < b[sortConfig.key]) {return direction === TableSortDirection.ascending ? -1 : 1;}if (a[sortConfig.key] > b[sortConfig.key]) {return direction === TableSortDirection.ascending ? 1 : -1;}return 0;});return sortableItems;}}, [sortConfig]);function handleSelectedItems(id: string | number,ev: React.ChangeEvent<HTMLInputElement>) {if (ev.target.checked) {if (!selectedItems.includes(id)) {setSelectedItems([...selectedItems, id]);}} else if (!ev.target.checked) {setSelectedItems(selectedItems.filter(i => i !== id));}}function handleHeaderSelect(ev: React.ChangeEvent<HTMLInputElement>) {if (ev.target.checked && selectedItems.length === 0) {const checkedIds = [];products.filter(prod => checkedIds.push(prod.id));setSelectedItems(checkedIds);} else {setSelectedItems([]);}}return (<><DatagridisSelectableisSortableBySelectedrows={sortedItems}columns={productColumns}onSortBySelected={() => {requestSort('name');}}onRowSelect={handleSelectedItems}onHeaderSelect={handleHeaderSelect}sortDirection={selectedDirection}/><Announce><VisuallyHidden>{sortConfig.message}</VisuallyHidden></Announce></>);}
Controlled Selectable Column
import React from 'react';import { Button, ButtonColor, Datagrid, Card } from 'react-magma-dom';export function Example() {const [selectedRows, updatedSelectedRows] = React.useState<(string | number)[]>([1]);const columns = [{ field: 'col1', header: 'Col 1' },{ field: 'col2', header: 'Col 2' },{ field: 'col3', header: 'Col 3' },{ field: 'col4', header: 'Col 4' },];const rows = [{id: 1,col1: '1 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 1',},{id: 2,col1: '2 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 2',},{id: 3,col1: '3 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 3',},{id: 4,col1: '4 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 4',},{id: 5,col1: '5 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 5',},{id: 6,col1: '6 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 6',},{id: 7,col1: '7 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 7',},{id: 8,col1: '8 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 8',},{id: 9,col1: '9 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 9',},{id: 10,col1: '10 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 10',},{id: 11,col1: '11 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 11',},{id: 12,col1: '12 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 12',},{id: 13,col1: '13 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 13',},{id: 14,col1: '14 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 14',},{id: 15,col1: '15 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 15',},{id: 16,col1: '16 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 16',},{id: 17,col1: '17 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 17',},{id: 18,col1: '18 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 18',},{id: 19,col1: '19 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 19',},{id: 20,col1: '20 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 20',},{id: 21,col1: '21 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 21',},{id: 22,col1: '22 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 22',},{id: 23,col1: '23 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 23',},{id: 24,col1: '24 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 24',},{id: 25,col1: '25 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',rowName: 'Row 25',},];return (<Card><strong>Selected Rows: </strong><pre>{JSON.stringify(selectedRows, null, 2)}</pre><Buttoncolor={ButtonColor.danger}onClick={() => updatedSelectedRows([])}>Reset Selected Rows</Button><hr /><Datagridcolumns={columns}rows={rows}isSelectableselectedRows={selectedRows}onSelectedRowsChange={updatedSelectedRows}/></Card>);}
Pagination Defaults
import React from 'react';import { Datagrid } from 'react-magma-dom';export function Example() {const columns = [{ field: 'col1', header: 'Col 1' },{ field: 'col2', header: 'Col 2' },{ field: 'col3', header: 'Col 3' },{ field: 'col4', header: 'Col 4' },];const rows = [{id: 1,col1: '1 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 2,col1: '2 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 3,col1: '3 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 4,col1: '4 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 5,col1: '5 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 6,col1: '6 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 7,col1: '7 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 8,col1: '8 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 9,col1: '9 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 10,col1: '10 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 11,col1: '11 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 12,col1: '12 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 13,col1: '13 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 14,col1: '14 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 15,col1: '15 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 16,col1: '16 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 17,col1: '17 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 18,col1: '18 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 19,col1: '19 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 20,col1: '20 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 21,col1: '21 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 22,col1: '22 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 23,col1: '23 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 24,col1: '24 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 25,col1: '25 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},];const paginationProps = {defaultPage: 2,defaultRowsPerPage: 5,rowsPerPageValues: [5, 10, 20],};return (<Datagrid columns={columns} rows={rows} paginationProps={paginationProps} />);}
Pagination Controlled
import React from 'react';import { Datagrid } from 'react-magma-dom';export function Example() {const columns = [{ field: 'col1', header: 'Col 1' },{ field: 'col2', header: 'Col 2' },{ field: 'col3', header: 'Col 3' },{ field: 'col4', header: 'Col 4' },];const rows = [{id: 1,col1: '1 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 2,col1: '2 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 3,col1: '3 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 4,col1: '4 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 5,col1: '5 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 6,col1: '6 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 7,col1: '7 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 8,col1: '8 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 9,col1: '9 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 10,col1: '10 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 11,col1: '11 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 12,col1: '12 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 13,col1: '13 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 14,col1: '14 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 15,col1: '15 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 16,col1: '16 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 17,col1: '17 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 18,col1: '18 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 19,col1: '19 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 20,col1: '20 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 21,col1: '21 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 22,col1: '22 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 23,col1: '23 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 24,col1: '24 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 25,col1: '25 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},];const [page, updatePage] = React.useState<number>(1);const [rowsPerPage, updateRowsPerPage] = React.useState<number>(5);function handlePageChange(_, newPage: number) {window.confirm('Do you really want to update the page?')? updatePage(newPage): alert('Did not update page');}function handleRowsPerPageChange(newRowsPerPage: number) {window.confirm(`Do you really want to update the rows per page to ${newRowsPerPage}?`)? updateRowsPerPage(newRowsPerPage): alert('Did not update rows per page');}const paginationProps = {page,rowsPerPage,rowsPerPageValues: [5, 10, 20],onPageChange: handlePageChange,onRowsPerPageChange: handleRowsPerPageChange,};return (<Datagrid columns={columns} rows={rows} paginationProps={paginationProps} />);}
Custom Pagination Components
import React from 'react';import {Datagrid,Button,usePagination,ButtonGroup,Spacer,SpacerAxis,magma,} from 'react-magma-dom';export function Example() {const columns = [{ field: 'col1', header: 'Col 1' },{ field: 'col2', header: 'Col 2' },{ field: 'col3', header: 'Col 3' },{ field: 'col4', header: 'Col 4' },];const rows = [{id: 1,col1: '1 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 2,col1: '2 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 3,col1: '3 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 4,col1: '4 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 5,col1: '5 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 6,col1: '6 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 7,col1: '7 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 8,col1: '8 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 9,col1: '9 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 10,col1: '10 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 11,col1: '11 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 12,col1: '12 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 13,col1: '13 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 14,col1: '14 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 15,col1: '15 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 16,col1: '16 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 17,col1: '17 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 18,col1: '18 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 19,col1: '19 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 20,col1: '20 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 21,col1: '21 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 22,col1: '22 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 23,col1: '23 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 24,col1: '24 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 25,col1: '25 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},];const CustomPaginationComponent = props => {const { itemCount, rowsPerPage, onPageChange } = props;const { page, pageButtons } = usePagination({count: itemCount / rowsPerPage,numberOfAdjacentPages: 0,numberOfEdgePages: 0,onPageChange,});const previousButton = pageButtons[0];const nextButton = pageButtons[pageButtons.length - 1];return (<divstyle={{alignItems: 'center',display: 'flex',justifyContent: 'flex-end',}}>You are on page {page}<Spaceraxis={SpacerAxis.horizontal}size={magma.spaceScale.spacing05}/><ButtonGroup><Buttondisabled={previousButton.disabled}onClick={previousButton.onClick}>Previous Page</Button><Button disabled={nextButton.disabled} onClick={nextButton.onClick}>Next Page</Button></ButtonGroup></div>);};return (<Datagridcolumns={columns}rows={rows}components={{ Pagination: CustomPaginationComponent }}/>);}
Without Pagination
Pagination controls are put on the Datagrid
component by default. You can turn off pagination by passing the hasPagination
prop as false
.
import React from 'react';import { Datagrid } from 'react-magma-dom';export function Example() {const columns = [{ field: 'col1', header: 'Col 1' },{ field: 'col2', header: 'Col 2' },{ field: 'col3', header: 'Col 3' },{ field: 'col4', header: 'Col 4' },];const rows = [{id: 1,col1: '1 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 2,col1: '2 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 3,col1: '3 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 4,col1: '4 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 5,col1: '5 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 6,col1: '6 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 7,col1: '7 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 8,col1: '8 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 9,col1: '9 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 10,col1: '10 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 11,col1: '11 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 12,col1: '12 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 13,col1: '13 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 14,col1: '14 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 15,col1: '15 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 16,col1: '16 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 17,col1: '17 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 18,col1: '18 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 19,col1: '19 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 20,col1: '20 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 21,col1: '21 Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 22,col1: '22 Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 23,col1: '23 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 24,col1: '24 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 25,col1: '25 Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},];return <Datagrid columns={columns} rows={rows} hasPagination={false} />;}
Inverse
The isInverse
prop will render a dark background and light text. The children will
inherit the isInverse
prop unless specified otherwise.
import React from 'react';import { Datagrid, Card } from 'react-magma-dom';export function Example() {const columns = [{ field: 'col1', header: 'Col 1' },{ field: 'col2', header: 'Col 2' },{ field: 'col3', header: 'Col 3' },{ field: 'col4', header: 'Col 4' },];const rows = [{id: 1,col1: 'Lorem ipsum dolor sit amet consectetur',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 2,col1: 'Lorem ipsum dolor sit amet',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},{id: 3,col1: 'Lorem ipsum dolor',col2: 'Lorem ipsum dolor',col3: 'Lorem ipsum dolor',col4: 'Lorem ipsum',},];return (<Card isInverse><Datagrid columns={columns} isInverse rows={rows} /></Card>);}
Datagrid Props
Any other props supplied will be provided to the wrapping table
element.
Common Props
children
Description
The content of the component
Type
ReactNode | undefined
Default
-
columns
Description
Column data to be displayed in the table header
Type
DatagridColumn[]
Default
-
components
Description
Custom components to replace internally used components with
Type
DatagridComponents
Default
{ Pagination }
componentsProps
Description
Props to be passed to the default components used internally to build the datagrid
Type
DatagridComponentsProps
Default
{}
density
Description
Relative padding of the table cells
Type
enum, one of:
TableDensity.compact
TableDensity.loose
TableDensity.normal
Default
TableDensity.normal
hasHoverStyles
Description
If true, row will be visually highlighted on hover
Type
boolean
Default
false
hasPagination
Description
Pass in false to turn off pagination
Type
boolean
Default
true
hasSquareCorners
Description
If true, the table will have square edges
Type
boolean
Default
false
hasVerticalBorders
Description
If true, columns will have vertical borders
Type
boolean
Default
-
hasZebraStripes
Description
If true, every other row will have a background color
Type
boolean
Default
-
isInverse
Description
If true, the component will have inverse styling to better appear on a dark background
Type
boolean
Default
false
minWidth
Description
Minimum width for the table in pixels
Type
number
Default
600
onHeaderSelect
Description
Function called when the checkbox in the table header is clicked on
Type
function
Default
-
onRowSelect
Description
Function called when the checkbox in each table row is clicked on
Type
function
Default
-
onSelectedRowsChange
Description
Function called when the rows selected in the table changes
Type
function
Default
-
onSortBySelected
Description
Function called when the sort button is clicked for selectable tables
Type
function
Default
-
paginationProps
Description
Pagination data used to create the pagination footer. Created using the usePagination hook.
Type
Partial
Default
{}
rowCount
Type
number
Default
-
rows
Description
Row data to be displayed in each row in the table
Type
DatagridRow[]
Default
-
selectedItems
Type
Array
Default
-
sortDirection
Description
Direction by which the selectable column is sorted
Type
enum, one of:
TableSortDirection.ascending
TableSortDirection.descending
TableSortDirection.none
Default
TableSortDirection.none
Controlled props
selectedRows
Description
Array of rows that are selected in the table when component is controlled
Type
function[]
Default
-
Uncontrolled props
defaultSelectedRows
Description
Array of rows that are selected in the table on render when component is uncontrolled
Type
function[]
Default
-
DatagridColumn Props
Any other props supplied will be provided to the wrapping th
element.
align
Description
Text alignment of the cell content. Right alignment should be used for numeric values
Type
enum, one of:
TableCellAlign.center
TableCellAlign.inherit
TableCellAlign.justify
TableCellAlign.left
TableCellAlign.right
Default
TableCellAlign.left
field
Description
Unique identifier for each column
Type
string
Default
-
header
Description
Header text for each column
Type
string
Default
-
isRowHeader
Description
Set to true if you want the column to be the header for each row
Type
boolean
Default
false
isSortable
Description
If true, the header will render a button for sorting
Type
boolean
Default
-
onSort
Description
Event that fires when clicking the table header cell sort button
Type
function
Default
-
scope
Description
Direction and range of data cells that are covered by the header cell
Type
enum, one of:
TableHeaderCellScope.col
TableHeaderCellScope.colgroup
TableHeaderCellScope.row
TableHeaderCellScope.rowgroup
Default
TableHeaderCellScope.col
sortDirection
Description
Direction by which the column is sorted
Type
enum, one of:
TableSortDirection.ascending
TableSortDirection.descending
TableSortDirection.none
Default
TableSortDirection.none
width
Description
Width of the component, set by CSS
Type
string | number
Default
auto
DatagridRow Props
Any other props supplied will be provided to the wrapping tr
element.
color
Description
The color scheme of the table row, giving contextual meaning to the content
Type
enum, one of:
TableRowColor.danger
TableRowColor.info
TableRowColor.success
TableRowColor.warning
Default
-
id
Description
Unique identifier for each row
Type
string | number
Default
-
isSelectableDisabled
Description
If true, the select box will be disabled
Type
boolean
Default
-
On this page