Data views
There are currently two built-in options for displaying the data DataTable.Table and CardView, but you can also build your own.
DataTable.Table
The Table component is meant to be rendered within a DataTableContext (provided by DataTable here).
It displays the data provided by the DataTableContext as an html table.
Any Paragon component or export may be added to the code example.
The DataTable.Table component expects to receive a react-table instance from the DataTableContext.
- isStriped
boolDefaulttrueshould table rows be striped
Table Subcomponents
Subcomponents of DataTable.Table can be used independently of the main component. They are designed for use with a react-table instance.
- row
shape{getRowProps:funcRequired,cells:shape{}[]Required,id:stringRequired,isSelected:bool,isExpanded:} Requiredbool,Row data that is received from
react-tableAPI.
- getCellProps
funcRequiredProps for the td element
- render
funcRequiredFunction that renders the cell contents. Will be called with the string 'Cell'
- column
shape{cellClassName:} Requiredstring,Table column
- getHeaderProps
funcRequiredReturns props for the th element
- isSorted
boolDefaultfalseIndicates whether or not a column is sorted
- render
funcRequiredRenders the header content. Passed the string 'Header'
- isSortedDesc
boolDefaultfalseIndicates whether the column is sorted in descending order
- getSortByToggleProps
funcDefault() => {}Gets props related to sorting that will be passed to th
- canSort
boolDefaultfalseIndicates whether a column is sortable
- headerClassName
stringDefaultnullClass(es) to be applied to header cells
- headerGroups
shape{headers:shape{getHeaderProps:}funcRequired,[]Required,getHeaderGroupProps:}funcRequired,[]Required
CardView and alternate table components
You may choose to use any table component by using the following code in your display component:
const instance = useContext(DataTableContext)
The CardView takes a CardComponent that is personalized to the table in question and displays
a responsive grid of cards.
Any Paragon component or export may be added to the code example.
Sample Card component for use with CardView
The CardComponent prop on CardView represents a table row, and will receive the row that react-table
provides as props.
- className
stringThe class name for the CardGrid component
- columnSizes
shape{xs:number,sm:number,md:number,lg:number,xl:}number,Default{ xs: 12, lg: 6, xl: 4, }An object containing the desired column size at each breakpoint, following a similar props API as
react-bootstrap/Col - CardComponent
funcRequiredYour card component must be individualized to your table. It will be called with props from the "row" of data it will display
- selectionPlacement
enum'left' | 'right'Default'right'If the Cards are selectable this prop determines from which side of the Card to show selection component.
- SkeletonCardComponent
funcOverrides default skeleton card component for loading state in CardView
- skeletonCardCount
numberDefault8Customize the number of loading skeleton cards to display in CardView
const MiyazakiCard = ({ className, original }) => {const { title, director, release_date } = original;return (<Card className={className}><Card.ImageCap src="https://picsum.photos/360/200/" srcAlt="Card image" /><Card.Section title={title}><dl><dt>Director</dt><dd>{director}</dd><dt>Release Date</dt><dd>{release_date}</dd></dl></Card.Section></Card>);};
Theme Variables#
| CSS Variable | Computed Value |
|---|---|
| | |
| | |
| | |
| | |
| | |
Props API#
- columns
shape{Header:elementType|nodeRequired,accessor:requiredWhenNot(PropTypes.string, 'Cell'),Cell:elementType|node,Filter:elementType,filter:string,filterChoices:}shape{name:string,number:number,value:}string,[],[]RequiredDefinition of table columns
- data
shape{}[]RequiredData to be displayed in the table
- isSelectable
boolDefaultfalsetable rows can be selected
- manualSelectColumn
shape{id:stringRequired,Header:elementType|nodeRequired,Cell:elementType|node,disableSortBy:}boolRequired,Alternate column for selecting rows. See react table useSort docs for more information
- isSortable
boolDefaultfalseTable columns can be sorted
- manualSortBy
boolDefaultfalseIndicates that sorting will be done via backend API. A fetchData function must be provided
- isPaginated
boolDefaultfalsePaginate the table
- manualPagination
boolDefaultfalseIndicates that pagination will be done manually. A fetchData function must be provided
- pageCount
requiredWhen(PropTypes.number, 'manualPagination') - isFilterable
boolDefaultfalseTable rows can be filtered, using a default filter in the default column values, or in the column definition
- manualFilters
boolDefaultfalseIndicates that filtering will be done via a backend API. A fetchData function must be provided
- defaultColumnValues
shape{Filter:}elementType,Default{}defaults that will be set on each column. Will be overridden by individual column values
- additionalColumns
shape{id:stringRequired,Header:elementType|node,Cell:}elementType|node,[]Default[]Actions or other additional non-data columns can be added here
- fetchData
funcDefaultnullFunction that will fetch table data. Called when page size, page index or filters change. Meant to be used with manual filters and pagination
- initialState
shape{pageSize:requiredWhen(PropTypes.number, 'isPaginated'),pageIndex:requiredWhen(PropTypes.number, 'isPaginated'),filters:requiredWhen(PropTypes.arrayOf(PropTypes.shape()), 'manualFilters'),sortBy:requiredWhen(PropTypes.arrayOf(PropTypes.shape()), 'manualSortBy'),selectedRowIds:shape{0:any,1:any,2:any,3:any,4:any,5:any,6:any,7:any,8:any,9:any,10:any,11:any,12:any,13:any,14:any,15:any,16:},any,selectedRowsOrdered:}number[],Default{}Initial state passed to react-table's documentation https://github.com/TanStack/table/blob/v7/docs/src/pages/docs/api/useTable.md
- initialTableOptions
shape{}Default{}Table options passed to react-table's useTable hook. Will override some options passed in to DataTable, such as: data, columns, defaultColumn, manualFilters, manualPagination, manualSortBy, and initialState
- itemCount
numberRequiredActions to be performed on the table. Called with the table instance. Not displayed if rows are selected.
- bulkActions
shape{buttonText:stringRequired,handleClick:funcRequired,className:string,variant:string,disabled:} |bool,func|element[]|func|elementDefault[]Actions to be performed on selected rows of the table. Called with the selected rows. Only displayed if rows are selected.
- tableActions
shape{buttonText:stringRequired,handleClick:funcRequired,className:string,variant:string,disabled:} |bool,func|element[]|func|elementDefault[]Function for rendering custom components, called with the table instance
- numBreakoutFilters
enum1 | 2 | 3 | 4Default1Number between one and four filters that can be shown on the top row.
- EmptyTableComponent
elementTypeDefaultEmptyTableContentComponent to be displayed when the table is empty
- RowStatusComponent
elementTypeDefaultRowStatusComponent to be displayed for row status, ie, 10 of 20 rows. Displayed by default in the TableControlBar
- SelectionStatusComponent
elementTypeDefaultSelectionStatusComponent to be displayed for selection status. Displayed when there are selected rows and no active filters
- FilterStatusComponent
elementTypeDefaultFilterStatusComponent to be displayed for filter status. Displayed when there are active filters.
- children
nodeDefaultnullIf children are not provided a table with control bar and footer will be rendered
- showFiltersInSidebar
boolDefaultfalseIf true filters will be shown on sidebar instead
- dataViewToggleOptions
shape{isDataViewToggleEnabled:bool,onDataViewToggle:func,defaultActiveStateValue:string,togglePlacement:}string,Default{ isDataViewToggleEnabled: false, onDataViewToggle: () => {}, defaultActiveStateValue: 'card', togglePlacement: 'left', }options for data view toggle
- disableElevation
boolDefaultfalseRemove the default box shadow on the component
- renderRowSubComponent
funcA function that will render contents of expanded row, accepts
rowas a prop. - isExpandable
boolDefaultfalseIndicates whether table supports expandable rows.
- isLoading
boolDefaultfalseIndicates whether the table should show loading states.
- onSelectedRowsChanged
funcCallback function called when row selections change.
- maxSelectedRows
numberIndicates the max of rows selectable in the table. Requires isSelectable prop
- onMaxSelectedRows
funcCallback after selected max rows. Requires isSelectable and maxSelectedRows props
- className
stringDefaultnullSpecifies class name to append to the base element
- isStriped
boolDefaulttrueshould table rows be striped
- getCellProps
funcRequiredProps for the td element
- render
funcRequiredFunction that renders the cell contents. Will be called with the string 'Cell'
- column
shape{cellClassName:} Requiredstring,Table column
- getHeaderProps
funcRequiredReturns props for the th element
- isSorted
boolDefaultfalseIndicates whether or not a column is sorted
- render
funcRequiredRenders the header content. Passed the string 'Header'
- isSortedDesc
boolDefaultfalseIndicates whether the column is sorted in descending order
- getSortByToggleProps
funcDefault() => {}Gets props related to sorting that will be passed to th
- canSort
boolDefaultfalseIndicates whether a column is sortable
- headerClassName
stringDefaultnullClass(es) to be applied to header cells
- headerGroups
shape{headers:shape{getHeaderProps:}funcRequired,[]Required,getHeaderGroupProps:}funcRequired,[]Required
- row
shape{getRowProps:funcRequired,cells:shape{}[]Required,id:stringRequired,isSelected:bool,isExpanded:} Requiredbool,Row data that is received from
react-tableAPI.
- className
stringThe class name for the CardGrid component
- columnSizes
shape{xs:number,sm:number,md:number,lg:number,xl:}number,Default{ xs: 12, lg: 6, xl: 4, }An object containing the desired column size at each breakpoint, following a similar props API as
react-bootstrap/Col - CardComponent
funcRequiredYour card component must be individualized to your table. It will be called with props from the "row" of data it will display
- selectionPlacement
enum'left' | 'right'Default'right'If the Cards are selectable this prop determines from which side of the Card to show selection component.
- SkeletonCardComponent
funcOverrides default skeleton card component for loading state in CardView
- skeletonCardCount
numberDefault8Customize the number of loading skeleton cards to display in CardView
Usage Insights#
CardView
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-admin-portal | 20.46.3 | 2 | |
| frontend-app-course-authoring | 21.5.6 | 2 | |
| frontend-app-enterprise-public-catalog | 20.46.3 | 2 | |
| frontend-app-learning | 20.46.0 | 1 |
DataTable
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-admin-portal | 20.46.3 | 20 | |
| frontend-app-communications | 20.46.2 | 2 | |
| frontend-app-course-authoring | 21.5.6 | 7 | |
| frontend-app-ecommerce | 20.46.2 | 1 | |
| frontend-app-enterprise-public-catalog | 20.46.3 | 2 | |
| frontend-app-gradebook | 20.45.0 | 3 | |
| frontend-app-learner-record | 20.46.3 | 1 | |
| frontend-app-learning | 20.46.0 | 3 | |
| frontend-app-ora-grading | 20.46.3 | 2 | |
| frontend-app-publisher | 20.46.3 | 1 | |
| frontend-app-support-tools | 20.46.0 | 2 |
DataTableTable
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-admin-portal | 20.46.3 | 6 | |
| frontend-app-course-authoring | 21.5.6 | 3 | |
| frontend-app-ecommerce | 20.46.2 | 1 | |
| frontend-app-enterprise-public-catalog | 20.46.3 | 1 | |
| frontend-app-gradebook | 20.45.0 | 1 | |
| frontend-app-learner-record | 20.46.3 | 1 | |
| frontend-app-learning | 20.46.0 | 2 | |
| frontend-app-ora-grading | 20.46.3 | 2 |
Table
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| edx-platform | 2.6.4 | 2 | |
| frontend-app-admin-portal | 20.46.3 | 1 | |
| studio-frontend | 3.4.8 | 1 |
TableFooter
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-course-authoring | 21.5.6 | 1 |