UNPKG

mui-virtualized-grid

Version:

A Material-UI virtualization module utilizing Material-UI's Grid, List and ListItem components

120 lines (94 loc) 4.99 kB
Table of Contents * [Features](#features) * [Props](#props) * [Virtualized Grid Example](#virtualized-grid-with-4-columns) * [Virtualized List Example](#virtualized-list-using-the-list-and-listitem-components) # Overview Mui-Virtualized-Grid is a vertical scrolling virtualized grid/list component designed using material-ui. It's intention is to be used within pages that need to load large amounts of data in a grid or list format and remain performant. It does not have its own breakpoints for mobile-desktop but expect to be told when to change the number of columns. ```jsx import { useMediaQuery, useTheme } from '@material-ui/core'; const { breakpoints } = useTheme(); const mobile = useMediaQuery(breakpoints.down('sm')); <VirtualizedMUIGrid columns={mobile ? 2 : 4} containerHeight="55vh" data={lotsofdata} preRenderRowCount={5} renderItem={() => component} rowHeight={75} spacing={2} /> ``` ## Props Property | required/optional | type | default | Description --- | --- | --- | --- | --- data | required | any[] | -- | An array of data to be appear in the grid/list renderItem | required | (rowData: any, rowIndex: number) => ReactElement | -- | `Function` that takes the current row and row index and returns the component it should display rowHeight | required | number | -- | Defines the height of each row within the grid/list columns | optional | 1, 2, 3, 4, 6, 12 | 1 | Defines the total number of columns. Passing anything greater than 1 will assume Grid and not ListItem containerHeight | optional | number / string | 300 | Defines the height of the wrapping Grid container listItemProps | optional | ListItemTypeMap<{button?: false undefined;}, 'li'> | {} | Props to pass to the list item component if `variant` is `List` localizationMessages | optional | { nothingToDisplay: string; } | { nothingToDisplay: "Nothiing to Display" } | Defined translations for builtin messaging preRenderRowCount | optional | number | 3 | Defines the number of rows not in view to render spacing | optional | GridSpacing | 0 | When variant is set to grid, this defines the spacing around the containers items variant | optional | `'Grid' or 'List'` | 'Grid' | Defines which component will be used for the grid. ## Virtualized Grid with 4 columns ![Virtualized Grid Demo](https://api.brickhousefiberarts.com/cdn/VirtualGrid.gif) ```jsx import { Grid, Paper, Typography, useTheme } from '@material-ui/core'; const valueList = new Array(1000) .fill(true) .map(() => 25 + Math.round(Math.random() * 50)); const { spacing } = useTheme(); const Cell = (rowData, i) => ( <Paper key={`${i}_Grid`}> <Typography variant="button">item cell {i}</Typography> </Paper> ); <Grid container spacing={2}> <Grid item xs={12}> <Typography variant="h4">Displaying 1000 products divided into 4 columns</Typography> </Grid> <Grid item xs={12}> <VirtualizedMUIGrid columns={4} containerHeight="55vh" data={valueList} preRenderRowCount={5} renderItem={Cell} rowHeight={75} spacing={2} /> </Grid> </Grid> ``` ## Virtualized List using the List and ListItem Components ![Virtualized List Demo](https://api.brickhousefiberarts.com/cdn/VirtualList.gif) ```jsx import { Grid, Paper, Typography, useTheme } from '@material-ui/core'; const valueList = new Array(1000) .fill(true) .map(() => 25 + Math.round(Math.random() * 50)); const { spacing } = useTheme(); const ListCell = (rowData, i) => ( <Paper key={`${i}_List`}> <Typography variant="button">item cell {i}</Typography> </Paper> ); <Grid container spacing={2}> <Grid item xs={12}> <Typography variant="h4">Displaying a list of 1000 products. 1 per row.</Typography> </Grid> <Grid item xs={12}> <VirtualizedMUIGrid containerHeight="55vh" data={valueList} preRenderRowCount={5} renderItem={ListCell} rowHeight={75} spacing={2} variant="List" /> </Grid> </Grid> ```